package org.flexo.model;
import java.util.List;
import org.flexo.model.impl.FlexoProcessImpl;
import org.openflexo.model.annotations.Adder;
import org.openflexo.model.annotations.CloningStrategy;
import org.openflexo.model.annotations.CloningStrategy.StrategyType;
import org.openflexo.model.annotations.Embedded;
import org.openflexo.model.annotations.Finder;
import org.openflexo.model.annotations.Getter;
import org.openflexo.model.annotations.Getter.Cardinality;
import org.openflexo.model.annotations.ImplementationClass;
import org.openflexo.model.annotations.Import;
import org.openflexo.model.annotations.Imports;
import org.openflexo.model.annotations.Initializer;
import org.openflexo.model.annotations.IntegrityConstraint;
import org.openflexo.model.annotations.IntegrityConstraints;
import org.openflexo.model.annotations.ModelEntity;
import org.openflexo.model.annotations.PastingPoint;
import org.openflexo.model.annotations.Remover;
import org.openflexo.model.annotations.Setter;
import org.openflexo.model.annotations.XMLAttribute;
import org.openflexo.model.annotations.XMLElement;
@ModelEntity
@ImplementationClass(FlexoProcessImpl.class)
@XMLElement(xmlTag = "FlexoProcess")
@IntegrityConstraints({ @IntegrityConstraint("foo > 0"), @IntegrityConstraint("name != null") })
@Imports({ @Import(ActivityNode.class), @Import(StartNode.class), @Import(EndNode.class), @Import(TokenEdge.class) })
public interface FlexoProcess extends WKFObject {
public static final String FOO = "foo";
public static final String NODES = "nodes";
@Override
@Initializer
public FlexoModelObject init(String flexoId);
@Getter(value = FOO, defaultValue = "4")
@XMLAttribute(xmlTag = FOO)
public int getFoo();
@Setter(FOO)
public void setFoo(int foo);
@Getter(value = NODES, cardinality = Cardinality.LIST, inverse = WKFObject.PROCESS)
@XMLElement(primary = true)
@CloningStrategy(StrategyType.CLONE)
@Embedded
public List<AbstractNode> getNodes();
@Setter(NODES)
public void setNodes(List<AbstractNode> nodes);
@Adder(NODES)
@PastingPoint
public void addToNodes(AbstractNode node);
@Remover(NODES)
public void removeFromNodes(AbstractNode node);
@Finder(attribute = AbstractNode.NAME, collection = NODES)
public AbstractNode getNodeNamed(String name);
@Finder(attribute = AbstractNode.NAME, collection = NODES, isMultiValued = true)
public List<AbstractNode> getNodesNamed(String name);
public Edge getEdgeNamed(String name);
}