TermLabelProvider : added styling to distinguish between vocabularies and terms
authorCherian Mathew <c.mathew@bgbm.org>
Thu, 18 Jul 2013 13:30:33 +0000 (13:30 +0000)
committerCherian Mathew <c.mathew@bgbm.org>
Thu, 18 Jul 2013 13:30:33 +0000 (13:30 +0000)
DefinedTermMenuFactory : Factory to dynamically build recursive menu for defined term editor
DefinedTermEditor : mainly clean up of code

.gitattributes
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermContentProvider.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermLabelProvider.java

index 9216b927829768e55274a599a9a67edfc11562f5..367bb6dd5dd871adc7c3ad75860cda4e43ace7f9 100644 (file)
@@ -1073,6 +1073,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/UsageTe
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermDragListener.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermDropAdapter.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermBasePropertyTester.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermContentProvider.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/TermLabelProvider.java -text
index 31a3165bad00362490bcc77ec870ce7d0a65563f..059990f6bebca7972e9720a438545c7e14e8e9a6 100644 (file)
@@ -41,9 +41,11 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
+import eu.etaxonomy.cdm.model.common.TermType;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
 import eu.etaxonomy.taxeditor.editor.definedterm.input.AbstractDefinedTermEditorInput;\r
+import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;\r
 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;\r
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -64,7 +66,8 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
        protected ConversationHolder conversation;\r
        private ISelectionService selectionService;\r
        private boolean dirty;\r
-       Set<TermVocabulary<? extends DefinedTermBase>> inMemoryVocabularies = new HashSet<TermVocabulary<? extends DefinedTermBase>>();\r
+\r
+\r
 \r
        private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;\r
        /**\r
@@ -95,10 +98,9 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
                        Transfer[] transfers = new Transfer[] { TermTransfer.getInstance() };\r
                        viewer.addDragSupport(dndOperations, transfers, new DefinedTermDragListener(viewer));\r
                        viewer.addDropSupport(dndOperations, transfers, new DefinedTermDropAdapter(this));\r
-\r
-                                       \r
-                       initialiseVocabularies();               \r
-                       viewer.setInput(inMemoryVocabularies);\r
+                                                                       \r
+                       getDefinedTermEditorInput().initialiseVocabularies();\r
+                       viewer.setInput(getDefinedTermEditorInput().getVocabularies());\r
                                                \r
                        getSite().setSelectionProvider(viewer);\r
                        \r
@@ -110,28 +112,13 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
                }\r
        \r
        \r
-       protected void initialiseVocabularies() {\r
-               inMemoryVocabularies.clear();\r
-               //List<TermVocabulary> vocabularies = CdmStore.getService(IVocabularyService.class).list(null, null, null, null, null);\r
 \r
-//             for (TermVocabulary vocabulary : vocabularies){\r
-//                     if(vocabulary.getTerms().isEmpty()){\r
-//                             inMemoryVocabularies.add(vocabulary);\r
-//                     }\r
-//             }\r
-\r
-               \r
-               List<TermVocabulary<? extends DefinedTermBase>> termVocabularies = CdmStore.getService(IVocabularyService.class).listByTermClass(getDefinedTermEditorInput().getTermClass(), true, true, null, null, null, null);\r
-               \r
-               \r
-               inMemoryVocabularies.addAll(termVocabularies);\r
-       }\r
        \r
        /**\r
         * \r
         */\r
