Search in sources :

Example 1 with SymbolTerm

use of com.googlecode.prolog_cafe.lang.SymbolTerm in project gerrit by GerritCodeReview.

the class RulesCache method prettyProlog.

private static String prettyProlog(Term at) {
    StringBuilder b = new StringBuilder();
    for (Object o : ((ListTerm) at).toJava()) {
        if (o instanceof Term) {
            Term t = (Term) o;
            if (!(t instanceof StructureTerm)) {
                b.append(t.toString()).append(' ');
                continue;
            }
            switch(t.name()) {
                case "atom":
                    SymbolTerm atom = (SymbolTerm) t.arg(0);
                    b.append(atom.toString());
                    break;
                case "var":
                    b.append(t.arg(0).toString());
                    break;
            }
        } else {
            b.append(o);
        }
    }
    return b.toString().trim();
}
Also used : ListTerm(com.googlecode.prolog_cafe.lang.ListTerm) StructureTerm(com.googlecode.prolog_cafe.lang.StructureTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) Term(com.googlecode.prolog_cafe.lang.Term) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) ListTerm(com.googlecode.prolog_cafe.lang.ListTerm) StructureTerm(com.googlecode.prolog_cafe.lang.StructureTerm)

Example 2 with SymbolTerm

use of com.googlecode.prolog_cafe.lang.SymbolTerm in project gerrit by GerritCodeReview.

the class PRED_commit_delta_4 method exec.

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.cont = cont;
    engine.setB0();
    Term a1 = arg1.dereference();
    if (a1 instanceof VariableTerm) {
        throw new PInstantiationException(this, 1);
    }
    if (!(a1 instanceof SymbolTerm)) {
        throw new IllegalTypeException(this, 1, "symbol", a1);
    }
    Pattern regex = Pattern.compile(a1.name());
    engine.r1 = new JavaObjectTerm(regex);
    engine.r2 = arg2;
    engine.r3 = arg3;
    engine.r4 = arg4;
    PatchList pl = StoredValues.PATCH_LIST.get(engine);
    Iterator<PatchListEntry> iter = pl.getPatches().iterator();
    engine.r5 = new JavaObjectTerm(iter);
    return engine.jtry5(commit_delta_check, commit_delta_next);
}
Also used : Pattern(java.util.regex.Pattern) PatchList(com.google.gerrit.server.patch.PatchList) IllegalTypeException(com.googlecode.prolog_cafe.exceptions.IllegalTypeException) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) PatchListEntry(com.google.gerrit.server.patch.PatchListEntry) VariableTerm(com.googlecode.prolog_cafe.lang.VariableTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) Term(com.googlecode.prolog_cafe.lang.Term) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) VariableTerm(com.googlecode.prolog_cafe.lang.VariableTerm) PInstantiationException(com.googlecode.prolog_cafe.exceptions.PInstantiationException)

Example 3 with SymbolTerm

use of com.googlecode.prolog_cafe.lang.SymbolTerm in project gerrit by GerritCodeReview.

the class PRED_commit_message_1 method exec.

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.setB0();
    Term a1 = arg1.dereference();
    PatchSetInfo psInfo = StoredValues.PATCH_SET_INFO.get(engine);
    SymbolTerm msg = SymbolTerm.create(psInfo.getMessage());
    if (!a1.unify(msg, engine.trail)) {
        return engine.fail();
    }
    return cont;
}
Also used : SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) Term(com.googlecode.prolog_cafe.lang.Term) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) PatchSetInfo(com.google.gerrit.reviewdb.client.PatchSetInfo)

Example 4 with SymbolTerm

use of com.googlecode.prolog_cafe.lang.SymbolTerm in project gerrit by GerritCodeReview.

the class PrologTestCase method consult.

protected void consult(BufferingPrologControl env, Class<?> clazz, String prologResource) throws CompileException, IOException {
    try (InputStream in = clazz.getResourceAsStream(prologResource)) {
        if (in == null) {
            throw new FileNotFoundException(prologResource);
        }
        SymbolTerm pathTerm = SymbolTerm.create(prologResource);
        JavaObjectTerm inTerm = new JavaObjectTerm(new PushbackReader(new BufferedReader(new InputStreamReader(in, UTF_8)), Prolog.PUSHBACK_SIZE));
        if (!env.execute(Prolog.BUILTIN, "consult_stream", pathTerm, inTerm)) {
            throw new CompileException("Cannot consult " + prologResource);
        }
    }
}
Also used : InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) FileNotFoundException(java.io.FileNotFoundException) BufferedReader(java.io.BufferedReader) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) CompileException(com.googlecode.prolog_cafe.exceptions.CompileException) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) PushbackReader(java.io.PushbackReader)

