Search in sources :

Example 1 with Entity

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

the class TraitTest method testPreserveAllSetBitMask.

@Test
public void testPreserveAllSetBitMask() {
    // DROOLS-1699
    String drl = "package t.x;\n" + "" + "import " + Entity.class.getName() + "; " + "" + "declare trait MyThing end\n" + "" + "declare trait RootThing extends MyThing " + " objProp : java.util.List = new java.util.ArrayList() " + "end " + "" + "declare trait F extends RootThing end\n" + "" + "declare trait D extends RootThing end\n" + "" + "declare trait E extends D end\n" + "" + "rule Init when\n" + "then " + " Entity e1 = new Entity( \"X\" ); " + " insert( e1 ); " + " Entity e2 = new Entity( \"Y\" ); " + " insert( e2 ); " + " " + " D d1 = don( e1, D.class, true ); " + " F f2 = don( e2, F.class, true ); " + " " + " modify ( d1 ) { getObjProp().add( f2.getCore() ); } " + " modify ( f2.getCore() ) {} " + "end " + "" + "rule Rec no-loop when\n" + " MyThing( $x_0 := core, this isA D.class, $p : this#RootThing.objProp ) " + " exists MyThing( $x_1 := core , core memberOf $p, this isA F.class ) " + "then " + " System.out.println( \"Recognized \" + $x_0 + \" as an instance of E by rule \" + drools.getRule().getName() ); " + " don( $x_0, E.class, true ); " + "end " + "" + "rule Shed_2 when\n" + " $s : String( this == \"go2\") " + " $x : E( $objs : objProp ) " + " $y : F( $z : core memberOf $objs ) " + "then " + " retract( $s ); " + " System.out.println( \"SUCCESS : E has been recognized, removing Y \" ); " + " modify ( $x ) { getObjProp().remove( $z ); } " + " modify ( $y ) {} " + "end ";
    KieHelper helper = new KieHelper();
    KieBase kieBase = helper.addContent(drl, ResourceType.DRL).getKieContainer().getKieBase();
    TraitFactoryImpl.setMode(mode, kieBase);
    KieSession kSession = kieBase.newKieSession();
    kSession.fireAllRules();
    kSession.insert("go2");
    kSession.fireAllRules();
    for (Object o : kSession.getObjects(new ClassObjectFilter(Entity.class))) {
        Entity e = (Entity) o;
        if (e.getId().equals("X")) {
            assertTrue(e.hasTrait("t.x.D"));
            assertFalse(e.hasTrait("t.x.E"));
            assertFalse(e.hasTrait("t.x.F"));
            assertEquals(0, ((List) e._getDynamicProperties().get("objProp")).size());
        } else if (e.getId().equals("Y")) {
            assertTrue(e.hasTrait("t.x.F"));
            assertFalse(e.hasTrait("t.x.D"));
            assertFalse(e.hasTrait("t.x.E"));
        } else {
            fail("Unrecognized entity in WM");
        }
    }
}
Also used : Entity(org.drools.traits.core.factmodel.Entity) ClassObjectFilter(org.kie.api.runtime.ClassObjectFilter) KieBase(org.kie.api.KieBase) KieHelper(org.kie.internal.utils.KieHelper) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) KieSession(org.kie.api.runtime.KieSession) CommonTraitTest(org.drools.traits.compiler.CommonTraitTest) Test(org.junit.Test)

Example 2 with Entity

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

the class TraitTest method testWrapperSize.

