blob: 737e8bcdf8ce49ea113fccab82d7a094e44c7de8 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.tasklist.filter;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import javax.swing.JComponent;
/**
* A condition (type and relation pair) in the filter.
* Don't forget to override sameType if you extend this class!
*
* @author Tor Norbye
*/
abstract class FilterCondition {
/**
* Creates a condition.
*/
public FilterCondition() {
}
/**
* Copy constructor. Use from subclassed clone.
*/
protected FilterCondition(final FilterCondition rhs) {
}
/**
* Deep clone, please implement in subclass.
*/
public abstract Object clone() ;
/**
* Compares two objects.
*
* @param obj value of the property
*/
public abstract boolean isTrue(Object obj);
/**
* Creates a component that will represent a constant within the
* filter dialog. It should support {@link #PROP_VALUE_VALID}
* client property.
*
* @return created component or null if no component
*/
public JComponent createConstantComponent() {
return null;
}
/**
* Gets constant from the specified component and save it.
* This method should be also implemented if createConstantComponent()
* is implemented.
*
* @param cmp with createConstantComponent() create component
*/
public void getConstantFrom(JComponent cmp) {
assert cmp != null : "getConstantFrom() is not implemented!"; //NOI18N
}
final boolean isValueValid(JComponent cmp) {
Boolean valid = (Boolean) cmp.getClientProperty(PROP_VALUE_VALID);
if (valid == null) {
return true;
} else {
return valid.booleanValue();
}
}
/**
* Checks whether fc is of the same type.
* This method will be used to replace a condition created with
* Filter.getConditionsFor(Node.Property) with one contained in a filter.
* This method should return true also if this and fc have different
* constants for comparing with property values.
*
* @param fc another condition
* @return true fc is of the same type as this
*/
public boolean sameType(FilterCondition fc) {
return fc.getClass() == getClass();
}
public String toString() {
return getClass().getName() +
"[name=" + getDisplayName() + "]"; // NOI18N
}
/** Use this client property on value/contant components to indicate valid user data.*/
public static final String PROP_VALUE_VALID = "value-valid"; //NOI18N
protected abstract String getDisplayName();
abstract void load( Preferences prefs, String prefix ) throws BackingStoreException;
abstract void save( Preferences prefs, String prefix ) throws BackingStoreException;
}