Add name attribute to all Processes

- Override equals and hashCode for Step component
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
index eca00fa..4270f46 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
@@ -46,6 +46,7 @@
     private Map<String, OutputProcessorPort> processorOutputs = new HashMap<>();
 
     public CommandLineTool(JsonNode node) {
+        this.name = "";
         this.node = node;
         this.cwlParser = new CWLParser(node);
         this.parse();
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
index 6276278..c152b12 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
@@ -30,7 +30,7 @@
     protected Set<InputPort> insideInputPorts = new HashSet<>();
 
     protected Set<OutputPort> insideOutputPorts = new HashSet<>();
-
+    protected String name;
 
     public abstract void parse();
 
@@ -66,4 +66,13 @@
       this.insideOutputPorts = insideOutputPorts;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
 }
\ No newline at end of file
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
index f51f48b..0adb161 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
@@ -26,10 +26,12 @@
 
     public Reference() {
         source = "";
+        name = "";
     }
 
     public Reference(String src) {
         this.source = src;
+        this.name = "";
     }
 
     public void parse() {
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
index aab6b65..8ac65c2 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
@@ -35,6 +35,7 @@
     public Step() {
         inputs = new HashSet<>();
         outputs = new HashSet<>();
+        id = "";
     }
 
     public String getId() {
@@ -81,4 +82,18 @@
         return "Step " + id + ": run = " + run;
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if(this == obj) return true;
+        if(obj == null) return false;
+        if(this.getClass() != obj.getClass()) return false;
+
+        Step other = (Step) obj;
+        return other.id.equals(id) && other.run.getName().equals(run.getName()); // && other.inputs == inputs && other.outputs == outputs;
+    }
+
+    @Override
+    public int hashCode() {
+        return id.hashCode() * 13 + run.getName().hashCode() * 17;
+    }
 }
\ No newline at end of file
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
index 263455d..617aab6 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
@@ -57,8 +57,12 @@
 
     private Converter converter = new Converter();
 
-    public WorkflowProcess(InputStream stream) {
+    public WorkflowProcess() {
+        this.name = "";
+    }
 
+    public WorkflowProcess(InputStream stream) {
+        this();
         Yaml reader = new Yaml();
         ObjectMapper mapper = new ObjectMapper();
         JsonNode node = mapper.valueToTree(reader.load(stream));
@@ -68,6 +72,7 @@
     }
 
     public WorkflowProcess(JsonNode node) {
+        this();
         cwlParser = new CWLParser(node);
         this.parse();
     }