1 /*******************************************************************************
2 * Copyright (c) 2011, 2013 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
.internal
.tmf
.ui
.project
.handlers
;
15 import java
.util
.HashMap
;
16 import java
.util
.HashSet
;
17 import java
.util
.LinkedList
;
18 import java
.util
.List
;
22 import org
.eclipse
.core
.runtime
.IConfigurationElement
;
23 import org
.eclipse
.core
.runtime
.Platform
;
24 import org
.eclipse
.jface
.action
.IContributionItem
;
25 import org
.eclipse
.jface
.action
.MenuManager
;
26 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
27 import org
.eclipse
.jface
.viewers
.ISelection
;
28 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
29 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.Activator
;
30 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.parsers
.custom
.CustomTxtTrace
;
31 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.parsers
.custom
.CustomTxtTraceDefinition
;
32 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.parsers
.custom
.CustomXmlTrace
;
33 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.parsers
.custom
.CustomXmlTraceDefinition
;
34 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceElement
;
35 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceType
;
36 import org
.eclipse
.ui
.IWorkbenchPage
;
37 import org
.eclipse
.ui
.IWorkbenchWindow
;
38 import org
.eclipse
.ui
.PlatformUI
;
39 import org
.eclipse
.ui
.actions
.CompoundContributionItem
;
40 import org
.eclipse
.ui
.menus
.CommandContributionItem
;
41 import org
.eclipse
.ui
.menus
.CommandContributionItemParameter
;
44 * ContributionItem for the trace type selection.
46 * @author Patrick Tassé
48 public class SelectTraceTypeContributionItem
extends CompoundContributionItem
{
50 //private static final ImageDescriptor SELECTED_ICON = ImageDescriptor.createFromImage(TmfUiPlugin.getDefault().getImageFromPath("icons/elcl16/bullet.gif")); //$NON-NLS-1$
51 private static final ImageDescriptor SELECTED_ICON
= Activator
.getDefault().getImageDescripterFromPath(
52 "icons/elcl16/bullet.gif"); //$NON-NLS-1$
53 private static final String BUNDLE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.select_trace_type.bundle"; //$NON-NLS-1$
54 private static final String TYPE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.select_trace_type.type"; //$NON-NLS-1$
55 private static final String ICON_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.select_trace_type.icon"; //$NON-NLS-1$
56 private static final String SELECT_TRACE_TYPE_COMMAND_ID
= "org.eclipse.linuxtools.tmf.ui.command.select_trace_type"; //$NON-NLS-1$
57 private static final String CUSTOM_TXT_CATEGORY
= "Custom Text"; //$NON-NLS-1$
58 private static final String CUSTOM_XML_CATEGORY
= "Custom XML"; //$NON-NLS-1$
59 private static final String DEFAULT_TRACE_ICON_PATH
= "icons/elcl16/trace.gif"; //$NON-NLS-1$
62 protected IContributionItem
[] getContributionItems() {
64 Set
<String
> selectedTraceTypes
= new HashSet
<>();
65 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
66 IWorkbenchPage page
= window
.getActivePage();
67 ISelection selection
= page
.getSelection();
68 if (selection
instanceof StructuredSelection
) {
69 for (Object element
: ((StructuredSelection
) selection
).toList()) {
70 if (element
instanceof TmfTraceElement
) {
71 TmfTraceElement trace
= (TmfTraceElement
) element
;
72 selectedTraceTypes
.add(trace
.getTraceType());
77 List
<IContributionItem
> list
= new LinkedList
<>();
79 Map
<String
, MenuManager
> categoriesMap
= new HashMap
<>();
80 IConfigurationElement
[] config
= Platform
.getExtensionRegistry().getConfigurationElementsFor(
81 TmfTraceType
.TMF_TRACE_TYPE_ID
);
82 for (IConfigurationElement ce
: config
) {
83 if (ce
.getName().equals(TmfTraceType
.CATEGORY_ELEM
)) {
84 String categoryId
= ce
.getAttribute(TmfTraceType
.ID_ATTR
);
85 ImageDescriptor icon
= isSelectedCategory(categoryId
, config
, selectedTraceTypes
) ? SELECTED_ICON
: null;
86 MenuManager subMenu
= new MenuManager(ce
.getAttribute(TmfTraceType
.NAME_ATTR
), icon
, null);
87 categoriesMap
.put(categoryId
, subMenu
);
91 CustomTxtTraceDefinition
[] customTxtTraceDefinitions
= CustomTxtTraceDefinition
.loadAll();
92 if (customTxtTraceDefinitions
.length
> 0) {
93 ImageDescriptor icon
= isSelectedCategory(customTxtTraceDefinitions
, selectedTraceTypes
) ? SELECTED_ICON
: null;
94 MenuManager subMenu
= new MenuManager(CUSTOM_TXT_CATEGORY
, icon
, null);
95 categoriesMap
.put(CUSTOM_TXT_CATEGORY
, subMenu
);
98 CustomXmlTraceDefinition
[] customXmlTraceDefinitions
= CustomXmlTraceDefinition
.loadAll();
99 if (customXmlTraceDefinitions
.length
> 0) {
100 ImageDescriptor icon
= isSelectedCategory(customXmlTraceDefinitions
, selectedTraceTypes
) ? SELECTED_ICON
: null;
101 MenuManager subMenu
= new MenuManager(CUSTOM_XML_CATEGORY
, icon
, null);
102 categoriesMap
.put(CUSTOM_XML_CATEGORY
, subMenu
);
106 for (IConfigurationElement ce
: config
) {
107 if (ce
.getName().equals(TmfTraceType
.TYPE_ELEM
)) {
108 String traceBundle
= ce
.getContributor().getName();
109 String traceTypeId
= ce
.getAttribute(TmfTraceType
.ID_ATTR
);
110 String traceIcon
= ce
.getAttribute(TmfTraceType
.ICON_ATTR
);
111 String label
= ce
.getAttribute(TmfTraceType
.NAME_ATTR
).replaceAll("&", "&&"); //$NON-NLS-1$ //$NON-NLS-2$
112 boolean selected
= selectedTraceTypes
.contains(traceTypeId
);
113 MenuManager subMenu
= categoriesMap
.get(ce
.getAttribute(TmfTraceType
.CATEGORY_ATTR
));
115 addContributionItem(list
, traceBundle
, traceTypeId
, traceIcon
, label
, selected
, subMenu
);
119 // add the custom trace types
120 for (CustomTxtTraceDefinition def
: customTxtTraceDefinitions
) {
121 String traceBundle
= Activator
.getDefault().getBundle().getSymbolicName();
122 String traceTypeId
= CustomTxtTrace
.class.getCanonicalName() + ":" + def
.definitionName
; //$NON-NLS-1$
123 String traceIcon
= DEFAULT_TRACE_ICON_PATH
;
124 String label
= def
.definitionName
;
125 boolean selected
= selectedTraceTypes
.contains(traceTypeId
);
126 MenuManager subMenu
= categoriesMap
.get(CUSTOM_TXT_CATEGORY
);
128 addContributionItem(list
, traceBundle
, traceTypeId
, traceIcon
, label
, selected
, subMenu
);
130 for (CustomXmlTraceDefinition def
: customXmlTraceDefinitions
) {
131 String traceBundle
= Activator
.getDefault().getBundle().getSymbolicName();
132 String traceTypeId
= CustomXmlTrace
.class.getCanonicalName() + ":" + def
.definitionName
; //$NON-NLS-1$
133 String traceIcon
= DEFAULT_TRACE_ICON_PATH
;
134 String label
= def
.definitionName
;
135 boolean selected
= selectedTraceTypes
.contains(traceTypeId
);
136 MenuManager subMenu
= categoriesMap
.get(CUSTOM_XML_CATEGORY
);
138 addContributionItem(list
, traceBundle
, traceTypeId
, traceIcon
, label
, selected
, subMenu
);
141 return list
.toArray(new IContributionItem
[list
.size()]);
144 private static void addContributionItem(List
<IContributionItem
> list
,
145 String traceBundle
, String traceTypeId
, String traceIcon
,
146 String label
, boolean selected
,
147 MenuManager subMenu
) {
148 Map
<String
, String
> params
;
150 params
= new HashMap
<>();
151 params
.put(BUNDLE_PARAMETER
, traceBundle
);
152 params
.put(TYPE_PARAMETER
, traceTypeId
);
153 params
.put(ICON_PARAMETER
, traceIcon
);
155 ImageDescriptor icon
= null;
157 icon
= SELECTED_ICON
;
160 CommandContributionItemParameter param
= new CommandContributionItemParameter(
161 PlatformUI
.getWorkbench().getActiveWorkbenchWindow(), // serviceLocator
162 "my.parameterid", // id //$NON-NLS-1$
163 SELECT_TRACE_TYPE_COMMAND_ID
, // commandId
164 CommandContributionItem
.STYLE_PUSH
// style
166 param
.parameters
= params
;
168 param
.disabledIcon
= icon
;
169 param
.hoverIcon
= icon
;
171 param
.visibleEnabled
= true;
173 if (subMenu
!= null) {
174 subMenu
.add(new CommandContributionItem(param
));
176 list
.add(new CommandContributionItem(param
));
180 private static boolean isSelectedCategory(String categoryId
, IConfigurationElement
[] config
, Set
<String
> selectedTraceTypes
) {
181 for (IConfigurationElement ce
: config
) {
182 if (ce
.getName().equals(TmfTraceType
.TYPE_ELEM
)) {
183 String traceTypeId
= ce
.getAttribute(TmfTraceType
.ID_ATTR
);
184 if (selectedTraceTypes
.contains(traceTypeId
)) {
185 if (categoryId
.equals(ce
.getAttribute(TmfTraceType
.CATEGORY_ATTR
))) {
194 private static boolean isSelectedCategory(CustomTxtTraceDefinition
[] customTxtTraceDefinitions
, Set
<String
> selectedTraceTypes
) {
195 for (CustomTxtTraceDefinition def
: customTxtTraceDefinitions
) {
196 String traceTypeId
= CustomTxtTrace
.class.getCanonicalName() + ":" + def
.definitionName
; //$NON-NLS-1$
197 if (selectedTraceTypes
.contains(traceTypeId
)) {
204 private static boolean isSelectedCategory(CustomXmlTraceDefinition
[] customXmlTraceDefinitions
, Set
<String
> selectedTraceTypes
) {
205 for (CustomXmlTraceDefinition def
: customXmlTraceDefinitions
) {
206 String traceTypeId
= CustomXmlTrace
.class.getCanonicalName() + ":" + def
.definitionName
; //$NON-NLS-1$
207 if (selectedTraceTypes
.contains(traceTypeId
)) {