private void visitDSLSentence( final DSLSentence sentence ) { String text = sentence.getDefinition(); parseStringPattern( text ); }
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 ); } }
/** * 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 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 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; }
String dslDefinition = sentence.getDefinition(); List<DSLVariableValue> dslValues = sentence.getValues(); int index = 0;
assertEquals( dsl.getDefinition(), dslDefinition ); assertEquals( dslDefinition, dslSentence.getDefinition() ); assertEquals( 1, dslSentence.getValues().size() ); assertTrue( dslSentence.getValues().get( 0 ) instanceof DSLComplexVariableValue );
@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 ) ); }