ref #6190 removing svn property place holder in first line of code - java files
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / editor / definedterm / DefinedTermMenu.java
1 /**
2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.taxeditor.editor.definedterm;
11
12 import java.util.ArrayList;
13 import java.util.Collection;
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;
19 import java.util.Map;
20 import java.util.Set;
21
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.PlatformUI;
27 import org.eclipse.ui.actions.CompoundContributionItem;
28 import org.eclipse.ui.menus.CommandContributionItem;
29 import org.eclipse.ui.menus.CommandContributionItemParameter;
30
31 import eu.etaxonomy.cdm.model.common.TermType;
32
33 /**
34 * Menu used in the store plugin xml to dynamically generate menu (sub-menu) contribution items
35 * for term types which when clicked open the defined term editor for the chosen term type
36 *
37 * @author pplitzner
38 * @date 21 Jul 2015
39 *
40 */
41
42 public class DefinedTermMenu extends CompoundContributionItem {
43
44
45 @Override
46 protected IContributionItem[] getContributionItems() {
47 Collection<IContributionItem> items = new ArrayList<IContributionItem>();
48 MenuManager dtMenuManager =
49 new MenuManager("Term Editor","eu.etaxonomy.taxeditor.store.definedTermEditorMenu");
50
51 dtMenuManager.setVisible(true);
52
53 items.add(dtMenuManager);
54 List<TermType> ttList = new ArrayList<TermType>(EnumSet.allOf(TermType.class));
55 Collections.sort(ttList,new SortByTermTypeMessage());
56 for (TermType tt : ttList)
57 {
58 // if term type has a parent, do not add it
59 // it will be added in the recursive call
60 if(tt.getKindOf() == null) {
61 IContributionItem ici = addChildTermsToMenuManager(tt);
62 if(ici != null) {
63 dtMenuManager.add(ici);
64 }
65 }
66 }
67 return items.toArray(new IContributionItem[]{});
68 }
69
70 private IContributionItem addChildTermsToMenuManager(TermType termType) {
71
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);
78 }
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));
84
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);
90 if(item != null) {
91 dtMenuManager.add(item);
92 }
93 }
94 return dtMenuManager;
95 } else {
96 return null;
97 }
98
99 }
100
101 private CommandContributionItem createMenuItem(TermType termType) {
102
103 Map<String, String> params = new HashMap<String, String>();
104 params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
105 termType.getUuid().toString());
106
107 CommandContributionItemParameter p = new CommandContributionItemParameter(
108 PlatformUI.getWorkbench(),
109 "",
110 "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
111 params,
112 null,
113 null,
114 null,
115 termType.getMessage(),
116 "",
117 "",
118 SWT.PUSH,
119 "",
120 true);
121
122 CommandContributionItem item = new CommandContributionItem(p);
123 return item;
124
125 }
126
127 private CommandContributionItem createDefaultMenuItem(TermType termType) {
128
129 Map<String, String> params = new HashMap<String, String>();
130 params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
131 termType.getUuid().toString());
132
133 CommandContributionItemParameter p = new CommandContributionItemParameter(
134 PlatformUI.getWorkbench(),
135 "",
136 "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
137 params,
138 null,
139 null,
140 null,
141 "Other " + termType.getMessage() + "s",
142 "",
143 "",
144 SWT.PUSH,
145 "",
146 true);
147
148
149
150 CommandContributionItem item = new CommandContributionItem(p);
151 return item;
152
153 }
154
155 private class SortByTermTypeMessage implements Comparator<TermType> {
156 @Override
157 public int compare(TermType t1, TermType t2) {
158 return t1.getMessage().compareTo(t2.getMessage());
159 }
160 }
161
162
163 }