blob: b39cfaa3b7405023c53ac6c70e08b1e292a593d5 [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.apache.stanbol.enhancer.engines.uimatotriples.tools;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class filters caslight Feature by rules.
* @author Mihály Héder
*/
public class FeatureFilter {
String typeName;
List<Entry<String,String>> features = new ArrayList<Entry<String, String>>();
final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* Returns the list of Features recognized by this filter.
* @return
*/
public List<Entry<String, String>> getFeatures() {
return features;
}
/**
* Sets the list of Features recognized by this filter.
* @param features
*/
public void setFeatures(List<Entry<String, String>> features) {
this.features = features;
}
/**
* Returns the FeatureStructure's type name for which this filter was created.
* @return
*/
public String getTypeName() {
return typeName;
}
/**
* Sets the FeatureStructure's type name for which this filter was created.
* @param typeName
*/
public void setTypeName(String typeName) {
this.typeName = typeName;
}
/**
* Adds a Feature filtering rule.
* @param featureName the name of the Feature in question.
* @param featureValue the value of the rule: a regular expression against the value should match.
*/
public void addFeatureFilter(String featureName, String featureValue) {
Entry<String,String> entry = new AbstractMap.SimpleEntry<String, String>(featureName, featureValue);
features.add(entry);
}
/**
* Checks whether a Feature name and Value is allowed by the rules.
* @param name the name of the Feature
* @param value the Value of the Feature
* @return
*/
public boolean checkNameValueAllowed(String name, String value) {
//no rules at all for features -> accept
logger.debug("checking name:"+name+" value:"+value);
if (features.isEmpty()) {
return true;
}
for (Entry<String,String> e:features) {
logger.debug("Checking against name:"+e.getKey() + " value:"+ e.getValue());
if (e.getKey().equals(name)) {
if (e.getValue() == null || e.getValue().isEmpty()) {
//feature name enumerated, no value -> accept
return true;
} else {
if (value.matches(e.getValue())) {
//value matches on regex
return true;
}
else {
//value does not match
return false;
}
}
}
}
//no rule for this feature -> deny
return false;
}
/**
* Check wheter this Feature is allowed to pass the filtering.
* @param name
* @return
*/
boolean checkNameToPass(String name) {
//no rules at all for features -> print
if (features.isEmpty()) {
return true;
}
for (Entry<String,String> e:features) {
//enumerated
if (e.getKey().equals(name)) {
//name there
return true;
}
}
//not enumerated
return false;
}
}