3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.editor
.definedterm
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Collections
;
15 import java
.util
.Comparator
;
16 import java
.util
.EnumSet
;
17 import java
.util
.HashMap
;
18 import java
.util
.List
;
22 import org
.eclipse
.jface
.action
.IContributionItem
;
23 import org
.eclipse
.jface
.action
.MenuManager
;
24 import org
.eclipse
.jface
.action
.Separator
;
25 import org
.eclipse
.swt
.SWT
;
26 import org
.eclipse
.ui
.menus
.CommandContributionItem
;
27 import org
.eclipse
.ui
.menus
.CommandContributionItemParameter
;
28 import org
.eclipse
.ui
.menus
.ExtensionContributionFactory
;
29 import org
.eclipse
.ui
.menus
.IContributionRoot
;
30 import org
.eclipse
.ui
.services
.IServiceLocator
;
32 import eu
.etaxonomy
.cdm
.model
.common
.TermType
;
35 * Menu factory used in the store plugin xml to dynamically generate menu (sub-menu) contribution items
36 * for term types which when clicked open the defined term editor for the chosen term type
43 public class DefinedTermMenuFactory
extends ExtensionContributionFactory
{
46 public void createContributionItems(IServiceLocator serviceLocator
,
47 IContributionRoot additions
) {
49 MenuManager dtMenuManager
=
50 new MenuManager("Term Editor","eu.etaxonomy.taxeditor.store.definedTermEditorMenu");
52 dtMenuManager
.setVisible(true);
54 additions
.addContributionItem(dtMenuManager
, null);
55 List
<TermType
> ttList
= new ArrayList
<TermType
>(EnumSet
.allOf(TermType
.class));
56 Collections
.sort(ttList
,new SortByTermTypeMessage());
57 for (TermType tt
: ttList
)
59 // if term type has a parent, do not add it
60 // it will be added in the recursive call
61 if(tt
.getKindOf() == null) {
62 IContributionItem ici
= addChildTermsToMenuManager(tt
, serviceLocator
);
64 dtMenuManager
.add(ici
);
70 private IContributionItem
addChildTermsToMenuManager(TermType termType
, IServiceLocator serviceLocator
) {
72 //FIXME : need a better way to find out if a term type can be editable (ticket 3853)
73 if(termType
.getEmptyDefinedTermBase() != null) {
74 Set
<TermType
> children
= termType
.getGeneralizationOf();
75 // term type has no children, so create menu item
76 if(children
.isEmpty()) {
77 return createMenuItem(termType
, serviceLocator
);
79 // term type has children, so create sub menu
80 MenuManager dtMenuManager
=
81 new MenuManager(termType
.getMessage(),"eu.etaxonomy.taxeditor.store." + termType
.getKey() + "Menu");
82 dtMenuManager
.setVisible(true);
83 dtMenuManager
.add(createDefaultMenuItem(termType
, serviceLocator
));
85 Separator sep
= new Separator();
86 dtMenuManager
.add(sep
);
87 // add child items to the sub menu
88 for(TermType tt
: children
) {
89 IContributionItem item
= addChildTermsToMenuManager(tt
,serviceLocator
);
91 dtMenuManager
.add(item
);
101 private CommandContributionItem
createMenuItem(TermType termType
, IServiceLocator serviceLocator
) {
103 Map
<String
, String
> params
= new HashMap
<String
, String
>();
104 params
.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
105 termType
.getUuid().toString());
107 CommandContributionItemParameter p
= new CommandContributionItemParameter(
110 "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
115 termType
.getMessage(),
122 CommandContributionItem item
= new CommandContributionItem(p
);
127 private CommandContributionItem
createDefaultMenuItem(TermType termType
, IServiceLocator serviceLocator
) {
129 Map
<String
, String
> params
= new HashMap
<String
, String
>();
130 params
.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
131 termType
.getUuid().toString());
133 CommandContributionItemParameter p
= new CommandContributionItemParameter(
136 "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
141 "Other " + termType
.getMessage() + "s",
150 CommandContributionItem item
= new CommandContributionItem(p
);
155 private class SortByTermTypeMessage
implements Comparator
<TermType
> {
156 public int compare(TermType t1
, TermType t2
) {
157 return t1
.getMessage().compareTo(t2
.getMessage());