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"));
}
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;
}
}
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));
}
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);
}
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;
}
}
Aggregations