ref #9504: fix saving label changes of newly created term trees
authorKatja Luther <k.luther@bgbm.org>
Wed, 14 Apr 2021 13:59:54 +0000 (15:59 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 14 Apr 2021 13:59:54 +0000 (15:59 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/termtree/e4/TermTreeEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/termtree/e4/handler/CreateTermTreeHandler.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/termtree/e4/operation/CreateFeatureTreeOperation.java

index b3a8079347acd72e0add9cc9f330bbb8f460aa4d..40a1909537cb6e4abd39300489c51df7c18171f3 100644 (file)
@@ -51,6 +51,7 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.ITermNodeService;
 import eu.etaxonomy.cdm.api.service.ITermTreeService;
+import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.cdm.model.term.TermType;
@@ -125,7 +126,7 @@ public class TermTreeEditor<T extends DefinedTermBase>
     Map<UUID,TermTreeDto> trees;
 
     Map<UUID, TermNodeDto> uuidTermMap = new HashMap<>();
-    List<AbstractPostOperation<TermNode>> createOperationList = new ArrayList<>();
+    Map<UUID, CreateFeatureTreeOperation> createOperationList = new HashMap<>();
     List<AbstractPostOperation<TermNode>> operationList = new ArrayList<>();
     List<TermNodeDto> listToUpdate = new ArrayList<>();
 
@@ -308,9 +309,15 @@ public class TermTreeEditor<T extends DefinedTermBase>
 
         // commit the conversation and start a new transaction immediately
         Object[] expandedElements = this.viewer.getExpandedElements();
+        ISelection sel = this.viewer.getSelection();
         conversation.commit(true);
         if (createOperationList != null && !createOperationList.isEmpty()){
-            for (AbstractPostOperation<TermNode> operation: createOperationList){
+            for (CreateFeatureTreeOperation operation: createOperationList.values()){
+                TermTreeDto termDto = getTreeDtoForUuid(operation.getElementUuid());
+                operation.getElement().setTitleCache(termDto.getTitleCache(), true);
+                operation.getElement().setAllowDuplicates(termDto.isAllowDuplicate());
+                operation.getElement().setFlat(termDto.isFlat());
+                operation.getElement().setOrderRelevant(termDto.isOrderRelevant());
                 AbstractUtility.executeOperation(operation, sync);
             }
             createOperationList.clear();
@@ -326,11 +333,11 @@ public class TermTreeEditor<T extends DefinedTermBase>
         CdmStore.getService(ITermNodeService.class).saveTermNodeDtoList(listToUpdate);
         listToUpdate.clear();
         List<TermTreeDto> rootEntities = getRootEntities();
-        CdmStore.getService(ITermTreeService.class).saveOrUpdateTermTreeDtoList(rootEntities);
-        initializeTrees();
+        UpdateResult result = CdmStore.getService(ITermTreeService.class).saveOrUpdateTermTreeDtoList(rootEntities);
         conversation.commit(true);
-
         this.setDirty(false);
+        initializeTrees();
+        this.viewer.setSelection(sel);
 //        this.viewer.setExpandedElements(expandedElements);
        }
 
@@ -524,7 +531,7 @@ public class TermTreeEditor<T extends DefinedTermBase>
     @Override
     public void addOperation(AbstractPostOperation operation) {
         if (operation instanceof CreateFeatureTreeOperation){
-            createOperationList.add(operation);
+            createOperationList.put(((CreateFeatureTreeOperation)operation).getElementUuid(), (CreateFeatureTreeOperation)operation);
         }else{
             operationList.add(operation);
         }
@@ -535,10 +542,11 @@ public class TermTreeEditor<T extends DefinedTermBase>
     private void addSaveCandidate(@UIEventTopic(WorkbenchEventConstants.ADD_SAVE_CANDIDATE) UUID cdmbaseUuid) {
         for (UUID uuid: uuidTermMap.keySet()) {
             if (uuid.equals(cdmbaseUuid)){
-                listToUpdate.add(uuidTermMap.get(uuid));
+               listToUpdate.add(uuidTermMap.get(uuid));
             }
 
         }
+
     }
 
     @Override
index 7629544d77c56228f5d6cda73004354a2e91453d..cdbe347f0a4159ab1363d57f583acff5b233d278 100644 (file)
@@ -16,6 +16,9 @@ import org.eclipse.e4.ui.di.UISynchronize;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
 import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
 
 import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
@@ -42,7 +45,7 @@ public class CreateTermTreeHandler {
         newTree.setAllowDuplicates(false);
         newTree.setFlat(false);
         newTree.setOrderRelevant(true);
-        newTree.setTitleCache(String.format("New %s tree", editor.getTermType().getLabel()));
+        newTree.setTitleCache(String.format("_New %s tree", editor.getTermType().getLabel()), true);
 
         CreateFeatureTreeOperation operation = new CreateFeatureTreeOperation(newTree, editor, editor);
         TermTreeDto newDto = TermTreeDto.fromTree(newTree);
@@ -53,6 +56,10 @@ public class CreateTermTreeHandler {
         ((TermTreeEditor)editor).getViewer().setInput(((TermTreeEditor)editor).getTrees());
 
         ((TermTreeEditor)editor).getViewer().setExpandedElements(expandedElements);
+        IStructuredSelection sel = new StructuredSelection(newDto);
+        SelectionChangedEvent event = new SelectionChangedEvent(
+                ((TermTreeEditor)editor).getViewer(), sel);
+        ((TermTreeEditor)editor).selectionChanged(event);
 
     }
 
index 9cce3dcc17d8e93bd8c07358b673d8b402a61532..36c7459bc21ae1759bdd14e9e221ec2f95cc2c71 100644 (file)
@@ -47,4 +47,8 @@ public class CreateFeatureTreeOperation extends AbstractPostOperation<TermTree>{
     public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
         return null;
     }
+
+    public void setElement(TermTree termTree){
+        this.element = termTree;
+    }
 }
\ No newline at end of file