package com.openMap1.mapper.mapping;
import com.openMap1.mapper.core.ClassSet;
import com.openMap1.mapper.util.messageChannel;
import com.openMap1.mapper.FixedPropertyValue;
import com.openMap1.mapper.ModelPropertyFilter;
import com.openMap1.mapper.ObjMapping;
import java.util.Vector;
/**
* represents one property inclusion filter in an object mapping;
* the object must have the property value in order to be represented in the XML
*
* This is sometimes a wrapper around the model class ModelPropertyFilter, but is
* not so for fixed property values.
*
* @author Robert Worden
* @version 1.0
*/
public class filterProp extends filter
{
private String property, value, test;
public String property() {return property;}
public String value() {return value;}
public String test() {return test;}
// called with an me:filterProp element as argument
public filterProp (messageChannel mChan , ModelPropertyFilter mp, ClassSet onCSet)
{
super(mChan, onCSet);
property = mp.getPropertyName();
value = mp.getValue();
test = mp.getTest().getLiteral();
if (test.equals("")) {test = "=";}
}
// called with a fixed property mapping as argument
public filterProp(messageChannel mChan , FixedPropertyValue fpv)
{
super(mChan,((ObjMapping)fpv.eContainer()).getClassSet());
property = fpv.getMappedProperty();
value = fpv.getFixedValue();
test = "=";
}
// true if some other filter is the same as this one
public boolean sameFilter(filterProp fp)
{
return ((property.equals(fp.property))
&& (value.equals(fp.value))
&& (test.equals(fp.test)));
}
// true if this filter is in a vector of filters
public boolean inFilters(Vector<filter> filters)
{
int i;
filter f;
filterProp fp;
boolean res = false;
for (i = 0; i < filters.size(); i++)
{
f = (filter)filters.elementAt(i);
if (f instanceof filterProp)
{
fp = (filterProp)f;
if (sameFilter(fp)) res = true;
}
}
return res;
}
public void write()
{
mChan().message("Class " + onCSet().stringForm() + " requires "
+ property + " " + test + " " + value + ".");
}
/* true if two property filters are mutually exclusive
i.e can never both be satisfied by the same object. */
boolean mutuallyExclusive(filterProp fp)
{
return ((test.equals("="))
&& (fp.test.equals("="))
&& (property.equals(fp.property))
&& !(value.equals(fp.value)));
}
}