Search in sources :

Example 6 with HierarchyEncoder

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

the class HierarchyTest method testHierEncoderDecoderLower.

@Test
public void testHierEncoderDecoderLower() {
    HierarchyEncoder encoder = new HierarchyEncoderImpl();
    encoder.encode("Thing", Collections.EMPTY_LIST);
    encoder.encode("A", Arrays.asList("Thing"));
    encoder.encode("Z", Arrays.asList("Thing"));
    encoder.encode("B", Arrays.asList("A", "Z"));
    encoder.encode("C", Arrays.asList("A", "Z"));
    encoder.encode("N", Arrays.asList("B", "C"));
    encoder.encode("P", Arrays.asList("Thing"));
    encoder.encode("Q", Arrays.asList("Thing"));
    encoder.encode("R", Arrays.asList("Thing"));
    encoder.encode("S", Arrays.asList("R"));
    encoder.encode("T", Arrays.asList("C", "Q"));
    encoder.encode("M", Arrays.asList("R", "Q"));
    encoder.encode("O", Arrays.asList("M", "P"));
    System.out.println(encoder);
    Collection x;
    x = encoder.lowerBorder(encoder.metMembersCode(Arrays.asList("B")));
    System.out.println("GCS " + x);
    assertEquals(1, x.size());
    assertTrue(x.contains("B"));
    x = encoder.immediateChildren(encoder.metMembersCode(Arrays.asList("B")));
    System.out.println("GCS " + x);
    assertEquals(1, x.size());
    assertTrue(x.contains("N"));
    x = encoder.lowerBorder(encoder.metMembersCode(Arrays.asList("Z", "Q")));
    System.out.println("GCS " + x);
    assertEquals(1, x.size());
    assertTrue(x.contains("T"));
    x = encoder.immediateChildren(encoder.metMembersCode(Arrays.asList("Z", "Q")));
    System.out.println("GCS " + x);
    assertEquals(1, x.size());
    assertTrue(x.contains("T"));
    x = encoder.lowerBorder(encoder.metMembersCode(Arrays.asList("A", "Z")));
    System.out.println("GCS " + x);
    assertEquals(2, x.size());
    assertTrue(x.contains("B"));
    assertTrue(x.contains("C"));
    x = encoder.immediateChildren(encoder.metMembersCode(Arrays.asList("A", "Z")));
    System.out.println("GCS " + x);
    assertEquals(2, x.size());
    assertTrue(x.contains("B"));
    assertTrue(x.contains("C"));
    x = encoder.lowerBorder(encoder.metMembersCode(Arrays.asList("Thing")));
    System.out.println("GCS " + x);
    assertEquals(1, x.size());
    assertTrue(x.contains("Thing"));
    x = encoder.immediateChildren(encoder.metMembersCode(Arrays.asList("Thing")));
    System.out.println("GCS " + x);
    assertEquals(5, x.size());
    assertTrue(x.contains("A"));
    assertTrue(x.contains("Z"));
    assertTrue(x.contains("P"));
    assertTrue(x.contains("Q"));
    assertTrue(x.contains("R"));
}
Also used : HierarchyEncoder(org.drools.traits.core.factmodel.HierarchyEncoder) Collection(java.util.Collection) Test(org.junit.Test)

Example 7 with HierarchyEncoder

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

the class HierarchyTest method testHierEncoderComplexInheritance.

@Test
public void testHierEncoderComplexInheritance() {
    HierarchyEncoder encoder = new HierarchyEncoderImpl();
    encoder.encode("A", Collections.EMPTY_LIST);
    checkHier(encoder, 'A');
    encoder.encode("B", Arrays.asList("A"));
    checkHier(encoder, 'B');
    encoder.encode("C", Arrays.asList("A"));
    checkHier(encoder, 'C');
    encoder.encode("D", Arrays.asList("B"));
    checkHier(encoder, 'D');
    encoder.encode("E", Arrays.asList("B"));
    checkHier(encoder, 'E');
    encoder.encode("F", Arrays.asList("C"));
    checkHier(encoder, 'F');
    encoder.encode("G", Arrays.asList("C"));
    checkHier(encoder, 'G');
    encoder.encode("H", Arrays.asList("D"));
    checkHier(encoder, 'H');
    encoder.encode("I", Arrays.asList("D"));
    checkHier(encoder, 'I');
    // 
    encoder.encode("J", Arrays.asList("E", "F"));
    checkHier(encoder, 'J');
    encoder.encode("K", Arrays.asList("E", "F"));
    checkHier(encoder, 'K');
    encoder.encode("L", Arrays.asList("G"));
    checkHier(encoder, 'L');
    encoder.encode("M", Arrays.asList("G"));
    checkHier(encoder, 'M');
    encoder.encode("N", Arrays.asList("I", "L"));
    checkHier(encoder, 'N');
    encoder.encode("O", Arrays.asList("H", "M"));
    checkHier(encoder, 'O');
    System.out.println(encoder);
    Collection<BitSet> codes = encoder.getSortedMap().values();
    Iterator<BitSet> iter = codes.iterator();
    Long last = -1L;
    for (int j = 0; j < codes.size() - 1; j++) {
        BitSet ns = iter.next();
        Long next = toLong(ns);
        System.out.println(next);
        assertTrue(next > last);
        last = next;
    }
}
Also used : HierarchyEncoder(org.drools.traits.core.factmodel.HierarchyEncoder) BitSet(java.util.BitSet) Test(org.junit.Test)

Example 8 with HierarchyEncoder

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

