if calling excel import on a taxonnode this is used as parent taxon
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / checklist / ChecklistEditor.java
index cdecde04a0e8e248afbcace4e134729bc470c3e0..992f9d285c1976bc81f07531a1c8fcd4f00505aa 100644 (file)
@@ -12,7 +12,6 @@ package eu.etaxonomy.taxeditor.editor.view.checklist;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -58,7 +57,6 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
@@ -75,10 +73,9 @@ import eu.etaxonomy.taxeditor.model.IContextListener;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.preference.Resources;
-import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
-import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -90,8 +87,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created 30.04.2014
  * @version 1.0
  */
-public class ChecklistEditor extends EditorPart implements ISelectionListener, IPartContentHasFactualData,
-        IConversationEnabled, IContextListener, IPartContentHasDetails, IDirtyMarkable, ICdmEntitySessionEnabled {
+public class ChecklistEditor extends EditorPart implements ISelectionListener, IPartContentHasFactualData, IConversationEnabled,
+        IContextListener, IPartContentHasDetails, IDirtyMarkable{//, ICdmEntitySessionEnabled {
 
     private static final Logger logger = Logger.getLogger(ChecklistEditor.class);
     /**
@@ -99,6 +96,9 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
      */
     private static final String CHECKLIST_EDITOR_MEMENTO_KEY = "checklistEditor";
 
+
+
+
     private class ChecklistJob extends Job {
 
         private List<TaxonNode> taxonNodes;
@@ -110,6 +110,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
             super(title);
             this.taxonNodes = listTaxonNodes;
 
+
         }
 
         /*
@@ -185,7 +186,9 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
 
     private Label statusLabel;
 
-    private final ICdmEntitySession cdmEntitySession;
+   // private final ICdmEntitySession cdmEntitySession;
+
+    private ChecklistLabelProvider labelProvider;
 
     private SortedSet<DefinedTermBase> terms = null;
        private ToolItem toolItem;
@@ -212,7 +215,8 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
      * </p>
      */
     public ChecklistEditor() {
-        cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+        //cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+
     }
 
     /** {@inheritDoc} */
@@ -222,10 +226,16 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
         taxonNodeService = CdmStore.getService(ITaxonNodeService.class);
         selectionService = getSite().getWorkbenchWindow().getSelectionService();
         selectionService.addSelectionListener(this);
+        viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
+        labelProvider = new ChecklistLabelProvider(this.viewer);
+        terms = labelProvider.getNamedAreas();
+        if (terms == null){
+                       MessagingUtils.informationDialog("No Areas to display", "Please choose the areas you want to display. "
+                                       + "Therefore go to the preferences, choose the Checklist Editor and choose the areas in the Distribution Selection Wizard.");
+                       this.dispose();
+                       return;
+               }
         filter = new ChecklistEditorFilter();
-        ChecklistLabelProvider labelProvider = new ChecklistLabelProvider();
-        terms = (SortedSet<DefinedTermBase>) labelProvider.getTermsOrderedByLabels(labelProvider.getNamedAreas(),
-                CdmStore.getDefaultLanguage());
         createTopComposite(parent);
         loadDataInput();
     }
@@ -241,7 +251,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
 
         final Text searchText = createSearchBar(parent);
         createToolbar(parent);
-        viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
+
         getSite().setSelectionProvider(viewer);
 
         final ModifyListener modifyListener = new ChecklistModifyListener(viewer, filter, searchText);
@@ -254,7 +264,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
         createTable();
 
         viewer.setContentProvider(new ChecklistContentProvider());
-        viewer.setLabelProvider(new ChecklistLabelProvider(viewer));
+        viewer.setLabelProvider(this.labelProvider);
         comparator = new ChecklistEditorComparator();
         viewer.setComparator(comparator);
 
@@ -300,6 +310,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
 
        private void createToolbarItems() {
                dropListener = new ChecklistDropdownSelectionListener(toolItem, this, terms);
+               
         for (DefinedTermBase<DefinedTermBase> term : terms) {
             if(term!=null){
                 dropListener.add(term);
@@ -321,9 +332,16 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
     private void createTable() {
         Table table = viewer.getTable();//new Table(parent, viewer.getTable().getStyle());
         List<String> titles = new ArrayList<String>();
-        Collections.addAll(titles, "Taxon", "Author", "Rank");
         List<Integer> bounds = new ArrayList<Integer>();
-        Collections.addAll(bounds, 300, 200, 200);
+        if (PreferencesUtil.isShowRankInChecklistEditor()){
+            Collections.addAll(titles, "Taxon",  "Rank");
+            Collections.addAll(bounds, 300, 200);
+        } else{
+            Collections.addAll(titles, "Taxon");
+            Collections.addAll(bounds, 300);
+        }
+
+
         Map<Integer, Boolean> restoreValuesForColumnWidth = restoreValuesForColumnWidth(titles, bounds);
         createInitalDistributionColumns(table, titles, bounds, restoreValuesForColumnWidth);
         table.setSortDirection(SWT.DOWN);
@@ -342,8 +360,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
      * @param restoreValuesForColumnWidth
      */
        private void createInitalDistributionColumns(Table table,
-                       List<String> titles, List<Integer> bounds,
-                       Map<Integer, Boolean> restoreValuesForColumnWidth) {
+                       List<String> titles, List<Integer> bounds, Map<Integer, Boolean> restoreValuesForColumnWidth) {
                for (int columnIndex = 0; columnIndex < titles.size(); columnIndex++) {
             TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
             column.getColumn().setText(titles.get(columnIndex));
@@ -351,19 +368,19 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
             column.getColumn().setResizable(true);
             column.getColumn().setMoveable(true);
             column.getColumn().addSelectionListener(getSelectionAdapter(column.getColumn(), columnIndex));
-            if (columnIndex == 1) {
+            if (columnIndex == 0) {
                 table.setSortColumn(column.getColumn());
             }
-            if (columnIndex == 2) {
+            if (columnIndex == 1 && PreferencesUtil.isShowRankInChecklistEditor()) {
                /** uncommented it for now because no rank editing is wanted **/
 //                column.setEditingSupport(new RankEditingSupport(viewer, this));
             }
-            if (columnIndex >= 3) {
+            if ((columnIndex == 1 && !PreferencesUtil.isShowRankInChecklistEditor()) || columnIndex >= 2 ) {
                 //read PrefrenceStore to setWidth according to last saved state
                 if(restoreValuesForColumnWidth.get(columnIndex)){
-                    column.getColumn().setWidth(100);
+                    column.getColumn().setWidth(50);
                 }else{
-                    column.getColumn().setWidth(0);
+                    column.getColumn().setWidth(50);
                 }
                 column.setEditingSupport(new DistributionEditingSupport(viewer, this, columnIndex));
             }
@@ -383,11 +400,24 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
                        List<Integer> bounds) {
                Map<Integer, Boolean> restoreColumnWidth = new HashMap<Integer, Boolean>();
                if (terms != null) {
-            int columnIndex = 4;
+                   int columnIndex;
+                   if (PreferencesUtil.isShowRankInChecklistEditor()){
+                       columnIndex = 2;
+                   } else{
+                       columnIndex = 1;
+                   }
             for (DefinedTermBase<DefinedTermBase> term : terms) {
                 if(term != null){
                     restoreColumnWidth.put(columnIndex, PreferencesUtil.getPreferenceStore().getBoolean(term.getUuid().toString()));
-                    titles.add(term.getTitleCache());
+                    if (PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){
+                        if (term.getIdInVocabulary() != null){
+                            titles.add(term.getIdInVocabulary());
+                        } else{
+                            titles.add(term.getTitleCache());
+                        }
+                    }else{
+                        titles.add(term.getTitleCache());
+                    }
                     bounds.add(200);
                     columnIndex++;
                 }
@@ -427,7 +457,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
         TaxonNode taxonNode = checklistEditorInput.getTaxonNode();
         if (classification != null && taxonNode == null) {
             countNodes = taxonNodeService.countAllNodesForClassification(classification);
-            statusLabel.setText("Anzahl der Elemente: " + (countNodes != null ? countNodes : "uknown"));
+            statusLabel.setText("Anzahl der Elemente: " + (countNodes != null ? countNodes : "unknown"));
             // This should not kill the view nor the editor if something goes
             // wrong
             // TODO: don't load the whole taxonNode Object but rather a small
@@ -446,14 +476,17 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
     /** {@inheritDoc} */
     @Override
     public void dispose() {
-        cdmEntitySession.dispose();
+        this.checklistEditorInput.dispose();
+
+        conversation.unregisterForDataStoreChanges(this);
+        conversation.close();
         super.dispose();
     }
 
     /** {@inheritDoc} */
     @Override
     public void setFocus() {
-        cdmEntitySession.bind();
+
         viewer.getControl().setFocus();
     }
 
@@ -505,9 +538,13 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
        Table table = viewer.getTable();
        table.setRedraw(false);
        SortedSet<DefinedTermBase> oldTerms = terms;
-       ChecklistLabelProvider labelProvider = new ChecklistLabelProvider();
-       terms = (SortedSet<DefinedTermBase>) labelProvider.getTermsOrderedByLabels(labelProvider.getNamedAreas(), CdmStore.getDefaultLanguage());
-       SortedSet<DefinedTermBase> newTerms = terms;
+
+//     if (PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){
+//
+//     } else{
+//         terms = (SortedSet<DefinedTermBase>) labelProvider.getTermsOrderedByLabels(labelProvider.getNamedAreas(), CdmStore.getDefaultLanguage());
+//     }
+       SortedSet<DefinedTermBase> newTerms = labelProvider.getNamedAreas();
        toolItem.removeSelectionListener(dropListener);
        hideDistributionColumns(oldTerms);
        createToolbarItems();
@@ -517,7 +554,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
                addTableViewerColumn(term.getTitleCache(), 200, count);
                acitivateNewColumnInDropDownMenu(term);
        }
-        viewer.setLabelProvider(new ChecklistLabelProvider(viewer));
+        viewer.setLabelProvider(labelProvider);
         getService().schedule(new ChecklistJob("loading Taxa", selectedTaxonNodes), Job.LONG);
         table.setRedraw(true);
        viewer.refresh();
@@ -585,8 +622,12 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
     public void doSave(IProgressMonitor monitor) {
         try {
             monitor.beginTask("Saving Editor", 1);
-            getConversationHolder().bind();
-            getConversationHolder().commit(true);
+            if (!conversation.isBound()) {
+                conversation.bind();
+            }
+            CdmStore.getService(ITaxonNodeService.class).merge(selectedTaxonNodes, true);
+            //this.checklistEditorInput.merge();
+            conversation.commit(true);
             setDirty(false);
             monitor.worked(1);
         } finally {
@@ -606,10 +647,12 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
         if (input instanceof ChecklistEditorInput) {
             checklistEditorInput = (ChecklistEditorInput) input;
             setPartName(getPartName() + ": " + checklistEditorInput.getName());
-            conversation = ((ChecklistEditorInput) input).getConversationHolder();
+            conversation = checklistEditorInput.getConversation();
+            conversation.registerForDataStoreChanges(this);
         }
         simpleSelectionProvider = new SimpleSelectionProvider();
         getSite().setSelectionProvider(simpleSelectionProvider);
+
     }
 
     @Override
@@ -627,29 +670,9 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
     public void selectionChanged(IWorkbenchPart part, ISelection selection) {
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
-     * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
-     */
-    @Override
-    public void update(CdmDataChangeMap changeEvents) {
 
-    }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
-     * ()
-     */
-    @Override
-    public ConversationHolder getConversationHolder() {
-        return conversation;
-    }
+
 
     /*
      * (non-Javadoc)
@@ -725,8 +748,8 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
     private static final List<String> NODE_INIT_STRATEGY = Arrays.asList(new String[] { "descriptions",
             "descriptions.*", "description.state", "feature", "feature.*", "childNodes", "childNodes.taxon",
             "childNodes.taxon.name", "taxonNodes", "taxonNodes.*", "taxonNodes.taxon.*", "taxon.*",
-            "taxon.descriptions", "taxon.sec", "taxon.name.*", "taxon.synonymRelations", "terms", "name.*",
-            "name.rank.representations", "name.status.type.representations", "sources.$", "stateData.$" });
+            "taxon.descriptions", "taxon.sec", "taxon.name.*", "terms", "name.*",
+            "name.rank.representations", "name.status.type.representations", "stateData.$" });
 
     /*
      * (non-Javadoc)
@@ -770,27 +793,48 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I
     /* (non-Javadoc)
      * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
      */
-    @Override
-    public ICdmEntitySession getCdmEntitySession() {
-        // TODO Auto-generated method stub
-        return null;
+
+
+//    /* (non-Javadoc)
+//     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
+//     */
+//    @Override
+//    public <T extends CdmBase> Collection<T> getRootEntities() {
+//        // TODO Auto-generated method stub
+//        return null;
+//    }
+//
+//    /* (non-Javadoc)
+//     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
+//     */
+//    @Override
+//    public Map<Object, List<String>> getPropertyPathsMap() {
+//        // TODO Auto-generated method stub
+//        return null;
+//    }
+
+    /**
+     * @return the labelProvider
+     */
+    public ChecklistLabelProvider getLabelProvider() {
+        return labelProvider;
     }
 
     /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
+     * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
      */
     @Override
-    public <T extends CdmBase> Collection<T> getRootEntities() {
+    public void update(CdmDataChangeMap arg0) {
         // TODO Auto-generated method stub
-        return null;
+
     }
 
     /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
+     * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
      */
     @Override
-    public Map<Object, List<String>> getPropertyPathsMap() {
-        // TODO Auto-generated method stub
-        return null;
+    public ConversationHolder getConversationHolder() {
+
+        return conversation;
     }
 }