From 008510d12595316da6f1f54fdf65811fdf0db2bb Mon Sep 17 00:00:00 2001 From: Patrick Plitzner Date: Tue, 21 Jul 2015 10:54:16 +0200 Subject: [PATCH 1/1] Disable Termeditor menu if CdmStore is disconnected --- eu.etaxonomy.taxeditor.store/plugin.xml | 18 +- .../editor/definedterm/DefinedTermMenu.java | 164 ++++++++++++++++++ 2 files changed, 178 insertions(+), 4 deletions(-) create mode 100644 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenu.java diff --git a/eu.etaxonomy.taxeditor.store/plugin.xml b/eu.etaxonomy.taxeditor.store/plugin.xml index 85871d6ad..3b026cdf1 100644 --- a/eu.etaxonomy.taxeditor.store/plugin.xml +++ b/eu.etaxonomy.taxeditor.store/plugin.xml @@ -393,10 +393,6 @@ - - + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenu.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenu.java new file mode 100644 index 000000000..4f3e7770f --- /dev/null +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenu.java @@ -0,0 +1,164 @@ +// $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.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.swt.SWT; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.CompoundContributionItem; +import org.eclipse.ui.menus.CommandContributionItem; +import org.eclipse.ui.menus.CommandContributionItemParameter; + +import eu.etaxonomy.cdm.model.common.TermType; + +/** + * Menu 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 pplitzner + * @date 21 Jul 2015 + * + */ + +public class DefinedTermMenu extends CompoundContributionItem { + + + @Override + protected IContributionItem[] getContributionItems() { + Collection items = new ArrayList(); + MenuManager dtMenuManager = + new MenuManager("Term Editor","eu.etaxonomy.taxeditor.store.definedTermEditorMenu"); + + dtMenuManager.setVisible(true); + + items.add(dtMenuManager); + List ttList = new ArrayList(EnumSet.allOf(TermType.class)); + Collections.sort(ttList,new SortByTermTypeMessage()); + for (TermType tt : ttList) + { + // 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); + if(ici != null) { + dtMenuManager.add(ici); + } + } + } + return items.toArray(new IContributionItem[]{}); + } + + private IContributionItem addChildTermsToMenuManager(TermType termType) { + + //FIXME : need a better way to find out if a term type can be editable (ticket 3853) + if(termType.getEmptyDefinedTermBase() != null) { + Set children = termType.getGeneralizationOf(); + // term type has no children, so create menu item + if(children.isEmpty()) { + return createMenuItem(termType); + } + // term type has children, so create sub menu + MenuManager dtMenuManager = + new MenuManager(termType.getMessage(),"eu.etaxonomy.taxeditor.store." + termType.getKey() + "Menu"); + dtMenuManager.setVisible(true); + dtMenuManager.add(createDefaultMenuItem(termType)); + + Separator sep = new Separator(); + dtMenuManager.add(sep); + // add child items to the sub menu + for(TermType tt : children) { + IContributionItem item = addChildTermsToMenuManager(tt); + if(item != null) { + dtMenuManager.add(item); + } + } + return dtMenuManager; + } else { + return null; + } + + } + + private CommandContributionItem createMenuItem(TermType termType) { + + Map params = new HashMap(); + params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid", + termType.getUuid().toString()); + + CommandContributionItemParameter p = new CommandContributionItemParameter( + PlatformUI.getWorkbench(), + "", + "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) { + + Map params = new HashMap(); + params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid", + termType.getUuid().toString()); + + CommandContributionItemParameter p = new CommandContributionItemParameter( + PlatformUI.getWorkbench(), + "", + "eu.etaxonomy.taxeditor.store.openDefinedTermEditor", + params, + null, + null, + null, + "Other " + termType.getMessage() + "s", + "", + "", + SWT.PUSH, + "", + true); + + + + CommandContributionItem item = new CommandContributionItem(p); + return item; + + } + + private class SortByTermTypeMessage implements Comparator { + @Override + public int compare(TermType t1, TermType t2) { + return t1.getMessage().compareTo(t2.getMessage()); + } + } + + +} -- 2.34.1