Commit | Line | Data |
---|---|---|
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 | **********************************************************************/ | |
12 | package org.eclipse.tracecompass.internal.lttng2.control.ui.views.dialogs; | |
13 | ||
14 | import org.eclipse.jface.dialogs.MessageDialog; | |
15 | import org.eclipse.swt.SWT; | |
16 | import org.eclipse.swt.custom.CCombo; | |
17 | import org.eclipse.swt.events.SelectionEvent; | |
18 | import org.eclipse.swt.events.SelectionListener; | |
19 | import org.eclipse.swt.graphics.Point; | |
20 | import org.eclipse.swt.layout.GridData; | |
21 | import org.eclipse.swt.layout.GridLayout; | |
22 | import org.eclipse.swt.widgets.Button; | |
23 | import org.eclipse.swt.widgets.Composite; | |
24 | import org.eclipse.swt.widgets.Control; | |
25 | import org.eclipse.swt.widgets.Group; | |
26 | import org.eclipse.swt.widgets.Shell; | |
27 | import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType; | |
74fe9bdd | 28 | import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType; |
a20452b1 | 29 | import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel; |
74fe9bdd BR |
30 | import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel; |
31 | import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel; | |
3d2d8c9f | 32 | import org.eclipse.tracecompass.internal.lttng2.control.core.model.TracePythonLogLevel; |
74fe9bdd | 33 | import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel; |
a20452b1 BR |
34 | import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator; |
35 | import 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 | */ | |
42 | public 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 | } |