View Javadoc

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 }