001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krms.framework; 017 018 import static junit.framework.Assert.assertNotNull; 019 020 import java.util.ArrayList; 021 import java.util.Arrays; 022 import java.util.Collections; 023 import java.util.HashMap; 024 import java.util.List; 025 import java.util.Map; 026 027 import org.junit.Before; 028 import org.junit.Test; 029 import org.kuali.rice.krms.api.engine.EngineResults; 030 import org.kuali.rice.krms.api.engine.ExecutionOptions; 031 import org.kuali.rice.krms.api.engine.ExecutionFlag; 032 import org.kuali.rice.krms.api.engine.Facts; 033 import org.kuali.rice.krms.api.engine.SelectionCriteria; 034 import org.kuali.rice.krms.api.engine.Term; 035 import org.kuali.rice.krms.api.engine.TermResolver; 036 import org.kuali.rice.krms.api.repository.LogicalOperator; 037 import org.kuali.rice.krms.api.repository.agenda.AgendaDefinition; 038 import org.kuali.rice.krms.framework.engine.Agenda; 039 import org.kuali.rice.krms.framework.engine.BasicAgenda; 040 import org.kuali.rice.krms.framework.engine.BasicAgendaTree; 041 import org.kuali.rice.krms.framework.engine.BasicAgendaTreeEntry; 042 import org.kuali.rice.krms.framework.engine.BasicContext; 043 import org.kuali.rice.krms.framework.engine.BasicRule; 044 import org.kuali.rice.krms.framework.engine.ComparableTermBasedProposition; 045 import org.kuali.rice.krms.framework.engine.CompoundProposition; 046 import org.kuali.rice.krms.framework.engine.Context; 047 import org.kuali.rice.krms.framework.engine.ContextProvider; 048 import org.kuali.rice.krms.framework.engine.Proposition; 049 import org.kuali.rice.krms.framework.engine.ProviderBasedEngine; 050 import org.kuali.rice.krms.framework.engine.ResultLogger; 051 import org.kuali.rice.krms.framework.engine.Rule; 052 import org.kuali.rice.krms.framework.engine.expression.ComparisonOperator; 053 import org.kuali.rice.krms.framework.engine.expression.ComparisonOperatorServiceImpl; 054 055 public class KRMSTest { 056 private static final ResultLogger LOG = ResultLogger.getInstance(); 057 058 private ComparisonOperator operatorGreaterThan; 059 private ComparisonOperator operatorLessThan; 060 061 @Before 062 public void setUp() { 063 operatorGreaterThan = ComparisonOperator.GREATER_THAN; 064 operatorGreaterThan.setComparisonOperatorService(ComparisonOperatorServiceImpl.getInstance()); 065 operatorLessThan = ComparisonOperator.LESS_THAN; 066 operatorLessThan.setComparisonOperatorService(ComparisonOperatorServiceImpl.getInstance()); 067 } 068 069 @Test 070 public void compoundPropositionTest() { 071 072 Proposition prop1 = new ComparableTermBasedProposition(operatorGreaterThan, totalCostTerm, Integer.valueOf(1)); 073 Proposition prop2 = new ComparableTermBasedProposition(operatorLessThan, totalCostTerm, Integer.valueOf(1000)); 074 Proposition prop3 = new ComparableTermBasedProposition(operatorGreaterThan, totalCostTerm, Integer.valueOf(1000)); 075 CompoundProposition compoundProp1 = new CompoundProposition(LogicalOperator.AND, Arrays.asList(prop1, prop2, prop3)); 076 077 Rule rule = new BasicRule("InBetween",compoundProp1, null); 078 079 BasicAgendaTree agendaTree = new BasicAgendaTree(new BasicAgendaTreeEntry(rule)); 080 Agenda agenda = new BasicAgenda(Collections.singletonMap(AgendaDefinition.Constants.EVENT, "test"), agendaTree); 081 082 Map<String, String> contextQualifiers = new HashMap<String, String>(); 083 contextQualifiers.put("docTypeName", "Proposal"); 084 085 List<TermResolver<?>> testResolvers = new ArrayList<TermResolver<?>>(); 086 testResolvers.add(testResolver); 087 088 Context context = new BasicContext(Arrays.asList(agenda), testResolvers); 089 ContextProvider contextProvider = new ManualContextProvider(context); 090 091 SelectionCriteria selectionCriteria = SelectionCriteria.createCriteria(null, contextQualifiers, 092 Collections.singletonMap(AgendaDefinition.Constants.EVENT, "test")); 093 094 ProviderBasedEngine engine = new ProviderBasedEngine(); 095 engine.setContextProvider(contextProvider); 096 097 // Set execution options to log execution 098 ExecutionOptions executionOptions = new ExecutionOptions().setFlag(ExecutionFlag.LOG_EXECUTION, true); 099 100 EngineResults results = engine.execute(selectionCriteria, Facts.EMPTY_FACTS, executionOptions); 101 assertNotNull(results); 102 } 103 104 105 private static final Term totalCostTerm = new Term("totalCost"); 106 107 private static final TermResolver<Integer> testResolver = new TermResolverMock<Integer>(totalCostTerm.getName(), 1); 108 }