blob: 927bbfd869e9e0eda00585e701b36d934dde2cda [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2005, 2014 IBM Corporation, Ericsson
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM - Initial API and implementation
* Bernd Hufmann - Updated for TMF
**********************************************************************/
package org.eclipse.tracecompass.tmf.ui.views.uml2sd.dialogs;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.dialogs.DialogSettings;
/**
* A filter criteria is a criteria that can be activated or not, positive or not.
*
* @version 1.0
* @author sveyrier
*
*/
public class FilterCriteria {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* The filter state value for 'active'.
*/
protected static final String ACTIVE = "active"; //$NON-NLS-1$
/**
* The property value for positive filter.
*/
protected static final String POSITIVE = "positive"; //$NON-NLS-1$
/**
* The filter loader class name property.
*/
protected static final String LOADERCLASSNAME = "loaderClassName"; //$NON-NLS-1$
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The criteria reference.
*/
private Criteria fCriteria;
/**
* Flag whether this criteria is active or not
*/
private boolean fIsActive;
/**
* Flag whether this criteria is for positive filter or not
*/
private boolean fIsPositive;
/**
* The loader class name.
*/
private String fLoaderClassName;
// ------------------------------------------------------------------------
// Constructor
// ------------------------------------------------------------------------
/**
* Standard constructor
*
* @param criteria A criteria reference
* @param isActive <code>true</code> if filter criteria is active else <code>false</code>
* @param isPositive <code>true</code> for positive filter else <code>false</code>
*/
public FilterCriteria(Criteria criteria, boolean isActive, boolean isPositive) {
this(criteria, isActive, isPositive, null);
}
/**
* Constructor
*
* @param criteria A criteria reference
* @param isActive <code>true</code> if filter criteria is active else <code>false</code>
* @param isPositive <code>true</code> for positive filter else <code>false</code>
* @param loaderClassName A loader class name
*/
public FilterCriteria(Criteria criteria, boolean isActive, boolean isPositive, String loaderClassName) {
fCriteria = criteria;
fIsActive = isActive;
fIsPositive = isPositive;
fLoaderClassName = loaderClassName;
}
/**
* Copy Constructor
* @param other FilterCriteria
*/
public FilterCriteria (FilterCriteria other) {
fCriteria = new Criteria(other.fCriteria);
fIsActive = other.fIsActive;
fIsPositive = other.fIsPositive;
fLoaderClassName = other.fLoaderClassName;
}
/**
* Default constructor
*/
protected FilterCriteria() {
}
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
@Override
public String toString() {
StringBuffer sb = new StringBuffer(super.toString());
sb.append(':');
if (fCriteria != null) {
sb.append(" expression=");sb.append(fCriteria.getExpression()); //$NON-NLS-1$
sb.append(" active=");sb.append(fIsActive); //$NON-NLS-1$
sb.append(" positive=");sb.append(fIsPositive); //$NON-NLS-1$
} else {
sb.append("empty criteria"); //$NON-NLS-1$
}
return sb.toString();
}
/**
* Sets a criteria reference.
* @param criteria A criteria reference
*/
public void setCriteria(Criteria criteria) {
fCriteria = criteria;
}
/**
* Returns the criteria reference.
*
* @return the criteria reference
*/
public Criteria getCriteria() {
return fCriteria;
}
/**
* Sets the active flag.
*
* @param isActive A active value.
*/
public void setActive(boolean isActive) {
fIsActive = isActive;
}
/**
* Returns whether filter criteria is active or not.
*
* @return whether filter criteria is active or not.
*/
public boolean isActive() {
return fIsActive;
}
/**
* Sets filter is for positive filtering or not.
*
* @param isPositive The value to set.
*/
public void setPositive(boolean isPositive) {
fIsPositive = isPositive;
}
/**
* Returns whether the filter si for positive filtering or not.
*
* @return Returns the positive.
*/
public boolean isPositive() {
return fIsPositive;
}
/**
* Sets the loader class name for this filter.
*
* @param loaderClassName The loader class name to set
*/
public void setLoaderClassName(String loaderClassName) {
fLoaderClassName = loaderClassName;
}
/**
* Returns the class loader name.
*
* @return the class loader name.
*/
public String getLoaderClassName() {
return fLoaderClassName;
}
/**
* Finds a filter criteria within a list of criteria.
*
* @param what The filter to find
* @param list A list of filter criteria
* @return The found filter criteria or null
*/
public static FilterCriteria find(FilterCriteria what, List<FilterCriteria> list) {
if (what != null && list != null) {
try {
for (Iterator<FilterCriteria> i = list.iterator(); i.hasNext();) {
FilterCriteria fc = i.next();
if (what.compareTo(fc)) {
return fc;
}
}
} catch (Exception e) {
// Silence
}
}
return null;
}
/**
* Compares this filter criteria with a given criteria.
*
* @param to The filter criteria to compare.
* @return usual comparison result (< 0, 0, > 0)
*/
public boolean compareTo(FilterCriteria to) {
if (isPositive() == to.isPositive() && getCriteria().compareTo(to.getCriteria())) {
if (getLoaderClassName() == null && to.getLoaderClassName() == null) {
return true;
}
if ((getLoaderClassName() != null && to.getLoaderClassName() != null) && getLoaderClassName().equals(to.getLoaderClassName())) {
return true;
}
}
return false;
}
/**
* Saves current criteria attributes in the dialog settings.
*
* @param settings The dialog settings
*/
public void save(DialogSettings settings) {
settings.put(ACTIVE, isActive());
settings.put(POSITIVE, isPositive());
if (getLoaderClassName() != null) {
settings.put(LOADERCLASSNAME, getLoaderClassName());
} else {
settings.put(LOADERCLASSNAME, ""); //$NON-NLS-1$
}
if (fCriteria != null) {
fCriteria.save(settings);
}
}
/**
* Loads the criteria with values of the dialog settings.
*
* @param settings The dialog settings
*/
public void load(DialogSettings settings) {
setActive(settings.getBoolean(ACTIVE));
setPositive(settings.getBoolean(POSITIVE));
String loaderClassName = settings.get(LOADERCLASSNAME);
setLoaderClassName(loaderClassName != null && loaderClassName.length() > 0 ? loaderClassName : null);
if (fCriteria != null) {
fCriteria.load(settings);
}
}
}