ref #8450 Check for duplicate features in matrix startup
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / matrix / CharacterMatrix.java
index e498d1b07d015179d4d7effe9d0909473c1d8ea5..ad2c0b0bbfe93eb5298134a1b31540310d239b5c 100644 (file)
@@ -11,6 +11,7 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -282,11 +283,11 @@ public class CharacterMatrix extends Composite {
 
     private List<Feature> initFeatureList(TermNode<Feature> node){
         List<Feature> features = new ArrayList<>();
-        node.getChildNodes().forEach(childNode->
-                {
-                    features.add(childNode.getTerm());
-                    features.addAll(initFeatureList(childNode));
-                });
+        List<TermNode<Feature>> childNodes = node.getChildNodes();
+        for (TermNode<Feature> childNode : childNodes) {
+            features.add(childNode.getTerm());
+            features.addAll(initFeatureList(childNode));
+        }
         return features;
     }
 
@@ -295,6 +296,14 @@ public class CharacterMatrix extends Composite {
         TermTree<Feature> tree = getDescriptiveDataSet().getDescriptiveSystem();
         features = initFeatureList(tree.getRoot());
 
+        Set<Feature> duplicateFeatures = features.stream().filter(i -> Collections.frequency(features, i) >1)
+        .collect(Collectors.toSet());
+
+        if (!duplicateFeatures.isEmpty()) {
+            throw new IllegalArgumentException("Duplicate features found: "
+                    + duplicateFeatures.stream().map(feature -> feature.getLabel()).collect(Collectors.joining(",")));
+        }
+
         //init state data for categorical features
         features.forEach(feature->fetchSupportedStates(feature));