/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2015, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.gui.javafx.filter;
import java.util.HashMap;
import java.util.Locale;
import java.util.Optional;
import javafx.scene.Node;
import org.apache.sis.util.iso.DefaultInternationalString;
import org.geotoolkit.display2d.GO2Utilities;
import org.opengis.feature.AttributeType;
import org.opengis.feature.PropertyType;
import org.opengis.filter.Filter;
import org.opengis.filter.PropertyIsNull;
import org.opengis.filter.expression.Expression;
/**
* Operator for {@link PropertyIsNull} filter.
*
* @author Alexis Manin (Geomatys)
*/
public class FXNullOperator implements FXFilterOperator {
// TODO : put traduction in bundle.
private static final DefaultInternationalString TITLE;
static {
final HashMap<Locale, String> locales = new HashMap<>();
locales.put(Locale.ENGLISH, "is null");
locales.put(Locale.FRENCH, "est nul(le)");
TITLE = new DefaultInternationalString(locales);
}
@Override
public boolean canHandle(PropertyType target) {
if (target instanceof AttributeType) {
return !((AttributeType)target).getValueClass().isPrimitive();
} else {
return true;
}
}
@Override
public CharSequence getTitle() {
return TITLE;
}
@Override
public boolean canExtractSettings(PropertyType propertyType, Node settingsContainer) {
return false;
}
@Override
public Filter getFilterOver(Expression toApplyOn, Node editor) {
return GO2Utilities.FILTER_FACTORY.isNull(toApplyOn);
}
@Override
public Optional<Node> createFilterEditor(PropertyType target) {
return Optional.empty();
}
}