Example 5 with SymbolTerm

use of com.googlecode.prolog_cafe.lang.SymbolTerm in project gerrit by GerritCodeReview.

the class PRED__check_user_label_3 method exec.

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.setB0();
    Term a1 = arg1.dereference();
    Term a2 = arg2.dereference();
    Term a3 = arg3.dereference();
    if (a1 instanceof VariableTerm) {
        throw new PInstantiationException(this, 1);
    }
    if (!(a1 instanceof SymbolTerm)) {
        throw new IllegalTypeException(this, 1, "atom", a1);
    }
    String label = a1.name();
    if (a2 instanceof VariableTerm) {
        throw new PInstantiationException(this, 2);
    }
    if (!(a2 instanceof JavaObjectTerm) || !a2.convertible(CurrentUser.class)) {
        throw new IllegalTypeException(this, 2, "CurrentUser)", a2);
    }
    CurrentUser user = (CurrentUser) ((JavaObjectTerm) a2).object();
    if (a3 instanceof VariableTerm) {
        throw new PInstantiationException(this, 3);
    }
    if (!(a3 instanceof IntegerTerm)) {
        throw new IllegalTypeException(this, 3, "integer", a3);
    }
    short val = (short) ((IntegerTerm) a3).intValue();
    try {
        ChangeData cd = StoredValues.CHANGE_DATA.get(engine);
        LabelType type = cd.getLabelTypes().byLabel(label);
        if (type == null) {
            return engine.fail();
        }
        StoredValues.PERMISSION_BACKEND.get(engine).user(user).change(cd).check(new LabelPermission.WithValue(type, val));
        return cont;
    } catch (OrmException err) {
        throw new JavaException(this, 1, err);
    } catch (AuthException err) {
        return engine.fail();
    } catch (PermissionBackendException err) {
        SystemException se = new SystemException(err.getMessage());
        se.initCause(err);
        throw se;
    }
}
Also used : IntegerTerm(com.googlecode.prolog_cafe.lang.IntegerTerm) JavaException(com.googlecode.prolog_cafe.exceptions.JavaException) IllegalTypeException(com.googlecode.prolog_cafe.exceptions.IllegalTypeException) CurrentUser(com.google.gerrit.server.CurrentUser) AuthException(com.google.gerrit.extensions.restapi.AuthException) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) PermissionBackendException(com.google.gerrit.server.permissions.PermissionBackendException) Term(com.googlecode.prolog_cafe.lang.Term) IntegerTerm(com.googlecode.prolog_cafe.lang.IntegerTerm) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) VariableTerm(com.googlecode.prolog_cafe.lang.VariableTerm) ChangeData(com.google.gerrit.server.query.change.ChangeData) PInstantiationException(com.googlecode.prolog_cafe.exceptions.PInstantiationException) SystemException(com.googlecode.prolog_cafe.exceptions.SystemException) OrmException(com.google.gwtorm.server.OrmException) LabelType(com.google.gerrit.common.data.LabelType) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) VariableTerm(com.googlecode.prolog_cafe.lang.VariableTerm) LabelPermission(com.google.gerrit.server.permissions.LabelPermission)

Aggregations

SymbolTerm (com.googlecode.prolog_cafe.lang.SymbolTerm)8 JavaObjectTerm (com.googlecode.prolog_cafe.lang.JavaObjectTerm)6 Term (com.googlecode.prolog_cafe.lang.Term)6 VariableTerm (com.googlecode.prolog_cafe.lang.VariableTerm)4 OrmException (com.google.gwtorm.server.OrmException)3 IllegalTypeException (com.googlecode.prolog_cafe.exceptions.IllegalTypeException)3 PInstantiationException (com.googlecode.prolog_cafe.exceptions.PInstantiationException)3 IntegerTerm (com.googlecode.prolog_cafe.lang.IntegerTerm)3 StructureTerm (com.googlecode.prolog_cafe.lang.StructureTerm)3 LabelType (com.google.gerrit.common.data.LabelType)2 CurrentUser (com.google.gerrit.server.CurrentUser)2 LabelPermission (com.google.gerrit.server.permissions.LabelPermission)2 PermissionBackendException (com.google.gerrit.server.permissions.PermissionBackendException)2 ChangeData (com.google.gerrit.server.query.change.ChangeData)2 CompileException (com.googlecode.prolog_cafe.exceptions.CompileException)2 JavaException (com.googlecode.prolog_cafe.exceptions.JavaException)2 SystemException (com.googlecode.prolog_cafe.exceptions.SystemException)2 ListTerm (com.googlecode.prolog_cafe.lang.ListTerm)2 PushbackReader (java.io.PushbackReader)2 AuthException (com.google.gerrit.extensions.restapi.AuthException)1