@Override public String getSource( final Path path, final RuleModel model ) { return new StringBuilder().append( BRDRLPersistence.getInstance().marshal( model ) ).toString(); }
private void addPatternToComposite( ConditionalElementDescr conditionalDescr, CompositeFactPattern comp, Map<String, String> boundParams ) { for ( Object descr : conditionalDescr.getDescrs() ) { if ( descr instanceof PatternDescr ) { comp.addFactPattern( parsePatternDescr( (PatternDescr) descr, boundParams ) ); } else if ( descr instanceof ConditionalElementDescr ) { addPatternToComposite( (ConditionalElementDescr) descr, comp, boundParams ); } } }
String dslLine = expandedDRLInfo.dslStatementsInRhs.get( lineCounter ); while ( dslLine != null ) { m.addRhsItem( toDSLSentence( expandedDRLInfo.rhsDslPatterns, dslLine ) ); dslLine = expandedDRLInfo.dslStatementsInRhs.get( ++lineCounter ); String fact = unwrapParenthesis( line ); String type = getStatementType( fact, factsType ); if ( type != null ) { ActionInsertLogicalFact action = new ActionInsertLogicalFact( type ); m.addRhsItem( action ); if ( factsType.containsKey( fact ) ) { addSettersToAction( setStatements, fact, action, isJavaDialect ); String fact = unwrapParenthesis( line ); String type = getStatementType( fact, factsType ); if ( type != null ) { ActionInsertFact action = new ActionInsertFact( type ); if ( factsType.containsKey( fact ) ) { action.setBoundName( fact ); addSettersToAction( setStatements, fact, action, isJavaDialect ); String variable = unwrapParenthesis( line ); ActionUpdateField action = new ActionUpdateField(); action.setVariable( variable ); m.addRhsItem( action ); addSettersToAction( setStatements, variable, action, isJavaDialect ); } else if ( line.startsWith( "retract" ) ) { String variable = unwrapParenthesis( line );
private void addSettersToAction( List<String> setters, ActionFieldList action, boolean isJavaDialect ) { if ( setters != null ) { for ( String statement : setters ) { int dotPos = statement.indexOf( '.' ); int argStart = statement.indexOf( '(' ); String methodName = statement.substring( dotPos + 1, argStart ).trim(); String field = getSettedField( methodName ); String value = unwrapParenthesis( statement ); String dataType = inferDataType( value, isJavaDialect ); action.addFieldValue( buildFieldValue( isJavaDialect, field, value, dataType ) ); } } }
private IFactPattern parsePatternDescr( PatternDescr pattern, Map<String, String> boundParams ) { if ( pattern.getSource() != null ) { return parsePatternSource( pattern, pattern.getSource(), boundParams ); } return getFactPattern( pattern, boundParams ); }
lhsStatements.add( oldLine + " " + line ); lhsParenthesisBalance += paranthesisBalance(line); } else { rhsStatements.add( line ); return createExpandedDRLInfo(hasDsl, drl, thenLine, lhsStatements, rhsStatements);
AccumulateDescr accumulate = (AccumulateDescr) patternSource; FromAccumulateCompositeFactPattern fac = new FromAccumulateCompositeFactPattern(); fac.setSourcePattern( parseBaseDescr( accumulate.getInput(), boundParams ) ); fac.setFactPattern( new FactPattern( pattern.getObjectType() ) ); for ( AccumulateDescr.AccumulateFunctionCallDescr func : accumulate.getFunctions() ) { CollectDescr collect = (CollectDescr) patternSource; FromCollectCompositeFactPattern fac = new FromCollectCompositeFactPattern(); fac.setRightPattern( parseBaseDescr( collect.getInputPattern(), boundParams ) ); fac.setFactPattern( new FactPattern( pattern.getObjectType() ) ); return fac; FromEntryPointFactPattern fep = new FromEntryPointFactPattern(); fep.setEntryPointName( entryPoint.getText() ); fep.setFactPattern( getFactPattern( pattern, boundParams ) ); return fep;
private void addSettersToAction( Map<String, List<String>> setStatements, String variable, ActionFieldList action, boolean isJavaDialect ) { addSettersToAction( setStatements.remove( variable ), action, isJavaDialect ); }
private ExpandedDRLInfo parseDSLs( ExpandedDRLInfo expandedDRLInfo, String[] dsls ) { for ( String dsl : dsls ) { for ( String line : dsl.split( "\n" ) ) { String dslPattern = line.trim(); if ( dslPattern.length() > 0 ) { if ( dslPattern.startsWith( "[when]" ) ) { expandedDRLInfo.lhsDslPatterns.add( extractDslPattern( dslPattern.substring( "[when]".length() ) ) ); } else if ( dslPattern.startsWith( "[then]" ) ) { expandedDRLInfo.rhsDslPatterns.add( extractDslPattern( dslPattern.substring( "[then]".length() ) ) ); } else if ( dslPattern.startsWith( "[]" ) ) { String pattern = extractDslPattern( dslPattern.substring( "[]".length() ) ); expandedDRLInfo.lhsDslPatterns.add( pattern ); expandedDRLInfo.rhsDslPatterns.add( pattern ); } } } } return expandedDRLInfo; }
private ActionFieldValue buildFieldValue( boolean isJavaDialect, String field, String value, String dataType ) { if ( value.contains( "wiWorkItem.getResult" ) ) { field = field.substring( 0, 1 ).toUpperCase() + field.substring( 1 ); String wiParam = field.substring( "Results".length() ); if ( wiParam.equals( "BooleanResult" ) ) { return new ActionWorkItemFieldValue( field, DataType.TYPE_BOOLEAN, "WorkItem", wiParam, Boolean.class.getName() ); } else if ( wiParam.equals( "StringResult" ) ) { return new ActionWorkItemFieldValue( field, DataType.TYPE_STRING, "WorkItem", wiParam, String.class.getName() ); } else if ( wiParam.equals( "IntegerResult" ) ) { return new ActionWorkItemFieldValue( field, DataType.TYPE_NUMERIC_INTEGER, "WorkItem", wiParam, Integer.class.getName() ); } else if ( wiParam.equals( "FloatResult" ) ) { return new ActionWorkItemFieldValue( field, DataType.TYPE_NUMERIC_FLOAT, "WorkItem", wiParam, Float.class.getName() ); } } return new ActionFieldValue( field, adjustParam( dataType, value, isJavaDialect ), dataType ); }
private CompositeFactPattern parseExistentialElementDescr( ConditionalElementDescr conditionalDescr, Map<String, String> boundParams ) { CompositeFactPattern comp = conditionalDescr instanceof NotDescr ? new CompositeFactPattern( CompositeFactPattern.COMPOSITE_TYPE_NOT ) : conditionalDescr instanceof OrDescr ? new CompositeFactPattern( CompositeFactPattern.COMPOSITE_TYPE_OR ) : new CompositeFactPattern( CompositeFactPattern.COMPOSITE_TYPE_EXISTS ); addPatternToComposite( conditionalDescr, comp, boundParams ); return comp; }
@Override public String getSource( final Path path, final RuleModel model ) { return new StringBuilder().append( BRDRLPersistence.getInstance().marshal( model ) ).toString(); }
@Before public void setUp() throws Exception { brlPersistence = BRDRLPersistence.getInstance(); }
@Override public RuleModel load( final Path path ) { final String drl = ioService.readAllString( paths.convert( path ) ); final String[] dsls = loadDslsForPackage( path ); final List<String> globals = loadGlobalsForPackage( path ); //Signal opening to interested parties resourceOpenedEvent.fire( new ResourceOpenedEvent( path ) ); return BRDRLPersistence.getInstance().unmarshalUsingDSL( drl, globals, dsls ); }
@Test public void testDefaultMVEL() { RuleModel m = new RuleModel(); String s = BRDRLPersistence.getInstance().marshal( m ); assertTrue( s.indexOf( "mvel" ) > -1 ); m.addAttribute( new RuleAttribute( "dialect", "goober" ) ); s = BRDRLPersistence.getInstance().marshal( m ); assertFalse( s.indexOf( "mvel" ) > -1 ); assertTrue( s.indexOf( "goober" ) > -1 ); }
@Test public void testNotMultiPatterns() throws Exception { RuleModel m = getCompositeFOL( CompositeFactPattern.COMPOSITE_TYPE_NOT ); String result = BRDRLPersistence.getInstance().marshal( m ); assertTrue( result.indexOf( "not (Person( age == 42 ) and Person( age == 43 ))" ) > 0 ); checkMarshallUnmarshall( result, m ); }
@Test public void testFieldBindingWithNoConstraints() { // to satisfy JBRULES-850 RuleModel m = getModelWithNoConstraints(); String s = BRDRLPersistence.getInstance().marshal( m ); // System.out.println(s); assertTrue( s.contains( "Person( f1 : age)" ) ); checkMarshallUnmarshall( s, m ); }
@Test public void testExistsMultiPatterns() throws Exception { RuleModel m = getCompositeFOL( CompositeFactPattern.COMPOSITE_TYPE_EXISTS ); String result = BRDRLPersistence.getInstance().marshal( m ); assertTrue( result.indexOf( "exists (Person( age == 42 ) and Person( age == 43 ))" ) > 0 ); checkMarshallUnmarshall( result, m ); }
@Test public void testInvalidComposite() throws Exception { RuleModel m = new RuleModel(); CompositeFactPattern com = new CompositeFactPattern( "not" ); m.addLhsItem( com ); String s = BRDRLPersistence.getInstance().marshal( m ); assertNotNull( s ); m.addLhsItem( new CompositeFactPattern( "or" ) ); m.addLhsItem( new CompositeFactPattern( "exists" ) ); s = BRDRLPersistence.getInstance().marshal( m ); assertNotNull( s ); }
@Test public void testLockOnActive() { RuleModel m = new RuleModel(); m.addAttribute( new RuleAttribute( "lock-on-active", "true" ) ); m.addAttribute( new RuleAttribute( "auto-focus", "true" ) ); m.addAttribute( new RuleAttribute( "duration", "42" ) ); String s = BRDRLPersistence.getInstance().marshal( m ); assertTrue( s.indexOf( "lock-on-active true" ) > -1 ); assertTrue( s.indexOf( "auto-focus true" ) > -1 ); assertTrue( s.indexOf( "duration 42" ) > -1 ); checkMarshallUnmarshall( s, m ); }