| 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 |
| 7 | * |
| 8 | * Contributors: |
| 9 | * IBM - Initial API and implementation |
| 10 | * Bernd Hufmann - Updated for TMF |
| 11 | **********************************************************************/ |
| 12 | |
| 13 | package org.eclipse.linuxtools.tmf.ui.views.uml2sd.dialogs; |
| 14 | |
| 15 | import java.util.Iterator; |
| 16 | import java.util.List; |
| 17 | |
| 18 | import org.eclipse.jface.dialogs.DialogSettings; |
| 19 | |
| 20 | /** |
| 21 | * A filter criteria is a criteria that can be activated or not, positive or not. |
| 22 | * |
| 23 | * @version 1.0 |
| 24 | * @author sveyrier |
| 25 | * |
| 26 | */ |
| 27 | public class FilterCriteria { |
| 28 | |
| 29 | // ------------------------------------------------------------------------ |
| 30 | // Constants |
| 31 | // ------------------------------------------------------------------------ |
| 32 | /** |
| 33 | * The filter state value for 'active'. |
| 34 | */ |
| 35 | protected static final String ACTIVE = "active"; //$NON-NLS-1$ |
| 36 | /** |
| 37 | * The property value for positive filter. |
| 38 | */ |
| 39 | protected static final String POSITIVE = "positive"; //$NON-NLS-1$ |
| 40 | /** |
| 41 | * The filter loader class name property. |
| 42 | */ |
| 43 | protected static final String LOADERCLASSNAME = "loaderClassName"; //$NON-NLS-1$ |
| 44 | |
| 45 | // ------------------------------------------------------------------------ |
| 46 | // Attributes |
| 47 | // ------------------------------------------------------------------------ |
| 48 | /** |
| 49 | * The criteria reference. |
| 50 | */ |
| 51 | protected Criteria fCriteria; |
| 52 | /** |
| 53 | * Flag whether this criteria is active or not |
| 54 | */ |
| 55 | protected boolean fIsActive; |
| 56 | /** |
| 57 | * Flag whether this criteria is for positive filter or not |
| 58 | */ |
| 59 | protected boolean fIsPositive; |
| 60 | /** |
| 61 | * The loader class name. |
| 62 | */ |
| 63 | protected String fLoaderClassName; |
| 64 | |
| 65 | // ------------------------------------------------------------------------ |
| 66 | // Constructor |
| 67 | // ------------------------------------------------------------------------ |
| 68 | /** |
| 69 | * Standard constructor |
| 70 | * |
| 71 | * @param criteria A criteria reference |
| 72 | * @param isActive <code>true</code> if filter criteria is active else <code>false</code> |
| 73 | * @param isPositive <code>true</code> for positive filter else <code>false</code> |
| 74 | */ |
| 75 | public FilterCriteria(Criteria criteria, boolean isActive, boolean isPositive) { |
| 76 | this(criteria, isActive, isPositive, null); |
| 77 | } |
| 78 | |
| 79 | /** |
| 80 | * Constructor |
| 81 | * |
| 82 | * @param criteria A criteria reference |
| 83 | * @param isActive <code>true</code> if filter criteria is active else <code>false</code> |
| 84 | * @param isPositive <code>true</code> for positive filter else <code>false</code> |
| 85 | * @param loaderClassName A loader class name |
| 86 | */ |
| 87 | public FilterCriteria(Criteria criteria, boolean isActive, boolean isPositive, String loaderClassName) { |
| 88 | fCriteria = criteria; |
| 89 | fIsActive = isActive; |
| 90 | fIsPositive = isPositive; |
| 91 | fLoaderClassName = loaderClassName; |
| 92 | } |
| 93 | |
| 94 | /** |
| 95 | * Copy Constructor |
| 96 | * @param other FilterCriteria |
| 97 | */ |
| 98 | public FilterCriteria (FilterCriteria other) { |
| 99 | fCriteria = new Criteria(other.fCriteria); |
| 100 | fIsActive = other.fIsActive; |
| 101 | fIsPositive = other.fIsPositive; |
| 102 | fLoaderClassName = other.fLoaderClassName; |
| 103 | } |
| 104 | |
| 105 | /** |
| 106 | * Default constructor |
| 107 | */ |
| 108 | protected FilterCriteria() { |
| 109 | } |
| 110 | |
| 111 | // ------------------------------------------------------------------------ |
| 112 | // Methods |
| 113 | // ------------------------------------------------------------------------ |
| 114 | /* |
| 115 | * (non-Javadoc) |
| 116 | * @see java.lang.Object#toString() |
| 117 | */ |
| 118 | @Override |
| 119 | public String toString() { |
| 120 | StringBuffer sb = new StringBuffer(super.toString()); |
| 121 | sb.append(':'); |
| 122 | if (fCriteria != null) { |
| 123 | sb.append(" expression=");sb.append(fCriteria.getExpression()); //$NON-NLS-1$ |
| 124 | sb.append(" active=");sb.append(fIsActive); //$NON-NLS-1$ |
| 125 | sb.append(" positive=");sb.append(fIsPositive); //$NON-NLS-1$ |
| 126 | } else { |
| 127 | sb.append("empty criteria"); //$NON-NLS-1$ |
| 128 | } |
| 129 | return sb.toString(); |
| 130 | } |
| 131 | |
| 132 | /** |
| 133 | * Sets a criteria reference. |
| 134 | * @param criteria A criteria reference |
| 135 | */ |
| 136 | public void setCriteria(Criteria criteria) { |
| 137 | fCriteria = criteria; |
| 138 | } |
| 139 | |
| 140 | /** |
| 141 | * Returns the criteria reference. |
| 142 | * |
| 143 | * @return the criteria reference |
| 144 | */ |
| 145 | public Criteria getCriteria() { |
| 146 | return fCriteria; |
| 147 | } |
| 148 | |
| 149 | /** |
| 150 | * Sets the active flag. |
| 151 | * |
| 152 | * @param isActive A active value. |
| 153 | */ |
| 154 | public void setActive(boolean isActive) { |
| 155 | fIsActive = isActive; |
| 156 | } |
| 157 | |
| 158 | /** |
| 159 | * Returns whether filter criteria is active or not. |
| 160 | * |
| 161 | * @return whether filter criteria is active or not. |
| 162 | */ |
| 163 | public boolean isActive() { |
| 164 | return fIsActive; |
| 165 | } |
| 166 | |
| 167 | /** |
| 168 | * Sets filter is for positive filtering or not. |
| 169 | * |
| 170 | * @param isPositive The value to set. |
| 171 | */ |
| 172 | public void setPositive(boolean isPositive) { |
| 173 | fIsPositive = isPositive; |
| 174 | } |
| 175 | |
| 176 | /** |
| 177 | * Returns whether the filter si for positive filtering or not. |
| 178 | * |
| 179 | * @return Returns the positive. |
| 180 | */ |
| 181 | public boolean isPositive() { |
| 182 | return fIsPositive; |
| 183 | } |
| 184 | |
| 185 | /** |
| 186 | * Sets the loader class name for this filter. |
| 187 | * |
| 188 | * @param loaderClassName The loader class name to set |
| 189 | */ |
| 190 | public void setLoaderClassName(String loaderClassName) { |
| 191 | fLoaderClassName = loaderClassName; |
| 192 | } |
| 193 | |
| 194 | /** |
| 195 | * Returns the class loader name. |
| 196 | * |
| 197 | * @return the class loader name. |
| 198 | */ |
| 199 | public String getLoaderClassName() { |
| 200 | return fLoaderClassName; |
| 201 | } |
| 202 | |
| 203 | /** |
| 204 | * Finds a filter criteria within a list of criteria. |
| 205 | * |
| 206 | * @param what The filter to find |
| 207 | * @param list A list of filter criteria |
| 208 | * @return The found filter criteria or null |
| 209 | */ |
| 210 | public static FilterCriteria find(FilterCriteria what, List<FilterCriteria> list) { |
| 211 | if (what != null && list != null) { |
| 212 | try { |
| 213 | for (Iterator<FilterCriteria> i = list.iterator(); i.hasNext();) { |
| 214 | FilterCriteria fc = i.next(); |
| 215 | if (what.compareTo(fc)) { |
| 216 | return fc; |
| 217 | } |
| 218 | } |
| 219 | } catch (Exception e) { |
| 220 | // Silence |
| 221 | } |
| 222 | } |
| 223 | return null; |
| 224 | } |
| 225 | |
| 226 | /** |
| 227 | * Compares this filter criteria with a given criteria. |
| 228 | * |
| 229 | * @param to The filter criteria to compare. |
| 230 | * @return usual comparison result (< 0, 0, > 0) |
| 231 | */ |
| 232 | public boolean compareTo(FilterCriteria to) { |
| 233 | if (isPositive() == to.isPositive() && getCriteria().compareTo(to.getCriteria())) { |
| 234 | if (getLoaderClassName() == null && to.getLoaderClassName() == null) { |
| 235 | return true; |
| 236 | } |
| 237 | if ((getLoaderClassName() != null && to.getLoaderClassName() != null) && getLoaderClassName().equals(to.getLoaderClassName())) { |
| 238 | return true; |
| 239 | } |
| 240 | } |
| 241 | return false; |
| 242 | } |
| 243 | |
| 244 | /** |
| 245 | * Saves current criteria attributes in the dialog settings. |
| 246 | * |
| 247 | * @param settings The dialog settings |
| 248 | */ |
| 249 | public void save(DialogSettings settings) { |
| 250 | settings.put(ACTIVE, isActive()); |
| 251 | settings.put(POSITIVE, isPositive()); |
| 252 | if (getLoaderClassName() != null) { |
| 253 | settings.put(LOADERCLASSNAME, getLoaderClassName()); |
| 254 | } else { |
| 255 | settings.put(LOADERCLASSNAME, ""); //$NON-NLS-1$ |
| 256 | } |
| 257 | if (fCriteria != null) { |
| 258 | fCriteria.save(settings); |
| 259 | } |
| 260 | } |
| 261 | |
| 262 | /** |
| 263 | * Loads the criteria with values of the dialog settings. |
| 264 | * |
| 265 | * @param settings The dialog settings |
| 266 | */ |
| 267 | public void load(DialogSettings settings) { |
| 268 | setActive(settings.getBoolean(ACTIVE)); |
| 269 | setPositive(settings.getBoolean(POSITIVE)); |
| 270 | String loaderClassName = settings.get(LOADERCLASSNAME); |
| 271 | setLoaderClassName(loaderClassName != null && loaderClassName.length() > 0 ? loaderClassName : null); |
| 272 | if (fCriteria != null) { |
| 273 | fCriteria.load(settings); |
| 274 | } |
| 275 | } |
| 276 | } |