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
.Activator
;
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)
44 * @author Bernd Hufmann
46 public class SearchFilterDialog
extends Dialog
{
48 // ------------------------------------------------------------------------
50 // ------------------------------------------------------------------------
52 * The find criteria property name
54 protected static final String FIND_CRITERIA
= "findCriteria"; //$NON-NLS-1$
56 * The find expression list property name
58 protected static final String FIND_EXPRESSION_LIST
= "findExpressionList"; //$NON-NLS-1$
60 * The filter criteria poperty name
62 protected static final String FILTER_CRITERIA
= "filterCriteria"; //$NON-NLS-1$
64 * The filter expression list property name
66 protected static final String FILTER_EXPRESSION_LIST
= "filterExpressionList"; //$NON-NLS-1$
68 * The maximum number of expressions stored.
70 protected static final int MAX_EXPRESSION_LIST
= 7;
72 // ------------------------------------------------------------------------
74 // ------------------------------------------------------------------------
77 * The sequence diagram view reference.
79 protected SDView fSdView
= null;
82 * The tab with the controls for a Criteria
84 protected TabFolder fTabFolder
= null;
87 * The Criteria updated by this dialog
89 protected Criteria fCriteria
= null;
92 * The find/filter provider telling which graph nodes are supported
94 protected ISDGraphNodeSupporter fProvider
= null;
97 * The okText is the text for the Ok button and title is the title of the dialog.<br>
98 * Both depend (okText and title (below)) on the usage that is done of this dialog
101 protected String fOkText
;
104 * The title is the title of the dialog.<br>
105 * Both depend (okText and title) on the usage that is done of this dialog
108 protected String fTitle
;
111 * List of string expressions that have been searched already
113 protected String
[] fExpressionList
;
116 * find is true if the dialog is for the find feature and false for filter feature
118 protected boolean fIsFind
;
120 // ------------------------------------------------------------------------
122 // ------------------------------------------------------------------------
124 * Standard constructor
126 * @param view A sequence diagram view reference
127 * @param provider A graph node supporter provider
128 * @param filter A flag to indicate filtering (true) or finding (false)
129 * @param style Style bits
131 public SearchFilterDialog(SDView view
, ISDGraphNodeSupporter provider
, boolean filter
, int style
) {
132 super(view
.getSDWidget().getShell());
133 setShellStyle(SWT
.DIALOG_TRIM
| style
);
134 fProvider
= provider
;
139 // ------------------------------------------------------------------------
141 // ------------------------------------------------------------------------
145 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
148 public Control
createDialogArea(Composite arg0
) {
150 fExpressionList
= Activator
.getDefault().getDialogSettings().getArray(FIND_EXPRESSION_LIST
);
152 fExpressionList
= Activator
.getDefault().getDialogSettings().getArray(FILTER_EXPRESSION_LIST
);
154 if (fExpressionList
== null) {
155 fExpressionList
= new String
[0];
157 return new TabContents(arg0
, fProvider
, getButton(IDialogConstants
.OK_ID
), fExpressionList
);
161 * Open the dialog box
167 if (fCriteria
== null) {
171 if (fCriteria
== null) {
172 fCriteria
= new Criteria();
173 fCriteria
.setLifeLineSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.LIFELINE
));
174 fCriteria
.setSyncMessageSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGE
));
175 fCriteria
.setSyncMessageReturnSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGERETURN
));
176 fCriteria
.setAsyncMessageSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGE
));
177 fCriteria
.setAsyncMessageReturnSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGERETURN
));
178 fCriteria
.setStopSelected(fProvider
.isNodeSupported(ISDGraphNodeSupporter
.STOP
));
180 copyFromCriteria(fCriteria
);
182 if (fOkText
!= null) {
183 getButton(IDialogConstants
.OK_ID
).setText(fOkText
);
185 getButton(IDialogConstants
.OK_ID
).setText(SDMessages
._21
);
189 getButton(IDialogConstants
.CANCEL_ID
).setText(SDMessages
._22
);
192 Button okButton
= getButton(IDialogConstants
.OK_ID
);
193 ((TabContents
) getDialogArea()).setOkButton(okButton
);
194 if (fCriteria
== null || !((fCriteria
.getExpression() != null && !fCriteria
.getExpression().equals("")) && //$NON-NLS-1$
195 (fCriteria
.isAsyncMessageReturnSelected() || fCriteria
.isAsyncMessageSelected() || fCriteria
.isLifeLineSelected() || fCriteria
.isStopSelected() || fCriteria
.isSyncMessageReturnSelected() || fCriteria
.isSyncMessageSelected()))) {
196 okButton
.setEnabled(false);
199 if (fTitle
!= null) {
200 getShell().setText(fTitle
);
202 getShell().setText(SDMessages
._24
);
206 getShell().setLocation(getShell().getDisplay().getCursorLocation());
213 * Loads criteria from the dialog settings which are saved in the workspace.
215 @SuppressWarnings("rawtypes")
216 protected void loadCriteria() {
218 String CRITERIA
= FIND_CRITERIA
;
220 CRITERIA
= FILTER_CRITERIA
;
223 DialogSettings section
= (DialogSettings
) Activator
.getDefault().getDialogSettings().getSection(CRITERIA
);
224 List selection
= fSdView
.getSDWidget().getSelection();
225 if ((selection
== null || selection
.size() != 1) || (!fIsFind
)) {
226 if (section
!= null) {
227 fCriteria
= new Criteria();
228 fCriteria
.load(section
);
231 GraphNode gn
= (GraphNode
) selection
.get(0);
232 fCriteria
= new Criteria();
233 fCriteria
.setExpression(gn
.getName());
234 fCriteria
.setCaseSenstiveSelected(true);
235 if (gn
instanceof Lifeline
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.LIFELINE
)) {
236 fCriteria
.setLifeLineSelected(true);
237 } else if (gn
instanceof SyncMessageReturn
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGERETURN
)) {
238 fCriteria
.setSyncMessageReturnSelected(true);
239 } else if ((gn
instanceof SyncMessageReturn
|| gn
instanceof SyncMessage
) && fProvider
.isNodeSupported(ISDGraphNodeSupporter
.SYNCMESSAGE
)) {
240 fCriteria
.setSyncMessageSelected(true);
241 } else if (gn
instanceof AsyncMessageReturn
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGERETURN
)) {
242 fCriteria
.setAsyncMessageReturnSelected(true);
243 } else if ((gn
instanceof AsyncMessageReturn
|| gn
instanceof AsyncMessage
) && fProvider
.isNodeSupported(ISDGraphNodeSupporter
.ASYNCMESSAGE
)) {
244 fCriteria
.setAsyncMessageSelected(true);
245 } else if (gn
instanceof Stop
&& fProvider
.isNodeSupported(ISDGraphNodeSupporter
.STOP
)) {
246 fCriteria
.setStopSelected(true);
252 * Called when the dialog box ok button is pressed and calls back
253 * the appropriate action provider (ISDFilterProvider or ISDFindProvider).
256 public void okPressed() {
260 super.close(); // Filter is modal
262 if ((fProvider
!= null) && (fProvider
instanceof ISDFindProvider
) && fIsFind
) {
263 boolean result
= ((ISDFindProvider
) fProvider
).find(fCriteria
);
264 TabContents content
= getTabContents();
265 content
.setResult(result
);
271 * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
274 public void cancelPressed() {
277 if (fProvider
instanceof ISDFindProvider
) {
278 ((ISDFindProvider
) fProvider
).cancel();
282 super.cancelPressed();
286 * Saves the criteria to the dialog settings within the workspace.
288 public void saveCriteria() {
289 String CRITERIA
= FIND_CRITERIA
;
290 String EXPRESSION_LIST
= FIND_EXPRESSION_LIST
;
292 CRITERIA
= FILTER_CRITERIA
;
293 EXPRESSION_LIST
= FILTER_EXPRESSION_LIST
;
295 DialogSettings settings
= (DialogSettings
) Activator
.getDefault().getDialogSettings();
296 DialogSettings section
= (DialogSettings
) settings
.getSection(CRITERIA
);
297 if (section
== null) {
298 section
= (DialogSettings
) settings
.addNewSection(CRITERIA
);
300 fCriteria
.save(section
);
302 if (fCriteria
.getExpression().length() > 0) {
303 ArrayList
<String
> list
= new ArrayList
<String
>();
304 for (int i
= 0; i
< fExpressionList
.length
; i
++) {
305 list
.add(fExpressionList
[i
]);
307 // Remove the used expression if one from the dropdown list
308 list
.remove(fCriteria
.getExpression());
309 // Put the new expression at the beginning
310 list
.add(0, fCriteria
.getExpression());
311 // Fill in the expressionList, truncating to MAX_EXPRESSION_LIST
312 int size
= Math
.min(list
.size(), MAX_EXPRESSION_LIST
);
313 String
[] temp
= new String
[size
];
314 for (int i
= 0; i
< size
; i
++) {
315 temp
[i
] = list
.get(i
);
317 fExpressionList
= temp
;
318 settings
.put(EXPRESSION_LIST
, fExpressionList
);
323 * Returns the criteria
325 * @return the criteria
327 public Criteria
getCriteria() {
334 * @param criteria the criteria to set.
336 public void setCriteria(Criteria criteria
) {
337 fCriteria
= criteria
;
341 * Get the current end-user settings from the dialog to a Criteria
343 public void copyToCriteria() {
344 fCriteria
= new Criteria();
345 TabContents content
= getTabContents();
346 fCriteria
.setLifeLineSelected(content
.isLifelineButtonSelected());
347 fCriteria
.setSyncMessageSelected(content
.isSynMessageButtonSelected());
348 fCriteria
.setSyncMessageReturnSelected(content
.isSynMessageReturnButtonSelected());
349 fCriteria
.setAsyncMessageSelected(content
.isAsynMessageButtonSelected());
350 fCriteria
.setAsyncMessageReturnSelected(content
.isAsynMessageReturnButtonSelected());
351 fCriteria
.setStopSelected(content
.isStopButtonSelected());
352 fCriteria
.setCaseSenstiveSelected(content
.isCaseSensitiveSelected());
353 fCriteria
.setExpression(content
.getSearchText());
357 * Returns the tab content reference.
359 * @return the tab content
361 protected TabContents
getTabContents() {
362 TabContents content
= null;
363 if (fTabFolder
== null) {
364 content
= (TabContents
) getDialogArea();
366 content
= (TabContents
) fTabFolder
.getSelection()[0].getControl();
372 * Initialize the dialog with the settings of an existing Criteria<br>
373 * Criteria must not be null and the TabContents must have been created
375 * @param from the criteria to copy from
377 public void copyFromCriteria(Criteria from
) {
378 TabContents content
= getTabContents();
379 content
.setLifelineButtonSelection(from
.isLifeLineSelected());
380 content
.setSynMessageButtonSelection(from
.isSyncMessageSelected());
381 content
.setSynMessageReturnButtonSelection(from
.isSyncMessageReturnSelected());
382 content
.setAsynMessageButtonSelection(from
.isAsyncMessageSelected());
383 content
.setAsynMessageReturnButtonSelection(from
.isSyncMessageReturnSelected());
384 content
.setStopButtonSelection(from
.isStopSelected());
385 content
.setCaseSensitiveSelection(from
.isCaseSenstiveSelected());
386 if (from
.getExpression() != null) {
387 content
.setSearchText(from
.getExpression());
392 * Sets the text to be used for the ok button
394 * @param okText text to set
396 public void setOkText(String okText
) {
401 * Sets the title to be used for the dialog box.
403 * @param title The title to set
405 public void setTitle(String title
) {