#5242, #5223 Improve performance of derivate loading and editing
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / TaxonEditorInput.java
index be0dce5d1c589e56e4ea1cb9383b3587d209f534..7fbb22736445c6afed82ae5c2abb5d11b432da8b 100644 (file)
@@ -9,9 +9,11 @@
 
 package eu.etaxonomy.taxeditor.editor;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
@@ -20,7 +22,6 @@ import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IPersistableElement;
 
-import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IClassificationService;
@@ -49,7 +50,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created 19.03.2009
  * @version 1.0
  */
-public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorInput, IConversationEnabled, IPersistableElement {
+public class TaxonEditorInput  extends CdmEntitySessionInput implements IEditorInput, IConversationEnabled, IPersistableElement {
 
     private final ConversationHolder conversation;
 
@@ -59,8 +60,6 @@ public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorIn
 
     private TaxonBase initiallySelectedTaxonBase;
 
-    private final ITaxonNodeService service;
-
     private enum CdmType {
         TAXON_NODE,
         TAXON_BASE,
@@ -68,8 +67,8 @@ public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorIn
     }
 
     private TaxonEditorInput(UUID uuid, CdmType type) {
+        super(true);
         this.conversation = CdmStore.createConversation();
-        service = CdmStore.getService(ITaxonNodeService.class);
         switch(type) {
         case PARENT_TAXON_NODE:
             initForParentTaxonNode(uuid);
@@ -98,7 +97,7 @@ public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorIn
     private void initForTaxonNode(UUID taxonNodeUuid) {
 
 
-        TaxonNode taxonNode = getCdmEntitySession().remoteLoad(service,taxonNodeUuid, null);
+        TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNodeUuid, getTaxonNodePropertyPaths());
 
         if(taxonNode == null){
             MessagingUtils.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not type TaxonBase.");
@@ -108,8 +107,7 @@ public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorIn
     }
 
     private void initForTaxonBase(UUID taxonBaseUuid) {
-
-        TaxonBase taxonBase = getCdmEntitySession().remoteLoad(CdmStore.getService(ITaxonService.class),taxonBaseUuid);
+        TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).load(taxonBaseUuid, getTaxonBasePropertyPaths());
         if (taxonBase != null){
             if(taxonBase.isInstanceOf(Taxon.class)){
                 Taxon taxon = CdmBase.deproxy(taxonBase, Taxon.class);
@@ -156,7 +154,7 @@ public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorIn
         TaxonNode newTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference());
 
         // add the new taxon to the editors persistence context
-        UUID newTaxonNodeUuid = getCdmEntitySession().remoteSave(CdmStore.getService(ITaxonNodeService.class),newTaxonNode);
+        UUID newTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).save(newTaxonNode).getUuid();
 
         initForTaxonNode(newTaxonNodeUuid);
     }
@@ -220,8 +218,6 @@ public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorIn
     }
 
 
-
-
     /**
      * <p>NewEmptyInstance</p>
      *
@@ -437,44 +433,77 @@ public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorIn
         return initiallySelectedTaxonBase;
     }
 
-    @Override
-    public String toString() {
-        return String.format("%s[%s]", this.getClass().getSimpleName(), getTaxon());
-    }
-
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#getService()
-     */
-    @Override
-    public ITaxonNodeService getService() {
-        return service;
-    }
+//    @Override
+//    public String toString() {
+//        return String.format("%s[%s]", this.getClass().getSimpleName(), getTaxon());
+//    }
 
 
     /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#getRootEntities()
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
      */
     @Override
-    public  List<TaxonNode> getRootEntities() {
+    public List<TaxonNode> getRootEntities() {
         return Arrays.asList(taxonNode);
     }
 
-
     /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#update()
+     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge()
      */
     @Override
-    public <T extends CdmBase> void update() {
-        taxonNode = getCdmEntitySession().remoteUpdate(service, taxonNode);
+    public void merge() {
+        CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent)
-     */
     @Override
-    public void onChange(CdmChangeEvent event) {
-        // TODO Auto-generated method stub
+    public Map<Object, List<String>> getPropertyPathsMap() {
+        return null;
+    }
+
+    private List<String> getTaxonNodePropertyPaths() {
+        List<String> taxonNodePropertyPaths = new ArrayList<String>();
+        for(String propertyPath : getTaxonBasePropertyPaths()) {
+            taxonNodePropertyPaths.add("taxon." + propertyPath);
+        }
+        return taxonNodePropertyPaths;
+    }
 
+    private List<String> getTaxonBasePropertyPaths() {
+        List<String> taxonBasePropertyPaths = Arrays.asList(new String[] {
+                "sec",
+                "createdBy",
+                "updatedBy",
+                "annotations",
+                "markers",
+                "credits",
+                "extensions",
+                "rights",
+                "sources",
+                "descriptions",
+                "relationsToThisTaxon",
+                "relationsFromThisTaxon",
+                "taxonNodes",
+                "descriptions.descriptionElements.feature",
+                "descriptions.descriptionElements.area",
+                "descriptions.descriptionElements.status",
+                "descriptions.markers",
+                "name.descriptions",
+                "name.typeDesignations",
+                "name.status",
+                "name.nomenclaturalReference.inReference",
+                "name.taxonBases.taxonNodes",
+                "name.relationsFromThisName",
+                "name.relationsToThisName",
+                "name.homotypicalGroup.typifiedNames.taxonBases.synonymRelations.synonym.name.status",
+                "name.homotypicalGroup.typifiedNames.relationsToThisName.fromName",
+                "synonymRelations.synonym.name.status.type",
+                "synonymRelations.synonym.name.relationsToThisName.fromName",
+                "synonymRelations.synonym.name.nomenclaturalReference.inReference.authorship",
+                "synonymRelations.synonym.name.nomenclaturalReference.authorship",
+                "synonymRelations.synonym.name.homotypicalGroup.typifiedNames.taxonBases.synonymRelations"
+        });
+
+        return taxonBasePropertyPaths;
     }
 
 }