-       public AbstractDefinedTermEditorInput getDefinedTermEditorInput() {\r
-               return (AbstractDefinedTermEditorInput) getEditorInput();\r
+       public TermEditorInput getDefinedTermEditorInput() {\r
+               return (TermEditorInput) getEditorInput();\r
        }\r
 \r
        /* (non-Javadoc)\r
@@ -139,24 +126,9 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
         */\r
        @Override\r
        public boolean postOperation(CdmBase objectAffectedByOperation) {\r
-\r
-               if(objectAffectedByOperation instanceof DefinedTermBase){\r
-                       viewer.refresh();\r
-               } else if (objectAffectedByOperation instanceof TermVocabulary){\r
-//                     if (inMemoryVocabularies.contains(objectAffectedByOperation)){\r
-//                             inMemoryVocabularies.remove((TermVocabulary) objectAffectedByOperation);\r
-//                     }else{\r
-//                             inMemoryVocabularies.add((TermVocabulary) objectAffectedByOperation);\r
-//                             DetailsViewPart view = (DetailsViewPart) StoreUtil.getView(DetailsViewPart.ID, true);\r
-//                             view.setFocus();\r
-//                     }\r
                        \r
-//                     viewer.setInput(inMemoryVocabularies);\r
-                       viewer.refresh();\r
-                       \r
-               }\r
-               \r
                \r
+               viewer.refresh();               \r
                \r
                if(objectAffectedByOperation != null){\r
                        viewer.setSelection(new StructuredSelection(objectAffectedByOperation));\r
@@ -185,7 +157,7 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
        public void doSave(IProgressMonitor monitor) {\r
                getConversationHolder().commit();\r
                setDirty(false);\r
-               initialiseVocabularies();\r
+               getDefinedTermEditorInput().initialiseVocabularies();\r
        }\r
        \r
 \r
@@ -259,12 +231,6 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
                return viewer;\r
        }\r
 \r
-       /**\r
-        * @return \r
-        * \r
-        */\r
-       public Set<TermVocabulary<? extends DefinedTermBase>> getInMemoryVocabularies() {\r
-               return inMemoryVocabularies;\r
-       }\r
+\r
 \r
 }
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java
new file mode 100644 (file)
index 0000000..ddcbb93
--- /dev/null
@@ -0,0 +1,149 @@
+// $Id$
+/**
+* Copyright (C) 2009 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.definedterm;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+import org.eclipse.ui.menus.ExtensionContributionFactory;
+import org.eclipse.ui.menus.IContributionRoot;
+import org.eclipse.ui.services.IServiceLocator;
+
+import eu.etaxonomy.cdm.model.common.TermType;
+
+/**
+ * Menu factory used in the store plugin xml to dynamically generate menu (sub-menu) contribution items
+ * for term types which when clicked open the defined term editor for the chosen term type
+ * 
+ * @author c.mathew
+ * @date 18 Jul 2013
+ *
+ */
+
+public class DefinedTermMenuFactory extends ExtensionContributionFactory {     
+       
+       @Override
+       public void createContributionItems(IServiceLocator serviceLocator,
+                       IContributionRoot additions) {
+               
+               MenuManager dtMenuManager = 
+                               new MenuManager("Term Editor","eu.etaxonomy.taxeditor.store.definedTermEditorMenu"); 
+               
+               dtMenuManager.setVisible(true);
+        
+               additions.addContributionItem(dtMenuManager, null);
+               
+        for (TermType tt : EnumSet.allOf(TermType.class))
+        {
+               // if term type has a parent, do not add it
+               // it will be added in the recursive call
+               if(tt.getKindOf() == null) {
+                       IContributionItem ici = addChildTermsToMenuManager(tt, serviceLocator);
+                       
+                       if(ici != null) {
+                               System.out.println("Adding : " + tt.getMessage());                              
+                               dtMenuManager.add(ici);
+                       }
+               }
+        }                                     
+       }
+       
+       private IContributionItem addChildTermsToMenuManager(TermType termType, IServiceLocator serviceLocator) {
+       
+               Set<TermType> children = termType.getGeneralizationOf();
+               // term type has no children, so create menu item
+               if(children.isEmpty()) {
+                       System.out.println("No children for : " + termType.getMessage());
+                       return createMenuItem(termType, serviceLocator);
+               }
+               // term type has children, so create sub menu
+               System.out.println("Children for : " + termType.getMessage());
+               MenuManager dtMenuManager = 
+                               new MenuManager(termType.getMessage(),"eu.etaxonomy.taxeditor.store." + termType.getKey() + "Menu"); 
+               dtMenuManager.setVisible(true);
+               dtMenuManager.add(createDefaultMenuItem(termType, serviceLocator));
+               // add child items to the sub menu
+               for(TermType tt : children) {
+                       System.out.println("Child : " + tt.getMessage());
+                       IContributionItem item = addChildTermsToMenuManager(tt,serviceLocator);
+                       if(item != null) {
+                               System.out.println("Adding : " + tt.getMessage() + " to "  + termType.getMessage());
+                               dtMenuManager.add(item);
+                       }                                       
+               }               
+               return dtMenuManager;
+               
+       }
+       
+       private CommandContributionItem createMenuItem(TermType termType, IServiceLocator serviceLocator) {
+               
+               Map<String, String> params = new HashMap<String, String>();
+               params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
+                               termType.getUuid().toString());
+               System.out.println("Term Type UUID : " + termType.getUuid().toString());
+               
+        CommandContributionItemParameter p = new CommandContributionItemParameter(
+                serviceLocator, 
+                "",
+                "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
+                params,
+                null,
+                null,
+                null,
+                termType.getMessage(),
+                "",
+                "",                
+                SWT.PUSH,
+                "",
+                true);
+   
+        CommandContributionItem item = new CommandContributionItem(p);   
+        return item;
+               
+       }
+       
+       private CommandContributionItem createDefaultMenuItem(TermType termType, IServiceLocator serviceLocator) {
+               
+               Map<String, String> params = new HashMap<String, String>();
+               params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
+                               termType.getUuid().toString());
+               System.out.println("Term Type UUID : " + termType.getUuid().toString());
+               
+        CommandContributionItemParameter p = new CommandContributionItemParameter(
+                serviceLocator, 
+                "",
+                "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
+                params,
+                null,
+                null,
+                null,
+                "All " + termType.getMessage() + "s",
+                "",
+                "",                
+                SWT.PUSH,
+                "",
+                true);
+   
+        CommandContributionItem item = new CommandContributionItem(p);   
+        return item;
+               
+       }
+       
+       
+
+}
index 3b6241ace7c44b78aa0f0001e401e442dd18f35c..e7ca0c28d174320d12426ac6b0604bb7371f557a 100644 (file)
@@ -17,7 +17,9 @@ import java.util.SortedSet;
 import org.eclipse.jface.viewers.ITreeContentProvider;\r
 import org.eclipse.jface.viewers.Viewer;\r
 \r
