ref #6762 Fix session handling when creating new character
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 12 Jul 2017 12:02:29 +0000 (14:02 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 12 Jul 2017 12:02:29 +0000 (14:02 +0200)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java

index 246f868cc1bc8fe98fc5602d82e9dff14853594f..bea44ceecbe9a76fbdc1891d67430165dc9525b6 100644 (file)
@@ -12,19 +12,17 @@ package eu.etaxonomy.taxeditor.editor.workingSet;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
-import javax.inject.Named;
 
-import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.di.Persist;
 import org.eclipse.e4.ui.model.application.ui.MDirtyable;
-import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -42,12 +40,13 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
+import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.Character;
 import eu.etaxonomy.cdm.model.description.FeatureNode;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
@@ -198,16 +197,25 @@ public class CharacterEditor implements ICdmEntitySessionEnabled, ISelectionChan
                             "You have to select a structure, a property and a feature tree to perform this action.");
                     return;
                 }
-                //get selected structure and property
-                FeatureNode structureNode = (FeatureNode) ((TreeSelection)structureTreeSelection).getFirstElement();
-                FeatureNode propertyNode = (FeatureNode) ((TreeSelection)propertyTreeSelection).getFirstElement();
-                //create new Character
-                String label = structureNode.getFeature().toString()+" "+propertyNode.getFeature().toString();
-                Character character = Character.NewInstance(structureNode, propertyNode, null, label, label);
-
-                //add new Character to feature tree
-                FeatureNode parent = ((FeatureTree) characterTreeEditorComposite.getViewer().getInput()).getRoot();
-                CdmStore.getService(IFeatureNodeService.class).addChildFeaturNode(parent.getUuid(), character.getUuid());
+                //get selected structures and properties
+                Iterator<FeatureNode> structureIterator = ((TreeSelection)structureTreeSelection).iterator();
+
+                //create all combinations of structures and properties
+                while(structureIterator.hasNext()){
+                    FeatureNode structureNode = structureIterator.next();
+                    Iterator<FeatureNode> propertiesIterator = ((TreeSelection)propertyTreeSelection).iterator();
+                    while(propertiesIterator.hasNext()){
+                        FeatureNode propertyNode = propertiesIterator.next();
+                        //create new Character
+                        String label = structureNode.getFeature().generateTitle()+" "+propertyNode.getFeature().generateTitle();
+                        Character character = Character.NewInstance(structureNode, propertyNode, "", label, label);
+                        character = HibernateProxyHelper.deproxy(CdmStore.getService(ITermService.class).merge(character), Character.class);
+
+                        //add new Character to feature tree
+                        FeatureNode parent = ((FeatureTree) characterTreeEditorComposite.getViewer().getInput()).getRoot();
+                        CdmStore.getService(IFeatureNodeService.class).addChildFeatureNode(parent.getUuid(), character.getUuid());
+                    }
+                }
 
                 setDirty(true);
                 characterTreeEditorComposite.getViewer().refresh();