tmf.ui: Introduce TmfFileDialogFactory
[deliverable/tracecompass.git] / lttng / org.eclipse.tracecompass.lttng2.control.ui / src / org / eclipse / tracecompass / internal / lttng2 / control / ui / views / dialogs / GetLoggerInfoDialog.java
CommitLineData
a20452b1
BR
1/**********************************************************************
2 * Copyright (c) 2016 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 * Bruno Roy - Initial API and implementation
11 **********************************************************************/
12package org.eclipse.tracecompass.internal.lttng2.control.ui.views.dialogs;
13
14import org.eclipse.jface.dialogs.MessageDialog;
15import org.eclipse.swt.SWT;
16import org.eclipse.swt.custom.CCombo;
17import org.eclipse.swt.events.SelectionEvent;
18import org.eclipse.swt.events.SelectionListener;
19import org.eclipse.swt.graphics.Point;
20import org.eclipse.swt.layout.GridData;
21import org.eclipse.swt.layout.GridLayout;
22import org.eclipse.swt.widgets.Button;
23import org.eclipse.swt.widgets.Composite;
24import org.eclipse.swt.widgets.Control;
25import org.eclipse.swt.widgets.Group;
26import org.eclipse.swt.widgets.Shell;
27import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
74fe9bdd 28import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
a20452b1 29import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
74fe9bdd
BR
30import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
31import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
3d2d8c9f 32import org.eclipse.tracecompass.internal.lttng2.control.core.model.TracePythonLogLevel;
74fe9bdd 33import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
a20452b1
BR
34import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
35import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
36
37/**
38 * Dialog box for collecting information about the loggers to enable.
39 *
40 * @author Bruno Roy
41 */
42public class GetLoggerInfoDialog extends BaseGetInfoDialog implements IGetLoggerInfoDialog {
43
44 // ------------------------------------------------------------------------
45 // Attributes
46 // ------------------------------------------------------------------------
47 /**
48 * A button for selecting the log level (range 0 to level).
49 */
50 private Button fLogLevelButton;
51 /**
52 * A button for selecting the specified log level only.
53 */
54 private Button fLogLevelOnlyButton;
55 /**
56 * A Combo box for selecting the log level.
57 */
58 private CCombo fLogLevelCombo;
59 /**
60 * The selected log level.
61 */
74fe9bdd 62 private ITraceLogLevel fLogLevel;
a20452b1
BR
63 /**
64 * The type of the log level (loglevel or loglevel-only)
65 */
66 private LogLevelType fLogLevelType;
74fe9bdd
BR
67 /**
68 * The logger domain type ({@link TraceDomainType})
69 */
70 private TraceDomainType fLoggerDomain = TraceDomainType.UNKNOWN;
a20452b1
BR
71
72 // ------------------------------------------------------------------------
73 // Constructors
74 // ------------------------------------------------------------------------
75 /**
76 * Constructor of dialog box.
77 *
78 * @param shell
79 * the shell for the dialog box
80 */
81 public GetLoggerInfoDialog(Shell shell) {
82 super(shell);
83 }
84
85 // ------------------------------------------------------------------------
86 // Accessors
87 // ------------------------------------------------------------------------
88 @Override
74fe9bdd 89 public ITraceLogLevel getLogLevel() {
a20452b1
BR
90 return fLogLevel;
91 }
92 @Override
93 public LogLevelType getLogLevelType() {
94 return fLogLevelType;
95 }
96
74fe9bdd
BR
97 @Override
98 public void setLoggerDomain(TraceDomainType domain) {
99 fLoggerDomain = domain;
100
101 }
102
a20452b1
BR
103 // ------------------------------------------------------------------------
104 // Operations
105 // ------------------------------------------------------------------------
106
107 @Override
108 protected void configureShell(Shell newShell) {
109 super.configureShell(newShell);
110 newShell.setText(Messages.TraceControl_EnableLoggersDialogTitle);
111 newShell.setImage(Activator.getDefault().loadIcon(TARGET_NEW_CONNECTION_ICON_FILE));
112 }
113
114 @Override
115 protected Control createDialogArea(Composite parent) {
3d2d8c9f
BR
116 fLogLevel = null;
117 fLogLevelType = null;
a20452b1
BR
118 super.createDialogArea(parent);
119 // Main dialog panel
120 Composite dialogComposite = new Composite(parent, SWT.NONE);
121 GridLayout layout = new GridLayout(1, true);
122 dialogComposite.setLayout(layout);
123 dialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
124
125 fSessionsCombo.addSelectionListener(new SelectionListener() {
126 @Override
127 public void widgetSelected(SelectionEvent e) {
128 fSessionIndex = fSessionsCombo.getSelectionIndex();
129 fLogLevelCombo.setEnabled(fSessionIndex >= 0); // not sure what is the best method index, string or other
130 fLogLevelButton.setEnabled(fSessionsCombo.getText() != null);
131 fLogLevelOnlyButton.setEnabled(!fSessionsCombo.getText().isEmpty());
132 }
133
134 @Override
135 public void widgetDefaultSelected(SelectionEvent e) {
136 }
137 });
138 // Create the log level group
139 Group logLevelGroup = new Group(dialogComposite, SWT.SHADOW_NONE);
140 layout = new GridLayout(2, true);
141 logLevelGroup.setLayout(layout);
142 logLevelGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
143 GridData data = new GridData(GridData.FILL_HORIZONTAL);
144
145 fLogLevelButton = new Button(logLevelGroup, SWT.RADIO);
146 fLogLevelButton.setText(Messages.TraceControl_EnableEventsLogLevelTypeName);
147 fLogLevelButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTypeTooltip);
148 data = new GridData(GridData.FILL_BOTH);
149 fLogLevelButton.setLayoutData(data);
150 fLogLevelButton.setSelection(true);
151
152 fLogLevelOnlyButton = new Button(logLevelGroup, SWT.RADIO);
153 fLogLevelOnlyButton.setText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeName);
154 fLogLevelOnlyButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeTooltip);
155 data = new GridData(GridData.FILL_BOTH);
156 fLogLevelButton.setLayoutData(data);
157
74fe9bdd
BR
158 String[] levelNames = null;
159 switch (fLoggerDomain) {
160 case JUL:
3d2d8c9f 161 levelNames = findLoglevelNames(TraceJulLogLevel.class);
74fe9bdd
BR
162 break;
163 case LOG4J:
3d2d8c9f
BR
164 levelNames = findLoglevelNames(TraceLog4jLogLevel.class);
165 break;
166 case PYTHON:
167 levelNames = findLoglevelNames(TracePythonLogLevel.class);
74fe9bdd
BR
168 break;
169 //$CASES-OMITTED$
170 default:
171 break;
a20452b1
BR
172 }
173
174 fLogLevelCombo = new CCombo(logLevelGroup, SWT.READ_ONLY);
175 fLogLevelCombo.setItems(levelNames);
176 fLogLevelCombo.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTooltip);
177 data = new GridData(GridData.FILL_HORIZONTAL);
178 data.horizontalSpan = 4;
179 fLogLevelCombo.setLayoutData(data);
180
181 // By default the combo box and the buttons are not enabled
182 fLogLevelCombo.setEnabled(false);
183 fLogLevelButton.setEnabled(false);
184 fLogLevelOnlyButton.setEnabled(false);
185
a20452b1
BR
186 getShell().setMinimumSize(new Point(300, 200));
187
188 return dialogComposite;
189 }
190
191 @Override
192 protected void okPressed() {
193
194 if (fSessionsCombo.getSelectionIndex() < 0) {
195 MessageDialog.openError(getShell(),
196 Messages.TraceControl_EnableLoggersDialogTitle,
197 Messages.TraceControl_EnableEventsNoSessionError);
198 return;
199 }
200
201 fSessionIndex = fSessionsCombo.getSelectionIndex();
202
203 fLogLevel = null;
74fe9bdd 204 // If nothing is selected in the combo box that means that all the loglevels should be enabled.
a20452b1 205 if (!fLogLevelCombo.getText().isEmpty()) {
74fe9bdd 206 ITraceLogLevel[] levels;
a20452b1 207 int id = fLogLevelCombo.getSelectionIndex();
74fe9bdd
BR
208 switch (fLoggerDomain) {
209 case JUL:
210 levels = TraceJulLogLevel.values();
211 break;
212 case LOG4J:
213 levels = TraceLog4jLogLevel.values();
214 break;
3d2d8c9f
BR
215 case PYTHON:
216 levels = TracePythonLogLevel.values();
217 break;
74fe9bdd
BR
218 //$CASES-OMITTED$
219 default:
220 levels = TraceLogLevel.values();
221 break;
222 }
223 fLogLevel = levels[id];
a20452b1
BR
224
225 if (id < 0) {
226 MessageDialog.openError(getShell(),
227 Messages.TraceControl_EnableLoggersDialogTitle,
228 Messages.TraceControl_InvalidLogLevel);
229 }
230
231 fLogLevelType = LogLevelType.LOGLEVEL_NONE;
232 if (fLogLevelButton.getSelection()) {
233 fLogLevelType = LogLevelType.LOGLEVEL;
234 } else if (fLogLevelOnlyButton.getSelection()) {
235 fLogLevelType = LogLevelType.LOGLEVEL_ONLY;
236 }
a20452b1
BR
237 }
238 super.okPressed();
239 }
240
3d2d8c9f
BR
241 // ------------------------------------------------------------------------
242 // Helper methods
243 // ------------------------------------------------------------------------
244
245 /**
246 * Returns the values of a certain enum type.
247 *
248 * @param enumType
249 * a value of an enum type, this is to determine the type of the enum
250 * @return an array of String of the values of the enum type
251 */
252 private static String[] findLoglevelNames(Class<? extends ITraceLogLevel> enumType) {
253 ITraceLogLevel[] levels = enumType.getEnumConstants();
254 if (levels == null) {
255 return new String[0];
256 }
257 String[] levelNames = new String[levels.length - 1];
258 int l = 0;
259 for (int i = 0; i < levels.length; i++) {
260 if ((!levels[i].equals(TraceLog4jLogLevel.LEVEL_UNKNOWN)) &&
261 (!levels[i].equals(TracePythonLogLevel.LEVEL_UNKNOWN)) &&
262 (!levels[i].equals(TraceJulLogLevel.LEVEL_UNKNOWN))) {
263 levelNames[l++] = levels[i].getInName();
264 }
265 }
266 return levelNames;
267 }
268
a20452b1 269}
This page took 0.038358 seconds and 5 git commands to generate.