Fix static analysis warnings for UML2SD
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / uml2sd / dialogs / SearchFilterDialog.java
1 /**********************************************************************
2 * Copyright (c) 2005, 2008 IBM Corporation and others.
3 * Copyright (c) 2011, 2012 Ericsson.
4 *
5 * All rights reserved. This program and the accompanying materials
6 * are made available under the terms of the Eclipse Public License v1.0
7 * which accompanies this distribution, and is available at
8 * http://www.eclipse.org/legal/epl-v10.html
9 *
10 * Contributors:
11 * IBM - Initial API and implementation
12 * Bernd Hufmann - Updated for TMF
13 **********************************************************************/
14 package org.eclipse.linuxtools.tmf.ui.views.uml2sd.dialogs;
15
16 import java.util.ArrayList;
17 import java.util.List;
18
19 import org.eclipse.jface.dialogs.Dialog;
20 import org.eclipse.jface.dialogs.DialogSettings;
21 import org.eclipse.jface.dialogs.IDialogConstants;
22 import org.eclipse.linuxtools.internal.tmf.ui.TmfUiPlugin;
23 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.SDView;
24 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.AsyncMessage;
25 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.AsyncMessageReturn;
26 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode;
27 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.Lifeline;
28 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.Stop;
29 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.SyncMessage;
30 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.SyncMessageReturn;
31 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.provider.ISDFindProvider;
32 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.provider.ISDGraphNodeSupporter;
33 import org.eclipse.linuxtools.tmf.ui.views.uml2sd.util.SDMessages;
34 import org.eclipse.swt.SWT;
35 import org.eclipse.swt.widgets.Button;
36 import org.eclipse.swt.widgets.Composite;
37 import org.eclipse.swt.widgets.Control;
38 import org.eclipse.swt.widgets.TabFolder;
39
40 /**
41 * This is the common dialog to define Find and/or Filter Criteria(s)
42 */
43 public class SearchFilterDialog extends Dialog {
44
45 // ------------------------------------------------------------------------
46 // Constants
47 // ------------------------------------------------------------------------
48 /**
49 * The find criteria property name
50 */
51 protected static final String FIND_CRITERIA = "findCriteria"; //$NON-NLS-1$
52 /**
53 * The find expression list property name
54 */
55 protected static final String FIND_EXPRESSION_LIST = "findExpressionList"; //$NON-NLS-1$
56 /**
57 * The filter criteria poperty name
58 */
59 protected static final String FILTER_CRITERIA = "filterCriteria"; //$NON-NLS-1$
60 /**
61 * The filter expression list property name
62 */
63 protected static final String FILTER_EXPRESSION_LIST = "filterExpressionList"; //$NON-NLS-1$
64 /**
65 * The maximum number of expressions stored.
66 */
67 protected static final int MAX_EXPRESSION_LIST = 7;
68
69 // ------------------------------------------------------------------------
70 // Attributes
71 // ------------------------------------------------------------------------
72
73 /**
74 * The sequence diagram view reference.
75 */
76 protected SDView fSdView = null;
77
78 /**
79 * The tab with the controls for a Criteria
80 */
81 protected TabFolder fTabFolder = null;
82
83 /**
84 * The Criteria updated by this dialog
85 */
86 protected Criteria fCriteria = null;
87
88 /**
89 * The find/filter provider telling which graph nodes are supported
90 */
91 protected ISDGraphNodeSupporter fProvider = null;
92
93 /**
94 * The okText is the text for the Ok button and title is the title of the dialog.<br>
95 * Both depend (okText and title (below)) on the usage that is done of this dialog
96 * (find or filter).
97 */
98 protected String fOkText;
99
100 /**
101 * The title is the title of the dialog.<br>
102 * Both depend (okText and title) on the usage that is done of this dialog
103 * (find or filter).
104 */
105 protected String fTitle;
106
107 /**
108 * List of string expressions that have been searched already
109 */
110 protected String[] fExpressionList;
111
112 /**
113 * find is true if the dialog is for the find feature and false for filter feature
114 */
115 protected boolean fIsFind;
116
117 // ------------------------------------------------------------------------
118 // Constructors
119 // ------------------------------------------------------------------------
120 /**
121 * Standard constructor
122 *
123 * @param view A sequence diagram view reference
124 * @param provider A graph node supporter provider
125 * @param filter A flag to indicate filtering (true) or finding (false)
126 * @param style Style bits
127 */
128 public SearchFilterDialog(SDView view, ISDGraphNodeSupporter provider, boolean filter, int style) {
129 super(view.getSDWidget().getShell());
130 setShellStyle(SWT.DIALOG_TRIM | style);
131 fProvider = provider;
132 fSdView = view;
133 fIsFind = !filter;
134 }
135
136 // ------------------------------------------------------------------------
137 // Methods
138 // ------------------------------------------------------------------------
139
140 /*
141 * (non-Javadoc)
142 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
143 */
144 @Override
145 public Control createDialogArea(Composite arg0) {
146 if (fIsFind) {
147 fExpressionList = TmfUiPlugin.getDefault().getDialogSettings().getArray(FIND_EXPRESSION_LIST);
148 } else {
149 fExpressionList = TmfUiPlugin.getDefault().getDialogSettings().getArray(FILTER_EXPRESSION_LIST);
150 }
151 if (fExpressionList == null) {
152 fExpressionList = new String[0];
153 }
154 return new TabContents(arg0, fProvider, getButton(IDialogConstants.OK_ID), fExpressionList);
155 }
156
157 /**
158 * Open the dialog box
159 */
160 @Override
161 public int open() {
162 create();
163
164 if (fCriteria == null) {
165 loadCriteria();
166 }
167
168 if (fCriteria == null) {
169 fCriteria = new Criteria();
170 fCriteria.setLifeLineSelected(fProvider.isNodeSupported(ISDGraphNodeSupporter.LIFELINE));
171 fCriteria.setSyncMessageSelected(fProvider.isNodeSupported(ISDGraphNodeSupporter.SYNCMESSAGE));
172 fCriteria.setSyncMessageReturnSelected(fProvider.isNodeSupported(ISDGraphNodeSupporter.SYNCMESSAGERETURN));
173 fCriteria.setAsyncMessageSelected(fProvider.isNodeSupported(ISDGraphNodeSupporter.ASYNCMESSAGE));
174 fCriteria.setAsyncMessageReturnSelected(fProvider.isNodeSupported(ISDGraphNodeSupporter.ASYNCMESSAGERETURN));
175 fCriteria.setStopSelected(fProvider.isNodeSupported(ISDGraphNodeSupporter.STOP));
176 }
177 copyFromCriteria(fCriteria);
178
179 if (fOkText != null) {
180 getButton(IDialogConstants.OK_ID).setText(fOkText);
181 } else {
182 getButton(IDialogConstants.OK_ID).setText(SDMessages._21);
183 }
184
185 if (fIsFind) {
186 getButton(IDialogConstants.CANCEL_ID).setText(SDMessages._22);
187 }
188
189 Button okButton = getButton(IDialogConstants.OK_ID);
190 ((TabContents) getDialogArea()).setOkButton(okButton);
191 if (fCriteria == null || !((fCriteria.getExpression() != null && !fCriteria.getExpression().equals("")) && //$NON-NLS-1$
192 (fCriteria.isAsyncMessageReturnSelected() || fCriteria.isAsyncMessageSelected() || fCriteria.isLifeLineSelected() || fCriteria.isStopSelected() || fCriteria.isSyncMessageReturnSelected() || fCriteria.isSyncMessageSelected()))) {
193 okButton.setEnabled(false);
194 }
195
196 if (fTitle != null) {
197 getShell().setText(fTitle);
198 } else {
199 getShell().setText(SDMessages._24);
200 }
201
202 getShell().pack();
203 getShell().setLocation(getShell().getDisplay().getCursorLocation());
204
205 fCriteria = null;
206 return super.open();
207 }
208
209 /**
210 * Loads criteria from the dialog settings which are saved in the workspace.
211 */
212 @SuppressWarnings("rawtypes")
213 protected void loadCriteria() {
214
215 String CRITERIA = FIND_CRITERIA;
216 if (!fIsFind) {
217 CRITERIA = FILTER_CRITERIA;
218 }
219
220 DialogSettings section = (DialogSettings) TmfUiPlugin.getDefault().getDialogSettings().getSection(CRITERIA);
221 List selection = fSdView.getSDWidget().getSelection();
222 if ((selection == null || selection.size() != 1) || (!fIsFind)) {
223 if (section != null) {
224 fCriteria = new Criteria();
225 fCriteria.load(section);
226 }
227 } else {
228 GraphNode gn = (GraphNode) selection.get(0);
229 fCriteria = new Criteria();
230 fCriteria.setExpression(gn.getName());
231 fCriteria.setCaseSenstiveSelected(true);
232 if (gn instanceof Lifeline && fProvider.isNodeSupported(ISDGraphNodeSupporter.LIFELINE)) {
233 fCriteria.setLifeLineSelected(true);
234 } else if (gn instanceof SyncMessageReturn && fProvider.isNodeSupported(ISDGraphNodeSupporter.SYNCMESSAGERETURN)) {
235 fCriteria.setSyncMessageReturnSelected(true);
236 } else if ((gn instanceof SyncMessageReturn || gn instanceof SyncMessage) && fProvider.isNodeSupported(ISDGraphNodeSupporter.SYNCMESSAGE)) {
237 fCriteria.setSyncMessageSelected(true);
238 } else if (gn instanceof AsyncMessageReturn && fProvider.isNodeSupported(ISDGraphNodeSupporter.ASYNCMESSAGERETURN)) {
239 fCriteria.setAsyncMessageReturnSelected(true);
240 } else if ((gn instanceof AsyncMessageReturn || gn instanceof AsyncMessage) && fProvider.isNodeSupported(ISDGraphNodeSupporter.ASYNCMESSAGE)) {
241 fCriteria.setAsyncMessageSelected(true);
242 } else if (gn instanceof Stop && fProvider.isNodeSupported(ISDGraphNodeSupporter.STOP)) {
243 fCriteria.setStopSelected(true);
244 }
245 }
246 }
247
248 /**
249 * Called when the dialog box ok button is pressed and calls back
250 * the appropriate action provider (ISDFilterProvider or ISDFindProvider).
251 *
252 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
253 */
254 @Override
255 public void okPressed() {
256 copyToCriteria();
257 if (!fIsFind) {
258 saveCriteria();
259 super.close(); // Filter is modal
260 }
261 if ((fProvider != null) && (fProvider instanceof ISDFindProvider) && fIsFind) {
262 boolean result = ((ISDFindProvider) fProvider).find(fCriteria);
263 TabContents content = getTabContents();
264 content.setResult(result);
265 }
266 }
267
268 /*
269 * (non-Javadoc)
270 * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
271 */
272 @Override
273 public void cancelPressed() {
274 if (fIsFind) {
275 copyToCriteria();
276 if (fProvider instanceof ISDFindProvider) {
277 ((ISDFindProvider) fProvider).cancel();
278 }
279 saveCriteria();
280 }
281 super.cancelPressed();
282 }
283
284 /**
285 * Saves the criteria to the dialog settings within the workspace.
286 */
287 public void saveCriteria() {
288 String CRITERIA = FIND_CRITERIA;
289 String EXPRESSION_LIST = FIND_EXPRESSION_LIST;
290 if (!fIsFind) {
291 CRITERIA = FILTER_CRITERIA;
292 EXPRESSION_LIST = FILTER_EXPRESSION_LIST;
293 }
294 DialogSettings settings = (DialogSettings) TmfUiPlugin.getDefault().getDialogSettings();
295 DialogSettings section = (DialogSettings) settings.getSection(CRITERIA);
296 if (section == null) {
297 section = (DialogSettings) settings.addNewSection(CRITERIA);
298 }
299 fCriteria.save(section);
300
301 if (fCriteria.getExpression().length() > 0) {
302 ArrayList<String> list = new ArrayList<String>();
303 for (int i = 0; i < fExpressionList.length; i++) {
304 list.add(fExpressionList[i]);
305 }
306 // Remove the used expression if one from the dropdown list
307 list.remove(fCriteria.getExpression());
308 // Put the new expression at the beginning
309 list.add(0, fCriteria.getExpression());
310 // Fill in the expressionList, truncating to MAX_EXPRESSION_LIST
311 int size = Math.min(list.size(), MAX_EXPRESSION_LIST);
312 String[] temp = new String[size];
313 for (int i = 0; i < size; i++) {
314 temp[i] = (String) list.get(i);
315 }
316 fExpressionList = temp;
317 settings.put(EXPRESSION_LIST, fExpressionList);
318 }
319 }
320
321 /**
322 * Returns the criteria
323 *
324 * @return the criteria
325 */
326 public Criteria getCriteria() {
327 return fCriteria;
328 }
329
330 /**
331 * Sets the criteria.
332 *
333 * @param criteria the criteria to set.
334 */
335 public void setCriteria(Criteria criteria) {
336 fCriteria = criteria;
337 }
338
339 /**
340 * Get the current end-user settings from the dialog to a Criteria
341 */
342 public void copyToCriteria() {
343 fCriteria = new Criteria();
344 TabContents content = getTabContents();
345 fCriteria.setLifeLineSelected(content.isLifelineButtonSelected());
346 fCriteria.setSyncMessageSelected(content.isSynMessageButtonSelected());
347 fCriteria.setSyncMessageReturnSelected(content.isSynMessageReturnButtonSelected());
348 fCriteria.setAsyncMessageSelected(content.isAsynMessageButtonSelected());
349 fCriteria.setAsyncMessageReturnSelected(content.isAsynMessageReturnButtonSelected());
350 fCriteria.setStopSelected(content.isStopButtonSelected());
351 fCriteria.setCaseSenstiveSelected(content.isCaseSensitiveSelected());
352 fCriteria.setExpression(content.getSearchText());
353 }
354
355 /**
356 * Returns the tab content reference.
357 *
358 * @return the tab content
359 */
360 protected TabContents getTabContents() {
361 TabContents content = null;
362 if (fTabFolder == null) {
363 content = (TabContents) getDialogArea();
364 } else {
365 content = (TabContents) fTabFolder.getSelection()[0].getControl();
366 }
367 return content;
368 }
369
370 /**
371 * Initialize the dialog with the settings of an existing Criteria<br>
372 * Criteria must not be null and the TabContents must have been created
373 *
374 * @param from the criteria to copy from
375 */
376 public void copyFromCriteria(Criteria from) {
377 TabContents content = getTabContents();
378 content.setLifelineButtonSelection(from.isLifeLineSelected());
379 content.setSynMessageButtonSelection(from.isSyncMessageSelected());
380 content.setSynMessageReturnButtonSelection(from.isSyncMessageReturnSelected());
381 content.setAsynMessageButtonSelection(from.isAsyncMessageSelected());
382 content.setAsynMessageReturnButtonSelection(from.isSyncMessageReturnSelected());
383 content.setStopButtonSelection(from.isStopSelected());
384 content.setCaseSensitiveSelection(from.isCaseSenstiveSelected());
385 if (from.getExpression() != null) {
386 content.setSearchText(from.getExpression());
387 }
388 }
389
390 /**
391 * Sets the text to be used for the ok button
392 *
393 * @param okText text to set
394 */
395 public void setOkText(String okText) {
396 fOkText = okText;
397 }
398
399 /**
400 * Sets the title to be used for the dialog box.
401 *
402 * @param title The title to set
403 */
404 public void setTitle(String title) {
405 fTitle = title;
406 }
407 }
This page took 0.06436 seconds and 5 git commands to generate.