RuleModel m = new RuleModel();
m.name = "and composite complex";
FactPattern p = new FactPattern( "Goober" );
m.addLhsItem( p );
CompositeFieldConstraint comp = new CompositeFieldConstraint();
comp.setCompositeJunctionType( CompositeFieldConstraint.COMPOSITE_TYPE_AND );
p.addConstraint( comp );
final SingleFieldConstraint sfc1 = new SingleFieldConstraint();
sfc1.setFactType( "Goober" );
sfc1.setFieldName( "gooField" );
sfc1.setFieldType( DataType.TYPE_STRING );
sfc1.setConstraintValueType( SingleFieldConstraint.TYPE_LITERAL );
sfc1.setValue( "gooValue" );
sfc1.setOperator( "==" );
comp.addConstraint( sfc1 );
final SingleFieldConstraint sfc2 = new SingleFieldConstraint();
sfc2.setFactType( "Goober" );
sfc2.setFieldName( "fooField" );
sfc2.setFieldType( DataType.TYPE_OBJECT );
sfc2.setConstraintValueType( SingleFieldConstraint.TYPE_LITERAL );
sfc2.setOperator( "!= null" );
comp.addConstraint( sfc2 );
final SingleFieldConstraint sfc3 = new SingleFieldConstraint();
sfc1.setFactType( "Bar" );
sfc3.setFieldName( "barField" );
sfc3.setParent( sfc2 );
sfc3.setFieldType( DataType.TYPE_STRING );
sfc3.setConstraintValueType( SingleFieldConstraint.TYPE_LITERAL );
sfc3.setValue( "barValue" );
sfc3.setOperator( "==" );
comp.addConstraint( sfc3 );
final SingleFieldConstraint sfc4 = new SingleFieldConstraint();
sfc4.setFactType( "Goober" );
sfc4.setFieldName( "zooField" );
sfc4.setFieldType( DataType.TYPE_STRING );