ref #6694 Add CdmEntitySessionHandling to feature tree editor
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 21 Jun 2017 06:31:37 +0000 (08:31 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 21 Jun 2017 08:00:11 +0000 (10:00 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java

index c5cb418675b64c21237d003107bd263c6ab58dc5..6743a3e6207318c941451f6fdbbcf42f2c8d7ccf 100644 (file)
@@ -9,9 +9,15 @@
 
 package eu.etaxonomy.taxeditor.featuretree.e4;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Named;
 
@@ -42,6 +48,8 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.FeatureNode;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
 
@@ -51,11 +59,13 @@ import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
  * @date 06.06.2017
  *
  */
-public class FeatureTreeEditor implements
+public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
                ModifyListener, ISelectionChangedListener {
 
     private ConversationHolder conversation;
 
+    private ICdmEntitySession cdmEntitySession;
+
     @Inject
     private ESelectionService selService;
 
@@ -74,6 +84,9 @@ public class FeatureTreeEditor implements
         if(conversation==null){
             conversation = CdmStore.createConversation();
         }
+        if (CdmStore.isActive()) {
+            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+        }
     }
 
        /** {@inheritDoc} */
@@ -137,14 +150,63 @@ public class FeatureTreeEditor implements
         if(conversation!=null && !conversation.isBound()){
             conversation.bind();
         }
+        if(cdmEntitySession != null) {
+            cdmEntitySession.bind();
+        }
        }
 
        @Persist
        public void save(){
-           CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(featureTree);
-           setDirty(false);
+        if (!conversation.isBound()) {
+            conversation.bind();
+        }
+
+        // commit the conversation and start a new transaction immediately
+        conversation.commit(true);
+
+        CdmStore.getService(IFeatureTreeService.class).merge(featureTree);
+
+        this.setDirty(false);
+       }
+
+       @PreDestroy
+       public void dispose(){
+        if(conversation!=null){
+            conversation.close();
+        }
+        if(cdmEntitySession != null) {
+            cdmEntitySession.dispose();
+        }
        }
 
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+        return cdmEntitySession;
+    }
+
+    @Override
+    public Map<Object, List<String>> getPropertyPathsMap() {
+        List<String> propertyPaths = Arrays.asList(new String[] {
+                "children", //$NON-NLS-1$
+                "feature", //$NON-NLS-1$
+                "featureTree", //$NON-NLS-1$
+        });
+        Map<Object, List<String>> propertyPathMap =
+                new HashMap<Object, List<String>>();
+        propertyPathMap.put(FeatureNode.class,propertyPaths);
+        return propertyPathMap;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public List<FeatureTree> getRootEntities() {
+        List<FeatureTree> root = new ArrayList<>();
+        root.add(featureTree);
+        return root;
+    }
+
        private class AddButtonListener extends SelectionAdapter {
                @Override
                public void widgetSelected(SelectionEvent e) {