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 * Polytechnique Montréal - Initial API and implementation
11 * Bernd Hufmann - Productification, enhancements and fixes
13 *******************************************************************************/
14 package org
.eclipse
.linuxtools
.lttng
.ui
.tracecontrol
.model
;
16 import java
.util
.Iterator
;
20 import org
.eclipse
.core
.runtime
.IAdaptable
;
21 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
22 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
23 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
24 import org
.eclipse
.linuxtools
.lttng
.core
.tracecontrol
.model
.TraceResource
;
25 import org
.eclipse
.linuxtools
.lttng
.core
.tracecontrol
.model
.TraceResource
.PropertyInfo
;
26 import org
.eclipse
.linuxtools
.lttng
.core
.tracecontrol
.model
.TraceResource
.TraceState
;
27 import org
.eclipse
.linuxtools
.lttng
.ui
.LTTngUiPlugin
;
28 import org
.eclipse
.linuxtools
.lttng
.ui
.tracecontrol
.TraceControlConstants
;
29 import org
.eclipse
.linuxtools
.lttng
.ui
.tracecontrol
.Messages
;
30 import org
.eclipse
.rse
.core
.subsystems
.ISubSystem
;
31 import org
.eclipse
.rse
.ui
.SystemMenuManager
;
32 import org
.eclipse
.rse
.ui
.view
.AbstractSystemViewAdapter
;
33 import org
.eclipse
.rse
.ui
.view
.ISystemRemoteElementAdapter
;
34 import org
.eclipse
.swt
.widgets
.Shell
;
35 import org
.eclipse
.ui
.views
.properties
.IPropertyDescriptor
;
36 import org
.eclipse
.ui
.views
.properties
.PropertyDescriptor
;
39 * <b><u>TargetResourceAdapter</u></b>
41 * This is the adapter which enables us to work with our remote trace resources.
44 public class TraceResourceAdapter
extends AbstractSystemViewAdapter
implements ISystemRemoteElementAdapter
{
46 // ------------------------------------------------------------------------
48 // ------------------------------------------------------------------------
50 // ------------------------------------------------------------------------
52 // ------------------------------------------------------------------------
57 public TraceResourceAdapter() {
61 // ------------------------------------------------------------------------
63 // ------------------------------------------------------------------------
67 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#addActions(org.eclipse.rse.ui.SystemMenuManager, org.eclipse.jface.viewers.IStructuredSelection, org.eclipse.swt.widgets.Shell, java.lang.String)
70 public void addActions(SystemMenuManager menu
, IStructuredSelection selection
, Shell parent
, String menuGroup
) {
76 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getImageDescriptor(java.lang.Object)
79 public ImageDescriptor
getImageDescriptor(Object object
) {
80 return LTTngUiPlugin
.getDefault().getImageDescriptor(LTTngUiPlugin
.ICON_ID_TRACE
);
85 * @see org.eclipse.rse.ui.view.ISystemViewElementAdapter#getText(java.lang.Object)
88 public String
getText(Object element
) {
89 return ((TraceResource
) element
).getName();
94 * @see org.eclipse.rse.core.subsystems.IRemoteObjectIdentifier#getAbsoluteName(java.lang.Object)
97 public String
getAbsoluteName(Object object
) {
98 TraceResource tar
= (TraceResource
) object
;
104 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getType(java.lang.Object)
107 public String
getType(Object element
) {
108 return Messages
.Lttng_Resource_Trace
;
113 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getParent(java.lang.Object)
116 public Object
getParent(Object object
) {
117 return ((TraceResource
) object
).getParent();
122 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(org.eclipse.core.runtime.IAdaptable, org.eclipse.core.runtime.IProgressMonitor)
125 public Object
[] getChildren(IAdaptable element
, IProgressMonitor monitor
) {
131 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyDescriptors()
134 protected IPropertyDescriptor
[] internalGetPropertyDescriptors() {
135 // propertySourceInput holds the currently selected object
136 TraceResource trace
= (TraceResource
)propertySourceInput
;
138 Map
<String
, PropertyInfo
> properties
= trace
.getPropertyInfo();
140 PropertyDescriptor
[] propertyDescriptors
= new PropertyDescriptor
[properties
.size()];
142 Set
<String
> keys
= properties
.keySet();
144 for (Iterator
<String
> iterator
= keys
.iterator(); iterator
.hasNext();) {
145 String key
= iterator
.next();
146 PropertyInfo info
= properties
.get(key
);
147 propertyDescriptors
[i
++] = createSimplePropertyDescriptor(key
, info
.getName(), info
.getDescription());
150 return propertyDescriptors
;
155 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyValue(java.lang.Object)
158 protected Object
internalGetPropertyValue(Object key
) {
159 // propertySourceInput holds the currently selected object
160 TraceResource trace
= (TraceResource
)propertySourceInput
;
161 return trace
.getProperty((String
)key
);
166 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#showDelete(java.lang.Object)
169 public boolean showDelete(Object element
) {
175 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#showRefresh(java.lang.Object)
178 public boolean showRefresh(Object element
) {
184 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#showRename(java.lang.Object)
187 public boolean showRename(Object element
) {
193 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#supportsDeferredQueries(org.eclipse.rse.core.subsystems.ISubSystem)
196 public boolean supportsDeferredQueries(ISubSystem subSys
) {
199 // --------------------------------------
200 // ISystemRemoteElementAdapter methods...
201 // --------------------------------------
204 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getAbsoluteParentName(java.lang.Object)
207 public String
getAbsoluteParentName(Object element
) {
208 return Messages
.Lttng_Resource_Root
; // not really applicable as we have no unique hierarchy
213 * @see org.eclipse.rse.core.subsystems.ISystemRemoteObjectMatchProvider#getSubSystemConfigurationId(java.lang.Object)
216 public String
getSubSystemConfigurationId(Object element
) {
217 return "org.eclipse.linuxtools.lttng.rse.subsystems.factory"; // as declared in extension in plugin.xml //$NON-NLS-1$
222 * @see org.eclipse.rse.core.subsystems.ISystemRemoteObjectMatchProvider#getRemoteTypeCategory(java.lang.Object)
225 public String
getRemoteTypeCategory(Object element
) {
226 return TraceControlConstants
.Rse_Trace_Resource_Remote_Type_Category
; // Course grained. Same for all our remote resources.
231 * @see org.eclipse.rse.core.subsystems.ISystemRemoteObjectMatchProvider#getRemoteType(java.lang.Object)
234 public String
getRemoteType(Object element
) {
235 return TraceControlConstants
.Rse_Trace_Resource_Remote_Type
; // Fine grained. Unique to this resource type.
240 * @see org.eclipse.rse.core.subsystems.ISystemRemoteObjectMatchProvider#getRemoteSubType(java.lang.Object)
243 public String
getRemoteSubType(Object element
) {
244 return null; // Very fine grained. We don't use it.
249 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#refreshRemoteObject(java.lang.Object, java.lang.Object)
252 public boolean refreshRemoteObject(Object oldElement
, Object newElement
) {
253 TraceResource oldDevr
= (TraceResource
) oldElement
;
254 TraceResource newDevr
= (TraceResource
) newElement
;
255 newDevr
.setName(oldDevr
.getName());
262 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#supportsUserDefinedActions(java.lang.Object)
264 public boolean supportsUserDefinedActions(Object object
) {
270 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParent(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
273 public Object
getRemoteParent(Object element
, IProgressMonitor monitor
) throws Exception
{
274 return null; // leave as null if this is the root
279 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParentNamesInUse(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
282 public String
[] getRemoteParentNamesInUse(Object element
, IProgressMonitor monitor
) throws Exception
{
288 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#hasChildren(org.eclipse.core.runtime.IAdaptable)
291 public boolean hasChildren(IAdaptable arg0
) {
297 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#testAttribute(java.lang.Object, java.lang.String, java.lang.String)
299 @SuppressWarnings("nls")
301 public boolean testAttribute(Object target
, String name
, String value
) {
302 if(target
instanceof TraceResource
) {
303 TraceResource trace
= (TraceResource
) target
;
304 if (name
.equals("canConfigure") && value
.equals("yes")) {
305 if (trace
.getTraceState() != TraceState
.STOPPED
) {
309 else if (name
.equals("canStart") && value
.equals("yes")) {
310 if (trace
.getTraceState() == TraceState
.CONFIGURED
|| trace
.getTraceState() == TraceState
.PAUSED
) {
314 else if (name
.equals("canPause") && value
.equals("yes")) {
315 if (trace
.getTraceState() == TraceState
.STARTED
) {
319 else if (name
.equals("canStop") && value
.equals("yes")) {
320 if (trace
.getTraceState() == TraceState
.CREATED
|| trace
.getTraceState() == TraceState
.PAUSED
|| trace
.getTraceState() == TraceState
.CONFIGURED
) {
324 else if (name
.equals("canBrowse") && value
.equals("yes")) {
325 if ((trace
.getTraceConfig() != null) && trace
.getTraceConfig().isNetworkTrace() && (trace
.getTraceState() == TraceState
.STOPPED
)) {
329 else if (name
.equals("canDelete") && value
.equals("yes")) {
330 if (trace
.getTraceState() == TraceState
.STOPPED
) {
334 else if (name
.equals("canImport") && value
.equals("yes")) {
335 if (trace
.getTraceState() == TraceState
.STOPPED
) {
337 } else if (trace
.getTraceState() != TraceState
.CREATED
&& trace
.getTraceConfig().isNetworkTrace()) {
342 return super.testAttribute(target
, name
, value
);