/* * Copyright 2011 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.informer.rules; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.Arrays; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.informer.Group; import org.drools.informer.Question; import org.drools.informer.Questionnaire; import org.drools.io.ResourceFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; /** * @author Damon * */ public class ReadOnlyTest { private KnowledgeBase knowledgeBase; /** * @throws Exception */ @Before public void setUp() throws Exception { KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); knowledgeBuilder.add(ResourceFactory.newClassPathResource("org/drools/informer/Active.drl"), ResourceType.DRL); knowledgeBuilder.add(ResourceFactory.newClassPathResource("org/drools/informer/Queries.drl"), ResourceType.DRL); knowledgeBuilder.add(ResourceFactory.newClassPathResource("org/drools/informer/ReadOnly.drl"), ResourceType.DRL); System.err.println( knowledgeBuilder.getErrors() ); assertFalse(knowledgeBuilder.hasErrors()); knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages()); } @Test public void testReadOnly() { StatefulKnowledgeSession knowledgeSession = knowledgeBase.newStatefulKnowledgeSession(); try { Questionnaire questionnaire = new Questionnaire("questionnaire"); Group group1 = new Group("group1"); group1.setPresentationStyles(new String[]{"readonly"}); Group group2 = new Group("group2"); Group group3 = new Group("group3"); group3.setPresentationStyles(new String[]{"readonly"}); Group group3a = new Group("group3a"); Group group4 = new Group("group4"); Group group4a = new Group("group4a"); Group group4b = new Group("group4b"); group4b.setPresentationStyles(new String[]{"readonly"}); Question question1 = new Question("question1"); question1.setAnswerType(Question.QuestionType.TYPE_TEXT); questionnaire.setItems(new String[]{group1.getId(),group2.getId(),group3.getId(), group4.getId()}); group1.setItems(new String[]{question1.getId()}); group2.setItems(new String[]{question1.getId()}); group3.setItems(new String[]{group3a.getId()}); group3a.setItems(new String[]{question1.getId()}); group4.setItems(new String[]{group4a.getId(),group4b.getId()}); group4a.setItems(new String[]{question1.getId()}); group4b.setItems(new String[]{question1.getId()}); FactHandle handleQuestionnaire = knowledgeSession.insert(questionnaire); knowledgeSession.insert(group1); knowledgeSession.insert(group2); knowledgeSession.insert(group3); knowledgeSession.insert(group3a); knowledgeSession.insert(group4); knowledgeSession.insert(group4a); knowledgeSession.insert(group4b); knowledgeSession.insert(question1); knowledgeSession.fireAllRules(); // for ( Object o : knowledgeSession.getObjects() ) { // System.out.println( o ); // } assertEquals(true, isReadOnlyInherited(question1)); System.out.println( "-------------------------------------------" ); questionnaire.setActiveItem(group1.getId()); knowledgeSession.update(handleQuestionnaire, questionnaire); knowledgeSession.fireAllRules(); assertEquals(true, isReadOnlyInherited(question1)); System.out.println( "-------------------------------------------" ); questionnaire.setActiveItem(group2.getId()); knowledgeSession.update(handleQuestionnaire, questionnaire); knowledgeSession.fireAllRules(); assertEquals(false, isReadOnlyInherited(question1)); questionnaire.setActiveItem(group3.getId()); knowledgeSession.update(handleQuestionnaire, questionnaire); knowledgeSession.fireAllRules(); assertEquals(true, isReadOnlyInherited(question1)); questionnaire.setActiveItem(group4.getId()); knowledgeSession.update(handleQuestionnaire, questionnaire); knowledgeSession.fireAllRules(); assertEquals(true, isReadOnlyInherited(question1)); } finally { knowledgeSession.dispose(); } } private boolean isReadOnlyInherited(Question question) { return question.getPresentationStyles() != null && Arrays.asList(question.getPresentationStyles()).contains("readonly-inherited"); } }