Merge branch 'master' into lttng_2_0_control_dev
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / control / handlers / CreateChannelOnSessionHandler.java
1 /**********************************************************************
2 * Copyright (c) 2012 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Bernd Hufmann - Initial API and implementation
11 **********************************************************************/
12 package org.eclipse.linuxtools.lttng.ui.views.control.handlers;
13
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
17
18 import org.eclipse.core.commands.AbstractHandler;
19 import org.eclipse.core.commands.ExecutionEvent;
20 import org.eclipse.core.commands.ExecutionException;
21 import org.eclipse.core.runtime.IProgressMonitor;
22 import org.eclipse.core.runtime.IStatus;
23 import org.eclipse.core.runtime.Status;
24 import org.eclipse.core.runtime.jobs.Job;
25 import org.eclipse.jface.viewers.ISelection;
26 import org.eclipse.jface.viewers.StructuredSelection;
27 import org.eclipse.jface.window.Window;
28 import org.eclipse.linuxtools.lttng.ui.LTTngUiPlugin;
29 import org.eclipse.linuxtools.lttng.ui.views.control.ControlView;
30 import org.eclipse.linuxtools.lttng.ui.views.control.Messages;
31 import org.eclipse.linuxtools.lttng.ui.views.control.dialogs.CreateChannelDialog;
32 import org.eclipse.linuxtools.lttng.ui.views.control.dialogs.ICreateChannelOnSessionDialog;
33 import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState;
34 import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceDomainComponent;
35 import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent;
36 import org.eclipse.ui.IWorkbenchPage;
37 import org.eclipse.ui.IWorkbenchPart;
38 import org.eclipse.ui.IWorkbenchWindow;
39 import org.eclipse.ui.PlatformUI;
40
41 /**
42 * <b><u>CreateChannelOnSessionHandler</u></b>
43 * <p>
44 * Command handler implementation to create a trace channel for unknown domain
45 * (on session level).
46 * </p>
47 */
48 public class CreateChannelOnSessionHandler extends AbstractHandler {
49
50 // ------------------------------------------------------------------------
51 // Attributes
52 // ------------------------------------------------------------------------
53 /**
54 * The session component the command is to be executed on.
55 */
56 private TraceSessionComponent fSession = null;
57
58 // ------------------------------------------------------------------------
59 // Operations
60 // ------------------------------------------------------------------------
61 /*
62 * (non-Javadoc)
63 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
64 */
65 @Override
66 public Object execute(ExecutionEvent event) throws ExecutionException {
67
68 final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
69
70 if (window == null) {
71 return false;
72 }
73
74 final ICreateChannelOnSessionDialog dialog = new CreateChannelDialog(window.getShell());
75
76 if (dialog.open() == Window.OK) {
77 Job job = new Job(Messages.TraceControl_EnableChannelJob) {
78 @Override
79 protected IStatus run(IProgressMonitor monitor) {
80 String errorString = null;
81
82 List<String> channelNames = new ArrayList<String>();
83 TraceDomainComponent newDomain = new TraceDomainComponent("dummy", fSession); //$NON-NLS-1$
84 channelNames.add(dialog.getChannelInfo().getName());
85 newDomain.setIsKernel(dialog.isKernel());
86
87 try {
88 newDomain.enableChannels(channelNames, dialog.getChannelInfo(), monitor);
89 } catch (ExecutionException e) {
90 if (errorString == null) {
91 errorString = new String();
92 }
93 errorString += e.toString() + "\n"; //$NON-NLS-1$
94 }
95
96 // get session configuration in all cases
97 try {
98 fSession.getConfigurationFromNode(monitor);
99 } catch (ExecutionException e) {
100 if (errorString == null) {
101 errorString = new String();
102 }
103 errorString += Messages.TraceControl_ListSessionFailure + ": " + e.toString(); //$NON-NLS-1$
104 }
105
106 if (errorString != null) {
107 return new Status(Status.ERROR, LTTngUiPlugin.PLUGIN_ID, errorString);
108 }
109 return Status.OK_STATUS;
110 }};
111 job.setUser(true);
112 job.schedule();
113 }
114
115 return null;
116 }
117
118 /*
119 * (non-Javadoc)
120 * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
121 */
122 @Override
123 public boolean isEnabled() {
124 fSession = null;
125
126 // Check if we are closing down
127 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
128 if (window == null) {
129 return false;
130 }
131
132 // Check if we are in the Project View
133 IWorkbenchPage page = window.getActivePage();
134 if (page == null) {
135 return false;
136 }
137
138 IWorkbenchPart part = page.getActivePart();
139 if (!(part instanceof ControlView)) {
140 return false;
141 }
142
143 // Check if one session is selected
144 ISelection selection = page.getSelection(ControlView.ID);
145 if (selection instanceof StructuredSelection) {
146 StructuredSelection structered = ((StructuredSelection) selection);
147 for (Iterator<?> iterator = structered.iterator(); iterator.hasNext();) {
148 Object element = (Object) iterator.next();
149 if (element instanceof TraceSessionComponent) {
150 // Add only TraceSessionComponents that are inactive and not destroyed
151 TraceSessionComponent session = (TraceSessionComponent) element;
152 if ((session.getSessionState() == TraceSessionState.INACTIVE) && (!session.isDestroyed())) {
153 fSession = session;
154 }
155 }
156 }
157 }
158 return fSession != null;
159 }
160 }
This page took 0.035367 seconds and 6 git commands to generate.