1 /* 2 * Copyright 2004-2010 the Seasar Foundation and the Others. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 13 * either express or implied. See the License for the specific language 14 * governing permissions and limitations under the License. 15 */ 16 17 package org.seasar.cubby.plugin; 18 19 import java.util.Set; 20 21 import javax.servlet.ServletContext; 22 23 import org.seasar.cubby.action.ActionResult; 24 import org.seasar.cubby.routing.PathInfo; 25 import org.seasar.cubby.spi.Provider; 26 27 /** 28 * プラグインを表すインターフェイスです。 29 * <p> 30 * プラグインは所属する Web アプリケーションのサーブレットに対する変更の通知を受け取ることができます。 31 * </p> 32 * 33 * @author baba 34 */ 35 public interface Plugin { 36 37 // プラグインのライフサイクル 38 39 /** 40 * このプラグインを初期化します。 41 * <p> 42 * <code>CubbyFilter</code> がサービスを提供できるようになった時に実行されます。 43 * </p> 44 * 45 * @param servletContext 46 * 呼び出し元が現在実行している {@link ServletContext} への参照 47 * @throws Exception 48 * プラグインの初期化に失敗した場合 49 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 50 */ 51 void initialize(ServletContext servletContext) throws Exception; 52 53 /** 54 * このプラグインが提供するサービスプロバイダを取得します。 55 * <p> 56 * このプラグインが指定されたサービスを提供しない場合は <code>null</code> を返します。 57 * </p> 58 * 59 * @param <S> 60 * サービスの型 61 * @param service 62 * サービス 63 * @return サービスプロバイダ 64 */ 65 <S extends Provider> S getProvider(Class<S> service); 66 67 /** 68 * このプラグインが提供するサービスプロバイダのセットを返します。 69 * 70 * @return このプラグインが提供するサービスプロバイダのセット 71 */ 72 Set<Class<? extends Provider>> getSupportedServices(); 73 74 /** 75 * このプラグインを準備します。 76 * <p> 77 * プラグインの準備が完了した時に実行されます。 78 * </p> 79 * 80 * @throws Exception 81 * プラグインの準備に失敗した場合 82 */ 83 void ready() throws Exception; 84 85 /** 86 * このプラグインを破棄します。 87 * <p> 88 * <code>CubbyFilter</code> がサービスの提供を停止するときに実行されます。 89 * </p> 90 * 91 * @see javax.servlet.Filter#destroy() 92 */ 93 void destroy(); 94 95 // サーブレット要求の処理 96 97 /** 98 * ルーティングを実行して要求されたパスの情報を取得します。 99 * <p> 100 * このメソッドをオーバーライドすることで、ルーティングの実行をインターセプトすることができます。 101 * </p> 102 * <p> 103 * このメソッド内で {@link RoutingInvocation#proceed()} メソッドを実行することで、別のプラグインの 104 * {@link #invokeRouting(RoutingInvocation)} またはルーティングが実行されます。 105 * </p> 106 * 107 * @param invocation 108 * ルーティングの実行情報 109 * @throws Exception 110 * ルーティングの実行時に例外が発生した場合 111 */ 112 PathInfo invokeRouting(RoutingInvocation invocation) throws Exception; 113 114 /** 115 * 要求に対する処理を実行します。 116 * <p> 117 * このメソッドをオーバーライドすることで、要求に対する処理の実行をインターセプトすることができます。 118 * </p> 119 * <p> 120 * このメソッド内で {@link RequestProcessingInvocation#proceed()} 121 * メソッドを実行することで、別のプラグインの 122 * {@link #invokeRequestProcessing(RequestProcessingInvocation)} 123 * または要求に対する処理が実行されます。 124 * </p> 125 * 126 * @param invocation 127 * 要求に対する処理の実行情報 128 * @throws Exception 129 * 要求に対する処理の実行時に例外が発生した場合 130 */ 131 void invokeRequestProcessing(RequestProcessingInvocation invocation) 132 throws Exception; 133 134 /** 135 * アクションメソッドを実行します。 136 * <p> 137 * このメソッドをオーバーライドすることで、アクションメソッドの実行をインターセプトすることができます。 138 * </p> 139 * <p> 140 * このメソッド内で {@link ActionInvocation#proceed()} メソッドを実行することで、別のプラグインの 141 * {@link #invokeAction(ActionInvocation)} またはアクションメソッドが実行されます。 142 * </p> 143 * 144 * @param invocation 145 * アクションメソッドの実行情報 146 * @return アクションの実行結果 147 * @throws Exception 148 * アクションメソッドの実行時に例外が発生した場合 149 */ 150 ActionResult invokeAction(ActionInvocation invocation) throws Exception; 151 152 /** 153 * 入力検証を実行します。 154 * <p> 155 * このメソッドをオーバーライドすることで、入力検証の実行をインターセプトすることができます。 156 * </p> 157 * <p> 158 * このメソッド内で {@link ValidationInvocation#proceed()} メソッドを実行することで、別のプラグインの 159 * {@link #invokeValidation(ValidationInvocation)} または入力検証が実行されます。 160 * </p> 161 * 162 * @param invocation 163 * 入力検証の実行情報 164 * @return 入力検証の実行結果 165 * @throws Exception 166 * 入力検証の実行時に例外が発生した場合 167 * @since 2.0.9 168 */ 169 ActionResult invokeValidation(ValidationInvocation invocation) 170 throws Exception; 171 172 /** 173 * アクションの実行結果を実行します。 174 * <p> 175 * このメソッドをオーバーライドすることで、アクションの実行結果の実行をインターセプトすることができます。 176 * </p> 177 * <p> 178 * このメソッド内で {@link ActionResultInvocation#proceed()} メソッドを実行することで、別のプラグインの 179 * {@link #invokeActionResult(ActionResultInvocation)} またはアクションの実行結果が実行されます。 180 * </p> 181 * 182 * @param invocation 183 * アクションの実行結果の実行情報 184 * @throws Exception 185 * アクションの実行結果の実行時に例外が発生した場合 186 */ 187 void invokeActionResult(ActionResultInvocation invocation) throws Exception; 188 189 }