X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.slc%2Fsrc%2Forg%2Fargeo%2Fapi%2Fslc%2Fexecution%2FExecutionFlowDescriptor.java;fp=org.argeo.api.slc%2Fsrc%2Forg%2Fargeo%2Fapi%2Fslc%2Fexecution%2FExecutionFlowDescriptor.java;h=9c31f401099eea1b3bab63caf83f2d0107a95e02;hb=09c9e5093fe1353aaac344ac8a8caf2e1dcc0778;hp=0000000000000000000000000000000000000000;hpb=8ff996a3380166be2ae9cf0ef0fa22c58e11746a;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptor.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptor.java new file mode 100644 index 000000000..9c31f4010 --- /dev/null +++ b/org.argeo.api.slc/src/org/argeo/api/slc/execution/ExecutionFlowDescriptor.java @@ -0,0 +1,119 @@ +package org.argeo.api.slc.execution; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +/** + * + * Implements both archetype and implementation of a given process. + * + * At specification time, executionSpec represents the spec of the + * parameters accepted by the process, with, among others: type, default value + * and, optionally, possible values for each parameter. Thus ExecutionSpec might + * be a huge object. Note that when marshalling only a reference to a specific + * ExecutionSpec is stored in the XML to optimize performance and avoid + * redundancy between various ExecutionFlowDesciptor that might have the same + * ExecutionSpec. + * + * At runtime, we build a RealizedFlow which references an + * ExecutionFlowDescriptor. As it happens AFTER marshalling / unmarshalling + * process, the ExecutionSpec is null but we manage to retrieve the + * ExecutionSpec and store it in the RealizedFlow, whereas set values of the + * parameters are stored in the values map. + * + * Generally, values object are either a PrimitiveAccessor or a + * RefValue but can be other objects. + */ +public class ExecutionFlowDescriptor implements Serializable, Cloneable { + private static final long serialVersionUID = 7101944857038041216L; + private String name; + private String description; + private String path; + private Map values; + private ExecutionSpec executionSpec; + + public ExecutionFlowDescriptor() { + } + + public ExecutionFlowDescriptor(String name, String description, + Map values, ExecutionSpec executionSpec) { + this.name = name; + this.values = values; + this.executionSpec = executionSpec; + } + + /** The referenced {@link ExecutionSpec} is NOT cloned. */ + @Override + protected Object clone() throws CloneNotSupportedException { + return new ExecutionFlowDescriptor(name, description, + new HashMap(values), executionSpec); + } + + public String getName() { + return name; + } + + /** + * @deprecated will be removed in SLC 2.x, the path should be the part of + * the name with '/' + */ + public String getPath() { + return path; + } + + /** + * @deprecated will be removed in SLC 2.0, the path should be the part of + * the name with '/' + */ + public void setPath(String path) { + this.path = path; + } + + public Map getValues() { + return values; + } + + public ExecutionSpec getExecutionSpec() { + return executionSpec; + } + + public void setName(String name) { + this.name = name; + } + + public void setValues(Map values) { + this.values = values; + } + + public void setExecutionSpec(ExecutionSpec executionSpec) { + this.executionSpec = executionSpec; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof ExecutionFlowDescriptor) + return name.equals(((ExecutionFlowDescriptor) obj).getName()); + return false; + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public String toString() { + return (path != null && !path.trim().equals("") ? path + "/" : "") + + name; + } + +}