次の例は、正規表現の設定コントロールの内部実装を示しています。
final class RegExpControl extends SettingControl { private Pattern pattern = Pattern.compile(".*"); @Override public void setValue(String value) { this.pattern = Pattern.compile(value); } @Override public String combine(Set<String> values) { return String.join("|", values); } @Override public String getValue() { return pattern.toString(); } public boolean matches(String s) { return pattern.matcher(s).find(); } }
setValue(String)
、getValue()
およびcombine(Set<String>)
メソッドは、値の変更時に起動されます。これは、通常、レコーディングの開始時または停止時に発生します。 combine(Set<String>)
メソッドが呼び出され、複数のレコーディングが同実行されている場合に使用する値が解決されます。
設定コントロールには、イベントの登録時に起動できるデフォルトのコンストラクタが必要です。
イベントに設定コントロールを使用するには、boolean
値を返すメソッドを追加し、その設定コントロールをパラメータとして取ります。 メソッドに@SettingDefinition
注釈を付けます。 デフォルトでは、メソッド名が設定名として使用されますが、@Name
注釈を使用して名前を明示的に設定できます。 このメソッドがtrue
を返した場合、イベントはコミットされます。
setValue(String)
メソッドでは、イベントがコミットされるとすぐにチェックできる効率的なデータ構造を更新することをお薦めします。
次の例は、前述の正規表現フィルタを使用するイベントの作成方法を示しています。
abstract class HTTPRequest extends Event { @Label("Request URI") protected String uri; @Label("Servlet URI Filter") @SettingDefinition protected boolean uriFilter(RegExpControl regExp) { return regExp.matches(uri); } } @Label("HTTP Get Request") class HTTPGetRequest extends HTTPRequest { } @Label("HTTP Post Request") class HTTPPostRequest extends HTTPRequest { } class ExampleServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { HTTPGetRequest request = new HTTPGetRequest(); request.begin(); request.uri = req.getRequestURI(); ... request.commit(); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) { HTTPPostRequest request = new HTTPPostRequest(); request.begin(); request.uri = req.getRequestURI(); ... request.commit(); } }
次の例は、指定した正規表現を使用して"uriFilter"
設定を割り当てることによってイベントをフィルタ処理する方法を示しています。
Recording r = new Recording(); r.enable("HTTPGetRequest").with("uriFilter", "https://www.example.com/list/.*"); r.enable("HTTPPostRequest").with("uriFilter", "https://www.example.com/login/.*"); r.start();
- 導入されたバージョン:
- 9
- 関連項目:
-
コンストラクタのサマリー
-
メソッドのサマリー
-
コンストラクタの詳細
-
SettingControl
protected SettingControl()サブクラス・コンストラクタによる呼び出しのコンストラクタです。
-
-
メソッドの詳細
-
combine
複数のレコーディングが同時に実行される場合に、実行中のすべてのレコーディングの設定値を1つの値に結合します。設定値がどのように結合されるかのセマンティックは、実装されている設定コントロールによって決まりますが、すべてのレコーディングで、少なくともリクエストされたすべてのイベントが取得されます。
コール元は値をキャッシュする場合があるため、このメソッドに副作用はありません。 このメソッドは、
null
を返すことはありません。 この設定コントロールで値が有効でない場合は、その値を無視する必要があります。例:
設定コントロールがしきい値を表し、3つのレコーディングが同時に実行されていて、設定値が
"10 ms"
、"8 s"
および"1 ms"
である場合、このメソッドはリクエストされたすべてのデータがすべてのレコーディングに含まれることを意味するため、"1 ms"
を返します。設定コントロールが名前のセットを表し、2つのレコーディングが同時に実行されている場合、設定値が
"Smith, Jones"
および"Jones, Williams"
であると、すべての名前が受け入れられるため、戻される値は"Smith, Jones, Williams"
になります。設定コントロールがブール条件を表し、リクエストされたデータの少なくともすべてのレコーディングが取得されるため、同時に4つのレコーディングが実行され、
"true"
、"false"
、"false"
および"incorrect"
の値と同じです。- パラメータ:
settingValues
-null
ではなく値のセット- 戻り値:
null
ではなく、使用する値
-
setValue
public abstract void setValue(String settingValue) この設定の値を設定します。設定値が有効でない場合、このメソッドは例外をスローしません。 かわりに、値は無視されます。
- パラメータ:
settingValue
- 文字列値(null
ではない)
-
getValue
public abstract String getValue()null
ではなく、この設定に現在使用されている値を返します。このメソッドから戻される値は、
setValue(String)
メソッドとcombine(Set)
メソッドの両方に対する引数として有効です。このメソッドは、デフォルト値を取得するためにイベントが登録されると起動されます。 したがって、このクラスのインスタンスが作成された直後に有効な値を戻すことができます。
null
を返すことはできません。- 戻り値:
null
ではなく、設定値
-