1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krms.test;
17
18 import org.apache.commons.lang.builder.ToStringBuilder;
19 import org.apache.commons.lang.builder.ToStringStyle;
20 import org.joda.time.DateTime;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
24 import org.kuali.rice.krad.data.DataObjectService;
25 import org.kuali.rice.krad.data.PersistenceOption;
26 import org.kuali.rice.krms.api.KrmsApiServiceLocator;
27 import org.kuali.rice.krms.api.KrmsConstants;
28 import org.kuali.rice.krms.api.engine.EngineResults;
29 import org.kuali.rice.krms.api.engine.ExecutionFlag;
30 import org.kuali.rice.krms.api.engine.ExecutionOptions;
31 import org.kuali.rice.krms.api.engine.Facts;
32 import org.kuali.rice.krms.api.engine.SelectionCriteria;
33 import org.kuali.rice.krms.api.repository.action.ActionDefinition;
34 import org.kuali.rice.krms.api.repository.agenda.AgendaDefinition;
35 import org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition;
36 import org.kuali.rice.krms.api.repository.context.ContextDefinition;
37 import org.kuali.rice.krms.api.repository.proposition.PropositionDefinition;
38 import org.kuali.rice.krms.api.repository.proposition.PropositionParameter;
39 import org.kuali.rice.krms.api.repository.proposition.PropositionParameterType;
40 import org.kuali.rice.krms.api.repository.proposition.PropositionType;
41 import org.kuali.rice.krms.api.repository.rule.RuleDefinition;
42 import org.kuali.rice.krms.api.repository.term.TermDefinition;
43 import org.kuali.rice.krms.api.repository.term.TermSpecificationDefinition;
44 import org.kuali.rice.krms.api.repository.type.KrmsAttributeDefinition;
45 import org.kuali.rice.krms.api.repository.type.KrmsTypeAttribute;
46 import org.kuali.rice.krms.api.repository.type.KrmsTypeBoService;
47 import org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition;
48 import org.kuali.rice.krms.framework.engine.expression.ComparisonOperator;
49 import org.kuali.rice.krms.framework.type.ValidationActionType;
50 import org.kuali.rice.krms.framework.type.ValidationActionTypeService;
51 import org.kuali.rice.krms.framework.type.ValidationRuleType;
52 import org.kuali.rice.krms.framework.type.ValidationRuleTypeService;
53 import org.kuali.rice.krms.impl.repository.ActionAttributeBo;
54 import org.kuali.rice.krms.impl.repository.ActionBo;
55 import org.kuali.rice.krms.impl.repository.ActionBoService;
56 import org.kuali.rice.krms.impl.repository.ActionBoServiceImpl;
57 import org.kuali.rice.krms.impl.repository.AgendaAttributeBo;
58 import org.kuali.rice.krms.impl.repository.AgendaBo;
59 import org.kuali.rice.krms.impl.repository.AgendaBoService;
60 import org.kuali.rice.krms.impl.repository.AgendaBoServiceImpl;
61 import org.kuali.rice.krms.impl.repository.AgendaItemBo;
62 import org.kuali.rice.krms.impl.repository.ContextAttributeBo;
63 import org.kuali.rice.krms.impl.repository.ContextBo;
64 import org.kuali.rice.krms.impl.repository.ContextBoService;
65 import org.kuali.rice.krms.impl.repository.ContextBoServiceImpl;
66 import org.kuali.rice.krms.impl.repository.KrmsAttributeDefinitionBo;
67 import org.kuali.rice.krms.impl.repository.KrmsAttributeDefinitionService;
68 import org.kuali.rice.krms.impl.repository.KrmsRepositoryServiceLocator;
69 import org.kuali.rice.krms.impl.repository.KrmsTypeBoServiceImpl;
70 import org.kuali.rice.krms.impl.repository.PropositionBo;
71 import org.kuali.rice.krms.impl.repository.PropositionBoService;
72 import org.kuali.rice.krms.impl.repository.PropositionBoServiceImpl;
73 import org.kuali.rice.krms.impl.repository.RuleAttributeBo;
74 import org.kuali.rice.krms.impl.repository.RuleBo;
75 import org.kuali.rice.krms.impl.repository.RuleBoService;
76 import org.kuali.rice.krms.impl.repository.RuleBoServiceImpl;
77 import org.kuali.rice.krms.impl.repository.TermBoService;
78 import org.kuali.rice.krms.impl.repository.TermBoServiceImpl;
79 import org.kuali.rice.krms.impl.util.KrmsServiceLocatorInternal;
80 import org.kuali.rice.test.BaselineTestCase.BaselineMode;
81 import org.kuali.rice.test.BaselineTestCase.Mode;
82 import org.springframework.transaction.annotation.Transactional;
83
84 import java.util.ArrayList;
85 import java.util.Collections;
86 import java.util.HashMap;
87 import java.util.HashSet;
88 import java.util.LinkedList;
89 import java.util.List;
90 import java.util.Map;
91 import java.util.Set;
92
93 import static org.junit.Assert.*;
94
95
96
97
98
99 @BaselineMode(Mode.CLEAR_DB)
100 public class ValidationIntegrationTest extends AbstractBoTest {
101
102 private static final String EVENT_ATTRIBUTE = "Event";
103
104 private static final String TERM_NAME = "campusCodeTermSpec";
105
106 private static final String CONTEXT_NAME = "ValidationITContext";
107 private static final String WARNING_MESSAGE = "Warning Message.";
108 private static final String ERROR_MESSAGE = "Error Message.";
109 private static final String VALIDATION_ACTION_TYPE_SERVICE = "validationActionTypeService";
110 private static final String VALIDATION_RULE_TYPE_SERVICE = "validationRuleTypeService";
111
112 private KrmsTypeBoService krmsTypeBoService;
113 private KrmsAttributeDefinitionService krmsAttributeDefinitionService;
114 private PropositionBoService propositionBoService;
115 private TermBoService termBoService;
116 private ContextBoService contextRepository;
117 private AgendaBoService agendaBoService;
118 private RuleBoService ruleBoService;
119 private ActionBoService actionBoService;
120
121
122 @Before
123 public void setup() {
124
125 krmsAttributeDefinitionService = KrmsRepositoryServiceLocator.getKrmsAttributeDefinitionService();
126 krmsTypeBoService = new KrmsTypeBoServiceImpl();
127 ((KrmsTypeBoServiceImpl)krmsTypeBoService).setDataObjectService(getDataObjectService());
128
129
130 propositionBoService = new PropositionBoServiceImpl();
131 ((PropositionBoServiceImpl)propositionBoService).setDataObjectService(getDataObjectService());
132 termBoService = new TermBoServiceImpl();
133
134
135 ((TermBoServiceImpl)termBoService).setDataObjectService(GlobalResourceLoader.<DataObjectService>getService("dataObjectService"));
136
137 contextRepository = new ContextBoServiceImpl();
138 ((ContextBoServiceImpl)contextRepository).setDataObjectService(getDataObjectService());
139 agendaBoService = new AgendaBoServiceImpl();
140 ((AgendaBoServiceImpl)agendaBoService).setDataObjectService(getDataObjectService());
141 ((AgendaBoServiceImpl)agendaBoService).setAttributeDefinitionService(krmsAttributeDefinitionService);
142 ruleBoService = new RuleBoServiceImpl();
143 ((RuleBoServiceImpl)ruleBoService).setDataObjectService(getDataObjectService());
144 actionBoService = new ActionBoServiceImpl();
145 ((ActionBoServiceImpl)actionBoService).setDataObjectService(getDataObjectService());
146 }
147
148 @Transactional
149 @Test
150 public void testValidWarning() {
151 KrmsAttributeTypeDefinitionAndBuilders ruleDefs = createKrmsAttributeTypeDefinitionAndBuilders(
152 ValidationRuleTypeService.VALIDATIONS_RULE_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
153 ValidationRuleType.VALID.toString(), true, ValidationRuleType.VALID.toString(),
154 ValidationRuleType.VALID.getCode(), VALIDATION_RULE_TYPE_SERVICE, krmsTypeBoService, 1);
155 KrmsAttributeTypeDefinitionAndBuilders actionDef = createKrmsAttributeTypeDefinitionAndBuilders(
156 ValidationActionTypeService.VALIDATIONS_ACTION_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
157 ValidationActionType.WARNING.toString(), true, ValidationActionType.WARNING.toString(),
158 ValidationActionType.WARNING.getCode(), VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
159 KrmsAttributeTypeDefinitionAndBuilders actionMessageDef = createKrmsAttributeTypeDefinitionAndBuilders(
160 ValidationActionTypeService.VALIDATIONS_ACTION_MESSAGE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
161 "Valdiation Action Message", true, "Valdiation Action Message",
162 WARNING_MESSAGE, VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
163
164 List<KrmsAttributeTypeDefinitionAndBuilders> actionDefs = new LinkedList<KrmsAttributeTypeDefinitionAndBuilders>();
165 actionDefs.add(actionDef);
166 actionDefs.add(actionMessageDef);
167 ContextBo contextBo = createContext();
168 RuleBo ruleBo = createRuleWithAction(ruleDefs, actionDefs, contextBo, WARNING_MESSAGE);
169 createAgenda(ruleBo, contextBo, createEventAttributeDefinition());
170
171 EngineResults results = engineExecute();
172 assertTrue(results.getAttribute(ValidationActionTypeService.VALIDATIONS_ACTION_ATTRIBUTE) == null);
173 }
174
175 @Transactional
176 @Test
177 public void testInvalidWarning() {
178 KrmsAttributeTypeDefinitionAndBuilders ruleDefs = createKrmsAttributeTypeDefinitionAndBuilders(
179 ValidationRuleTypeService.VALIDATIONS_RULE_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
180 ValidationRuleType.INVALID.toString(), true, ValidationRuleType.INVALID.toString(),
181 ValidationRuleType.INVALID.getCode(), VALIDATION_RULE_TYPE_SERVICE, krmsTypeBoService, 1);
182 KrmsAttributeTypeDefinitionAndBuilders actionDef = createKrmsAttributeTypeDefinitionAndBuilders(
183 ValidationActionTypeService.VALIDATIONS_ACTION_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
184 ValidationActionType.WARNING.toString(), true, ValidationActionType.WARNING.toString(),
185 ValidationActionType.WARNING.getCode(), VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
186 KrmsAttributeTypeDefinitionAndBuilders actionMessageDef = createKrmsAttributeTypeDefinitionAndBuilders(
187 ValidationActionTypeService.VALIDATIONS_ACTION_MESSAGE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
188 "Valdiation Action Message", true, "Valdiation Action Message",
189 WARNING_MESSAGE, VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
190
191 List<KrmsAttributeTypeDefinitionAndBuilders> actionDefs = new LinkedList<KrmsAttributeTypeDefinitionAndBuilders>();
192 actionDefs.add(actionDef);
193 actionDefs.add(actionMessageDef);
194
195 ContextBo contextBo = createContext();
196 RuleBo ruleBo = createRuleWithAction(ruleDefs, actionDefs, contextBo, WARNING_MESSAGE);
197 createAgenda(ruleBo, contextBo, createEventAttributeDefinition());
198
199 EngineResults results = engineExecute();
200 assertNotNull(results.getAttribute(ValidationActionTypeService.VALIDATIONS_ACTION_ATTRIBUTE));
201 assertEquals(ValidationActionType.WARNING.getCode() + ":" + WARNING_MESSAGE,
202 results.getAttribute(ValidationActionTypeService.VALIDATIONS_ACTION_ATTRIBUTE));
203 }
204
205 @Transactional
206 @Test
207 public void testValidError() {
208 KrmsAttributeTypeDefinitionAndBuilders ruleDefs = createKrmsAttributeTypeDefinitionAndBuilders(
209 ValidationRuleTypeService.VALIDATIONS_RULE_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
210 ValidationRuleType.VALID.toString(), true, ValidationRuleType.VALID.toString(),
211 ValidationRuleType.VALID.getCode(), VALIDATION_RULE_TYPE_SERVICE, krmsTypeBoService, 1);
212 KrmsAttributeTypeDefinitionAndBuilders actionDef = createKrmsAttributeTypeDefinitionAndBuilders(
213 ValidationActionTypeService.VALIDATIONS_ACTION_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
214 ValidationActionType.ERROR.toString(), true, ValidationActionType.ERROR.toString(),
215 ValidationActionType.ERROR.getCode(), VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
216 KrmsAttributeTypeDefinitionAndBuilders actionMessageDef = createKrmsAttributeTypeDefinitionAndBuilders(
217 ValidationActionTypeService.VALIDATIONS_ACTION_MESSAGE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
218 "Valdiation Action Message", true, "Valdiation Action Message",
219 ERROR_MESSAGE, VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
220 List<KrmsAttributeTypeDefinitionAndBuilders> actionDefs = new LinkedList<KrmsAttributeTypeDefinitionAndBuilders>();
221 actionDefs.add(actionDef);
222 actionDefs.add(actionMessageDef);
223
224 ContextBo contextBo = createContext();
225 RuleBo ruleBo = createRuleWithAction(ruleDefs, actionDefs, contextBo, ERROR_MESSAGE);
226 createAgenda(ruleBo, contextBo, createEventAttributeDefinition());
227
228 EngineResults results = engineExecute();
229 assertTrue(results.getAttribute(ValidationActionTypeService.VALIDATIONS_ACTION_ATTRIBUTE) == null);
230 }
231
232 @Transactional
233 @Test
234 public void testInvalidError() {
235 KrmsAttributeTypeDefinitionAndBuilders ruleDefs = createKrmsAttributeTypeDefinitionAndBuilders(
236 ValidationRuleTypeService.VALIDATIONS_RULE_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
237 ValidationRuleType.INVALID.toString(), true, ValidationRuleType.INVALID.toString(),
238 ValidationRuleType.INVALID.getCode(), VALIDATION_RULE_TYPE_SERVICE, krmsTypeBoService, 1);
239 KrmsAttributeTypeDefinitionAndBuilders actionDef = createKrmsAttributeTypeDefinitionAndBuilders(
240 ValidationActionTypeService.VALIDATIONS_ACTION_TYPE_CODE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
241 ValidationActionType.ERROR.toString(), true, ValidationActionType.ERROR.toString(),
242 ValidationActionType.ERROR.getCode(), VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
243 KrmsAttributeTypeDefinitionAndBuilders actionMessageDef = createKrmsAttributeTypeDefinitionAndBuilders(
244 ValidationActionTypeService.VALIDATIONS_ACTION_MESSAGE_ATTRIBUTE, KrmsConstants.KRMS_NAMESPACE,
245 "Valdiation Action Message", true, "Valdiation Action Message",
246 ERROR_MESSAGE, VALIDATION_ACTION_TYPE_SERVICE, krmsTypeBoService, 1);
247 List<KrmsAttributeTypeDefinitionAndBuilders> actionDefs = new LinkedList<KrmsAttributeTypeDefinitionAndBuilders>();
248 actionDefs.add(actionDef);
249 actionDefs.add(actionMessageDef);
250
251 ContextBo contextBo = createContext();
252 RuleBo ruleBo = createRuleWithAction(ruleDefs, actionDefs, contextBo, ERROR_MESSAGE);
253 createAgenda(ruleBo, contextBo, createEventAttributeDefinition());
254
255 EngineResults results = engineExecute();
256 assertNotNull(results.getAttribute(ValidationActionTypeService.VALIDATIONS_ACTION_ATTRIBUTE));
257 assertEquals(ValidationActionType.ERROR.getCode() + ":" + ERROR_MESSAGE, results.getAttribute(
258 ValidationActionTypeService.VALIDATIONS_ACTION_ATTRIBUTE));
259 }
260
261 @Transactional
262 @Test
263 public void testDef() {
264 ContextDefinition contextDefinition = createContextDefinition(KrmsConstants.KRMS_NAMESPACE);
265 createAgendaDefinition(contextDefinition, "ValidationIntegration", KrmsConstants.KRMS_NAMESPACE);
266
267 engineExecute();
268 }
269
270 private ContextDefinition createContextDefinition(String nameSpace) {
271
272 KrmsAttributeDefinition.Builder contextTypeAttributeDefnBuilder = KrmsAttributeDefinition.Builder.create(null, "Context1Qualifier", nameSpace);
273 contextTypeAttributeDefnBuilder.setLabel("Context 1 Qualifier");
274 KrmsAttributeDefinition contextTypeAttributeDefinition = krmsAttributeDefinitionService.createAttributeDefinition(contextTypeAttributeDefnBuilder.build());
275
276
277 KrmsTypeAttribute.Builder krmsTypeAttrBuilder = KrmsTypeAttribute.Builder.create(null, contextTypeAttributeDefinition.getId(), 1);
278
279
280 KrmsTypeDefinition.Builder krmsContextTypeDefnBuilder = KrmsTypeDefinition.Builder.create("KrmsTestContextType", nameSpace);
281 krmsContextTypeDefnBuilder.setAttributes(Collections.singletonList(krmsTypeAttrBuilder));
282 KrmsTypeDefinition krmsContextTypeDefinition = krmsContextTypeDefnBuilder.build();
283 krmsContextTypeDefinition = krmsTypeBoService.createKrmsType(krmsContextTypeDefinition);
284
285
286 ContextDefinition.Builder contextBuilder = ContextDefinition.Builder.create(nameSpace, CONTEXT_NAME);
287 contextBuilder.setTypeId(krmsContextTypeDefinition.getId());
288 ContextDefinition contextDefinition = contextBuilder.build();
289 contextDefinition = contextRepository.createContext(contextDefinition);
290
291
292
293 ContextAttributeBo contextAttribute = new ContextAttributeBo();
294 contextAttribute.setAttributeDefinition(KrmsAttributeDefinitionBo.from(contextTypeAttributeDefinition));
295 contextAttribute.setContext(ContextBo.from(contextDefinition));
296 contextAttribute.setValue("BLAH");
297 getDataObjectService().save(contextAttribute, PersistenceOption.FLUSH);
298
299 return contextDefinition;
300 }
301
302 private void createAgendaDefinition(ContextDefinition contextDefinition, String eventName, String nameSpace ) {
303 AgendaDefinition agendaDef =
304 AgendaDefinition.Builder.create(null, "testAgenda", null, contextDefinition.getId()).build();
305 agendaDef = agendaBoService.createAgenda(agendaDef);
306
307 AgendaItemDefinition.Builder agendaItemBuilder1 = AgendaItemDefinition.Builder.create(null, agendaDef.getId());
308 RuleDefinition ruleDefinition = createRuleDefinition1(contextDefinition, nameSpace);
309 agendaItemBuilder1.setRuleId(ruleDefinition.getId());
310
311
312 AgendaItemDefinition agendaItem1 = agendaBoService.createAgendaItem(agendaItemBuilder1.build());
313
314 AgendaDefinition.Builder agendaDefBuilder1 = AgendaDefinition.Builder.create(agendaDef);
315 agendaDefBuilder1.setFirstItemId(agendaItem1.getId());
316 agendaDef = agendaDefBuilder1.build();
317
318 agendaBoService.updateAgenda(agendaDef);
319 }
320
321 private RuleDefinition createRuleDefinition1(ContextDefinition contextDefinition, String nameSpace) {
322
323 RuleDefinition.Builder ruleDefBuilder1 =
324 RuleDefinition.Builder.create(null, "Rule1", nameSpace, null, null);
325 RuleDefinition ruleDef1 = ruleBoService.createRule(ruleDefBuilder1.build());
326
327
328 ruleDefBuilder1 = RuleDefinition.Builder.create(ruleDef1);
329 ruleDefBuilder1.setProposition(createCompoundProposition(contextDefinition, ruleDef1));
330 ruleDef1 = ruleDefBuilder1.build();
331 ruleDef1 = ruleBoService.updateRule(ruleDef1);
332
333
334 ActionDefinition.Builder actionDefBuilder1 = ActionDefinition.Builder.create(null, "testAction1", nameSpace, createKrmsActionTypeDefinition(nameSpace).getId(), ruleDef1.getId(), 1);
335 ActionDefinition actionDef1 = actionBoService.createAction(actionDefBuilder1.build());
336
337 return ruleDef1;
338 }
339
340
341 private KrmsTypeDefinition createKrmsCampusTypeDefinition(String nameSpace) {
342
343 KrmsTypeDefinition.Builder krmsCampusTypeDefnBuilder = KrmsTypeDefinition.Builder.create("CAMPUS", nameSpace);
344 KrmsTypeDefinition krmsCampusTypeDefinition = krmsTypeBoService.createKrmsType(krmsCampusTypeDefnBuilder.build());
345 return krmsCampusTypeDefinition;
346 }
347
348 private KrmsTypeDefinition createKrmsActionTypeDefinition(String nameSpace) {
349 KrmsTypeDefinition.Builder krmsActionTypeDefnBuilder = KrmsTypeDefinition.Builder.create("KrmsActionResolverType", nameSpace);
350 krmsActionTypeDefnBuilder.setServiceName("testActionTypeService");
351 KrmsTypeDefinition krmsActionTypeDefinition = krmsTypeBoService.createKrmsType(krmsActionTypeDefnBuilder.build());
352
353 return krmsActionTypeDefinition;
354 }
355
356
357 private EngineResults engineExecute() {
358 Map<String, String> contextQualifiers = new HashMap<String, String>();
359 contextQualifiers.put("name", CONTEXT_NAME);
360 contextQualifiers.put("namespaceCode", KrmsConstants.KRMS_NAMESPACE);
361
362 SelectionCriteria sc1 = SelectionCriteria.createCriteria(new DateTime(),
363 contextQualifiers, Collections.<String,String>emptyMap());
364
365 Facts.Builder factsBuilder1 = Facts.Builder.create();
366
367 factsBuilder1.addFact(TERM_NAME, "BL");
368
369 ExecutionOptions xOptions1 = new ExecutionOptions();
370 xOptions1.setFlag(ExecutionFlag.LOG_EXECUTION, true);
371
372 EngineResults engineResults = KrmsApiServiceLocator.getEngine().execute(sc1, factsBuilder1.build(), xOptions1);
373 assertNotNull(engineResults);
374 assertTrue(engineResults.getAllResults().size() > 0);
375 print(engineResults);
376 return engineResults;
377 }
378
379 private void print(EngineResults engineResults) {
380 System.out.println(ToStringBuilder.reflectionToString(engineResults, ToStringStyle.MULTI_LINE_STYLE));
381 }
382
383 private ContextBo createContext() {
384 KrmsAttributeTypeDefinitionAndBuilders defs = createKrmsAttributeTypeDefinitionAndBuilders(
385 "ContextAttributeName", KrmsConstants.KRMS_NAMESPACE, "ContextLabel", true, "ContextTypeName",
386 "ContextTypeId", "ContextServiceName", krmsTypeBoService, 1);
387
388 ContextBo contextBo = new ContextBo();
389 contextBo.setNamespace(KrmsConstants.KRMS_NAMESPACE);
390 contextBo.setName(CONTEXT_NAME);
391 contextBo.setTypeId(defs.typeDef.getId());
392
393 return getDataObjectService().save(contextBo, PersistenceOption.FLUSH);
394 }
395
396 private KrmsAttributeTypeDefinitionAndBuilders createKrmsAttributeTypeDefinitionAndBuilders(String attributeName,
397 String namespace, String label, boolean active, String typeName, String typeId, String serviceName,
398 KrmsTypeBoService krmsTypeBoService, Integer sequenceNumber) {
399 KrmsAttributeDefinitionBo attributeDefinitionBo = new KrmsAttributeDefinitionBo();
400 attributeDefinitionBo.setNamespace(namespace);
401 attributeDefinitionBo.setName(attributeName);
402 attributeDefinitionBo.setLabel(label);
403 attributeDefinitionBo.setActive(active);
404 attributeDefinitionBo = (KrmsAttributeDefinitionBo)getDataObjectService().save(attributeDefinitionBo, PersistenceOption.FLUSH);
405 assertNotNull(attributeDefinitionBo.getId());
406 KrmsAttributeDefinition attribDef = KrmsAttributeDefinitionBo.to(attributeDefinitionBo);
407
408 KrmsTypeDefinition.Builder typeDefinition = KrmsTypeDefinition.Builder.create(
409 typeName, namespace);
410 typeDefinition.setServiceName(serviceName);
411 KrmsTypeAttribute.Builder attribDefinitionBuilder = KrmsTypeAttribute.Builder.create(typeId, attribDef.getId(), sequenceNumber);
412 typeDefinition.getAttributes().add(attribDefinitionBuilder);
413 KrmsTypeDefinition typeDef = krmsTypeBoService.createKrmsType(typeDefinition.build());
414 assertNotNull(typeDef);
415
416 return new KrmsAttributeTypeDefinitionAndBuilders(attribDef, attribDefinitionBuilder, typeDef, typeDefinition);
417 }
418
419 private RuleBo createRuleWithAction(KrmsAttributeTypeDefinitionAndBuilders ruleBits,
420 List<KrmsAttributeTypeDefinitionAndBuilders> actionBits, ContextBo contextBo, String message) {
421
422 RuleBo rule = new RuleBo();
423 rule.setTypeId(ruleBits.typeDef.getId());
424 rule.setNamespace(ruleBits.typeDef.getNamespace());
425 rule.setName(ruleBits.typeDef.getName());
426
427 ActionBo action = new ActionBo();
428 action.setTypeId(actionBits.get(0).typeDef.getId());
429 action.setDescription("Description of validation action for message " + actionBits.get(0).attribDef.getDescription());
430 action.setNamespace(actionBits.get(0).typeDef.getNamespace());
431 action.setName(actionBits.get(0).typeDef.getName());
432 action.setSequenceNumber(actionBits.get(0).typeAttribBuilder.getSequenceNumber());
433 List<ActionAttributeBo> actionAttributes = new ArrayList<ActionAttributeBo>();
434 action.setAttributeBos(actionAttributes);
435
436 for (KrmsAttributeTypeDefinitionAndBuilders actionBit : actionBits) {
437
438 ActionAttributeBo actionAttribute = new ActionAttributeBo();
439 actionAttributes.add(actionAttribute);
440 actionAttribute.setAttributeDefinition(KrmsAttributeDefinitionBo.from(actionBit.attribDef));
441 actionAttribute.setValue(actionBit.typeAttribBuilder.getTypeId());
442 actionAttribute.setAction(action);
443
444
445 }
446
447 rule.getActions().add(action);
448 action.setRule(rule);
449
450 rule = getDataObjectService().save(rule, PersistenceOption.FLUSH);
451
452
453 RuleAttributeBo ruleType = new RuleAttributeBo();
454 ruleType.setAttributeDefinition(KrmsAttributeDefinitionBo.from(ruleBits.attribDef));
455 ruleType.setValue(ruleBits.typeAttribBuilder.getTypeId());
456 ruleType.setRuleId(rule.getId());
457 rule.getAttributeBos().add(ruleType);
458
459 rule = getDataObjectService().save(rule, PersistenceOption.FLUSH);
460
461 RuleDefinition ruleDef = RuleBo.to(rule);
462
463 PropositionDefinition propDef = createPropositionDefinition1(ContextBo.to(contextBo), ruleDef).build();
464 propDef = propositionBoService.createProposition(propDef);
465 rule.setProposition(PropositionBo.from(propDef));
466
467 rule = getDataObjectService().save(rule, PersistenceOption.FLUSH);
468
469 assertNotNull(rule.getId());
470 assertNotNull(propDef.getId());
471 assertEquals(propDef.getRuleId(), rule.getId());
472 assertEquals(1, rule.getActions().size());
473 assertNotNull(rule.getActions().get(0).getId());
474 assertEquals(2, rule.getActions().get(0).getAttributeBos().size());
475
476 return rule;
477 }
478
479 private void createActionAttributeBo(String namespace, String attributeName, String label, boolean active,
480 String actionAttribDefId, String value, Set<ActionAttributeBo> actionAttributes) {
481 KrmsAttributeDefinitionBo attributeDefinitionBo = new KrmsAttributeDefinitionBo();
482 attributeDefinitionBo.setNamespace(namespace);
483 attributeDefinitionBo.setName(attributeName);
484 attributeDefinitionBo.setLabel(label);
485 attributeDefinitionBo.setActive(active);
486 attributeDefinitionBo = (KrmsAttributeDefinitionBo)getDataObjectService().save(attributeDefinitionBo,
487 PersistenceOption.FLUSH);
488 assertNotNull(attributeDefinitionBo.getId());
489 KrmsAttributeDefinition attribDef = KrmsAttributeDefinitionBo.to(attributeDefinitionBo);
490
491 ActionAttributeBo actionAttribute = new ActionAttributeBo();
492 actionAttributes.add(actionAttribute);
493 actionAttribute.setAttributeDefinition(KrmsAttributeDefinitionBo.from(attribDef));
494 actionAttribute.setValue(value);
495 }
496
497 private PropositionDefinition.Builder createPropositionDefinition1(ContextDefinition contextDefinition, RuleDefinition ruleDef1) {
498
499 PropositionDefinition.Builder propositionDefBuilder1 =
500 PropositionDefinition.Builder.create(null, PropositionType.SIMPLE.getCode(), ruleDef1.getId(), null , Collections.<PropositionParameter.Builder>emptyList());
501 propositionDefBuilder1.setDescription("is campus bloomington");
502
503
504 List<PropositionParameter.Builder> propositionParams1 = new ArrayList<PropositionParameter.Builder>();
505 propositionParams1.add(
506 PropositionParameter.Builder.create(null, null, createTermDefinition1(contextDefinition).getId(), PropositionParameterType.TERM.getCode(), 1)
507 );
508 propositionParams1.add(
509 PropositionParameter.Builder.create(null, null, "BL", PropositionParameterType.CONSTANT.getCode(), 2)
510 );
511 propositionParams1.add(
512 PropositionParameter.Builder.create(null, null, "=", PropositionParameterType.OPERATOR.getCode(), 3)
513 );
514
515
516 for (PropositionParameter.Builder propositionParamBuilder : propositionParams1) {
517 propositionParamBuilder.setProposition(propositionDefBuilder1);
518 }
519
520 propositionDefBuilder1.setParameters(propositionParams1);
521
522 return propositionDefBuilder1;
523 }
524
525
526 private PropositionDefinition.Builder createCompoundProposition(ContextDefinition contextDefinition,
527 RuleDefinition ruleDef1) {
528
529 List<PropositionParameter.Builder> propositionParameterBuilderList = new ArrayList<PropositionParameter.Builder>();
530 propositionParameterBuilderList.add(PropositionParameter.Builder.create(null, null, createTermDefinition1(contextDefinition).getId(),
531 PropositionParameterType.TERM.getCode(), 1)
532 );
533 propositionParameterBuilderList.add(PropositionParameter.Builder.create(null, null, "BL",
534 PropositionParameterType.CONSTANT.getCode(), 2)
535 );
536 propositionParameterBuilderList.add(PropositionParameter.Builder.create(null, null, ComparisonOperator.EQUALS.getCode(),
537 PropositionParameterType.OPERATOR.getCode(), 3)
538 );
539
540 PropositionDefinition.Builder propositionDefBuilder1 =
541 PropositionDefinition.Builder.create(null, PropositionType.SIMPLE.getCode(), ruleDef1.getId(), null , propositionParameterBuilderList);
542 propositionDefBuilder1.setDescription("propositionDefBuilder1 Description");
543
544
545
546
547
548
549
550
551
552 for (PropositionParameter.Builder propositionParamBuilder : propositionParameterBuilderList) {
553 propositionParamBuilder.setProposition(propositionDefBuilder1);
554 }
555
556
557
558 return propositionDefBuilder1;
559 }
560
561 private TermDefinition createTermDefinition1(ContextDefinition contextDefinition) {
562
563 TermSpecificationDefinition campusCodeTermSpec =
564 TermSpecificationDefinition.Builder.create(null, "campusCodeTermSpec", contextDefinition.getId(),
565 "java.lang.String").build();
566 campusCodeTermSpec = termBoService.createTermSpecification(campusCodeTermSpec);
567
568
569 TermDefinition termDefinition1 =
570 TermDefinition.Builder.create(null, TermSpecificationDefinition.Builder.create(campusCodeTermSpec), null).build();
571 termDefinition1 = termBoService.createTerm(termDefinition1);
572
573 return termDefinition1;
574 }
575
576 private TermDefinition createTermDefinitionInteger(ContextDefinition contextDefinition) {
577
578 TermSpecificationDefinition termSpec =
579 TermSpecificationDefinition.Builder.create(null, TERM_NAME, contextDefinition.getId(),
580 "java.lang.Integer").build();
581 termSpec = termBoService.createTermSpecification(termSpec);
582
583
584 TermDefinition termDefinition1 =
585 TermDefinition.Builder.create(null, TermSpecificationDefinition.Builder.create(termSpec), null).build();
586 termDefinition1 = termBoService.createTerm(termDefinition1);
587
588 return termDefinition1;
589 }
590
591
592 private KrmsAttributeDefinitionBo createEventAttributeDefinition() {
593 KrmsAttributeDefinitionService service = KrmsServiceLocatorInternal.getService("krmsAttributeDefinitionService");
594 assertNotNull(service);
595 KrmsAttributeDefinitionBo attributeDefinitionBo = new KrmsAttributeDefinitionBo();
596 attributeDefinitionBo.setNamespace(KrmsConstants.KRMS_NAMESPACE);
597 attributeDefinitionBo.setName(EVENT_ATTRIBUTE);
598 attributeDefinitionBo.setLabel("Event");
599 attributeDefinitionBo.setActive(true);
600 attributeDefinitionBo = (KrmsAttributeDefinitionBo) getDataObjectService().save(attributeDefinitionBo, PersistenceOption.FLUSH);
601 assertNotNull(attributeDefinitionBo.getId());
602 return attributeDefinitionBo;
603 }
604
605 private AgendaBo createAgenda(RuleBo ruleBo, ContextBo contextBo, KrmsAttributeDefinitionBo eventAttributeDefinition) {
606 AgendaBo agendaBo = new AgendaBo();
607 agendaBo.setActive(true);
608 agendaBo.setContextId(contextBo.getId());
609 agendaBo.setName("MyAgenda");
610 agendaBo.setTypeId(null);
611 agendaBo = getDataObjectService().save(agendaBo, PersistenceOption.FLUSH);
612
613 AgendaItemBo agendaItemBo = new AgendaItemBo();
614 agendaItemBo.setRule(ruleBo);
615 agendaItemBo.setAgendaId(agendaBo.getId());
616 agendaItemBo = getDataObjectService().save(agendaItemBo, PersistenceOption.FLUSH);
617
618 List<AgendaItemBo> agendaItems = new ArrayList<AgendaItemBo>();
619 agendaItems.add(agendaItemBo);
620 agendaBo.setItems(agendaItems);
621 agendaBo.setFirstItemId(agendaItemBo.getId());
622 agendaBo.setFirstItem(agendaItemBo);
623
624
625 Set<AgendaAttributeBo> agendaAttributes = new HashSet<AgendaAttributeBo>();
626 agendaBo.setAttributeBos(agendaAttributes);
627 AgendaAttributeBo agendaAttribute = new AgendaAttributeBo();
628 agendaAttributes.add(agendaAttribute);
629 agendaAttribute.setAttributeDefinition(eventAttributeDefinition);
630 agendaAttribute.setValue(EVENT_ATTRIBUTE);
631 agendaAttribute.setAgenda(agendaBo);
632
633 agendaBo = getDataObjectService().save(agendaBo, PersistenceOption.FLUSH);
634
635 contextBo.getAgendas().add(agendaBo);
636
637 return agendaBo;
638 }
639
640 class KrmsAttributeTypeDefinitionAndBuilders {
641 KrmsTypeDefinition typeDef;
642 KrmsTypeDefinition.Builder typeDefBuilder;
643 KrmsAttributeDefinition attribDef;
644 KrmsTypeAttribute.Builder typeAttribBuilder;
645 KrmsAttributeTypeDefinitionAndBuilders(KrmsAttributeDefinition krmsAttributeDefinition, KrmsTypeAttribute.Builder krmsAttributeDefinitionBuilder,
646 KrmsTypeDefinition krmsTypeDefinition, KrmsTypeDefinition.Builder krmsTypeDefinitionBuilder) {
647 this.typeDef = krmsTypeDefinition;
648 this.typeDefBuilder = krmsTypeDefinitionBuilder;
649 this.attribDef = krmsAttributeDefinition;
650 this.typeAttribBuilder = krmsAttributeDefinitionBuilder;
651 }
652 }
653 }