Refactor Argeo API
[gpl/argeo-slc.git] / org.argeo.api.slc / src / org / argeo / api / slc / execution / RefSpecAttribute.java
diff --git a/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefSpecAttribute.java b/org.argeo.api.slc/src/org/argeo/api/slc/execution/RefSpecAttribute.java
new file mode 100644 (file)
index 0000000..8096504
--- /dev/null
@@ -0,0 +1,62 @@
+package org.argeo.api.slc.execution;
+
+import java.util.List;
+
+/** A spec attribute whose value is a reference to a full fledged object. */
+public class RefSpecAttribute extends AbstractSpecAttribute implements
+               Cloneable {
+       private static final long serialVersionUID = -3427797452955753574L;
+       private transient Class<?> targetClass = String.class;
+       /** Read only. */
+       private String targetClassName;
+       private transient Object value = null;
+
+       /** List to be chosen from */
+       private List<RefValueChoice> choices = null;
+
+       public Object getValue() {
+               return value;
+       }
+
+       public void setValue(Object value) {
+               this.value = value;
+       }
+
+       /** Default is {@link String} */
+       public Class<?> getTargetClass() {
+               return targetClass;
+       }
+
+       public void setTargetClass(Class<?> targetClass) {
+               this.targetClass = targetClass;
+               this.targetClassName = targetClass.getName();
+       }
+
+       public String getTargetClassName() {
+               return targetClassName;
+       }
+
+       /** @return can be null */
+       public List<RefValueChoice> getChoices() {
+               return choices;
+       }
+
+       public void setChoices(List<RefValueChoice> choices) {
+               this.choices = choices;
+       }
+
+       @Override
+       protected Object clone() throws CloneNotSupportedException {
+               RefSpecAttribute rsa = new RefSpecAttribute();
+               rsa.setTargetClass(targetClass);
+               rsa.setChoices(choices);
+               return rsa;
+       }
+
+       @Override
+       public String toString() {
+               return "Ref spec attribute [" + targetClass + "]"
+                               + (value != null ? "=" + value : "");
+       }
+
+}