/* Generated By:JJTree&JavaCC: Do not edit this line. CriterionParser.java */ package org.betaconceptframework.astroboa.model.impl.query.parser; import java.util.Calendar; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.jackrabbit.util.ISO8601; import org.betaconceptframework.astroboa.api.model.query.Condition; import org.betaconceptframework.astroboa.api.model.query.QueryOperator; import org.betaconceptframework.astroboa.api.model.query.criteria.ContentObjectCriteria; import org.betaconceptframework.astroboa.api.model.query.criteria.Criterion; import org.betaconceptframework.astroboa.api.model.query.criteria.LocalizationCriterion; import org.betaconceptframework.astroboa.api.model.query.criteria.TopicCriteria; import org.betaconceptframework.astroboa.model.factory.CmsCriteriaFactory; import org.betaconceptframework.astroboa.model.factory.CriterionFactory; import org.betaconceptframework.astroboa.model.impl.item.CmsBuiltInItem; import org.betaconceptframework.astroboa.util.DateUtils; /** * @author Gregory Chomatas (gchomatas@betaconcept.com) * @author Savvas Triantafyllou (striantafyllou@betaconcept.com) * */ public class CriterionParser/*@bgen(jjtree)*/implements CriterionParserTreeConstants, CriterionParserConstants {/*@bgen(jjtree)*/ protected JJTCriterionParserState jjtree = new JJTCriterionParserState(); private final static String ISO8601_DATE_FORMAT = "yyyy-MM-dd"; private final static String DATE_REG_EXP = "((?:19|20)(?:\\d\\d))-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"; private final static String TIME_REG_EXP = "T([01][0-9]|2[0123]):([0-5][0-9]):([0-5][0-9])(.\\d\\d\\d)?"; private final static String TIME_ZONE_REG_EXP ="(Z|((?:\\+|-)[0-5][0-9]:[0-5][0-9]))?"; private final static String ISO8601_REG_EXP="^"+DATE_REG_EXP+TIME_REG_EXP+TIME_ZONE_REG_EXP+"$"; private Pattern ISO8601Pattern = Pattern.compile(ISO8601_REG_EXP); private Pattern ISO8601DatePattern = Pattern.compile(DATE_REG_EXP); private ContentObjectCriteria contentObjectCriteria; private TopicCriteria topicCriteria; public void parseExpressionAndAppendCriteria(ContentObjectCriteria contentObjectCriteria) throws ParseException { try { this.contentObjectCriteria = contentObjectCriteria; this.contentObjectCriteria.addCriterion(UnifiedCriterion()); } catch (TokenMgrError tme) { throw new ParseException(tme.getMessage()); } } public void parseExpressionAndAppendTopicCriteria(TopicCriteria topicCriteria) throws ParseException { try { this.topicCriteria = topicCriteria; this.topicCriteria.addCriterion(UnifiedCriterion()); } catch (TokenMgrError tme) { throw new ParseException(tme.getMessage()); } } public Criterion createSimpleCriterion(String propertyPath, QueryOperator queryOperator, String value) throws ParseException{ /** * Strip '"' and ''' from the beginning and the end of the value */ if (value != null){ value = StringUtils.removeStart(value, "\""); value = StringUtils.removeEnd(value, "\""); value = StringUtils.removeStart(value, "'"); value = StringUtils.removeEnd(value, "'"); value = value.trim(); if (StringUtils.isBlank(value)){ return null; } //Reserved property paths for content object criteria // contentTypeName is considered obsolete and will be removed in next major version, i.e. 4.x, use objectType instead if ("contentTypeName".equals(propertyPath) && contentObjectCriteria != null){ return contentObjectCriteria.createContentObjectTypeEqualsCriterion(value); } else if ("objectType".equals(propertyPath) && contentObjectCriteria != null){ return contentObjectCriteria.createContentObjectTypeEqualsCriterion(value); } else if ("textSearched".equals(propertyPath) && contentObjectCriteria != null){ contentObjectCriteria.addFullTextSearchCriterion(value); return null; } else if ("id".equals(propertyPath)){ propertyPath = CmsBuiltInItem.CmsIdentifier.getJcrName(); } else if ("systemName".equals(propertyPath) && contentObjectCriteria != null){ propertyPath = CmsBuiltInItem.SystemName.getJcrName(); } else if (topicCriteria != null){ if ("name".equals(propertyPath)){ propertyPath = CmsBuiltInItem.Name.getJcrName(); } else if ("taxonomy".equals(propertyPath)){ //Currently we ignore operator provided by the user //due to the restricted supported of taxonomy criterion //In the next release, we will take it into account :-) topicCriteria.addTaxonomyNameEqualsCriterion(value); return null; } else if (propertyPath.startsWith("label")){ return createLocalizationCriterion(propertyPath, value, queryOperator); } else if ("ancestor.name".equals(propertyPath)){ TopicCriteria ancestorCriteria = topicCriteria.getAncestorCriteria(); if (ancestorCriteria == null){ ancestorCriteria = CmsCriteriaFactory.newTopicCriteria(); topicCriteria.setAncestorCriteria(ancestorCriteria); } if (QueryOperator.EQUALS == queryOperator){ ancestorCriteria.addNameEqualsCriterion(value); return null; } else{ ancestorCriteria.addCriterion(CriterionFactory.createSimpleCriterion(CmsBuiltInItem.Name.getJcrName(), value, queryOperator)); return null; } } else if (propertyPath.startsWith("ancestor.label")){ TopicCriteria ancestorCriteria = topicCriteria.getAncestorCriteria(); if (ancestorCriteria == null){ ancestorCriteria = CmsCriteriaFactory.newTopicCriteria(); topicCriteria.setAncestorCriteria(ancestorCriteria); } //Remove 'ancestor.' from proerty path LocalizationCriterion locLabelCriterion = createLocalizationCriterion(StringUtils.substringAfter(propertyPath,"."), value, queryOperator); ancestorCriteria.addCriterion(locLabelCriterion); return null; } else if (propertyPath.equals("ancestor.id")){ TopicCriteria ancestorCriteria = topicCriteria.getAncestorCriteria(); if (ancestorCriteria == null){ ancestorCriteria = CmsCriteriaFactory.newTopicCriteria(); topicCriteria.setAncestorCriteria(ancestorCriteria); } ancestorCriteria.addCriterion(CriterionFactory.createSimpleCriterion(CmsBuiltInItem.CmsIdentifier.getJcrName(), value, queryOperator)); return null; } } //Special care for Boolean values //Need to pass Boolean Object if ("true".equalsIgnoreCase(value)){ return CriterionFactory.createSimpleCriterion(propertyPath, Boolean.TRUE, queryOperator); } else if ("false".equalsIgnoreCase(value)){ return CriterionFactory.createSimpleCriterion(propertyPath, Boolean.FALSE, queryOperator); } //Dates also need special care. Check if value is a date Calendar dateValue = checkIfValueIsISO8601Date(value); if (dateValue != null){ return CriterionFactory.createSimpleCriterion(propertyPath, dateValue, queryOperator); } } return CriterionFactory.createSimpleCriterion(propertyPath, value, queryOperator); } private LocalizationCriterion createLocalizationCriterion(String propertyPath, String value, QueryOperator queryOperator){ LocalizationCriterion locLabelCriterion = CriterionFactory.newLocalizationCriterion(); locLabelCriterion.addLocalizedLabel(value); locLabelCriterion.setQueryOperator(queryOperator); //If locale is provided then it is expected to be after label , //i.e. label.en String locale = StringUtils.substringAfter(propertyPath,"."); if (locale != null){ locLabelCriterion.setLocale(locale); } return locLabelCriterion; } /** * If provided value is a valid ISO8601 date then equivalent calendar is returned * * @param value * @return * @throws ParseException */ private Calendar checkIfValueIsISO8601Date(String value){ if (StringUtils.isBlank(value)){ return null; } Calendar date = null; try{ Matcher dateTimeMatcher = ISO8601Pattern.matcher(value); if (dateTimeMatcher.matches()){ date = ISO8601.parse(value); } else{ //check for simple date Matcher dateMatcher = ISO8601DatePattern.matcher(value); if (dateMatcher.matches()){ date = (Calendar) DateUtils.fromString(value, ISO8601_DATE_FORMAT); } } } catch(Exception e){ //Probably not a date value. Ignore exception return null; } return date; } final public Condition Condition() throws ParseException { /*@bgen(jjtree) Condition */ SimpleNode jjtn000 = new SimpleNode(JJTCONDITION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Token t; try { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AND: t = jj_consume_token(AND); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return Condition.AND;} break; case OR: t = jj_consume_token(OR); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return Condition.OR;} break; default: jj_la1[0] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public QueryOperator QueryOperator() throws ParseException { /*@bgen(jjtree) QueryOperator */ SimpleNode jjtn000 = new SimpleNode(JJTQUERYOPERATOR); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Token t; try { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case EQUALS: t = jj_consume_token(EQUALS); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.EQUALS;} break; case NOT_EQUALS: t = jj_consume_token(NOT_EQUALS); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.NOT_EQUALS;} break; case GREATER: t = jj_consume_token(GREATER); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.GREATER;} break; case GREATER_EQUAL: t = jj_consume_token(GREATER_EQUAL); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.GREATER_EQUAL;} break; case LESS: t = jj_consume_token(LESS); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.LESS;} break; case LESS_EQUAL: t = jj_consume_token(LESS_EQUAL); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.LESS_EQUAL;} break; case LIKE: t = jj_consume_token(LIKE); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.LIKE;} break; case CONTAINS: t = jj_consume_token(CONTAINS); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.CONTAINS;} break; default: jj_la1[1] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public QueryOperator NullOrNotNullQueryOperator() throws ParseException { /*@bgen(jjtree) NullOrNotNullQueryOperator */ SimpleNode jjtn000 = new SimpleNode(JJTNULLORNOTNULLQUERYOPERATOR); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Token t; try { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IS_NULL: t = jj_consume_token(IS_NULL); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.IS_NULL;} break; case IS_NOT_NULL: t = jj_consume_token(IS_NOT_NULL); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return QueryOperator.IS_NOT_NULL;} break; default: jj_la1[2] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public String GetProperty() throws ParseException { /*@bgen(jjtree) GetProperty */ SimpleNode jjtn000 = new SimpleNode(JJTGETPROPERTY); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Token propertyToken; try { propertyToken = jj_consume_token(PROPERTY_PATH); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return propertyToken.toString();} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public String GetValue() throws ParseException { /*@bgen(jjtree) GetValue */ SimpleNode jjtn000 = new SimpleNode(JJTGETVALUE); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Token valueToken; try { valueToken = jj_consume_token(VALUE); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return valueToken.toString();} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public Criterion SimpleCriterion() throws ParseException { /*@bgen(jjtree) SimpleCriterion */ SimpleNode jjtn000 = new SimpleNode(JJTSIMPLECRITERION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);String propertyPath; QueryOperator op; String value = null; try { if (jj_2_1(2)) { propertyPath = GetProperty(); op = NullOrNotNullQueryOperator(); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return createSimpleCriterion(propertyPath, op, null);} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PROPERTY_PATH: propertyPath = GetProperty(); op = QueryOperator(); value = GetValue(); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return createSimpleCriterion(propertyPath, op, value);} break; default: jj_la1[3] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); jjtc000 = false; } else { jjtree.popNode(); } if (jjte000 instanceof RuntimeException) { {if (true) throw (RuntimeException)jjte000;} } if (jjte000 instanceof ParseException) { {if (true) throw (ParseException)jjte000;} } {if (true) throw (Error)jjte000;} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public Criterion PrimaryCriterion() throws ParseException { /*@bgen(jjtree) PrimaryCriterion */ SimpleNode jjtn000 = new SimpleNode(JJTPRIMARYCRITERION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Criterion criterion; try { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PROPERTY_PATH: criterion = SimpleCriterion(); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return criterion;} break; case LPAREN: criterion = ParenCriterion(); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return criterion;} break; default: jj_la1[4] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); jjtc000 = false; } else { jjtree.popNode(); } if (jjte000 instanceof RuntimeException) { {if (true) throw (RuntimeException)jjte000;} } if (jjte000 instanceof ParseException) { {if (true) throw (ParseException)jjte000;} } {if (true) throw (Error)jjte000;} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public Criterion FullCriterion() throws ParseException { /*@bgen(jjtree) FullCriterion */ SimpleNode jjtn000 = new SimpleNode(JJTFULLCRITERION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Criterion lhs; Criterion rhs; Condition condition; try { lhs = PrimaryCriterion(); label_1: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AND: case OR: ; break; default: jj_la1[5] = jj_gen; break label_1; } condition = Condition(); rhs = PrimaryCriterion(); if (condition == Condition.AND){ lhs=CriterionFactory.and(lhs,rhs); } else if (condition == Condition.OR){ lhs=CriterionFactory.or(lhs,rhs); } else{ {if (true) throw new ParseException("Invalid Condition" + condition);} } } jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return lhs;} } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); jjtc000 = false; } else { jjtree.popNode(); } if (jjte000 instanceof RuntimeException) { {if (true) throw (RuntimeException)jjte000;} } if (jjte000 instanceof ParseException) { {if (true) throw (ParseException)jjte000;} } {if (true) throw (Error)jjte000;} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public Criterion ParenCriterion() throws ParseException { /*@bgen(jjtree) ParenCriterion */ SimpleNode jjtn000 = new SimpleNode(JJTPARENCRITERION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Criterion criterion; try { jj_consume_token(LPAREN); criterion = FullCriterion(); jj_consume_token(RPAREN); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return criterion;} } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); jjtc000 = false; } else { jjtree.popNode(); } if (jjte000 instanceof RuntimeException) { {if (true) throw (RuntimeException)jjte000;} } if (jjte000 instanceof ParseException) { {if (true) throw (ParseException)jjte000;} } {if (true) throw (Error)jjte000;} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public Criterion Expression() throws ParseException { /*@bgen(jjtree) Expression */ SimpleNode jjtn000 = new SimpleNode(JJTEXPRESSION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Criterion lhs; Criterion rhs; try { lhs = PrimaryCriterion(); label_2: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case OR: ; break; default: jj_la1[6] = jj_gen; break label_2; } jj_consume_token(OR); rhs = PrimaryCriterion(); lhs=CriterionFactory.or(lhs,rhs); } jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return lhs;} } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); jjtc000 = false; } else { jjtree.popNode(); } if (jjte000 instanceof RuntimeException) { {if (true) throw (RuntimeException)jjte000;} } if (jjte000 instanceof ParseException) { {if (true) throw (ParseException)jjte000;} } {if (true) throw (Error)jjte000;} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public Criterion Criterion() throws ParseException { /*@bgen(jjtree) Criterion */ SimpleNode jjtn000 = new SimpleNode(JJTCRITERION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Criterion criterion; try { if (jj_2_2(3)) { criterion = Expression(); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return criterion;} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LPAREN: criterion = ParenCriterion(); jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return criterion;} break; default: jj_la1[7] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); jjtc000 = false; } else { jjtree.popNode(); } if (jjte000 instanceof RuntimeException) { {if (true) throw (RuntimeException)jjte000;} } if (jjte000 instanceof ParseException) { {if (true) throw (ParseException)jjte000;} } {if (true) throw (Error)jjte000;} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } final public Criterion UnifiedCriterion() throws ParseException { /*@bgen(jjtree) UnifiedCriterion */ SimpleNode jjtn000 = new SimpleNode(JJTUNIFIEDCRITERION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);Criterion lhs; Criterion rhs; try { lhs = Criterion(); label_3: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AND: ; break; default: jj_la1[8] = jj_gen; break label_3; } jj_consume_token(AND); rhs = Criterion(); lhs=CriterionFactory.and(lhs,rhs); } jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; {if (true) return lhs;} } catch (Throwable jjte000) { if (jjtc000) { jjtree.clearNodeScope(jjtn000); jjtc000 = false; } else { jjtree.popNode(); } if (jjte000 instanceof RuntimeException) { {if (true) throw (RuntimeException)jjte000;} } if (jjte000 instanceof ParseException) { {if (true) throw (ParseException)jjte000;} } {if (true) throw (Error)jjte000;} } finally { if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); } } throw new Error("Missing return statement in function"); } private boolean jj_2_1(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_1(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(0, xla); } } private boolean jj_2_2(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_2(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(1, xla); } } private boolean jj_3R_25() { if (jj_scan_token(LIKE)) return true; return false; } private boolean jj_3R_24() { if (jj_scan_token(LESS_EQUAL)) return true; return false; } private boolean jj_3R_23() { if (jj_scan_token(LESS)) return true; return false; } private boolean jj_3R_22() { if (jj_scan_token(GREATER_EQUAL)) return true; return false; } private boolean jj_3R_21() { if (jj_scan_token(GREATER)) return true; return false; } private boolean jj_3R_14() { if (jj_scan_token(LPAREN)) return true; if (jj_3R_16()) return true; return false; } private boolean jj_3R_20() { if (jj_scan_token(NOT_EQUALS)) return true; return false; } private boolean jj_3R_15() { if (jj_3R_4()) return true; if (jj_3R_17()) return true; if (jj_3R_18()) return true; return false; } private boolean jj_3R_19() { if (jj_scan_token(EQUALS)) return true; return false; } private boolean jj_3R_17() { Token xsp; xsp = jj_scanpos; if (jj_3R_19()) { jj_scanpos = xsp; if (jj_3R_20()) { jj_scanpos = xsp; if (jj_3R_21()) { jj_scanpos = xsp; if (jj_3R_22()) { jj_scanpos = xsp; if (jj_3R_23()) { jj_scanpos = xsp; if (jj_3R_24()) { jj_scanpos = xsp; if (jj_3R_25()) { jj_scanpos = xsp; if (jj_3R_26()) return true; } } } } } } } return false; } private boolean jj_3_1() { if (jj_3R_4()) return true; if (jj_3R_5()) return true; return false; } private boolean jj_3R_13() { Token xsp; xsp = jj_scanpos; if (jj_3_1()) { jj_scanpos = xsp; if (jj_3R_15()) return true; } return false; } private boolean jj_3R_10() { if (jj_scan_token(OR)) return true; return false; } private boolean jj_3R_18() { if (jj_scan_token(VALUE)) return true; return false; } private boolean jj_3R_16() { if (jj_3R_9()) return true; return false; } private boolean jj_3R_9() { Token xsp; xsp = jj_scanpos; if (jj_3R_11()) { jj_scanpos = xsp; if (jj_3R_12()) return true; } return false; } private boolean jj_3R_11() { if (jj_3R_13()) return true; return false; } private boolean jj_3_2() { if (jj_3R_6()) return true; return false; } private boolean jj_3R_12() { if (jj_3R_14()) return true; return false; } private boolean jj_3R_4() { if (jj_scan_token(PROPERTY_PATH)) return true; return false; } private boolean jj_3R_8() { if (jj_scan_token(IS_NOT_NULL)) return true; return false; } private boolean jj_3R_7() { if (jj_scan_token(IS_NULL)) return true; return false; } private boolean jj_3R_5() { Token xsp; xsp = jj_scanpos; if (jj_3R_7()) { jj_scanpos = xsp; if (jj_3R_8()) return true; } return false; } private boolean jj_3R_6() { if (jj_3R_9()) return true; Token xsp; while (true) { xsp = jj_scanpos; if (jj_3R_10()) { jj_scanpos = xsp; break; } } return false; } private boolean jj_3R_26() { if (jj_scan_token(CONTAINS)) return true; return false; } /** Generated Token Manager. */ public CriterionParserTokenManager token_source; JavaCharStream jj_input_stream; /** Current token. */ public Token token; /** Next token. */ public Token jj_nt; private int jj_ntk; private Token jj_scanpos, jj_lastpos; private int jj_la; private int jj_gen; final private int[] jj_la1 = new int[9]; static private int[] jj_la1_0; static { jj_la1_init_0(); } private static void jj_la1_init_0() { jj_la1_0 = new int[] {0x3000,0x27f0000,0x1800000,0x4000000,0x4004000,0x3000,0x2000,0x4000,0x1000,}; } final private JJCalls[] jj_2_rtns = new JJCalls[2]; private boolean jj_rescan = false; private int jj_gc = 0; /** Constructor with InputStream. */ public CriterionParser(java.io.InputStream stream) { this(stream, null); } /** Constructor with InputStream and supplied encoding */ public CriterionParser(java.io.InputStream stream, String encoding) { try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } token_source = new CriterionParserTokenManager(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 9; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } /** Reinitialise. */ public void ReInit(java.io.InputStream stream) { ReInit(stream, null); } /** Reinitialise. */ public void ReInit(java.io.InputStream stream, String encoding) { try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } token_source.ReInit(jj_input_stream); token = new Token(); jj_ntk = -1; jjtree.reset(); jj_gen = 0; for (int i = 0; i < 9; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } /** Constructor. */ public CriterionParser(java.io.Reader stream) { jj_input_stream = new JavaCharStream(stream, 1, 1); token_source = new CriterionParserTokenManager(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 9; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } /** Reinitialise. */ public void ReInit(java.io.Reader stream) { jj_input_stream.ReInit(stream, 1, 1); token_source.ReInit(jj_input_stream); token = new Token(); jj_ntk = -1; jjtree.reset(); jj_gen = 0; for (int i = 0; i < 9; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } /** Constructor with generated Token Manager. */ public CriterionParser(CriterionParserTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 9; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } /** Reinitialise. */ public void ReInit(CriterionParserTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jjtree.reset(); jj_gen = 0; for (int i = 0; i < 9; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } private Token jj_consume_token(int kind) throws ParseException { Token oldToken; if ((oldToken = token).next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; if (token.kind == kind) { jj_gen++; if (++jj_gc > 100) { jj_gc = 0; for (int i = 0; i < jj_2_rtns.length; i++) { JJCalls c = jj_2_rtns[i]; while (c != null) { if (c.gen < jj_gen) c.first = null; c = c.next; } } } return token; } token = oldToken; jj_kind = kind; throw generateParseException(); } static private final class LookaheadSuccess extends java.lang.Error { } final private LookaheadSuccess jj_ls = new LookaheadSuccess(); private boolean jj_scan_token(int kind) { if (jj_scanpos == jj_lastpos) { jj_la--; if (jj_scanpos.next == null) { jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); } else { jj_lastpos = jj_scanpos = jj_scanpos.next; } } else { jj_scanpos = jj_scanpos.next; } if (jj_rescan) { int i = 0; Token tok = token; while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } if (tok != null) jj_add_error_token(kind, i); } if (jj_scanpos.kind != kind) return true; if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; return false; } /** Get the next Token. */ final public Token getNextToken() { if (token.next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; jj_gen++; return token; } /** Get the specific Token. */ final public Token getToken(int index) { Token t = token; for (int i = 0; i < index; i++) { if (t.next != null) t = t.next; else t = t.next = token_source.getNextToken(); } return t; } private int jj_ntk() { if ((jj_nt=token.next) == null) return (jj_ntk = (token.next=token_source.getNextToken()).kind); else return (jj_ntk = jj_nt.kind); } private java.util.List jj_expentries = new java.util.ArrayList(); private int[] jj_expentry; private int jj_kind = -1; private int[] jj_lasttokens = new int[100]; private int jj_endpos; private void jj_add_error_token(int kind, int pos) { if (pos >= 100) return; if (pos == jj_endpos + 1) { jj_lasttokens[jj_endpos++] = kind; } else if (jj_endpos != 0) { jj_expentry = new int[jj_endpos]; for (int i = 0; i < jj_endpos; i++) { jj_expentry[i] = jj_lasttokens[i]; } jj_entries_loop: for (java.util.Iterator it = jj_expentries.iterator(); it.hasNext();) { int[] oldentry = (int[])(it.next()); if (oldentry.length == jj_expentry.length) { for (int i = 0; i < jj_expentry.length; i++) { if (oldentry[i] != jj_expentry[i]) { continue jj_entries_loop; } } jj_expentries.add(jj_expentry); break jj_entries_loop; } } if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; } } /** Generate ParseException. */ public ParseException generateParseException() { jj_expentries.clear(); boolean[] la1tokens = new boolean[29]; if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; } for (int i = 0; i < 9; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1<<j)) != 0) { la1tokens[j] = true; } } } } for (int i = 0; i < 29; i++) { if (la1tokens[i]) { jj_expentry = new int[1]; jj_expentry[0] = i; jj_expentries.add(jj_expentry); } } jj_endpos = 0; jj_rescan_token(); jj_add_error_token(0, 0); int[][] exptokseq = new int[jj_expentries.size()][]; for (int i = 0; i < jj_expentries.size(); i++) { exptokseq[i] = (int[])jj_expentries.get(i); } return new ParseException(token, exptokseq, tokenImage); } /** Enable tracing. */ final public void enable_tracing() { } /** Disable tracing. */ final public void disable_tracing() { } private void jj_rescan_token() { jj_rescan = true; for (int i = 0; i < 2; i++) { try { JJCalls p = jj_2_rtns[i]; do { if (p.gen > jj_gen) { jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; switch (i) { case 0: jj_3_1(); break; case 1: jj_3_2(); break; } } p = p.next; } while (p != null); } catch(LookaheadSuccess ls) { } } jj_rescan = false; } private void jj_save(int index, int xla) { JJCalls p = jj_2_rtns[index]; while (p.gen > jj_gen) { if (p.next == null) { p = p.next = new JJCalls(); break; } p = p.next; } p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; } static final class JJCalls { int gen; Token first; int arg; JJCalls next; } }