/** * This is used by the GUI when adding a sentence to LHS or RHS. * @return */ public DSLSentence copy() { final DSLSentence copy = new DSLSentence(); copy.drl = getDrl(); copy.definition = getDefinition(); copy.values = mapCopy(getValues()); return copy; }
private DSLSentence toDSLSentence(final List<SimpleDSLSentence> simpleDslSentences, final String dslLine) { DSLSentence dslSentence = new DSLSentence(); for (SimpleDSLSentence simpleDslSentence : simpleDslSentences) { String dslPattern = simpleDslSentence.getDsl(); // Dollar breaks the matcher, need to escape them. dslPattern = dslPattern.replace("$", "\\$"); //A DSL Pattern can contain Regex itself, for example "When the ages is less than {num:1?[0-9]?[0-9]}" String regex = dslPattern.replaceAll("\\{.*?\\}", "(.*)"); Matcher matcher = Pattern.compile(regex).matcher(dslLine); if (matcher.matches()) { dslPattern = dslPattern.replace("\\$", "$"); dslSentence.setDrl(simpleDslSentence.getDrl()); dslSentence.setDefinition(dslPattern); for (int i = 0; i < matcher.groupCount(); i++) { dslSentence.getValues().get(i).setValue(matcher.group(i + 1)); } return dslSentence; } } dslSentence.setDefinition(dslLine); return dslSentence; }
private DSLSentence visitDSLSentence(final DSLSentence sentence) { return sentence.copy(); }
private void parseDefinition() { values = new ArrayList<DSLVariableValue>(); if (getDefinition() == null) { return; } int variableStart = definition.indexOf("{"); while (variableStart >= 0) { int variableEnd = getIndexForEndOfVariable(definition, variableStart); String variable = definition.substring(variableStart + 1, variableEnd); values.add(parseValue(variable)); variableStart = definition.indexOf("{", variableEnd); } }
private DSLSentence buildDslSentence() { DSLSentence dsl = new DSLSentence(); dsl.setDrl( "Person( sex == {$sex} )" ); dsl.setDefinition( "Person is {$sex:ENUM:Person.sex}" ); return dsl; }
String dslDefinition = sentence.getDefinition(); List<DSLVariableValue> dslValues = sentence.getValues(); int index = 0;
private TemplateModel getComplexModel() { final TemplateModel m = new TemplateModel(); m.addAttribute(new RuleAttribute("no-loop", "true")); final FactPattern pat = new FactPattern("Person"); pat.setBoundName("p1"); final SingleFieldConstraint con = new SingleFieldConstraint(); con.setFactType("Person"); con.setFieldBinding("f1"); con.setFieldName("age"); con.setOperator("<"); con.setValue("42"); pat.addConstraint(con); m.addLhsItem(pat); final CompositeFactPattern comp = new CompositeFactPattern("not"); comp.addFactPattern(new FactPattern("Cancel")); m.addLhsItem(comp); final ActionUpdateField set = new ActionUpdateField(); set.setVariable("p1"); set.addFieldValue(new ActionFieldValue("status", "rejected", DataType.TYPE_STRING)); m.addRhsItem(set); final ActionRetractFact ret = new ActionRetractFact("p1"); m.addRhsItem(ret); final DSLSentence sen = new DSLSentence(); sen.setDefinition("Send an email to {administrator}"); m.addRhsItem(sen); return m; }
public Map<String, String> getEnumFieldValueMap() { if (this.values == null) { parseDefinition(); if (getValues().isEmpty()) { return fieldValueMap; int iVariable = 0; while (variableStart >= 0) { int variableEnd = getIndexForEndOfVariable(definition, variableStart); String variable = definition.substring(variableStart + 1,
/** * This will strip off any residual "{" stuff... */ public String toString() { getDefinition(); StringBuilder result = new StringBuilder(definition); int variableStart = definition.indexOf("{"); while (variableStart >= 0) { int variableEnd = getIndexForEndOfVariable(result.toString(), variableStart); String variable = result.substring(variableStart + 1, variableEnd); int variableNameEnd = variable.indexOf(":"); if (variableNameEnd == -1) { variableNameEnd = variable.length(); } String variableName = variable.substring(0, variableNameEnd); result.replace(variableStart + 1, variableEnd, variableName); variableEnd = variableEnd - variable.length() + variableName.length(); variableStart = result.indexOf("{", variableEnd); } return result.toString().replace("\\n", "\n"); }
/** * This will strip off any "{" stuff, substituting values accordingly */ public String interpolate() { getValues(); if (definition == null) { return ""; } int variableStart = definition.indexOf("{"); if (variableStart < 0) { return definition; } int index = 0; int variableEnd = 0; StringBuilder sb = new StringBuilder(); while (variableStart >= 0) { sb.append(definition.substring(variableEnd, variableStart)); variableEnd = getIndexForEndOfVariable(definition, variableStart) + 1; variableStart = definition.indexOf("{", variableEnd); sb.append(values.get(index++).getValue()); } if (variableEnd < definition.length()) { sb.append(definition.substring(variableEnd)); } return sb.toString(); }
/** * This will go through the widgets and extract the values */ protected void updateSentence() { int iVariable = 0; for (Iterator<Widget> iter = widgets.iterator(); iter.hasNext(); ) { Widget wid = iter.next(); if (wid instanceof DSLVariableEditor) { sentence.getValues().set(iVariable++, ((DSLVariableEditor) wid).getSelectedValue()); } } this.setModified(true); }
private void visitDSLSentence(final DSLSentence sentence) { String text = sentence.getDefinition(); parseStringPattern(text); }
private void addDSLSentences() { //DSL might be prohibited (e.g. editing a DRL file. Only DSLR files can contain DSL) if (!ruleModeller.isDSLEnabled()) { return; } for (final DSLSentence sen : oracle.getDSLConditions()) { final String sentence = sen.toString(); final String key = "DSL" + sentence; choices.addItem(sentence, key); cmds.put(key, new Command() { public void execute() { addNewDSLLhs(sen, Integer.parseInt(positionCbo.getValue(positionCbo.getSelectedIndex()))); hide(); } }); } }
private boolean isMultipleSelect(final String variableDef, final DSLSentence sentence) { final String variableName = variableDef.substring(0, variableDef.indexOf(":")); final String variableNameMarker = "{" + variableName + "}"; final String drl = sentence.getDrl(); final String normalizedDrl = drl.trim().replaceAll("\"", "").replaceAll(" +", " "); final String normalizedDrlFragment = normalizedDrl.substring(0, normalizedDrl.indexOf(variableNameMarker)); for (String listOperator : OperatorsOracle.EXPLICIT_LIST_OPERATORS) { final String listOperatorMarker = " " + listOperator + " "; if (normalizedDrlFragment.indexOf(listOperatorMarker) == normalizedDrlFragment.length() - listOperatorMarker.length()) { return true; } } return false; }
if (entry.getSection() == DSLMappingEntry.CONDITION) { final DSLMappingEntry definition = entry; final DSLSentence sentence = new DSLSentence(); sentence.setDrl(definition.getMappingValue()); sentence.setDefinition(definition.getMappingKey()); conditionSentences.add(sentence); } else if (entry.getSection() == DSLMappingEntry.CONSEQUENCE) { final DSLMappingEntry definition = entry; final DSLSentence sentence = new DSLSentence(); sentence.setDrl(definition.getMappingValue()); sentence.setDefinition(definition.getMappingKey()); actionSentences.add(sentence);
String dslDefinition = sentence.getDefinition(); List<DSLVariableValue> dslValues = sentence.getValues(); int index = 0;
/** * This will go through the widgets and extract the values */ protected void updateSentence() { int iVariable = 0; for (Iterator<Widget> iter = widgets.iterator(); iter.hasNext(); ) { Widget wid = iter.next(); if (wid instanceof DSLVariableEditor) { sentence.getValues().set(iVariable++, ((DSLVariableEditor) wid).getSelectedValue()); } } this.setModified(true); }
private void visitDSLSentence(final DSLSentence sentence) { String text = sentence.getDefinition(); parseStringPattern(text); }
void addDSLSentences() { //DSL might be prohibited (e.g. editing a DRL file. Only DSLR files can contain DSL) if (!ruleModeller.isDSLEnabled()) { return; } for (final DSLSentence sen : oracle.getDSLActions()) { final String sentence = sen.toString(); final String key = "DSL" + sentence; choices.addItem(sentence, key); cmds.put(key, new Command() { public void execute() { addNewDSLRhs(sen, Integer.parseInt(positionCbo.getValue(positionCbo.getSelectedIndex()))); hide(); } }); } }
private boolean isMultipleSelect(final String variableDef, final DSLSentence sentence) { final String variableName = variableDef.substring(0, variableDef.indexOf(":")); final String variableNameMarker = "{" + variableName + "}"; final String drl = sentence.getDrl(); final String normalizedDrl = drl.trim().replaceAll("\"", "").replaceAll(" +", " "); final String normalizedDrlFragment = normalizedDrl.substring(0, normalizedDrl.indexOf(variableNameMarker)); for (String listOperator : OperatorsOracle.EXPLICIT_LIST_OPERATORS) { final String listOperatorMarker = " " + listOperator + " "; if (normalizedDrlFragment.indexOf(listOperatorMarker) == normalizedDrlFragment.length() - listOperatorMarker.length()) { return true; } } return false; }