DefinedTermMenuFactory : Factory to dynamically build recursive menu for defined term editor
DefinedTermEditor : mainly clean up of code
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
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
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
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
}\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
*/\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
public void doSave(IProgressMonitor monitor) {\r
getConversationHolder().commit();\r
setDirty(false);\r
- initialiseVocabularies();\r
+ getDefinedTermEditorInput().initialiseVocabularies();\r
}\r
\r
\r
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
--- /dev/null
+// $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;
+
+ }
+
+
+
+}
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
\r
Collection<TermVocabulary> inputElements = (Collection<TermVocabulary>) inputElement;\r
return inputElements.toArray();\r
- //return null;\r
+\r
}\r
\r
/* (non-Javadoc)\r
@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
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
*/\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
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