@Test
public void testWrapperSize() {
    String source = "org/drools/compiler/factmodel/traits/testTraitDon.drl";
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    Resource res = ResourceFactory.newClassPathResource(source);
    assertNotNull(res);
    kbuilder.add(res, ResourceType.DRL);
    if (kbuilder.hasErrors()) {
        fail(kbuilder.getErrors().toString());
    }
    InternalKnowledgeBase kb = KnowledgeBaseFactory.newKnowledgeBase();
    kb.addPackages(kbuilder.getKnowledgePackages());
    TraitFactoryImpl.setMode(mode, kb);
    TraitFactoryImpl tFactory = (TraitFactoryImpl) RuntimeComponentFactory.get().getTraitFactory(kb);
    try {
        FactType impClass = kb.getFactType("org.drools.compiler.trait.test", "Imp");
        TraitableBean imp = (TraitableBean) impClass.newInstance();
        FactType traitClass = kb.getFactType("org.drools.compiler.trait.test", "Student");
        Class trait = traitClass.getFactClass();
        TraitProxyImpl proxy = (TraitProxyImpl) tFactory.getProxy(imp, trait);
        Map<String, Object> virtualFields = imp._getDynamicProperties();
        Map<String, Object> wrapper = proxy.getFields();
        assertEquals(3, wrapper.size());
        assertEquals(1, virtualFields.size());
        impClass.set(imp, "name", "john");
        assertEquals(3, wrapper.size());
        assertEquals(1, virtualFields.size());
        proxy.getFields().put("school", "skol");
        assertEquals(3, wrapper.size());
        assertEquals(1, virtualFields.size());
        proxy.getFields().put("surname", "xxx");
        assertEquals(4, wrapper.size());
        assertEquals(2, virtualFields.size());
        // FactType indClass = kb.getFactType("org.drools.compiler.trait.test","Entity");
        // TraitableBean ind = (TraitableBean) indClass.newInstance();
        TraitableBean ind = new Entity();
        TraitProxyImpl proxy2 = (TraitProxyImpl) tFactory.getProxy(ind, trait);
        Map virtualFields2 = ind._getDynamicProperties();
        Map wrapper2 = proxy2.getFields();
        assertEquals(3, wrapper2.size());
        assertEquals(3, virtualFields2.size());
        traitClass.set(proxy2, "name", "john");
        assertEquals(3, wrapper2.size());
        assertEquals(3, virtualFields2.size());
        proxy2.getFields().put("school", "skol");
        assertEquals(3, wrapper2.size());
        assertEquals(3, virtualFields2.size());
        proxy2.getFields().put("surname", "xxx");
        assertEquals(4, wrapper2.size());
        assertEquals(4, virtualFields2.size());
        FactType traitClass2 = kb.getFactType("org.drools.compiler.trait.test", "Role");
        Class trait2 = traitClass2.getFactClass();
        // TraitableBean ind2 = (TraitableBean) indClass.newInstance();
        TraitableBean ind2 = new Entity();
        TraitProxyImpl proxy99 = (TraitProxyImpl) tFactory.getProxy(ind2, trait2);
        proxy99.getFields().put("surname", "xxx");
        proxy99.getFields().put("name", "xyz");
        proxy99.getFields().put("school", "skol");
        assertEquals(3, proxy99.getFields().size());
        TraitProxyImpl proxy100 = (TraitProxyImpl) tFactory.getProxy(ind2, trait);
        assertEquals(4, proxy100.getFields().size());
    } catch (Exception e) {
        e.printStackTrace();
        fail(e.getMessage());
    }
}
Also used : TraitFactoryImpl(org.drools.traits.core.factmodel.TraitFactoryImpl) Entity(org.drools.traits.core.factmodel.Entity) Resource(org.kie.api.io.Resource) ByteArrayResource(org.drools.core.io.impl.ByteArrayResource) ClassPathResource(org.drools.core.io.impl.ClassPathResource) TraitableBean(org.drools.core.factmodel.traits.TraitableBean) LogicalTypeInconsistencyException(org.drools.traits.core.factmodel.LogicalTypeInconsistencyException) FactType(org.kie.api.definition.type.FactType) TraitProxyImpl(org.drools.traits.core.factmodel.TraitProxyImpl) KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) Map(java.util.Map) HashMap(java.util.HashMap) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) CommonTraitTest(org.drools.traits.compiler.CommonTraitTest) Test(org.junit.Test)

Example 3 with Entity

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

the class TraitTest method testWrapperEmpty.

