private DSLSentence visitDSLSentence( final DSLSentence sentence ) { DSLSentence clone = new DSLSentence(); clone.setDefinition( sentence.getDefinition() ); for ( DSLVariableValue value : sentence.getValues() ) { clone.getValues().add( (DSLVariableValue) visit( value ) ); } return clone; }
public void visitDSLSentence( final DSLSentence sentence ) { buf.append( indentation ); buf.append( sentence.interpolate() ); buf.append( "\n" ); }
private void addNewDSLLhs( final DSLSentence sentence, int position ) { model.addLhsItem( sentence.copy(), position ); }
/** * This is used by the GUI when adding a sentence to LHS or RHS. * @return */ public DSLSentence copy() { final DSLSentence newOne = new DSLSentence(); newOne.definition = getDefinition(); List<DSLVariableValue> variableValues = getValues(); if ( variableValues != null ) { for ( DSLVariableValue value : getValues() ) { newOne.getValues().add( value ); } } return newOne; }
private void addDSLKeywordMapping( final String definition ) { final DSLSentence sentence = new DSLSentence(); sentence.setDefinition( definition ); this.dslKeywordItems.add( sentence ); }
private DSLSentence toDSLSentence( List<String> dslPatterns, String dslLine ) { DSLSentence dslSentence = new DSLSentence(); for ( String dslPattern : dslPatterns ) { String regex = dslPattern.replaceAll( "\\{\\s*[\\:\\.\\w]+\\s*\\}", "(.*)" ); Matcher m = Pattern.compile( regex ).matcher( dslLine ); if ( m.matches() ) { dslSentence.setDefinition( dslPattern ); for ( int i = 0; i < m.groupCount(); i++ ) { dslSentence.getValues().get( i ).setValue( m.group( i + 1 ) ); } return dslSentence; } } dslSentence.setDefinition( dslLine ); return dslSentence; }
String dslDefinition = sentence.getDefinition(); List<DSLVariableValue> dslValues = sentence.getValues(); int index = 0;
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 ); } }
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(); }
private void visitDSLSentence( final DSLSentence sentence ) { String text = sentence.getDefinition(); parseStringPattern( text ); }
/** * 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 ); }
@Test public void testIsDSLEnhanced() throws Exception { RuleModel m = new RuleModel(); assertFalse( m.hasDSLSentences() ); m.addLhsItem( new FactPattern() ); assertFalse( m.hasDSLSentences() ); m.addRhsItem( new ActionSetField( "q" ) ); assertFalse( m.hasDSLSentences() ); m.addLhsItem( new DSLSentence() ); assertTrue( m.hasDSLSentences() ); m.addRhsItem( new DSLSentence() ); assertTrue( m.hasDSLSentences() ); m = new RuleModel(); m.addLhsItem( new DSLSentence() ); assertTrue( m.hasDSLSentences() ); m = new RuleModel(); m.addRhsItem( new DSLSentence() ); assertTrue( m.hasDSLSentences() ); }
private DropDownData getDropDownData() { DropDownData dropDownData = completions.getEnums( factType, factField, sentence.getEnumFieldValueMap() ); return dropDownData; }
private void addDSLAnyScopeMapping( final String definition ) { final DSLSentence sentence = new DSLSentence(); sentence.setDefinition( definition ); this.dslAnyScopeItems.add( sentence ); }
@Test public void testDSLExpansionLHS() { final String dslDefinition = "The credit rating is {rating:ENUM:Applicant.creditRating}"; final String drlExpected = "rule \"r1\"\n" + "dialect \"mvel\"\n" + "when\n" + "The credit rating is AA\n" + "then\n" + "end"; final DSLSentence dsl = new DSLSentence(); dsl.setDefinition( dslDefinition ); //The following line is normally performed by the UI when the user sets values dsl.getValues().get( 0 ).setValue( "AA" ); //Append DSL to RuleModel to check marshalling final RuleModel m = new RuleModel(); m.name = "r1"; m.addLhsItem( dsl ); final String drlActual = brlPersistence.marshal( m ); assertEqualsIgnoreWhitespace( drlExpected, drlActual ); }
@Test public void testMoreComplexRenderingWithDsl() { final RuleModel m = getComplexModel( true ); String expected = "rule \"Complex Rule\"\n" + "\tno-loop true\n" + "\tsalience -10\n" + "\tagenda-group \"aGroup\"\n" + "\tdialect \"mvel\"\n" + "\twhen\n" + "\t\t>p1 : Person( f1 : age < 42 )\n" + "\t\t>not (Cancel( )) \n" + "\tthen\n" + "\t\t>p1.setStatus( \"rejected\" );\n" + "\t\t>update( p1 );\n" + "\t\t>retract( p1 );\n" + "\t\tSend an email to administrator\n" + "end\n"; checkMarshallUnmarshall( expected, m ); String drl = brlPersistence.marshal( m ); assertEqualsIgnoreWhitespace( expected, drl ); String dslFile = "[then]Send an email to {administrator}=sendMailTo({administrator});"; RuleModel unmarshalledModel = brlPersistence.unmarshalUsingDSL( drl, null, dslFile ); IAction[] actions = unmarshalledModel.rhs; DSLSentence dslSentence = (DSLSentence) actions[ actions.length - 1 ]; assertEquals( "Send an email to {administrator}", dslSentence.getDefinition() ); assertEqualsIgnoreWhitespace( expected, brlPersistence.marshal( unmarshalledModel ) ); }
final String dslDefinition = "The credit rating is {rating:ENUM:Applicant.creditRating}"; final DSLSentence dsl = new DSLSentence(); dsl.setDefinition( dslDefinition ); final List<DSLVariableValue> values = dsl.getValues(); assertEquals( 1, values.size() ); dsl.getValues().get( 0 ).setValue( "AA" ); final String expansion = dsl.interpolate(); assertEquals( dsl.getDefinition(), dslDefinition ); assertEquals( dslDefinition, dslSentence.getDefinition() ); assertEquals( 1, dslSentence.getValues().size() ); assertTrue( dslSentence.getValues().get( 0 ) instanceof DSLComplexVariableValue ); DSLComplexVariableValue dslComplexVariableValue = (DSLComplexVariableValue) dslSentence.getValues().get( 0 ); assertEquals( "AA", dslComplexVariableValue.getValue() ); assertEquals( "ENUM:Applicant.creditRating", dslComplexVariableValue.getId() );
private void addDSLConditionSentence( final String definition ) { final DSLSentence sentence = new DSLSentence(); sentence.setDefinition( definition ); this.dslConditionSentences.add( sentence ); }