1 /**********************************************************************
2 * Copyright (c) 2005, 2012 IBM Corporation, Ericsson
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM - Initial API and implementation
10 * Bernd Hufmann - Updated for TMF
11 **********************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.dialogs
;
15 import java
.util
.ArrayList
;
16 import java
.util
.List
;
18 import org
.eclipse
.jface
.dialogs
.Dialog
;
19 import org
.eclipse
.jface
.dialogs
.DialogSettings
;
20 import org
.eclipse
.jface
.dialogs
.IDialogConstants
;
21 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.Activator
;
22 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.SDView
;
23 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.core
.AsyncMessage
;
24 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.core
.AsyncMessageReturn
;
25 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.core
.GraphNode
;
26 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.core
.Lifeline
;
27 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.core
.Stop
;
28 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.core
.SyncMessage
;
29 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.core
.SyncMessageReturn
;
30 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDFindProvider
;
31 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDGraphNodeSupporter
;
32 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.util
.SDMessages
;
33 import org
.eclipse
.swt
.SWT
;
34 import org
.eclipse
.swt
.widgets
.Button
;
35 import org
.eclipse
.swt
.widgets
.Composite
;
36 import org
.eclipse
.swt
.widgets
.Control
;
37 import org
.eclipse
.swt
.widgets
.TabFolder
;
40 * This is the common dialog to define Find and/or Filter Criteria(s)
43 * @author Bernd Hufmann
45 public class SearchFilterDialog
extends Dialog
{
47 // ------------------------------------------------------------------------
49 // ------------------------------------------------------------------------
51 * The find criteria property name
53 protected static final String FIND_CRITERIA
= "findCriteria"; //$NON-NLS-1$
55 * The find expression list property name
57 protected static final String FIND_EXPRESSION_LIST
= "findExpressionList"; //$NON-NLS-1$
59 * The filter criteria poperty name
61 protected static final String FILTER_CRITERIA
= "filterCriteria"; //$NON-NLS-1$
63 * The filter expression list property name
65 protected static final String FILTER_EXPRESSION_LIST
= "filterExpressionList"; //$NON-NLS-1$
67 * The maximum number of expressions stored.
69 protected static final int MAX_EXPRESSION_LIST
= 7;
71 // ------------------------------------------------------------------------
73 // ------------------------------------------------------------------------
76 * The sequence diagram view reference.
78 protected SDView fSdView
= null;
81 * The tab with the controls for a Criteria
83 protected TabFolder fTabFolder
= null;
86 * The Criteria updated by this dialog
88 protected Criteria fCriteria
= null;
91 * The find/filter provider telling which graph nodes are supported
93 protected ISDGraphNodeSupporter fProvider
= null;
96 * The okText is the text for the Ok button and title is the title of the dialog.<br>
97 * Both depend (okText and title (below)) on the usage that is done of this dialog
100 protected String fOkText
;
103 * The title is the title of the dialog.<br>
104 * Both depend (okText and title) on the usage that is done of this dialog
107 protected String fTitle
;
110 * List of string expressions that have been searched already
112 protected String
[] fExpressionList
;
115 * find is true if the dialog is for the find feature and false for filter feature
117 protected boolean fIsFind
;
119 // ------------------------------------------------------------------------
121 // ------------------------------------------------------------------------
123 * Standard constructor
125 * @param view A sequence diagram view reference
126 * @param provider A graph node supporter provider
127 * @param filter A flag to indicate filtering (true) or finding (false)
128 * @param style Style bits
130 public SearchFilterDialog(SDView view
, ISDGraphNodeSupporter provider
, boolean filter
, int style
) {
131 super(view
.getSDWidget().getShell());
132 setShellStyle(SWT
.DIALOG_TRIM
| style
);
133 fProvider
= provider
;
138 // ------------------------------------------------------------------------
140 // ------------------------------------------------------------------------
144 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
147 public Control
createDialogArea(Composite arg0
) {
149 fExpressionList
= Activator
.getDefault().getDialogSettings().getArray(FIND_EXPRESSION_LIST
);
151 fExpressionList
= Activator
.getDefault().getDialogSettings().getArray(FILTER_EXPRESSION_LIST
);
153 if (fExpressionList
== null) {
154 fExpressionList
= new String
[0];
156 return new TabContents(arg0
, fProvider
, getButton(IDialogConstants
.OK_ID
), fExpressionList
);
160 * Open the dialog box
166 if (fCriteria
== null) {
170 if (fCriteria
== null) {
171 fCriteria
= new Criteria();
172 fCriteria
.setLifeLineSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.LIFELINE
));
173 fCriteria
.setSyncMessageSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGE
));
174 fCriteria
.setSyncMessageReturnSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGERETURN
));
175 fCriteria
.setAsyncMessageSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGE
));
176 fCriteria
.setAsyncMessageReturnSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGERETURN
));
177 fCriteria
.setStopSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.STOP
));
179 copyFromCriteria(fCriteria
);
181 if (fOkText
!= null) {
182 getButton(IDialogConstants
.OK_ID
).setText(fOkText
);
184 getButton(IDialogConstants
.OK_ID
).setText(SDMessages
._21
);
188 getButton(IDialogConstants
.CANCEL_ID
).setText(SDMessages
._22
);
191 Button okButton
= getButton(IDialogConstants
.OK_ID
);
192 ((TabContents
) getDialogArea()).setOkButton(okButton
);
193 if (fCriteria
== null || !((fCriteria
.getExpression() != null && !fCriteria
.getExpression().equals("")) && //$NON-NLS-1$
194 (fCriteria
.isAsyncMessageReturnSelected() || fCriteria
.isAsyncMessageSelected() || fCriteria
.isLifeLineSelected() || fCriteria
.isStopSelected() || fCriteria
.isSyncMessageReturnSelected() || fCriteria
.isSyncMessageSelected()))) {
195 okButton
.setEnabled(false);
198 if (fTitle
!= null) {
199 getShell().setText(fTitle
);
201 getShell().setText(SDMessages
._24
);
205 getShell().setLocation(getShell().getDisplay().getCursorLocation());
212 * Loads criteria from the dialog settings which are saved in the workspace.
214 @SuppressWarnings("rawtypes")
215 protected void loadCriteria() {
217 String CRITERIA
= FIND_CRITERIA
;
219 CRITERIA
= FILTER_CRITERIA
;
222 DialogSettings section
= (DialogSettings
) Activator
.getDefault().getDialogSettings().getSection(CRITERIA
);
223 List selection
= fSdView
.getSDWidget().getSelection();
224 if ((selection
== null || selection
.size() != 1) || (!fIsFind
)) {
225 if (section
!= null) {
226 fCriteria
= new Criteria();
227 fCriteria
.load(section
);
230 GraphNode gn
= (GraphNode
) selection
.get(0);
231 fCriteria
= new Criteria();
232 fCriteria
.setExpression(gn
.getName());
233 fCriteria
.setCaseSenstiveSelected(true);
234 if (gn
instanceof Lifeline
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.LIFELINE
)) {
235 fCriteria
.setLifeLineSelected(true);
236 } else if (gn
instanceof SyncMessageReturn
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGERETURN
)) {
237 fCriteria
.setSyncMessageReturnSelected(true);
238 } else if ((gn
instanceof SyncMessageReturn
|| gn
instanceof SyncMessage
) && fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGE
)) {
239 fCriteria
.setSyncMessageSelected(true);
240 } else if (gn
instanceof AsyncMessageReturn
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGERETURN
)) {
241 fCriteria
.setAsyncMessageReturnSelected(true);
242 } else if ((gn
instanceof AsyncMessageReturn
|| gn
instanceof AsyncMessage
) && fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGE
)) {
243 fCriteria
.setAsyncMessageSelected(true);
244 } else if (gn
instanceof Stop
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.STOP
)) {
245 fCriteria
.setStopSelected(true);
251 * Called when the dialog box ok button is pressed and calls back
252 * the appropriate action provider (ISDFilterProvider or ISDFindProvider).
255 public void okPressed() {
259 super.close(); // Filter is modal
261 if ((fProvider
!= null) && (fProvider
instanceof ISDFindProvider
) && fIsFind
) {
262 boolean result
= ((ISDFindProvider
) fProvider
).find(fCriteria
);
263 TabContents content
= getTabContents();
264 content
.setResult(result
);
270 * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
273 public void cancelPressed() {
276 if (fProvider
instanceof ISDFindProvider
) {
277 ((ISDFindProvider
) fProvider
).cancel();
281 super.cancelPressed();
285 * Saves the criteria to the dialog settings within the workspace.
287 public void saveCriteria() {
288 String CRITERIA
= FIND_CRITERIA
;
289 String EXPRESSION_LIST
= FIND_EXPRESSION_LIST
;
291 CRITERIA
= FILTER_CRITERIA
;
292 EXPRESSION_LIST
= FILTER_EXPRESSION_LIST
;
294 DialogSettings settings
= (DialogSettings
) Activator
.getDefault().getDialogSettings();
295 DialogSettings section
= (DialogSettings
) settings
.getSection(CRITERIA
);
296 if (section
== null) {
297 section
= (DialogSettings
) settings
.addNewSection(CRITERIA
);
299 fCriteria
.save(section
);
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
]);
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
] = list
.get(i
);
316 fExpressionList
= temp
;
317 settings
.put(EXPRESSION_LIST
, fExpressionList
);
322 * Returns the criteria
324 * @return the criteria
326 public Criteria
getCriteria() {
333 * @param criteria the criteria to set.
335 public void setCriteria(Criteria criteria
) {
336 fCriteria
= criteria
;
340 * Get the current end-user settings from the dialog to a Criteria
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());
356 * Returns the tab content reference.
358 * @return the tab content
360 protected TabContents
getTabContents() {
361 TabContents content
= null;
362 if (fTabFolder
== null) {
363 content
= (TabContents
) getDialogArea();
365 content
= (TabContents
) fTabFolder
.getSelection()[0].getControl();
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
374 * @param from the criteria to copy from
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());
391 * Sets the text to be used for the ok button
393 * @param okText text to set
395 public void setOkText(String okText
) {
400 * Sets the title to be used for the dialog box.
402 * @param title The title to set
404 public void setTitle(String title
) {