1 /* 2 * Copyright 2004-2009 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 package org.seasar.cubby.plugin; 17 18 import java.util.Set; 19 20 import javax.servlet.ServletContext; 21 22 import org.seasar.cubby.action.ActionResult; 23 import org.seasar.cubby.spi.Provider; 24 25 /** 26 * プラグインを表すインターフェイスです。 27 * <p> 28 * プラグインは所属する Web アプリケーションのサーブレットに対する変更の通知を受け取ることができます。 29 * </p> 30 * 31 * @author baba 32 */ 33 public interface Plugin { 34 35 // プラグインのライフサイクル 36 37 /** 38 * <code>CubbyFilter</code> がサービスを提供できるようになった時に実行されます。 39 * 40 * @param servletContext 41 * 呼び出し元が現在実行している {@link ServletContext} への参照 42 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 43 */ 44 void initialize(ServletContext servletContext); 45 46 /** 47 * このプラグインが提供するサービスプロバイダを取得します。 48 * <p> 49 * このプラグインが指定されたサービスを提供しない場合は <code>null</code> を返します。 50 * </p> 51 * 52 * @param <S> 53 * サービスの型 54 * @param service 55 * サービス 56 * @return サービスプロバイダ 57 */ 58 <S extends Provider> S getProvider(Class<S> service); 59 60 /** 61 * このプラグインが提供するサービスプロバイダのセットを返します。 62 * 63 * @return このプラグインが提供するサービスプロバイダのセット 64 */ 65 Set<Class<? extends Provider>> getSupportedServices(); 66 67 /** 68 * プラグインの準備が完了した時に実行されます。 69 */ 70 void ready(); 71 72 /** 73 * <code>CubbyFilter</code> がサービス提供を 停止するときに実行されます。 74 * 75 * @see javax.servlet.Filter#destroy() 76 */ 77 void destroy(); 78 79 // サーブレット要求の処理 80 81 /** 82 * 要求に対する処理を実行します。 83 * <p> 84 * このメソッドをオーバーライドすることで、要求に対する処理の実行をインターセプトすることができます。 85 * </p> 86 * <p> 87 * このメソッド内で {@link RequestProcessingInvocation#proceed()} 88 * メソッドを実行することで、別のプラグインの 89 * {@link #invokeRequestProcessing(RequestProcessingInvocation)} 90 * または要求に対する処理が実行されます。 91 * </p> 92 * 93 * @param invocation 94 * 要求に対する処理の実行情報 95 * @throws Exception 96 * 要求に対する処理の実行時に例外が発生した場合 97 */ 98 void invokeRequestProcessing(RequestProcessingInvocation invocation) 99 throws Exception; 100 101 /** 102 * アクションメソッドを実行します。 103 * <p> 104 * このメソッドをオーバーライドすることで、アクションメソッドの実行をインターセプトすることができます。 105 * </p> 106 * <p> 107 * このメソッド内で {@link ActionInvocation#proceed()} メソッドを実行することで、別のプラグインの 108 * {@link #invokeAction(ActionInvocation)} またはアクションメソッドが実行されます。 109 * </p> 110 * 111 * @param invocation 112 * アクションメソッドの実行情報 113 * @return アクションの実行結果 114 * @throws Exception 115 * アクションメソッドの実行時に例外が発生した場合 116 */ 117 ActionResult invokeAction(ActionInvocation invocation) throws Exception; 118 119 /** 120 * アクションの実行結果を実行します。 121 * <p> 122 * このメソッドをオーバーライドすることで、アクションの実行結果の実行をインターセプトすることができます。 123 * </p> 124 * <p> 125 * このメソッド内で {@link ActionResultInvocation#proceed()} メソッドを実行することで、別のプラグインの 126 * {@link #invokeActionResult(ActionResultInvocation)} またはアクションの実行結果が実行されます。 127 * </p> 128 * 129 * @param invocation 130 * アクションの実行結果の実行情報 131 * @throws Exception 132 * アクションの実行結果の実行時に例外が発生した場合 133 */ 134 void invokeActionResult(ActionResultInvocation invocation) throws Exception; 135 136 }