@Test
public void testWrapperEmpty() {
    String source = "org/drools/compiler/factmodel/traits/testTraitDon.drl";
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    Resource res = ResourceFactory.newClassPathResource(source);
    assertNotNull(res);
    kbuilder.add(res, ResourceType.DRL);
    if (kbuilder.hasErrors()) {
        fail(kbuilder.getErrors().toString());
    }
    InternalKnowledgeBase kb = KnowledgeBaseFactory.newKnowledgeBase();
    kb.addPackages(kbuilder.getKnowledgePackages());
    TraitFactoryImpl.setMode(mode, kb);
    TraitFactoryImpl tFactory = (TraitFactoryImpl) RuntimeComponentFactory.get().getTraitFactory(kb);
    try {
        FactType impClass = kb.getFactType("org.drools.compiler.trait.test", "Imp");
        TraitableBean imp = (TraitableBean) impClass.newInstance();
        FactType studentClass = kb.getFactType("org.drools.compiler.trait.test", "Student");
        Class trait = studentClass.getFactClass();
        TraitProxyImpl proxy = (TraitProxyImpl) tFactory.getProxy(imp, trait);
        Map<String, Object> virtualFields = imp._getDynamicProperties();
        Map<String, Object> wrapper = proxy.getFields();
        assertFalse(wrapper.isEmpty());
        studentClass.set(proxy, "name", "john");
        assertFalse(wrapper.isEmpty());
        studentClass.set(proxy, "name", null);
        assertFalse(wrapper.isEmpty());
        studentClass.set(proxy, "age", 32);
        assertFalse(wrapper.isEmpty());
        studentClass.set(proxy, "age", null);
        assertFalse(wrapper.isEmpty());
        // FactType indClass = kb.getFactType("org.drools.compiler.trait.test","Entity");
        TraitableBean ind = new Entity();
        FactType RoleClass = kb.getFactType("org.drools.compiler.trait.test", "Role");
        Class trait2 = RoleClass.getFactClass();
        TraitProxyImpl proxy2 = (TraitProxyImpl) tFactory.getProxy(ind, trait2);
        Map<String, Object> wrapper2 = proxy2.getFields();
        assertTrue(wrapper2.isEmpty());
        proxy2.getFields().put("name", "john");
        assertFalse(wrapper2.isEmpty());
        proxy2.getFields().put("name", null);
        assertFalse(wrapper2.isEmpty());
    } catch (Exception e) {
        e.printStackTrace();
        fail(e.getMessage());
    }
}
Also used : TraitFactoryImpl(org.drools.traits.core.factmodel.TraitFactoryImpl) Entity(org.drools.traits.core.factmodel.Entity) Resource(org.kie.api.io.Resource) ByteArrayResource(org.drools.core.io.impl.ByteArrayResource) ClassPathResource(org.drools.core.io.impl.ClassPathResource) TraitableBean(org.drools.core.factmodel.traits.TraitableBean) LogicalTypeInconsistencyException(org.drools.traits.core.factmodel.LogicalTypeInconsistencyException) FactType(org.kie.api.definition.type.FactType) TraitProxyImpl(org.drools.traits.core.factmodel.TraitProxyImpl) KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) CommonTraitTest(org.drools.traits.compiler.CommonTraitTest) Test(org.junit.Test)

Example 4 with Entity

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

the class TraitTest method testTraitEncoding.