+import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
+import eu.etaxonomy.cdm.model.common.TermBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
 \r
@@ -54,7 +56,7 @@ public class TermContentProvider implements ITreeContentProvider {
        \r
                Collection<TermVocabulary> inputElements = (Collection<TermVocabulary>) inputElement;\r
                return inputElements.toArray();\r
-               //return null;\r
+\r
        }\r
 \r
        /* (non-Javadoc)\r
@@ -63,8 +65,8 @@ public class TermContentProvider implements ITreeContentProvider {
        @Override\r
        public Object[] getChildren(Object parentElement) {\r
                \r
-               if(parentElement instanceof TermVocabulary){\r
-                       return getTopLevelElements((TermVocabulary) parentElement);\r
+               if(parentElement instanceof TermVocabulary){                    \r
+                       return getTopLevelElements((TermVocabulary)parentElement);\r
                } else if (parentElement instanceof DefinedTermBase) {\r
                        return ((DefinedTermBase) parentElement).getIncludes().toArray();\r
                }\r
@@ -86,10 +88,8 @@ public class TermContentProvider implements ITreeContentProvider {
                for (DefinedTermBase term : terms){\r
                         if (term.getPartOf() == null){\r
                                 topLevelTerms.add(term);\r
-                        }\r
-                               \r
-               }\r
-        \r
+                        }                              \r
+               }        \r
                return topLevelTerms.toArray();\r
        }\r
 \r
@@ -98,27 +98,25 @@ public class TermContentProvider implements ITreeContentProvider {
         */\r
        @Override\r
        public Object getParent(Object element) {\r
-               \r
+\r
                if(element instanceof DefinedTermBase){\r
-                       \r
-                       DefinedTermBase definedTerm = (DefinedTermBase)element;\r
-                       if (definedTerm.getPartOf() == null) {\r
-                               return definedTerm.getVocabulary();\r
+                       DefinedTermBase definedTermBase = (DefinedTermBase)element;\r
+                       if (definedTermBase.getPartOf() == null) {\r
+                               return definedTermBase.getVocabulary();\r
                        } else {\r
-                               return definedTerm.getPartOf();\r
-                       }\r
-               }       \r
+                               return definedTermBase.getPartOf();\r
+                       }                       \r
+               }\r
                return null;\r
