X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fgenericrelation%2FIndexQueries.java;h=ee6296fdd4ecb7a1fbc02e4934119f456aabf0f1;hb=refs%2Fchanges%2F58%2F3758%2F1;hp=212da3830a1decfaac2ef541ba0f0d5155070252;hpb=3c524553c98b56075d854f355bc7bab2e3ae17f7;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/IndexQueries.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/IndexQueries.java index 212da3830..ee6296fdd 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/IndexQueries.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/IndexQueries.java @@ -1,5 +1,9 @@ package org.simantics.db.layer0.genericrelation; +import java.util.Collection; + +import org.simantics.datatypes.literal.GUID; +import org.simantics.db.Resource; /** * This class contains utilities related to queries made into Lucene indexes, @@ -159,15 +163,96 @@ public class IndexQueries { } public static String escapeTerm(String field, String term, boolean escapeWildcards) { - StringBuilder sb = new StringBuilder(); - return escapeTerm(field, term, escapeWildcards, sb).toString(); + return escapeTerm(field, term, escapeWildcards, new StringBuilder()).toString(); + } + + public static StringBuilder quoteTerm(String field, String term, StringBuilder result) { + if (field != null) + result.append(field).append(':'); + result.append("\""); + result.append(term.replaceAll("(\"|\\\\)", "\\\\$0")); + result.append("\""); + return result; } - + public static String quoteTerm(String term) { + return quoteTerm(null, term, new StringBuilder(term.length()*2)).toString(); + } + + public static String quoteTerm(String field, String term) { + return quoteTerm(field, term, + new StringBuilder( + term.length()*2 + + (field != null ? field.length() + 1 : 0)) + ).toString(); + } + + public static StringBuilder appendLongTerm(StringBuilder sb, String field, long term) { + return sb.append(field).append(':').append(term); + } + + public static String longTerm(String field, long term) { + return appendLongTerm(new StringBuilder(), field, term).toString(); + } + + public static StringBuilder appendResourceIdTerm(StringBuilder sb, String field, Resource term) { + return appendLongTerm(sb, field, term.getResourceId()); + } + + public static String resourceIdTerm(String field, Resource term) { + return appendLongTerm(new StringBuilder(), field, term.getResourceId()).toString(); + } + + private static String join(String withString, String... exps) { + if (exps.length == 0) + return ""; + StringBuilder sb = new StringBuilder(128); + for (int i = 0; i < exps.length - 1; ++i) { + sb.append(exps[i]).append(withString); + } + sb.append(exps[exps.length - 1]); + return sb.toString(); + } + + public static String and(String exp1, String exp2) { + return exp1 + " AND " + exp2; + } + + public static String and(String... exps) { + return join(" AND ", exps); + } + + public static String or(String exp1, String exp2) { + return exp1 + " OR " + exp2; + } + + public static String or(String... exps) { + return join(" OR ", exps); + } + + public static String idFromGUID(GUID guid) { + return guid != null ? guid.indexString() : ""; + } + + public static String toResourceIdString(Resource r, Collection rs) { StringBuilder sb = new StringBuilder(); - sb.append("\""); - sb.append(term.replaceAll("(\"|\\\\)", "\\\\$0")); - sb.append("\""); + sb.append(r.getResourceId()); + for (Resource rr : rs) + sb.append(' ').append(rr.getResourceId()); + return sb.toString(); + } + + public static String toResourceIdString(Collection rs) { + if (rs.isEmpty()) + return ""; + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (Resource rr : rs) { + if (!first) + sb.append(' '); + first = false; + sb.append(rr.getResourceId()); + } return sb.toString(); }