@Test
public void testTraitEncoding() {
    String s1 = "package org.drools.core.factmodel.traits;\n" + "import " + Entity.class.getCanonicalName() + ";\n" + "declare trait A end\n" + "declare trait B extends A end\n" + "declare trait C extends A end\n" + "declare trait D extends A end\n" + "declare trait E extends B end\n" + "declare trait F extends C end\n" + "declare trait G extends D end\n" + "declare trait H extends D end\n" + "declare trait I extends E end\n" + "declare trait J extends F end\n" + "declare trait K extends G, H end\n" + "declare trait L extends G, H end\n" + "declare trait M extends I, J end\n" + "declare trait N extends K, L end\n" + "" + "rule \"donOneThing\"\n" + "when\n" + "    $x : Entity()\n" + "then\n" + "    don( $x, A.class );\n" + "end\n" + "" + "rule \"donManyThing\"\n" + "when\n" + "    String( this == \"y\" ) \n" + "    $x : Entity()\n" + "then\n" + "    don( $x, B.class );\n" + "    don( $x, D.class );\n" + "    don( $x, F.class );\n" + "    don( $x, E.class );\n" + "    don( $x, I.class );\n" + "    don( $x, K.class );\n" + "    don( $x, J.class );\n" + "    don( $x, C.class );\n" + "    don( $x, H.class );\n" + "    don( $x, G.class );\n" + "    don( $x, L.class );\n" + "    don( $x, M.class );\n" + "    don( $x, N.class );\n" + "end\n";
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(new ByteArrayResource(s1.getBytes()), ResourceType.DRL);
    if (kbuilder.hasErrors()) {
        fail(kbuilder.getErrors().toString());
    }
    InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    TraitFactoryImpl.setMode(mode, kbase);
    kbase.addPackages(kbuilder.getKnowledgePackages());
    TraitRegistryImpl tr = (TraitRegistryImpl) ((TraitRuntimeComponentFactory) RuntimeComponentFactory.get()).getTraitRegistry(kbase);
    System.out.println(tr.getHierarchy());
    Entity ent = new Entity("x");
    KieSession ksession = kbase.newKieSession();
    ksession.insert(ent);
    ksession.fireAllRules();
    assertEquals(1, ent.getMostSpecificTraits().size());
    ksession.insert("y");
    ksession.fireAllRules();
    System.out.println(ent.getMostSpecificTraits());
    assertEquals(2, ent.getMostSpecificTraits().size());
}
Also used : Entity(org.drools.traits.core.factmodel.Entity) TraitRegistryImpl(org.drools.traits.core.factmodel.TraitRegistryImpl) KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) KieSession(org.kie.api.runtime.KieSession) ByteArrayResource(org.drools.core.io.impl.ByteArrayResource) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) CommonTraitTest(org.drools.traits.compiler.CommonTraitTest) Test(org.junit.Test)

Example 5 with Entity

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

the class TraitTest method testIsALegacyTrait.

@Test
public void testIsALegacyTrait() {
    final String s1 = "package org.drools.traits.compiler.factmodel.traits;\n" + "import " + TraitTest.class.getName() + ".SomeTrait; \n" + "import " + StudentImpl.class.getCanonicalName() + ";\n" + "import " + Entity.class.getCanonicalName() + ";\n" + "import org.drools.core.factmodel.traits.*; \n" + "global java.util.List list;\n" + "" + "declare trait IStudent end \n" + "" + "rule \"Don ItemStyle\"\n" + "	when\n" + "	then\n" + "		insert( new StudentImpl() );\n" + "		don( new Entity(), IStudent.class );\n" + "end\n" + "" + "rule Check " + " when " + "  $s : StudentImpl() " + "  $e : Entity( this isA $s ) " + " then " + "  list.add( 1 ); " + " end ";
    KieBase kbase = getKieBaseFromString(s1);
    TraitFactoryImpl.setMode(mode, kbase);
    ArrayList list = new ArrayList();
    KieSession knowledgeSession = kbase.newKieSession();
    knowledgeSession.setGlobal("list", list);
    knowledgeSession.fireAllRules();
    assertEquals(Arrays.asList(1), list);
}
Also used : Entity(org.drools.traits.core.factmodel.Entity) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) KieSession(org.kie.api.runtime.KieSession) CommonTraitTest(org.drools.traits.compiler.CommonTraitTest) CommonTraitTest(org.drools.traits.compiler.CommonTraitTest) Test(org.junit.Test)

Aggregations

Entity (org.drools.traits.core.factmodel.Entity)13 Test (org.junit.Test)13 CommonTraitTest (org.drools.traits.compiler.CommonTraitTest)10 KieSession (org.kie.api.runtime.KieSession)7 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)7 KieBase (org.kie.api.KieBase)5 ArrayList (java.util.ArrayList)4 HashMap (java.util.HashMap)4 ByteArrayResource (org.drools.core.io.impl.ByteArrayResource)4 InternalKnowledgeBase (org.drools.kiesession.rulebase.InternalKnowledgeBase)4 TraitProxyImpl (org.drools.traits.core.factmodel.TraitProxyImpl)4 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)4 TraitableBean (org.drools.core.factmodel.traits.TraitableBean)3 ClassPathResource (org.drools.core.io.impl.ClassPathResource)3 LogicalTypeInconsistencyException (org.drools.traits.core.factmodel.LogicalTypeInconsistencyException)3 TraitFactoryImpl (org.drools.traits.core.factmodel.TraitFactoryImpl)3 FactType (org.kie.api.definition.type.FactType)3 Resource (org.kie.api.io.Resource)3 List (java.util.List)2 Map (java.util.Map)2