Search in sources :

Example 11 with Thing

use of org.drools.core.factmodel.traits.Thing in project drools by kiegroup.

the class TraitHelper method applyManyTraits.

protected <T, K> T applyManyTraits(Activation activation, K core, Collection<Class<? extends Thing>> traits, Object value, boolean logical, Mode... modes) throws LogicalTypeInconsistencyException {
    // Precondition : traits is not empty, checked by don
    TraitFactory builder = TraitFactory.getTraitBuilderForKnowledgeBase(entryPoint.getKnowledgeBase());
    TraitableBean inner = makeTraitable(core, builder, logical, activation);
    Collection<Thing> mostSpecificTraits = inner.getMostSpecificTraits();
    boolean newTraitsAdded = false;
    T firstThing = null;
    List<Thing> things = new ArrayList<Thing>(traits.size());
    checkStaticTypeCode(inner);
    for (Class<?> trait : traits) {
        boolean needsProxy = trait.isAssignableFrom(inner.getClass());
        boolean hasTrait = inner.hasTrait(trait.getName());
        boolean needsUpdate = needsProxy || core != inner;
        if (!hasTrait) {
            T thing = (T) asTrait(core, inner, trait, needsProxy, hasTrait, needsUpdate, builder, logical, activation);
            configureTrait(thing, value);
            things.add((Thing) thing);
            if (!newTraitsAdded && trait != Thing.class) {
                firstThing = thing;
                newTraitsAdded = true;
            }
        }
    }
    for (Thing t : things) {
        doInsertTrait(activation, t, core, logical, modes);
    }
    if (newTraitsAdded) {
        if (mostSpecificTraits != null) {
            updateCore(inner, core, null, logical, activation);
            if (!mostSpecificTraits.isEmpty()) {
                updateManyTraits(inner, onlyTraitBitSetMask(), things, core.getClass(), mostSpecificTraits, activation);
            }
        }
    }
    return firstThing;
}
Also used : ArrayList(java.util.ArrayList) TraitableBean(org.drools.core.factmodel.traits.TraitableBean) Thing(org.drools.core.factmodel.traits.Thing) TraitFactory(org.drools.core.factmodel.traits.TraitFactory)

Aggregations

Thing (org.drools.core.factmodel.traits.Thing)11 ArrayList (java.util.ArrayList)3 BitSet (java.util.BitSet)3 TraitFactory (org.drools.core.factmodel.traits.TraitFactory)3 TraitProxy (org.drools.core.factmodel.traits.TraitProxy)3 TraitTypeMap (org.drools.core.factmodel.traits.TraitTypeMap)3 TraitableBean (org.drools.core.factmodel.traits.TraitableBean)3 Test (org.junit.Test)3 InternalFactHandle (org.drools.core.common.InternalFactHandle)2 Collection (java.util.Collection)1 Collections (java.util.Collections)1 List (java.util.List)1 Map (java.util.Map)1 Abducible (org.drools.core.beliefsystem.abductive.Abducible)1 NamedEntryPoint (org.drools.core.common.NamedEntryPoint)1 Entity (org.drools.core.factmodel.traits.Entity)1 LogicalTypeInconsistencyException (org.drools.core.factmodel.traits.LogicalTypeInconsistencyException)1 TraitType (org.drools.core.factmodel.traits.TraitType)1 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)1 KnowledgeBaseImpl (org.drools.core.impl.KnowledgeBaseImpl)1