SampleOperator: register a sample search operator The sample search operator will search for a single change Change-Id: If5b4cc41e037029d18a0760b83686d4379e7cf1f
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java index b182159..7a30dc8 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java +++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java
@@ -34,6 +34,7 @@ import com.google.gerrit.server.git.validators.MergeValidationListener; import com.google.gerrit.server.git.validators.UploadValidationListener; import com.google.gerrit.server.plugins.ServerPluginProvider; +import com.google.gerrit.server.query.change.ChangeQueryBuilder.ChangeOperatorFactory; import com.google.gerrit.server.validators.HashtagValidationListener; import com.google.inject.AbstractModule; @@ -74,6 +75,10 @@ DynamicSet.bind(binder(), CommitValidationListener.class) .to(CommitValidator.class); configurePluginParameters(); + + bind(ChangeOperatorFactory.class) + .annotatedWith(Exports.named("sample")) + .to(SampleOperator.class); } private void configurePluginParameters() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/SampleOperator.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/SampleOperator.java new file mode 100644 index 0000000..4d11bf9 --- /dev/null +++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/SampleOperator.java
@@ -0,0 +1,53 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.googlesource.gerrit.plugins.cookbook; + +import com.google.gerrit.reviewdb.client.Change; +import com.google.gerrit.server.query.OperatorPredicate; +import com.google.gerrit.server.query.Predicate; +import com.google.gerrit.server.query.QueryParseException; +import com.google.gerrit.server.query.change.ChangeData; +import com.google.gerrit.server.query.change.ChangeQueryBuilder; + +import com.google.inject.Singleton; + +@Singleton +public class SampleOperator + implements ChangeQueryBuilder.ChangeOperatorFactory { + public static class MyPredicate extends OperatorPredicate<ChangeData> { + private final Change.Id id; + + MyPredicate(Change.Id id) { + super("sample", id.toString()); + this.id = id; + } + + @Override + public boolean match(ChangeData object) { + return id.equals(object.getId()); + } + + @Override + public int getCost() { + return 1; + } + } + + @Override + public Predicate<ChangeData> create(ChangeQueryBuilder builder, String value) + throws QueryParseException { + return new MyPredicate(Change.Id.parse(value)); + } +}
diff --git a/src/main/resources/Documentation/change-search-operators.md b/src/main/resources/Documentation/change-search-operators.md new file mode 100644 index 0000000..78d7bf3 --- /dev/null +++ b/src/main/resources/Documentation/change-search-operators.md
@@ -0,0 +1,12 @@ +Search Operators +================ + +Sample Operator +--------------- + +The @PLUGIN@ plugin provides a new `sample_@PLUGIN@` change search operator +which can search for one specific change by change number. + +*sample_@PLUGIN@:number* + +Returns changes which match the change number `number`.