1 /**********************************************************************
2 * Copyright (c) 2005, 2006 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
.Iterator
;
18 import java
.util
.regex
.Pattern
;
19 import java
.util
.regex
.PatternSyntaxException
;
21 import org
.eclipse
.jface
.dialogs
.DialogSettings
;
22 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDFilterProvider
;
23 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDGraphNodeSupporter
;
24 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.util
.SDMessages
;
27 * This class describes the find or filter criteria selected by the user in the find or filter dialog box
31 * @author Bernd Hufmann
33 public class Criteria
{
35 // ------------------------------------------------------------------------
37 // ------------------------------------------------------------------------
39 * Flag whether lifeline is selected or not.
41 protected boolean fLifeLineSelected
= false;
43 * Flag whether synchronous message is selected or not.
45 protected boolean fSyncMessageSelected
= false;
47 * Flag whether synchronous message return is selected or not.
49 protected boolean fSyncMessageReturnSelected
= false;
51 * Flag whether asynchronous message is selected or not.
53 protected boolean fAsyncMessageSelected
= false;
55 * Flag whether asynchronous message return is selected or not.
57 protected boolean fAsyncMessageReturnSelected
= false;
59 * Flag whether case sensitive find is required or not.
61 protected boolean fCaseSenstiveSelected
= false;
63 * Flag whether stop graph node is selected or not.
65 protected boolean fStopSelected
= false;
67 * The find expression.
69 protected String fExpression
= null;
71 * The find pattern as regular expression.
73 protected Pattern pattern
= null;
75 // ------------------------------------------------------------------------
77 // ------------------------------------------------------------------------
88 * @param other Criteria to create new criteria
90 public Criteria (Criteria other
) {
91 this.fLifeLineSelected
= other
.fLifeLineSelected
;
92 this.fSyncMessageSelected
= other
.fSyncMessageSelected
;
93 this.fSyncMessageReturnSelected
= other
.fSyncMessageReturnSelected
;
94 this.fAsyncMessageSelected
= other
.fAsyncMessageSelected
;
95 this.fAsyncMessageReturnSelected
= other
.fAsyncMessageReturnSelected
;
96 this.fCaseSenstiveSelected
= other
.fCaseSenstiveSelected
;
97 this.fStopSelected
= other
.fStopSelected
;
98 fExpression
= other
.fExpression
;
102 // ------------------------------------------------------------------------
104 // ------------------------------------------------------------------------
107 * Returns true if the AsyncMessageReturn is selected, false otherwise.
109 * @return true if the AsyncMessageReturn is selected, false otherwise
111 public boolean isAsyncMessageReturnSelected() {
112 return fAsyncMessageReturnSelected
;
116 * Returns true if the AsyncMessage is selected, false otherwise.
118 * @return true if the AsyncMessage is selected, false otherwise
120 public boolean isAsyncMessageSelected() {
121 return fAsyncMessageSelected
;
125 * Returns the text enter by the user.
127 * @return the expression text
129 public String
getExpression() {
134 * Returns the regular expression pattern.
136 * @return the regular expression pattern
138 public Pattern
getPattern() {
143 * Sets the regular expression pattern.
148 public void setPattern(Pattern pattern
) {
149 this.pattern
= pattern
;
153 * Returns true if the LifeLine is selected, false otherwise.
155 * @return true if the LifeLine is selected, false otherwise
157 public boolean isLifeLineSelected() {
158 return fLifeLineSelected
;
162 * Returns true if the Stop is selected, false otherwise.
164 * @return true if the Stop is selected, false otherwise
166 public boolean isStopSelected() {
167 return fStopSelected
;
171 * Returns true if the SyncMessageReturn is selected, false otherwise.
173 * @return true if the SyncMessageReturn is selected, false otherwise
175 public boolean isSyncMessageReturnSelected() {
176 return fSyncMessageReturnSelected
;
180 * Returns true if the SyncMessage is selected, false otherwise.
182 * @return true if the SyncMessage is selected, false otherwise
184 public boolean isSyncMessageSelected() {
185 return fSyncMessageSelected
;
189 * Sets the AsyncMessageReturn selection state.
191 * @param b true if selected, false otherwise
193 public void setAsyncMessageReturnSelected(boolean b
) {
194 fAsyncMessageReturnSelected
= b
;
198 * Sets the AsyncMessage selection state.
200 * @param b true if selected, false otherwise
202 public void setAsyncMessageSelected(boolean b
) {
203 fAsyncMessageSelected
= b
;
207 * Sets the text entered by the user and compiles the regular expression.
209 * @param string the text
211 public void setExpression(String string
) {
212 fExpression
= string
;
217 * Sets the Stop selection state.
219 * @param b true if selected, false otherwise
221 public void setLifeLineSelected(boolean b
) {
222 fLifeLineSelected
= b
;
226 * Set Stop selection state.
228 * @param b true if selected, false otherwise
230 public void setStopSelected(boolean b
) {
235 * Sets the SyncMessageReturn selection state.
237 * @param b true if selected, false otherwise
239 public void setSyncMessageReturnSelected(boolean b
) {
240 fSyncMessageReturnSelected
= b
;
244 * Sets the SyncMessage selection state.
246 * @param b true if selected, false otherwise
248 public void setSyncMessageSelected(boolean b
) {
249 fSyncMessageSelected
= b
;
253 * Returns true if the case sensitive is selected, false otherwise.
255 * @return true if the case sensitive is selected, false otherwise
257 public boolean isCaseSenstiveSelected() {
258 return fCaseSenstiveSelected
;
262 * Set case sensitive selection state.
264 * @param b true if selected, false otherwise
266 public void setCaseSenstiveSelected(boolean b
) {
267 fCaseSenstiveSelected
= b
;
268 // Make sure that pattern is set
269 setExpression(fExpression
);
273 * Compares this criteria with a given criteria.
275 * @param to The criteria to compare
276 * @return usual comparison result (< 0, 0, > 0)
278 public boolean compareTo(Criteria to
) {
279 boolean retVal
= true;
280 if (getExpression() != null) {
281 retVal
= getExpression().equals(to
.getExpression());
282 } else if (to
.getExpression() != null) {
283 retVal
= to
.getExpression().equals(getExpression());
285 return retVal
&& isCaseSenstiveSelected() == to
.isCaseSenstiveSelected() && isAsyncMessageReturnSelected() == to
.isAsyncMessageReturnSelected() && isAsyncMessageSelected() == to
.isAsyncMessageSelected()
286 && isLifeLineSelected() == to
.isLifeLineSelected() && isStopSelected() == to
.isStopSelected() && isSyncMessageReturnSelected() == to
.isSyncMessageReturnSelected() && isSyncMessageSelected() == to
.isSyncMessageSelected();
290 * Saves current criteria attributes in the dialog settings.
292 * @param settings The dialog settings
294 public void save(DialogSettings settings
) {
295 settings
.put("expression", getExpression()); //$NON-NLS-1$
296 settings
.put("isCaseSenstiveSelected", isCaseSenstiveSelected()); //$NON-NLS-1$
297 settings
.put("isAsyncMessageReturnSelected", isAsyncMessageReturnSelected()); //$NON-NLS-1$
298 settings
.put("isAsyncMessageSelected", isAsyncMessageSelected()); //$NON-NLS-1$
299 settings
.put("isLifeLineSelected", isLifeLineSelected()); //$NON-NLS-1$
300 settings
.put("isStopSelected", isStopSelected()); //$NON-NLS-1$
301 settings
.put("isSyncMessageReturnSelected", isSyncMessageReturnSelected()); //$NON-NLS-1$
302 settings
.put("isSyncMessageSelected", isSyncMessageSelected()); //$NON-NLS-1$
306 * Loads the criteria with values of the dialog settings.
308 * @param settings The dialog settings
310 public void load(DialogSettings settings
) {
311 setExpression(settings
.get("expression")); //$NON-NLS-1$
312 setCaseSenstiveSelected(settings
.getBoolean("isCaseSenstiveSelected")); //$NON-NLS-1$
313 setAsyncMessageReturnSelected(settings
.getBoolean("isAsyncMessageReturnSelected")); //$NON-NLS-1$
314 setAsyncMessageSelected(settings
.getBoolean("isAsyncMessageSelected")); //$NON-NLS-1$
315 setLifeLineSelected(settings
.getBoolean("isLifeLineSelected")); //$NON-NLS-1$
316 setStopSelected(settings
.getBoolean("isStopSelected")); //$NON-NLS-1$
317 setSyncMessageReturnSelected(settings
.getBoolean("isSyncMessageReturnSelected")); //$NON-NLS-1$
318 setSyncMessageSelected(settings
.getBoolean("isSyncMessageSelected")); //$NON-NLS-1$
322 * Gets the summary of supported graph nodes.
324 * @param provider A filter provider
325 * @param loaderClassName A class loader
326 * @return graph node summary
328 public String
getGraphNodeSummary(ISDFilterProvider provider
, String loaderClassName
) {
329 ArrayList
<String
> list
= new ArrayList
<String
>();
331 if (provider
!= null) {
332 if (isLifeLineSelected()) {
333 list
.add(provider
.getNodeName(ISDGraphNodeSupporter
.LIFELINE
, loaderClassName
));
335 if (isSyncMessageSelected()) {
336 list
.add(provider
.getNodeName(ISDGraphNodeSupporter
.SYNCMESSAGE
, loaderClassName
));
338 if (isSyncMessageReturnSelected()) {
339 list
.add(provider
.getNodeName(ISDGraphNodeSupporter
.SYNCMESSAGERETURN
, loaderClassName
));
341 if (isAsyncMessageSelected()) {
342 list
.add(provider
.getNodeName(ISDGraphNodeSupporter
.ASYNCMESSAGE
, loaderClassName
));
344 if (isAsyncMessageReturnSelected()) {
345 list
.add(provider
.getNodeName(ISDGraphNodeSupporter
.ASYNCMESSAGERETURN
, loaderClassName
));
347 if (isStopSelected()) {
348 list
.add(provider
.getNodeName(ISDGraphNodeSupporter
.STOP
, loaderClassName
));
351 if (isLifeLineSelected()) {
352 list
.add(SDMessages
._28
);
354 if (isSyncMessageSelected()) {
355 list
.add(SDMessages
._30
);
357 if (isSyncMessageReturnSelected()) {
358 list
.add(SDMessages
._31
);
360 if (isAsyncMessageSelected()) {
361 list
.add(SDMessages
._32
);
363 if (isAsyncMessageReturnSelected()) {
364 list
.add(SDMessages
._33
);
366 if (isStopSelected()) {
367 list
.add(SDMessages
._29
);
370 StringBuffer ret
= new StringBuffer();
371 String prefix
= "["; //$NON-NLS-1$
372 for (Iterator
<String
> i
= list
.iterator(); i
.hasNext();) {
376 prefix
= " " + SDMessages
._34
+ " "; //$NON-NLS-1$ //$NON-NLS-2$
378 ret
.append("]"); //$NON-NLS-1$
379 return ret
.toString();
383 * Matches given string using compiled pattern based on user expression.
385 * @param stringToMatch A string to match
386 * @return true if string matches expression
388 public boolean matches(String stringToMatch
) {
389 if (pattern
== null) {
392 return pattern
.matcher(stringToMatch
).matches();
396 * Updates the regular expression pattern based on the expression.
398 private void updatePattern() {
399 if (fExpression
!= null) {
401 if (fCaseSenstiveSelected
) {
402 pattern
= Pattern
.compile(fExpression
);
405 pattern
= Pattern
.compile(fExpression
, Pattern
.CASE_INSENSITIVE
);
407 } catch (PatternSyntaxException e
) {