1 /**********************************************************************
2 * Copyright (c) 2005, 2008 IBM Corporation and others.
3 * Copyright (c) 2011, 2012 Ericsson.
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
11 * IBM - Initial API and implementation
12 * Bernd Hufmann - Updated for TMF
13 **********************************************************************/
14 package org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.dialogs
;
16 import java
.util
.ArrayList
;
17 import java
.util
.List
;
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
;
41 * This is the common dialog to define Find and/or Filter Criteria(s)
43 public class SearchFilterDialog
extends Dialog
{
45 // ------------------------------------------------------------------------
47 // ------------------------------------------------------------------------
49 * The find criteria property name
51 protected static final String FIND_CRITERIA
= "findCriteria"; //$NON-NLS-1$
53 * The find expression list property name
55 protected static final String FIND_EXPRESSION_LIST
= "findExpressionList"; //$NON-NLS-1$
57 * The filter criteria poperty name
59 protected static final String FILTER_CRITERIA
= "filterCriteria"; //$NON-NLS-1$
61 * The filter expression list property name
63 protected static final String FILTER_EXPRESSION_LIST
= "filterExpressionList"; //$NON-NLS-1$
65 * The maximum number of expressions stored.
67 protected static final int MAX_EXPRESSION_LIST
= 7;
69 // ------------------------------------------------------------------------
71 // ------------------------------------------------------------------------
74 * The sequence diagram view reference.
76 protected SDView fSdView
= null;
79 * The tab with the controls for a Criteria
81 protected TabFolder fTabFolder
= null;
84 * The Criteria updated by this dialog
86 protected Criteria fCriteria
= null;
89 * The find/filter provider telling which graph nodes are supported
91 protected ISDGraphNodeSupporter fProvider
= null;
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
98 protected String fOkText
;
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
105 protected String fTitle
;
108 * List of string expressions that have been searched already
110 protected String
[] fExpressionList
;
113 * find is true if the dialog is for the find feature and false for filter feature
115 protected boolean fIsFind
;
117 // ------------------------------------------------------------------------
119 // ------------------------------------------------------------------------
121 * Standard constructor
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
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
;
136 // ------------------------------------------------------------------------
138 // ------------------------------------------------------------------------
142 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
145 public Control
createDialogArea(Composite arg0
) {
147 fExpressionList
= TmfUiPlugin
.getDefault().getDialogSettings().getArray(FIND_EXPRESSION_LIST
);
149 fExpressionList
= TmfUiPlugin
.getDefault().getDialogSettings().getArray(FILTER_EXPRESSION_LIST
);
151 if (fExpressionList
== null) {
152 fExpressionList
= new String
[0];
154 return new TabContents(arg0
, fProvider
, getButton(IDialogConstants
.OK_ID
), fExpressionList
);
158 * Open the dialog box
164 if (fCriteria
== null) {
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
));
177 copyFromCriteria(fCriteria
);
179 if (fOkText
!= null) {
180 getButton(IDialogConstants
.OK_ID
).setText(fOkText
);
182 getButton(IDialogConstants
.OK_ID
).setText(SDMessages
._21
);
186 getButton(IDialogConstants
.CANCEL_ID
).setText(SDMessages
._22
);
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);
196 if (fTitle
!= null) {
197 getShell().setText(fTitle
);
199 getShell().setText(SDMessages
._24
);
203 getShell().setLocation(getShell().getDisplay().getCursorLocation());
210 * Loads criteria from the dialog settings which are saved in the workspace.
212 @SuppressWarnings("rawtypes")
213 protected void loadCriteria() {
215 String CRITERIA
= FIND_CRITERIA
;
217 CRITERIA
= FILTER_CRITERIA
;
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
);
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);
249 * Called when the dialog box ok button is pressed and calls back
250 * the appropriate action provider (ISDFilterProvider or ISDFindProvider).
252 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
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
) TmfUiPlugin
.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
] = (String
) 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
) {