Я столкнулся с проблемой в правиле под названием "Due date for test1". Я передаю список tests
в качестве параметра для того, чтобы проверить его на наличие в нем Test.Test1
, но список в нем пустой, несмотря на то, что до этого я его заполнил в правиле "test for type1". В чем проблема?
Вот код сущности Machine
:
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Machine {
private String type;
public ArrayList<Test> tests= new ArrayList<Test>();
private List<String> functions = new ArrayList<String>();
private Date creationTime =null;
private Date testTime = null;
public Machine (String type) {
this.type= type;
}
public void setType(String type) {
this.type= type;
}
public String getType() {
return type;
}
public void setTests(ArrayList<Test> tests) {
this.tests = tests;
}
public void setFunctions(List<String> functions) {
this.functions = functions;
}
public List<String> functions() {
return functions;
}
public List<Test> getTests() {
return tests;
}
public void setCreationTime(Date creationTime) {
this.creationTime = creationTime;
}
public Date getCreationTime() {
return creationTime;
}
public void setTestTime(Date testTime) {
this.testTime = testTime;
}
public Date getTestTime() {
return testTime;
}
}
Вот код сущности Test
:
package com.sample;
import java.util.Calendar;
public enum Test {
Test1(1),Test2(2),Test3(3);
private Integer id;
Test(Integer id) {
this.id=id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setTestsDueTime(Machine m,int numOfDays) {
setTest(m,Calendar.DAY_OF_YEAR,numOfDays);
}
public void setTest(Machine m,int calendarType,int numOfDays) {
Calendar c = Calendar.getInstance();
c.setTime(m.getCreationTime());
c.add(calendarType, numOfDays);
m.setTestTime(c.getTime());
}
}
А вот код drl файла:
package com.sample
import com.sample.Machine;
import com.sample.Test;
rule "test for type1"
when
m : Machine(type == "type1");
then
Test t1=Test.Test1;
Test t2 = Test.Test2;
Test t3 = Test.Test3;
m.getTests().add(t1);
m.getTests().add(t2);
m.getTests().add(t3);
insert(m);
insert(m);
insert(m) ;
end
rule "Due date for test1"
when
m:Machine(type == "type1", tests contains Test.Test1);
then
System.out.print("условие прошло");
//t.setTestsDueTime( m,3);
end
Вот код главного класса:
package com.sample;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
public class DroolsTest {
public static final void main(String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
// go !
Machine m = new Machine("type1");
kSession.insert(m);
kSession.fireAllRules();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Спасибо за помощь.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Делаю игру пинг-понг на Java по книге Якова ФайнаКод состоит из двух классов и интерфейса (интерфейс игры, движок игры и константы)
Уважаемые товарищи, у меня просто ужас, а не ситуацияНе могу понять битый час в чём проблема, больше напоминает проблемы с софтом и/или компьютером
Пытаюсь сделать это следующим образом:
Скачал package "Script" для Atom, но при запуске Java кода в консоли выдает это: https://prntsc/gtyl2i Подскажите, как исправить?