Drools, and probably the underlying MVEL that the 'from' uses, has no
understanding of Generics, so I expect thats your problem.
Mark
Gaurav2007 wrote:
HI ALL,
I am using drool 4.0.1 in my project.
I am facing problem in using generics feature of jdk1.5.
My objective is to perform validation on the basis of data type of variable.
for storing values of variable i have one Attribute Class it contains getter
setter for values of attribute and attributeId which is a string but value
of attribute is of deferent type so i am thinking to use generics here.
public class Attribute<T> {
public String qualifiedName;
public T newValue;
public T oldValue;
public String getQualifiedName() {
return qualifiedName;
}
public void setQualifiedName(String qualifiedName) {
this.qualifiedName = qualifiedName;
}
public T getNewValue() {
return (T)newValue;
}
public void setNewValue(T newValue) {
this.newValue = newValue;
}
public T getOldValue() {
return oldValue;
}
public void setOldValue(T oldValue) {
this.oldValue = oldValue;
}
}
my rule for date comparison looks like:
//Date Comparison.
rule "W250.1 DateComparison"
when
$dto : DataProvider()
Attribute(newValue < "29-Oct-2007") from $dto.getValue("W250.1")
then
System.out.println ("Error in Date check \t");
end
DataProvider class it is responsible to give instance of attribute
corresponding to attributeId:
public class DataProvider {
HashMap<String,Attribute> fieldMap=new HashMap<String, Attribute>();
public DataProvider() {
populateMap();
}
public Attribute getValue(String qualifiedName){
Attribute attribute = fieldMap.get(qualifiedName);
return attribute;
}
public void populateMap(){
Attribute<Date> attribute = new Attribute<Date>();
SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy");
Date date;
try {
date = format.parse("27-Oct-2007");
attribute.setQualifiedName("W250.1");
attribute.setOldValue(date);
attribute.setNewValue(date);
fieldMap.put(attribute.getQualifiedName(),attribute);
}
catch (ParseException e) {
e.printStackTrace();
}
}
}
in this case i am getting exception:
Exception in thread "main" java.lang.ClassCastException: java.lang.String
when i am not using generics this rule is working fine.
but in this case how should i perform validation depending upon data type of
attribute.
can you please help me in solving this problem.
Thanks,
Gaurav Joshi