1 /*******************************************************************************
2 * Copyright (c) 2011 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.ui
.project
.handlers
;
15 import java
.util
.HashMap
;
16 import java
.util
.HashSet
;
17 import java
.util
.LinkedList
;
20 import org
.eclipse
.core
.runtime
.IConfigurationElement
;
21 import org
.eclipse
.core
.runtime
.Platform
;
22 import org
.eclipse
.jface
.action
.IContributionItem
;
23 import org
.eclipse
.jface
.action
.MenuManager
;
24 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
25 import org
.eclipse
.jface
.viewers
.ISelection
;
26 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
27 import org
.eclipse
.linuxtools
.tmf
.core
.util
.TmfTraceType
;
28 import org
.eclipse
.linuxtools
.tmf
.ui
.TmfUiPlugin
;
29 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomTxtTrace
;
30 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomTxtTraceDefinition
;
31 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomXmlTrace
;
32 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomXmlTraceDefinition
;
33 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceElement
;
34 import org
.eclipse
.ui
.IWorkbenchPage
;
35 import org
.eclipse
.ui
.IWorkbenchWindow
;
36 import org
.eclipse
.ui
.PlatformUI
;
37 import org
.eclipse
.ui
.actions
.CompoundContributionItem
;
38 import org
.eclipse
.ui
.menus
.CommandContributionItem
;
39 import org
.eclipse
.ui
.menus
.CommandContributionItemParameter
;
41 public class SelectTraceTypeContributionItem
extends CompoundContributionItem
{
43 //private static final ImageDescriptor SELECTED_ICON = ImageDescriptor.createFromImage(TmfUiPlugin.getDefault().getImageFromPath("icons/elcl16/bullet.gif")); //$NON-NLS-1$
44 private static final ImageDescriptor SELECTED_ICON
= TmfUiPlugin
.getDefault().getImageDescripterFromPath(
45 "icons/elcl16/bullet.gif"); //$NON-NLS-1$
46 private static final String BUNDLE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.bundle"; //$NON-NLS-1$
47 private static final String TYPE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.type"; //$NON-NLS-1$
48 private static final String ICON_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.icon"; //$NON-NLS-1$
49 private static final String SELECT_TRACE_TYPE_COMMAND_ID
= "org.eclipse.linuxtools.tmf.ui.command.project.trace.select_trace_type"; //$NON-NLS-1$
50 private static final String CUSTOM_TXT_CATEGORY
= "Custom Text"; //$NON-NLS-1$
51 private static final String CUSTOM_XML_CATEGORY
= "Custom XML"; //$NON-NLS-1$
52 private static final String DEFAULT_TRACE_ICON_PATH
= "icons/elcl16/trace.gif"; //$NON-NLS-1$
55 protected IContributionItem
[] getContributionItems() {
56 LinkedList
<IContributionItem
> list
= new LinkedList
<IContributionItem
>();
58 HashMap
<String
, MenuManager
> categoriesMap
= new HashMap
<String
, MenuManager
>();
59 IConfigurationElement
[] config
= Platform
.getExtensionRegistry().getConfigurationElementsFor(
60 TmfTraceType
.TMF_TRACE_TYPE_ID
);
61 for (IConfigurationElement ce
: config
) {
62 if (ce
.getName().equals(TmfTraceType
.CATEGORY_ELEM
)) {
63 MenuManager subMenu
= new MenuManager(ce
.getAttribute(TmfTraceType
.NAME_ATTR
));
64 categoriesMap
.put(ce
.getAttribute(TmfTraceType
.ID_ATTR
), subMenu
);
68 if (CustomTxtTraceDefinition
.loadAll().length
> 0) {
69 MenuManager subMenu
= new MenuManager(CUSTOM_TXT_CATEGORY
);
70 categoriesMap
.put(CUSTOM_TXT_CATEGORY
, subMenu
);
73 if (CustomXmlTraceDefinition
.loadAll().length
> 0) {
74 MenuManager subMenu
= new MenuManager(CUSTOM_XML_CATEGORY
);
75 categoriesMap
.put(CUSTOM_XML_CATEGORY
, subMenu
);
79 HashSet
<String
> selectedTraceTypes
= new HashSet
<String
>();
80 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
81 IWorkbenchPage page
= window
.getActivePage();
82 ISelection selection
= page
.getSelection();
83 if (selection
instanceof StructuredSelection
) {
84 for (Object element
: ((StructuredSelection
) selection
).toList()) {
85 if (element
instanceof TmfTraceElement
) {
86 TmfTraceElement trace
= (TmfTraceElement
) element
;
87 selectedTraceTypes
.add(trace
.getTraceType());
92 for (IConfigurationElement ce
: config
) {
93 if (ce
.getName().equals(TmfTraceType
.TYPE_ELEM
)) {
94 String traceBundle
= ce
.getContributor().getName();
95 String traceTypeId
= ce
.getAttribute(TmfTraceType
.ID_ATTR
);
96 String traceIcon
= ce
.getAttribute(TmfTraceType
.ICON_ATTR
);
97 String label
= ce
.getAttribute(TmfTraceType
.NAME_ATTR
).replaceAll("&", "&&"); //$NON-NLS-1$ //$NON-NLS-2$
98 boolean selected
= selectedTraceTypes
.contains(traceTypeId
);
99 MenuManager subMenu
= categoriesMap
.get(ce
.getAttribute(TmfTraceType
.CATEGORY_ATTR
));
101 addContributionItem(list
, traceBundle
, traceTypeId
, traceIcon
, label
, selected
, subMenu
);
105 // add the custom trace types
106 for (CustomTxtTraceDefinition def
: CustomTxtTraceDefinition
.loadAll()) {
107 String traceBundle
= TmfUiPlugin
.getDefault().getBundle().getSymbolicName();
108 String traceTypeId
= CustomTxtTrace
.class.getCanonicalName() + ":" + def
.definitionName
; //$NON-NLS-1$
109 String traceIcon
= DEFAULT_TRACE_ICON_PATH
;
110 String label
= def
.definitionName
;
111 boolean selected
= selectedTraceTypes
.contains(traceTypeId
);
112 MenuManager subMenu
= categoriesMap
.get(CUSTOM_TXT_CATEGORY
);
114 addContributionItem(list
, traceBundle
, traceTypeId
, traceIcon
, label
, selected
, subMenu
);
116 for (CustomXmlTraceDefinition def
: CustomXmlTraceDefinition
.loadAll()) {
117 String traceBundle
= TmfUiPlugin
.getDefault().getBundle().getSymbolicName();
118 String traceTypeId
= CustomXmlTrace
.class.getCanonicalName() + ":" + def
.definitionName
; //$NON-NLS-1$
119 String traceIcon
= DEFAULT_TRACE_ICON_PATH
;
120 String label
= def
.definitionName
;
121 boolean selected
= selectedTraceTypes
.contains(traceTypeId
);
122 MenuManager subMenu
= categoriesMap
.get(CUSTOM_XML_CATEGORY
);
124 addContributionItem(list
, traceBundle
, traceTypeId
, traceIcon
, label
, selected
, subMenu
);
127 return list
.toArray(new IContributionItem
[list
.size()]);
130 private void addContributionItem(LinkedList
<IContributionItem
> list
,
131 String traceBundle
, String traceTypeId
, String traceIcon
, String label
, boolean selected
,
132 MenuManager subMenu
) {
133 Map
<String
, String
> params
;
135 params
= new HashMap
<String
, String
>();
136 params
.put(BUNDLE_PARAMETER
, traceBundle
);
137 params
.put(TYPE_PARAMETER
, traceTypeId
);
138 params
.put(ICON_PARAMETER
, traceIcon
);
140 ImageDescriptor icon
= null;
142 icon
= SELECTED_ICON
;
145 CommandContributionItemParameter param
= new CommandContributionItemParameter(PlatformUI
.getWorkbench()
146 .getActiveWorkbenchWindow(), "my.parameterid", // id //$NON-NLS-1$
147 SELECT_TRACE_TYPE_COMMAND_ID
, // commandId
148 params
, // parameters
150 icon
, // disabled icon
155 CommandContributionItem
.STYLE_PUSH
, // style
156 null, // help context id
157 true // visibleEnable
160 if (subMenu
!= null) {
161 subMenu
.add(new CommandContributionItem(param
));
163 list
.add(new CommandContributionItem(param
));