ref #2380: implement usage of Dto for taxon navigator
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / Root.java
index 55b29173d78d2b7adcd76de258e0cbba337040fd..7cecd94cd5d6a599615306bc0694342acc870854 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
 * Copyright (C) 2007 EDIT
 * European Distributed Institute of Taxonomy
@@ -10,6 +9,7 @@
 
 package eu.etaxonomy.taxeditor.navigation.navigator;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -23,10 +23,8 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IClassificationService;
 import eu.etaxonomy.cdm.model.taxon.Classification;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
-import eu.etaxonomy.taxeditor.navigation.operation.CreateClassification;
-import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -39,6 +37,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 public class Root extends PlatformObject implements IAdaptable, IPersistableElement, IElementFactory, IConversationEnabled {
 
        private final ConversationHolder conversation;
+       private List<TaxonNodeDto> rootNodes = new ArrayList<>();
 
        /**
         * <p>Constructor for Root.</p>
@@ -54,22 +53,27 @@ public class Root extends PlatformObject implements IAdaptable, IPersistableElem
         *
         * @return a {@link java.util.List} object.
         */
-       public List<Classification> getParentBeans() {
+       public List<TaxonNodeDto> getParentBeans() {
                List<String> propertyPaths = Arrays.asList(new String[]{
-                       "name",
-                       "rootNode.childNodes"});
-
-               List<Classification> classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, propertyPaths);
-
-               if(classifications.size() == 0){
-                       Classification classification = Classification.NewInstance("My Classification");
-                       AbstractPostOperation operation = new CreateClassification("Creating initial classification", NavigationUtil.getUndoContext(), classification, NavigationUtil.getNavigator(false), NavigationUtil.getNavigator(false), NavigationUtil.getNavigator(false));
-                       NavigationUtil.executeOperation(operation);
-
-                       classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, propertyPaths);
+                       "name", //$NON-NLS-1$
+                       "rootNode.childNodes"}); //$NON-NLS-1$
+               if (rootNodes.isEmpty()){
+               List<Classification> classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, propertyPaths);
+
+               if(classifications.size() == 0){
+                   //FIXME E4 migrate or delete; when does this happen and SHOULD this happen?
+    //                 Classification classification = Classification.NewInstance(Messages.Root_MY_CLASSIFICATION);
+    //                 AbstractPostOperation operation = new CreateClassification(Messages.Root_CREATE_CLASSIFICATION, NavigationUtil.getUndoContext(), classification, NavigationUtil.getNavigator(false), NavigationUtil.getNavigator(false), NavigationUtil.getNavigator(false));
+    //                 NavigationUtil.executeOperation(operation);
+    //
+    //                 classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, propertyPaths);
+               }
+
+               for (Classification classification: classifications){
+                       rootNodes.add(new TaxonNodeDto(classification.getRootNode()));
+               }
                }
-
-               return classifications;
+               return rootNodes;
        }
 
        /* (non-Javadoc)
@@ -115,4 +119,10 @@ public class Root extends PlatformObject implements IAdaptable, IPersistableElem
        public ConversationHolder getConversationHolder() {
                return conversation;
        }
+
+       public void addRootNode(Classification newClassification){
+           newClassification = CdmStore.getService(IClassificationService.class).load(newClassification.getUuid());
+           rootNodes.add(new TaxonNodeDto(newClassification.getRootNode()));
+
+       }
 }