# Update the attributes in "new instance" objects when they # are connected to DomainObjects. package org.openiaml.model.drools.rules.runtime.new_instance #list any import classes here. import org.openiaml.model.drools.*; import org.openiaml.model.*; import org.openiaml.model.model.*; // for ModelPackage import org.openiaml.model.model.domain.*; import org.openiaml.model.model.wires.*; import org.openiaml.model.model.operations.*; import org.openiaml.model.inference.*; // for handler #declare any global variables here global EcoreCreateElementsHelper handler; global DroolsInsertionQueue queue; global DroolsHelperFunctions functions; rule "Refresh NewInstanceWire Instance Object mappings" when object : DomainObject ( ) instance : DomainObjectInstance ( ) wire : NewInstanceWire( overridden == false, from == object, to == instance ) attribute : DomainAttribute ( eContainer == object ) not ( DomainAttributeInstance( eContainer == instance, name == attribute.name )) then # create a new one DomainAttributeInstance attr = handler.generatedDomainAttributeInstance(wire, instance); handler.setName(attr, attribute.getName()); queue.add(attr, drools); # mark it as an extension ExtendsWire w = handler.generatedExtendsWire(wire, instance, attr, attribute); queue.add(w, drools); end rule "Refresh SelectWire Instance Object mappings" when object : DomainObject ( ) instance : DomainObjectInstance ( ) wire : SelectWire( overridden == false, from == object, to == instance ) attribute : DomainAttribute ( eContainer == object ) not ( DomainAttributeInstance( eContainer == instance, name == attribute.name )) then # create a new one DomainAttributeInstance attr = handler.generatedDomainAttributeInstance(wire, instance); handler.setName(attr, attribute.getName()); queue.add(attr, drools); # mark it as an extension ExtendsWire w = handler.generatedExtendsWire(wire, instance, attr, attribute); queue.add(w, drools); end rule "Create 'save' operation for DomainObjectInstances" when instance : DomainObjectInstance ( ) not ( Operation( eContainer == instance, name == "save" )) then # create a new one CompositeOperation op = handler.generatedCompositeOperation(instance, instance); handler.setName(op, "save"); queue.add(op, drools); end rule "Create 'exists?' operation for DomainObjectInstances" when instance : DomainObjectInstance ( ) not ( DecisionOperation( eContainer == instance, name == "exists?" )) then # create a new one DecisionOperation op = handler.generatedDecisionOperation(instance, instance); handler.setName(op, "exists?"); queue.add(op, drools); end rule "Create 'exists?' condition for DomainObjectInstances" when instance : DomainObjectInstance ( ) not ( CompositeCondition( eContainer == instance, name == "exists?" )) then # create a new one CompositeCondition condition = handler.generatedCompositeCondition(instance, instance); handler.setName(condition, "exists?"); queue.add(condition, drools); end rule "Create 'edit' event for DomainAttributeInstances" when instance : DomainAttributeInstance ( ) not ( EventTrigger( eContainer == instance, name == "edit" )) then # create a new one EventTrigger event = handler.generatedEventTrigger(instance, instance); handler.setName(event, "edit"); queue.add(event, drools); end rule "Create 'fieldValue' value for DomainAttributeInstances" when instance : DomainAttributeInstance ( ) not ( ApplicationElementProperty( eContainer == instance, name == "fieldValue" )) then # create a new one ApplicationElementProperty value = handler.generatedApplicationElementProperty(instance, instance); handler.setName(value, "fieldValue"); queue.add(value, drools); end rule "Create the contents of the 'exists?' condition" when instance : DomainObjectInstance ( ) condition : CompositeCondition( eContainer == instance, name == "exists?" ) existsOp : DecisionOperation( eContainer == instance, name == "exists?" ) not ( StartNode( eContainer == condition )) then # create contents StartNode start = handler.generatedStartNode(condition, condition); queue.add(start, drools); FinishNode finish = handler.generatedFinishNode(condition, condition); queue.add(finish, drools); CancelNode cancel = handler.generatedCancelNode(condition, condition); queue.add(cancel, drools); # virtual operation call OperationCallNode opCall = handler.generatedOperationCallNode(condition, condition); handler.setName(opCall, "exists?"); queue.add(opCall, drools); RunInstanceWire runWire = handler.generatedRunInstanceWire(condition, condition, opCall, existsOp); handler.setName(runWire, "run"); queue.add(runWire, drools); ExecutionEdge edge1 = handler.generatedExecutionEdge(condition, condition); handler.setFrom(edge1, start); handler.setTo(edge1, opCall); queue.add(edge1, drools); ExecutionEdge edge2 = handler.generatedExecutionEdge(condition, condition); handler.setFrom(edge2, opCall); handler.setTo(edge2, finish); queue.add(edge2, drools); ExecutionEdge edge3 = handler.generatedExecutionEdge(condition, condition); handler.setFrom(edge3, opCall); handler.setTo(edge3, cancel); queue.add(edge3, drools); end