+\r
        }\r
 \r
        /* (non-Javadoc)\r
         * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)\r
         */\r
        @Override\r
-       public boolean hasChildren(Object element) {\r
-               \r
-               if (getChildren(element) != null){\r
-                       \r
+       public boolean hasChildren(Object element) {            \r
+               if (getChildren(element) != null){                      \r
                        return getChildren(element).length > 0;\r
                }\r
                return false;\r
index ea647af18f22761b7eb5338c3cb1219b9a4fd9ca..7e3e8f9eb53b7493b5683dda0c8ec5de9fbf1919 100644 (file)
 package eu.etaxonomy.taxeditor.editor.definedterm;\r
 \r
 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;\r
+import org.eclipse.jface.viewers.StyledString.Styler;\r
 import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.StyledCellLabelProvider;\r
 import org.eclipse.jface.viewers.StyledString;\r
+import org.eclipse.jface.viewers.ViewerCell;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.StyleRange;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.graphics.TextStyle;\r
+import org.eclipse.swt.widgets.Display;\r
 \r
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 import eu.etaxonomy.cdm.model.common.TermBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;\r
 \r
 /**\r
  * @author l.morris\r
  * @date 9 Dec 2011\r
  *\r
  */\r
-public class TermLabelProvider extends LabelProvider implements\r
-               IStyledLabelProvider {\r
+public class TermLabelProvider extends StyledCellLabelProvider {\r
 \r
+       private static Color vocColor = Display.getCurrent().getSystemColor(\r
+                       SWT.COLOR_BLUE);\r
+       private Styler vocStyler;\r
        /* (non-Javadoc)\r
         * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)\r
         */\r
+       \r
+       /*\r
+        * (non-Javadoc)\r
+        * \r
+        * @see\r
+        * org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.\r
+        * jface.viewers.ViewerCell)\r
+        */\r
        @Override\r
+       public void update(ViewerCell cell) {\r
+               Object element = cell.getElement();\r
+               int columnIndex = cell.getColumnIndex();\r
+\r
+               String text = getText(element);                                 \r
+               cell.setText(text);\r
+               \r
+               if (element instanceof TermVocabulary) {                \r
+                       StyledString styledString = new StyledString(text, getVocabularyStyler());\r
+                       StyleRange[] styleRanges;\r
+                       styleRanges = styledString.getStyleRanges();\r
+                       cell.setStyleRanges(styleRanges);\r
+               } \r
+               super.update(cell);\r
+       }\r
+       \r
        public StyledString getStyledText(Object element) {\r
                \r
+               if(element instanceof TermVocabulary){\r
+                       new StyledString(getText(element), getVocabularyStyler());\r
+               }\r
                return  new StyledString(getText(element), StyledString.QUALIFIER_STYLER);\r
        }\r
        \r
        /* (non-Javadoc)\r
         * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)\r
         */\r
-       @Override\r
+       \r
        public String getText(Object element) {\r
                \r
                if (element instanceof TermBase){\r
-                       return ((TermBase)element).getLabel();\r
+                       return ((TermBase)element).getTitleCache();\r
                } \r
-               return super.getText(element);\r
+               //FIXME : must throw an exception here\r
+               return element.toString();\r
+       }\r
+       \r
+       private Styler getVocabularyStyler() {\r
+               if (vocStyler == null) {\r
+                       vocStyler = new Styler() {\r
+                               @Override\r
+                               public void applyStyles(TextStyle textStyle) {\r
+                                       textStyle.foreground = vocColor;\r
+                               }\r
+                       };\r
+               }\r
+               return vocStyler;\r
        }\r
 \r
 }\r