package org.drools.core; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import org.kie.api.runtime.ClassObjectFilter; import org.kie.api.runtime.ObjectFilter; @XmlRootElement(name="class-object-filter") @XmlAccessorType(XmlAccessType.FIELD) public class ClassObjectSerializationFilter implements ObjectFilter { @XmlAttribute(name="string",required=true) private String className = null; private transient Class filteredClass; public ClassObjectSerializationFilter() { // JAXB constructor } public ClassObjectSerializationFilter(Class clazz) { // use canonical name to avoid problems with anonymous classes this.className = clazz.getCanonicalName(); this.filteredClass = clazz; } public ClassObjectSerializationFilter(ClassObjectFilter objectFilter) { this(objectFilter.getFilteredClass()); } public Class getFilteredClass() { return filteredClass; } public void setFilteredClass(Class filteredClass) { this.filteredClass = filteredClass; } /** * @param object The object to be filtered * @return whether or not the Iterator accepts the given object according to its class. */ @Override public boolean accept(Object object) { if( this.filteredClass == null ) { try { Class filteredClass = Class.forName(this.className); this.filteredClass = filteredClass; } catch( ClassNotFoundException e ) { throw new RuntimeException("Unable to instantiate filter class: " + e.getMessage(), e); } } return this.filteredClass.isAssignableFrom( object.getClass() ); } }