the class HierarchyTest method testHierALotOfClasses.

@Test
public void testHierALotOfClasses() {
    HierarchyEncoder encoder = new HierarchyEncoderImpl();
    int N = 1194;
    encoder.encode("A", Collections.EMPTY_LIST);
    for (int j = 1; j < N; j++) {
        encoder.encode("X" + j, Arrays.asList("A"));
    }
    assertEquals(N, encoder.size());
    BitSet code = encoder.getCode("X" + (N - 1));
    assertEquals(1, code.cardinality());
    assertTrue(code.get(N - 2));
}
Also used : HierarchyEncoder(org.drools.traits.core.factmodel.HierarchyEncoder) BitSet(java.util.BitSet) Test(org.junit.Test)

Example 9 with HierarchyEncoder

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

the class HierarchyTest method testSecondOrderInheritance.

@Test
public void testSecondOrderInheritance() {
    HierarchyEncoder encoder = new HierarchyEncoderImpl();
    encoder.encode("T", Collections.EMPTY_LIST);
    encoder.encode("A", Arrays.asList("T"));
    encoder.encode("B", Arrays.asList("T"));
    encoder.encode("C", Arrays.asList("T"));
    encoder.encode("D", Arrays.asList("C"));
    encoder.encode("F", Arrays.asList("B", "C"));
    System.out.println(encoder);
    encoder.encode("Z", Arrays.asList("A", "B", "D"));
    System.out.println(encoder);
    assertTrue(((HierarchyEncoderImpl) encoder).superset(encoder.getCode("Z"), encoder.getCode("F")) < 0);
    assertTrue(((HierarchyEncoderImpl) encoder).superset(encoder.getCode("F"), encoder.getCode("Z")) < 0);
}
Also used : HierarchyEncoder(org.drools.traits.core.factmodel.HierarchyEncoder) Test(org.junit.Test)

Example 10 with HierarchyEncoder

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

the class TraitHelperImpl method shed.

public <T, K, X extends TraitableBean> Thing<K> shed(TraitableBean<K, X> core, Class<T> trait, Activation activation) {
    if (trait.isAssignableFrom(core.getClass())) {
        Collection<Thing<K>> removedTypes = core.removeTrait(trait.getName());
        if (!removedTypes.isEmpty()) {
            reassignNodes(core, removedTypes);
            FactHandle factHandle = getFactHandle(core);
            update(factHandle, onlyTraitBitSetMask(), core.getClass(), activation);
        // updateTraits( core, Long.MIN_VALUE, null, core.getClass(), null, ((TraitableBean) core).getMostSpecificTraits()  );
        }
        if (core instanceof Thing) {
            return (Thing<K>) core;
        } else {
            return null;
        }
    } else {
        Collection<Thing<K>> removedTypes;
        Thing<K> thing = core.getTrait(Thing.class.getName());
        if (trait == Thing.class) {
            removedTypes = new ArrayList<Thing<K>>(core._getTraitMap().values());
            for (Thing t : removedTypes) {
                if (!((TraitType) t)._isVirtual()) {
                    delete(getFactHandle(t), activation);
                }
            }
            core._getTraitMap().clear();
            core._setTraitMap(null);
            return thing;
        } else if (core.hasTrait(trait.getName())) {
            removedTypes = core.removeTrait(trait.getName());
        } else {
            HierarchyEncoder hier = ((TraitRuntimeComponentFactory) RuntimeComponentFactory.get()).getTraitRegistry(this.workingMemory.getKnowledgeBase()).getHierarchy();
            BitSet code = hier.getCode(trait.getName());
            removedTypes = core.removeTrait(code);
        }
        removedTypes = new ArrayList<Thing<K>>(removedTypes);
        reassignNodes(core, removedTypes);
        for (Thing t : removedTypes) {
            if (!((TraitType) t)._isVirtual()) {
                InternalFactHandle handle = (InternalFactHandle) getFactHandle(t);
                if (handle.getEqualityKey() != null && handle.getEqualityKey().getLogicalFactHandle() == handle) {
                    TruthMaintenanceSystemFactory.get().getOrCreateTruthMaintenanceSystem(entryPoint).delete(handle);
                } else {
                    delete(getFactHandle(t), activation);
                }
            }
        }
        if (!core.hasTraits()) {
            don(activation, core, Thing.class, false);
        } else if (!removedTypes.isEmpty()) {
            update(getFactHandle(core), onlyTraitBitSetMask(), core.getClass(), activation);
        // updateTraits( core, Long.MIN_VALUE, null, core.getClass(), null, ((TraitableBean) core).getMostSpecificTraits()  );
        }
        return thing;
    }
}
Also used : InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) HierarchyEncoder(org.drools.traits.core.factmodel.HierarchyEncoder) BitSet(java.util.BitSet) TraitRuntimeComponentFactory(org.drools.traits.core.reteoo.TraitRuntimeComponentFactory) InternalFactHandle(org.drools.core.common.InternalFactHandle) Thing(org.drools.core.factmodel.traits.Thing)

Aggregations

HierarchyEncoder (org.drools.traits.core.factmodel.HierarchyEncoder)20 Test (org.junit.Test)19 BitSet (java.util.BitSet)5 Collection (java.util.Collection)4 InternalFactHandle (org.drools.core.common.InternalFactHandle)1 Thing (org.drools.core.factmodel.traits.Thing)1 TraitRuntimeComponentFactory (org.drools.traits.core.reteoo.TraitRuntimeComponentFactory)1 FactHandle (org.kie.api.runtime.rule.FactHandle)1