summaryrefslogtreecommitdiffstats
path: root/java/gerrit/PRED__load_commit_labels_1.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/gerrit/PRED__load_commit_labels_1.java')
-rw-r--r--java/gerrit/PRED__load_commit_labels_1.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/java/gerrit/PRED__load_commit_labels_1.java b/java/gerrit/PRED__load_commit_labels_1.java
new file mode 100644
index 0000000000..1d0ba8a48a
--- /dev/null
+++ b/java/gerrit/PRED__load_commit_labels_1.java
@@ -0,0 +1,67 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package gerrit;
+
+import com.google.gerrit.common.data.LabelType;
+import com.google.gerrit.common.data.LabelTypes;
+import com.google.gerrit.reviewdb.client.PatchSetApproval;
+import com.google.gerrit.server.query.change.ChangeData;
+import com.google.gerrit.server.rules.StoredValues;
+import com.google.gwtorm.server.OrmException;
+import com.googlecode.prolog_cafe.exceptions.JavaException;
+import com.googlecode.prolog_cafe.exceptions.PrologException;
+import com.googlecode.prolog_cafe.lang.IntegerTerm;
+import com.googlecode.prolog_cafe.lang.ListTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.Predicate;
+import com.googlecode.prolog_cafe.lang.Prolog;
+import com.googlecode.prolog_cafe.lang.StructureTerm;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
+/** Exports list of {@code commit_label( label('Code-Review', 2), user(12345789) )}. */
+class PRED__load_commit_labels_1 extends Predicate.P1 {
+ private static final SymbolTerm sym_commit_label = SymbolTerm.intern("commit_label", 2);
+ private static final SymbolTerm sym_label = SymbolTerm.intern("label", 2);
+ private static final SymbolTerm sym_user = SymbolTerm.intern("user", 1);
+
+ PRED__load_commit_labels_1(Term a1, Operation n) {
+ arg1 = a1;
+ cont = n;
+ }
+
+ @Override
+ public Operation exec(Prolog engine) throws PrologException {
+ engine.setB0();
+ Term a1 = arg1.dereference();
+
+ Term listHead = Prolog.Nil;
+ try {
+ ChangeData cd = StoredValues.CHANGE_DATA.get(engine);
+ LabelTypes types = cd.getLabelTypes();
+
+ for (PatchSetApproval a : cd.currentApprovals()) {
+ LabelType t = types.byLabel(a.getLabelId());
+ if (t == null) {
+ continue;
+ }
+
+ StructureTerm labelTerm =
+ new StructureTerm(
+ sym_label, SymbolTerm.intern(t.getName()), new IntegerTerm(a.getValue()));
+
+ StructureTerm userTerm =
+ new StructureTerm(sym_user, new IntegerTerm(a.getAccountId().get()));
+
+ listHead = new ListTerm(new StructureTerm(sym_commit_label, labelTerm, userTerm), listHead);
+ }
+ } catch (OrmException err) {
+ throw new JavaException(this, 1, err);
+ }
+
+ if (!a1.unify(listHead, engine.trail)) {
+ return engine.fail();
+ }
+ return cont;
+ }
+}