001/** 002 * Copyright 2005-2014 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 */ 016package org.kuali.rice.krms.impl.repository.mock; 017 018import java.util.ArrayList; 019import java.util.Collection; 020import java.util.LinkedHashMap; 021import java.util.LinkedHashSet; 022import java.util.List; 023import java.util.Map; 024import java.util.Set; 025import java.util.UUID; 026import org.kuali.rice.core.api.criteria.QueryByCriteria; 027import org.kuali.rice.core.api.exception.RiceIllegalArgumentException; 028import org.kuali.rice.core.api.exception.RiceIllegalStateException; 029import org.kuali.rice.krms.api.repository.NaturalLanguageTree; 030import org.kuali.rice.krms.api.repository.RuleManagementService; 031import org.kuali.rice.krms.api.repository.action.ActionDefinition; 032import org.kuali.rice.krms.api.repository.agenda.AgendaDefinition; 033import org.kuali.rice.krms.api.repository.agenda.AgendaItemDefinition; 034import org.kuali.rice.krms.api.repository.agenda.AgendaTreeDefinition; 035import org.kuali.rice.krms.api.repository.context.ContextDefinition; 036import org.kuali.rice.krms.api.repository.context.ContextSelectionCriteria; 037import org.kuali.rice.krms.api.repository.language.NaturalLanguageTemplate; 038import org.kuali.rice.krms.api.repository.language.NaturalLanguageTemplaterContract; 039import org.kuali.rice.krms.api.repository.language.NaturalLanguageUsage; 040import org.kuali.rice.krms.api.repository.proposition.PropositionDefinition; 041import org.kuali.rice.krms.api.repository.proposition.PropositionParameter; 042import org.kuali.rice.krms.api.repository.reference.ReferenceObjectBinding; 043import org.kuali.rice.krms.api.repository.rule.RuleDefinition; 044import org.kuali.rice.krms.api.repository.term.TermDefinition; 045import org.kuali.rice.krms.api.repository.term.TermRepositoryService; 046import org.kuali.rice.krms.impl.repository.TranslationUtility; 047import org.kuali.rice.krms.impl.repository.language.SimpleNaturalLanguageTemplater; 048 049public class RuleManagementServiceMockImpl implements RuleManagementService { 050 051 052 // cache variable 053 // The LinkedHashMap is just so the values come back in a predictable order 054 055 private Map<String, ReferenceObjectBinding> referenceObjectBindingMap = new LinkedHashMap<String, ReferenceObjectBinding>(); 056 private Map<String, ContextDefinition> contextMap = new LinkedHashMap<String, ContextDefinition>(); 057 private Map<String, AgendaDefinition> agendaMap = new LinkedHashMap<String, AgendaDefinition>(); 058 private Map<String, AgendaItemDefinition> agendaItemMap = new LinkedHashMap<String, AgendaItemDefinition>(); 059 private Map<String, RuleDefinition> ruleMap = new LinkedHashMap<String, RuleDefinition>(); 060 private Map<String, ActionDefinition> actionMap = new LinkedHashMap<String, ActionDefinition>(); 061 private Map<String, PropositionDefinition> propositionMap = new LinkedHashMap<String, PropositionDefinition>(); 062 private Map<String, NaturalLanguageUsage> naturalLanguageUsageMap = new LinkedHashMap<String, NaturalLanguageUsage>(); 063 private Map<String, NaturalLanguageTemplate> naturalLanguageTemplateMap = new LinkedHashMap<String, NaturalLanguageTemplate>(); 064 065 // supporting services used in this service impl 066 private NaturalLanguageTemplaterContract templater = new SimpleNaturalLanguageTemplater(); 067 private TermRepositoryService termRepositoryService; 068 069 public NaturalLanguageTemplaterContract getTemplater() { 070 return templater; 071 } 072 073 public void setTemplater(NaturalLanguageTemplaterContract templater) { 074 this.templater = templater; 075 } 076 077 public TermRepositoryService getTermRepositoryService() { 078 return termRepositoryService; 079 } 080 081 public void setTermRepositoryService(TermRepositoryService termRepositoryService) { 082 this.termRepositoryService = termRepositoryService; 083 } 084 085 086 087 public void clear() { 088 this.referenceObjectBindingMap.clear(); 089 this.contextMap.clear(); 090 this.agendaMap.clear(); 091 this.agendaItemMap.clear(); 092 this.ruleMap.clear(); 093 this.actionMap.clear(); 094 this.propositionMap.clear(); 095 this.naturalLanguageUsageMap.clear(); 096 this.naturalLanguageTemplateMap.clear(); 097 } 098 099 @Override 100 public ReferenceObjectBinding createReferenceObjectBinding(ReferenceObjectBinding referenceObjectDefinition) 101 throws RiceIllegalArgumentException { 102 // CREATE 103 ReferenceObjectBinding orig = this.getReferenceObjectBinding(referenceObjectDefinition.getId()); 104 if (orig != null) { 105 throw new RiceIllegalArgumentException(referenceObjectDefinition.getId()); 106 } 107 ReferenceObjectBinding.Builder copy = ReferenceObjectBinding.Builder.create(referenceObjectDefinition); 108 if (copy.getId() == null) { 109 copy.setId(UUID.randomUUID().toString()); 110 } 111 referenceObjectDefinition = copy.build(); 112 referenceObjectBindingMap.put(referenceObjectDefinition.getId(), referenceObjectDefinition); 113 return referenceObjectDefinition; 114 } 115 116 @Override 117 public ReferenceObjectBinding getReferenceObjectBinding(String id) 118 throws RiceIllegalArgumentException { 119 // GET_BY_ID 120 if (!this.referenceObjectBindingMap.containsKey(id)) { 121 throw new RiceIllegalArgumentException(id); 122 } 123 return this.referenceObjectBindingMap.get(id); 124 } 125 126 @Override 127 public List<ReferenceObjectBinding> getReferenceObjectBindings(List<String> ids) 128 throws RiceIllegalArgumentException { 129 // GET_BY_IDS 130 List<ReferenceObjectBinding> list = new ArrayList<ReferenceObjectBinding>(); 131 for (String id : ids) { 132 list.add(this.getReferenceObjectBinding(id)); 133 } 134 return list; 135 } 136 137 @Override 138 public List<ReferenceObjectBinding> findReferenceObjectBindingsByReferenceDiscriminatorType(String referenceObjectReferenceDiscriminatorType) 139 throws RiceIllegalArgumentException { 140 List<ReferenceObjectBinding> list = new ArrayList<ReferenceObjectBinding>(); 141 for (ReferenceObjectBinding info : this.referenceObjectBindingMap.values()) { 142 if (info.getReferenceDiscriminatorType().equals(referenceObjectReferenceDiscriminatorType)) { 143 list.add(info); 144 } 145 } 146 return list; 147 } 148 149 @Override 150 public List<ReferenceObjectBinding> findReferenceObjectBindingsByReferenceObject(String referenceObjectReferenceDiscriminatorType, String referenceObjectId) throws RiceIllegalArgumentException { 151 152 List<ReferenceObjectBinding> list = new ArrayList<ReferenceObjectBinding>(); 153 for (ReferenceObjectBinding info : this.referenceObjectBindingMap.values()) { 154 if (info.getReferenceDiscriminatorType().equals(referenceObjectReferenceDiscriminatorType)) { 155 list.add(info); 156 } 157 } 158 return list; 159 } 160 161 @Override 162 public List<ReferenceObjectBinding> findReferenceObjectBindingsByKrmsDiscriminatorType(String referenceObjectKrmsDiscriminatorType) 163 throws RiceIllegalArgumentException { 164 List<ReferenceObjectBinding> list = new ArrayList<ReferenceObjectBinding>(); 165 for (ReferenceObjectBinding info : this.referenceObjectBindingMap.values()) { 166 if (info.getKrmsDiscriminatorType().equals(referenceObjectKrmsDiscriminatorType)) { 167 list.add(info); 168 } 169 } 170 return list; 171 } 172 173 @Override 174 public List<ReferenceObjectBinding> findReferenceObjectBindingsByKrmsObject(String krmsObjectId) 175 throws RiceIllegalArgumentException { 176 List<ReferenceObjectBinding> list = new ArrayList<ReferenceObjectBinding>(); 177 for (ReferenceObjectBinding info : this.referenceObjectBindingMap.values()) { 178 if (info.getKrmsObjectId().equals(krmsObjectId)) { 179 list.add(info); 180 } 181 } 182 return list; 183 } 184 185 @Override 186 public void updateReferenceObjectBinding(ReferenceObjectBinding referenceObjectBindingDefinition) 187 throws RiceIllegalArgumentException { 188 // UPDATE 189 ReferenceObjectBinding.Builder copy = ReferenceObjectBinding.Builder.create(referenceObjectBindingDefinition); 190 ReferenceObjectBinding old = this.getReferenceObjectBinding(referenceObjectBindingDefinition.getId()); 191 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 192 throw new RiceIllegalStateException("" + old.getVersionNumber()); 193 } 194 copy.setVersionNumber(copy.getVersionNumber() + 1); 195 referenceObjectBindingDefinition = copy.build(); 196 this.referenceObjectBindingMap.put(referenceObjectBindingDefinition.getId(), referenceObjectBindingDefinition); 197 return; 198 } 199 200 @Override 201 public void deleteReferenceObjectBinding(String id) 202 throws RiceIllegalArgumentException { 203 // DELETE 204 if (this.referenceObjectBindingMap.remove(id) == null) { 205 throw new RiceIllegalArgumentException(id); 206 } 207 return; 208 } 209 210 @Override 211 public List<String> findReferenceObjectBindingIds(QueryByCriteria queryByCriteria) 212 throws RiceIllegalArgumentException { 213 CriteriaMatcherInMemory<ReferenceObjectBinding> instance = new CriteriaMatcherInMemory<ReferenceObjectBinding>(); 214 instance.setCriteria(queryByCriteria); 215 Collection<ReferenceObjectBinding> selected = instance.findMatching(this.referenceObjectBindingMap.values()); 216 List<String> list = new ArrayList<String>(); 217 for (ReferenceObjectBinding sel : selected) { 218 list.add(sel.getId()); 219 } 220 return list; 221 } 222 223 @Override 224 public AgendaDefinition createAgenda(AgendaDefinition agendaDefinition) 225 throws RiceIllegalArgumentException { 226 if (agendaDefinition.getId() != null) { 227 AgendaDefinition orig = this.getAgenda(agendaDefinition.getId()); 228 if (orig != null) { 229 throw new RiceIllegalArgumentException(agendaDefinition.getId() + "." + agendaDefinition.getName()); 230 } 231 } 232 AgendaDefinition existing = this.getAgendaByNameAndContextId (agendaDefinition.getName(), agendaDefinition.getContextId()); 233 if (existing == null) { 234 throw new RiceIllegalArgumentException (agendaDefinition.getName() + " " + agendaDefinition.getContextId() + " already exists"); 235 } 236 AgendaDefinition.Builder copy = AgendaDefinition.Builder.create(agendaDefinition); 237 if (copy.getId() == null) { 238 copy.setId(UUID.randomUUID().toString()); 239 } 240 copy.setVersionNumber(0l); 241 agendaDefinition = copy.build(); 242 agendaMap.put(agendaDefinition.getId(), agendaDefinition); 243 return agendaDefinition; 244 } 245 246 @Override 247 public AgendaDefinition findCreateAgenda(AgendaDefinition agendaDefinition) throws RiceIllegalArgumentException { 248 AgendaDefinition agenda = this.getAgendaByNameAndContextId(agendaDefinition.getName(), agendaDefinition.getContextId()); 249 if (agenda != null) { 250 return agenda; 251 } 252 return this.createAgenda(agendaDefinition); 253 } 254 255 @Override 256 public AgendaDefinition getAgendaByNameAndContextId(String name, String contextId) { 257 for (AgendaDefinition info : this.agendaMap.values()) { 258 if (info.getContextId().equals(contextId)) { 259 if (info.getName().equals(name)) { 260 return info; 261 } 262 } 263 } 264 return null; 265 } 266 267 268 269 @Override 270 public AgendaDefinition getAgenda(String id) 271 throws RiceIllegalArgumentException { 272 // GET_BY_ID 273 if (!this.agendaMap.containsKey(id)) { 274 throw new RiceIllegalArgumentException(id); 275 } 276 return this.agendaMap.get(id); 277 } 278 279 @Override 280 public List<AgendaDefinition> getAgendasByType(String typeId) 281 throws RiceIllegalArgumentException { 282 // GET_IDS_BY_TYPE 283 List<AgendaDefinition> list = new ArrayList<AgendaDefinition>(); 284 for (AgendaDefinition info : agendaMap.values()) { 285 if (typeId.equals(info.getTypeId())) { 286 list.add(info); 287 } 288 } 289 return list; 290 } 291 292 @Override 293 public List<AgendaDefinition> getAgendasByContext(String contextId) 294 throws RiceIllegalArgumentException { 295 List<AgendaDefinition> list = new ArrayList<AgendaDefinition>(); 296 for (AgendaDefinition info : this.agendaMap.values()) { 297 if (info.getContextId().equals(contextId)) { 298 list.add(info); 299 } 300 } 301 return list; 302 } 303 304 @Override 305 public List<AgendaDefinition> getAgendasByTypeAndContext(String typeId, String contextId) 306 throws RiceIllegalArgumentException { 307 List<AgendaDefinition> list = new ArrayList<AgendaDefinition>(); 308 for (AgendaDefinition info : this.agendaMap.values()) { 309 if (info.getContextId().equals(contextId)) { 310 if (info.getTypeId().equals(typeId)) { 311 list.add(info); 312 } 313 } 314 } 315 return list; 316 } 317 318 @Override 319 public void updateAgenda(AgendaDefinition agendaDefinition) 320 throws RiceIllegalArgumentException { 321 // UPDATE 322 AgendaDefinition.Builder copy = AgendaDefinition.Builder.create(agendaDefinition); 323 AgendaDefinition old = this.getAgenda(agendaDefinition.getId()); 324 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 325 throw new RiceIllegalStateException("" + old.getVersionNumber()); 326 } 327 copy.setVersionNumber(copy.getVersionNumber() + 1); 328 agendaDefinition = copy.build(); 329 this.agendaMap.put(agendaDefinition.getId(), agendaDefinition); 330 return; 331 } 332 333 @Override 334 public void deleteAgenda(String id) 335 throws RiceIllegalArgumentException { 336 // DELETE 337 if (this.agendaMap.remove(id) == null) { 338 throw new RiceIllegalArgumentException(id); 339 } 340 return; 341 } 342 343 @Override 344 public AgendaItemDefinition createAgendaItem(AgendaItemDefinition agendaItemDefinition) 345 throws RiceIllegalArgumentException { 346 // CREATE 347 AgendaItemDefinition.Builder copy = AgendaItemDefinition.Builder.create(agendaItemDefinition); 348 if (copy.getId() == null) { 349 copy.setId(UUID.randomUUID().toString()); 350 } 351 agendaItemDefinition = copy.build(); 352 agendaItemMap.put(agendaItemDefinition.getId(), agendaItemDefinition); 353 return agendaItemDefinition; 354 } 355 356 @Override 357 public AgendaItemDefinition getAgendaItem(String id) 358 throws RiceIllegalArgumentException { 359 // GET_BY_ID 360 if (!this.agendaItemMap.containsKey(id)) { 361 throw new RiceIllegalArgumentException(id); 362 } 363 return this.agendaItemMap.get(id); 364 } 365 366 @Override 367 public List<AgendaItemDefinition> getAgendaItemsByType(String typeId) 368 throws RiceIllegalArgumentException { 369 // GET_IDS_BY_TYPE 370 List<AgendaDefinition> agendas = this.getAgendasByType(typeId); 371 List<AgendaItemDefinition> list = new ArrayList<AgendaItemDefinition>(); 372 for (AgendaDefinition agenda : agendas) { 373 for (AgendaItemDefinition info : agendaItemMap.values()) { 374 if (agenda.getId().equals(info.getAgendaId())) { 375 list.add(info); 376 } 377 } 378 } 379 return list; 380 } 381 382 @Override 383 public List<AgendaItemDefinition> getAgendaItemsByContext(String contextId) 384 throws RiceIllegalArgumentException { 385 List<AgendaDefinition> agendas = this.getAgendasByContext(contextId); 386 List<AgendaItemDefinition> list = new ArrayList<AgendaItemDefinition>(); 387 for (AgendaDefinition agenda : agendas) { 388 for (AgendaItemDefinition info : agendaItemMap.values()) { 389 if (agenda.getId().equals(info.getAgendaId())) { 390 list.add(info); 391 } 392 } 393 } 394 return list; 395 } 396 397 @Override 398 public List<AgendaItemDefinition> getAgendaItemsByTypeAndContext(String typeId, String contextId) 399 throws RiceIllegalArgumentException { 400 List<AgendaDefinition> agendas = this.getAgendasByContext(contextId); 401 List<AgendaItemDefinition> list = new ArrayList<AgendaItemDefinition>(); 402 for (AgendaDefinition agenda : agendas) { 403 if (agenda.getTypeId().equals(typeId)) { 404 for (AgendaItemDefinition info : agendaItemMap.values()) { 405 if (agenda.getId().equals(info.getAgendaId())) { 406 list.add(info); 407 } 408 } 409 } 410 } 411 return list; 412 } 413 414 @Override 415 public void updateAgendaItem(AgendaItemDefinition agendaItemDefinition) 416 throws RiceIllegalArgumentException { 417 // UPDATE 418 AgendaItemDefinition.Builder copy = AgendaItemDefinition.Builder.create(agendaItemDefinition); 419 AgendaItemDefinition old = this.getAgendaItem(agendaItemDefinition.getId()); 420 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 421 throw new RiceIllegalStateException("" + old.getVersionNumber()); 422 } 423 copy.setVersionNumber(copy.getVersionNumber() + 1); 424 agendaItemDefinition = copy.build(); 425 this.agendaItemMap.put(agendaItemDefinition.getId(), agendaItemDefinition); 426 return; 427 } 428 429 @Override 430 public void deleteAgendaItem(String id) 431 throws RiceIllegalArgumentException { 432 // DELETE 433 if (this.agendaItemMap.remove(id) == null) { 434 throw new RiceIllegalArgumentException(id); 435 } 436 return; 437 } 438 439 @Override 440 public RuleDefinition getRuleByNameAndNamespace(String name, String namespace) { 441 for (RuleDefinition rule : this.ruleMap.values()) { 442 if (rule.getName().equals(name)) { 443 if (rule.getNamespace().equals(namespace)) { 444 return rule; 445 } 446 } 447 } 448 return null; 449 } 450 451 452 453 @Override 454 public RuleDefinition createRule(RuleDefinition ruleDefinition) 455 throws RiceIllegalArgumentException { 456 // CREATE 457 if (ruleDefinition.getId() != null) { 458 RuleDefinition orig = this.getRule(ruleDefinition.getId()); 459 if (orig != null) { 460 throw new RiceIllegalArgumentException(ruleDefinition.getId()); 461 } 462 } 463 RuleDefinition.Builder copy = RuleDefinition.Builder.create(ruleDefinition); 464 if (copy.getId() == null) { 465 copy.setId(UUID.randomUUID().toString()); 466 } 467 ruleDefinition = copy.build(); 468 ruleMap.put(ruleDefinition.getId(), ruleDefinition); 469 return ruleDefinition; 470 } 471 472 @Override 473 public RuleDefinition getRule(String ruleId) { 474 // GET_BY_ID 475 if (!this.ruleMap.containsKey(ruleId)) { 476 throw new RiceIllegalArgumentException(ruleId); 477 } 478 return this.ruleMap.get(ruleId); 479 } 480 481 @Override 482 public List<RuleDefinition> getRules(List<String> ruleIds) { 483 List<RuleDefinition> list = new ArrayList<RuleDefinition>(); 484 for (String id : ruleIds) { 485 list.add(this.getRule(id)); 486 } 487 return list; 488 } 489 490 @Override 491 public void updateRule(RuleDefinition ruleDefinition) 492 throws RiceIllegalArgumentException { 493 // UPDATE 494 RuleDefinition.Builder copy = RuleDefinition.Builder.create(ruleDefinition); 495 RuleDefinition old = this.getRule(ruleDefinition.getId()); 496 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 497 throw new RiceIllegalStateException("" + old.getVersionNumber()); 498 } 499 copy.setVersionNumber(copy.getVersionNumber() + 1); 500 ruleDefinition = copy.build(); 501 this.ruleMap.put(ruleDefinition.getId(), ruleDefinition); 502 return; 503 } 504 505 @Override 506 public void deleteRule(String id) 507 throws RiceIllegalArgumentException { 508 // DELETE 509 if (this.ruleMap.remove(id) == null) { 510 throw new RiceIllegalArgumentException(id); 511 } 512 return; 513 } 514 515 @Override 516 public ActionDefinition createAction(ActionDefinition actionDefinition) 517 throws RiceIllegalArgumentException { 518 // CREATE 519 ActionDefinition orig = this.getAction(actionDefinition.getId()); 520 if (orig != null) { 521 throw new RiceIllegalArgumentException(actionDefinition.getId()); 522 } 523 ActionDefinition.Builder copy = ActionDefinition.Builder.create(actionDefinition); 524 if (copy.getId() == null) { 525 copy.setId(UUID.randomUUID().toString()); 526 } 527 actionDefinition = copy.build(); 528 actionMap.put(actionDefinition.getId(), actionDefinition); 529 return actionDefinition; 530 } 531 532 @Override 533 public ActionDefinition getAction(String actionId) { 534 // GET_BY_ID 535 if (!this.actionMap.containsKey(actionId)) { 536 throw new RiceIllegalArgumentException(actionId); 537 } 538 return this.actionMap.get(actionId); 539 } 540 541 @Override 542 public List<ActionDefinition> getActions(List<String> actionIds) { 543 List<ActionDefinition> list = new ArrayList<ActionDefinition>(); 544 for (String id : actionIds) { 545 list.add(this.getAction(id)); 546 } 547 return list; 548 } 549 550 @Override 551 public void updateAction(ActionDefinition actionDefinition) 552 throws RiceIllegalArgumentException { 553 // UPDATE 554 ActionDefinition.Builder copy = ActionDefinition.Builder.create(actionDefinition); 555 ActionDefinition old = this.getAction(actionDefinition.getId()); 556 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 557 throw new RiceIllegalStateException("" + old.getVersionNumber()); 558 } 559 copy.setVersionNumber(copy.getVersionNumber() + 1); 560 actionDefinition = copy.build(); 561 this.actionMap.put(actionDefinition.getId(), actionDefinition); 562 return; 563 } 564 565 @Override 566 public void deleteAction(String id) 567 throws RiceIllegalArgumentException { 568 // DELETE 569 if (this.actionMap.remove(id) == null) { 570 throw new RiceIllegalArgumentException(id); 571 } 572 return; 573 } 574 575 @Override 576 public PropositionDefinition createProposition(PropositionDefinition propositionDefinition) 577 throws RiceIllegalArgumentException { 578 // CREATE 579 if (propositionDefinition.getId() != null) { 580 PropositionDefinition orig = this.getProposition(propositionDefinition.getId()); 581 if (orig != null) { 582 throw new RiceIllegalArgumentException(propositionDefinition.getId()); 583 } 584 } 585 PropositionDefinition.Builder copy = PropositionDefinition.Builder.create(propositionDefinition); 586 if (copy.getId() == null) { 587 copy.setId(UUID.randomUUID().toString()); 588 } 589 for (PropositionParameter.Builder paramBldr : copy.getParameters()) { 590 if (paramBldr.getId() == null) { 591 paramBldr.setId(UUID.randomUUID().toString()); 592 } 593 if (paramBldr.getPropId() == null) { 594 paramBldr.setPropId(copy.getId()); 595 } 596 if (paramBldr.getTermValue() != null) { 597 TermDefinition termValue = paramBldr.getTermValue(); 598 // no id means it does not exist yet 599 if (termValue.getId() == null) { 600 termValue = this.termRepositoryService.createTerm(termValue); 601 paramBldr.setTermValue(termValue); 602 } 603 if (paramBldr.getValue() == null) { 604 paramBldr.setValue(termValue.getId()); 605 } 606 } 607 } 608 propositionDefinition = copy.build(); 609 propositionMap.put(propositionDefinition.getId(), propositionDefinition); 610 return propositionDefinition; 611 } 612 613 @Override 614 public PropositionDefinition getProposition(String id) 615 throws RiceIllegalArgumentException { 616 // GET_BY_ID 617 if (!this.propositionMap.containsKey(id)) { 618 throw new RiceIllegalArgumentException(id); 619 } 620 return this.propositionMap.get(id); 621 } 622 623 @Override 624 public Set<PropositionDefinition> getPropositionsByType(String typeId) 625 throws RiceIllegalArgumentException { 626 // GET_IDS_BY_TYPE 627 Set<PropositionDefinition> set = new LinkedHashSet<PropositionDefinition>(); 628 for (PropositionDefinition info : propositionMap.values()) { 629 if (typeId.equals(info.getTypeId())) { 630 set.add(info); 631 } 632 } 633 return set; 634 } 635 636 @Override 637 public Set<PropositionDefinition> getPropositionsByRule(String ruleId) 638 throws RiceIllegalArgumentException { 639 Set<PropositionDefinition> set = new LinkedHashSet<PropositionDefinition>(); 640 for (PropositionDefinition info : this.propositionMap.values()) { 641 if (info.getRuleId().equals(ruleId)) { 642 set.add(info); 643 } 644 } 645 return set; 646 } 647 648 @Override 649 public void updateProposition(PropositionDefinition propositionDefinition) 650 throws RiceIllegalArgumentException { 651 if (this.propositionMap.containsKey(propositionDefinition.getId())) { 652 throw new RiceIllegalArgumentException (propositionDefinition.getId() + "not found"); 653 } 654 // UPDATE 655 PropositionDefinition.Builder copy = PropositionDefinition.Builder.create(propositionDefinition); 656 PropositionDefinition old = this.getProposition(propositionDefinition.getId()); 657 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 658 throw new RiceIllegalStateException("" + old.getVersionNumber()); 659 } 660 copy.setVersionNumber(copy.getVersionNumber() + 1); 661 for (PropositionParameter.Builder paramBldr : copy.getParameters()) { 662 if (paramBldr.getId() == null) { 663 paramBldr.setId(UUID.randomUUID().toString()); 664 } 665 if (paramBldr.getPropId() == null) { 666 paramBldr.setPropId(copy.getId()); 667 } 668 if (paramBldr.getTermValue() != null) { 669 TermDefinition termValue = paramBldr.getTermValue(); 670 // no id means it does not exist yet 671 if (termValue.getId() == null) { 672 termValue = this.termRepositoryService.createTerm(termValue); 673 paramBldr.setTermValue(termValue); 674 } 675 if (paramBldr.getValue() == null) { 676 paramBldr.setValue(termValue.getId()); 677 } 678 } 679 } 680 propositionDefinition = copy.build(); 681 this.propositionMap.put(propositionDefinition.getId(), propositionDefinition); 682 return; 683 } 684 685 @Override 686 public void deleteProposition(String id) 687 throws RiceIllegalArgumentException { 688 // DELETE 689 if (this.propositionMap.remove(id) == null) { 690 throw new RiceIllegalArgumentException(id); 691 } 692 return; 693 } 694 695 @Override 696 public NaturalLanguageUsage createNaturalLanguageUsage(NaturalLanguageUsage naturalLanguageUsage) 697 throws RiceIllegalArgumentException { 698 // CREATE 699 try { 700 NaturalLanguageUsage orig = this.getNaturalLanguageUsage(naturalLanguageUsage.getId()); 701 if (orig != null) { 702 throw new RiceIllegalArgumentException(naturalLanguageUsage.getId()); 703 } 704 } catch (RiceIllegalArgumentException ex) { 705// same as returning null 706 } 707 NaturalLanguageUsage.Builder copy = NaturalLanguageUsage.Builder.create(naturalLanguageUsage); 708 if (copy.getId() == null) { 709 copy.setId(UUID.randomUUID().toString()); 710 } 711 naturalLanguageUsage = copy.build(); 712 naturalLanguageUsageMap.put(naturalLanguageUsage.getId(), naturalLanguageUsage); 713 return naturalLanguageUsage; 714 } 715 716 @Override 717 public NaturalLanguageUsage getNaturalLanguageUsage(String id) 718 throws RiceIllegalArgumentException { 719 // GET_BY_ID 720 if (!this.naturalLanguageUsageMap.containsKey(id)) { 721 throw new RiceIllegalArgumentException(id); 722 } 723 return this.naturalLanguageUsageMap.get(id); 724 } 725 726 @Override 727 public void updateNaturalLanguageUsage(NaturalLanguageUsage naturalLanguageUsage) 728 throws RiceIllegalArgumentException { 729 // UPDATE 730 NaturalLanguageUsage.Builder copy = NaturalLanguageUsage.Builder.create(naturalLanguageUsage); 731 NaturalLanguageUsage old = this.getNaturalLanguageUsage(naturalLanguageUsage.getId()); 732 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 733 throw new RiceIllegalStateException("" + old.getVersionNumber()); 734 } 735 copy.setVersionNumber(copy.getVersionNumber() + 1); 736 naturalLanguageUsage = copy.build(); 737 this.naturalLanguageUsageMap.put(naturalLanguageUsage.getId(), naturalLanguageUsage); 738 return; 739 } 740 741 @Override 742 public void deleteNaturalLanguageUsage(String naturalLanguageUsageId) 743 throws RiceIllegalArgumentException { 744 // DELETE 745 if (this.naturalLanguageUsageMap.remove(naturalLanguageUsageId) == null) { 746 throw new RiceIllegalArgumentException(naturalLanguageUsageId); 747 } 748 return; 749 } 750 751 //// 752 //// natural language translations 753 //// 754 @Override 755 public String translateNaturalLanguageForObject(String naturalLanguageUsageId, 756 String typeId, 757 String krmsObjectId, 758 String languageCode) 759 throws RiceIllegalArgumentException { 760 TranslationUtility util = new TranslationUtility(this, this.termRepositoryService, this.templater); 761 return util.translateNaturalLanguageForObject(naturalLanguageUsageId, typeId, krmsObjectId, languageCode); 762 } 763 764 @Override 765 public String translateNaturalLanguageForProposition(String naturalLanguageUsageId, 766 PropositionDefinition proposition, String languageCode) 767 throws RiceIllegalArgumentException { 768 TranslationUtility util = new TranslationUtility(this, this.termRepositoryService, this.templater); 769 return util.translateNaturalLanguageForProposition(naturalLanguageUsageId, proposition, languageCode); 770 } 771 772 @Override 773 public NaturalLanguageTree translateNaturalLanguageTreeForProposition(String naturalLanguageUsageId, 774 PropositionDefinition propositionDefinintion, 775 String languageCode) throws RiceIllegalArgumentException { 776 TranslationUtility util = new TranslationUtility(this, this.termRepositoryService, this.templater); 777 return util.translateNaturalLanguageTreeForProposition(naturalLanguageUsageId, propositionDefinintion, languageCode); 778 } 779 780 @Override 781 public List<NaturalLanguageUsage> getNaturalLanguageUsagesByNamespace(String namespace) throws RiceIllegalArgumentException { 782 List<NaturalLanguageUsage> list = new ArrayList<NaturalLanguageUsage>(); 783 for (NaturalLanguageUsage info : naturalLanguageUsageMap.values()) { 784 if (namespace.equals(info.getNamespace())) { 785 list.add(info); 786 } 787 } 788 return list; 789 } 790 791 @Override 792 public NaturalLanguageUsage getNaturalLanguageUsageByNameAndNamespace(String name, String namespace) throws RiceIllegalArgumentException { 793 for (NaturalLanguageUsage info : naturalLanguageUsageMap.values()) { 794 if (namespace.equals(info.getNamespace())) { 795 if (name.equals(info.getName())) { 796 return info; 797 } 798 } 799 } 800 return null; 801 } 802 803 @Override 804 public ContextDefinition selectContext(ContextSelectionCriteria contextSelectionCriteria) throws RiceIllegalArgumentException { 805 throw new UnsupportedOperationException("Not supported yet."); 806 } 807 808 @Override 809 public AgendaTreeDefinition getAgendaTree(String agendaId) throws RiceIllegalArgumentException { 810 throw new UnsupportedOperationException("Not supported yet."); 811 } 812 813 @Override 814 public List<AgendaTreeDefinition> getAgendaTrees(List<String> agendaIds) throws RiceIllegalArgumentException { 815 throw new UnsupportedOperationException("Not supported yet."); 816 } 817 818 @Override 819 public ContextDefinition createContext(ContextDefinition contextDefinition) 820 throws RiceIllegalArgumentException { 821 // CREATE 822 ContextDefinition orig = this.getContextByNameAndNamespace(contextDefinition.getName(), contextDefinition.getNamespace()); 823 if (orig != null) { 824 throw new RiceIllegalArgumentException(contextDefinition.getNamespace() + "." + contextDefinition.getName()); 825 } 826 ContextDefinition.Builder copy = ContextDefinition.Builder.create(contextDefinition); 827 if (copy.getId() == null) { 828 copy.setId(UUID.randomUUID().toString()); 829 } 830 contextDefinition = copy.build(); 831 contextMap.put(contextDefinition.getId(), contextDefinition); 832 return contextDefinition; 833 } 834 835 @Override 836 public ContextDefinition findCreateContext(ContextDefinition contextDefinition) throws RiceIllegalArgumentException { 837 ContextDefinition orig = this.getContextByNameAndNamespace(contextDefinition.getName(), contextDefinition.getNamespace()); 838 if (orig != null) { 839 return orig; 840 } 841 return this.createContext(contextDefinition); 842 } 843 844 @Override 845 public void updateContext(ContextDefinition contextDefinition) 846 throws RiceIllegalArgumentException { 847 // UPDATE 848 ContextDefinition.Builder copy = ContextDefinition.Builder.create(contextDefinition); 849 ContextDefinition old = this.getContext(contextDefinition.getId()); 850 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 851 throw new RiceIllegalStateException("" + old.getVersionNumber()); 852 } 853 copy.setVersionNumber(copy.getVersionNumber() + 1); 854 contextDefinition = copy.build(); 855 this.contextMap.put(contextDefinition.getId(), contextDefinition); 856 return; 857 } 858 859 @Override 860 public void deleteContext(String id) 861 throws RiceIllegalArgumentException { 862 // DELETE 863 if (this.contextMap.remove(id) == null) { 864 throw new RiceIllegalArgumentException(id); 865 } 866 return; 867 } 868 869 @Override 870 public ContextDefinition getContext(String id) 871 throws RiceIllegalArgumentException { 872 // GET_BY_ID 873 if (!this.contextMap.containsKey(id)) { 874 throw new RiceIllegalArgumentException(id); 875 } 876 return this.contextMap.get(id); 877 } 878 879 @Override 880 public ContextDefinition getContextByNameAndNamespace(String name, String namespace) 881 throws RiceIllegalArgumentException { 882 if (name == null || name.trim().isEmpty()) { 883 throw new RiceIllegalArgumentException("name is null or empty"); 884 } 885 if (namespace == null || namespace.trim().isEmpty()) { 886 throw new RiceIllegalArgumentException("name is null or empty"); 887 } 888 // RICE_GET_BY_NAMESPACE_AND_NAME 889 for (ContextDefinition info : contextMap.values()) { 890 if (name.equals(info.getName())) { 891 if (namespace.equals(info.getNamespace())) { 892 return ContextDefinition.Builder.create(info).build(); 893 } 894 } 895 } 896 return null; 897 } 898 899 @Override 900 public NaturalLanguageTemplate createNaturalLanguageTemplate(NaturalLanguageTemplate naturalLanguageTemplate) 901 throws RiceIllegalArgumentException { 902 // CREATE 903 try { 904 NaturalLanguageTemplate orig = this.getNaturalLanguageTemplate(naturalLanguageTemplate.getId()); 905 if (orig != null) { 906 throw new RiceIllegalArgumentException(naturalLanguageTemplate.getId()); 907 } 908 } catch (RiceIllegalArgumentException ex) { 909 // same as getting a null 910 } 911 NaturalLanguageTemplate.Builder copy = NaturalLanguageTemplate.Builder.create(naturalLanguageTemplate); 912 if (copy.getId() == null) { 913 copy.setId(UUID.randomUUID().toString()); 914 } 915 naturalLanguageTemplate = copy.build(); 916 naturalLanguageTemplateMap.put(naturalLanguageTemplate.getId(), naturalLanguageTemplate); 917 return naturalLanguageTemplate; 918 } 919 920 @Override 921 public NaturalLanguageTemplate getNaturalLanguageTemplate(String naturalLanguageTemplateId) 922 throws RiceIllegalArgumentException { 923 // GET_BY_ID 924 if (!this.naturalLanguageTemplateMap.containsKey(naturalLanguageTemplateId)) { 925 throw new RiceIllegalArgumentException(naturalLanguageTemplateId); 926 } 927 return this.naturalLanguageTemplateMap.get(naturalLanguageTemplateId); 928 } 929 930 @Override 931 public void updateNaturalLanguageTemplate(NaturalLanguageTemplate naturalLanguageTemplate) 932 throws RiceIllegalArgumentException { 933 // UPDATE 934 NaturalLanguageTemplate.Builder copy = NaturalLanguageTemplate.Builder.create(naturalLanguageTemplate); 935 NaturalLanguageTemplate old = this.getNaturalLanguageTemplate(naturalLanguageTemplate.getId()); 936 if (!old.getVersionNumber().equals(copy.getVersionNumber())) { 937 throw new RiceIllegalStateException("" + old.getVersionNumber()); 938 } 939 copy.setVersionNumber(copy.getVersionNumber() + 1); 940 naturalLanguageTemplate = copy.build(); 941 this.naturalLanguageTemplateMap.put(naturalLanguageTemplate.getId(), naturalLanguageTemplate); 942 return; 943 } 944 945 @Override 946 public void deleteNaturalLanguageTemplate(String naturalLanguageTemplateId) 947 throws RiceIllegalArgumentException { 948 // DELETE 949 if (this.naturalLanguageTemplateMap.remove(naturalLanguageTemplateId) == null) { 950 throw new RiceIllegalArgumentException(naturalLanguageTemplateId); 951 } 952 return; 953 } 954 955 @Override 956 public List<NaturalLanguageTemplate> findNaturalLanguageTemplatesByLanguageCode(String languageCode) 957 throws RiceIllegalArgumentException { 958 List<NaturalLanguageTemplate> list = new ArrayList<NaturalLanguageTemplate>(); 959 for (NaturalLanguageTemplate nlt : this.naturalLanguageTemplateMap.values()) { 960 if (nlt.getLanguageCode().equals(languageCode)) { 961 list.add(nlt); 962 } 963 } 964 return list; 965 } 966 967 @Override 968 public NaturalLanguageTemplate findNaturalLanguageTemplateByLanguageCodeTypeIdAndNluId(String languageCode, String typeId, String naturalLanguageUsageId) 969 throws RiceIllegalArgumentException { 970 for (NaturalLanguageTemplate nlt : this.naturalLanguageTemplateMap.values()) { 971 if (nlt.getLanguageCode().equals(languageCode)) { 972 if (nlt.getTypeId().equals(typeId)) { 973 if (nlt.getNaturalLanguageUsageId().equals(naturalLanguageUsageId)) { 974 return nlt; 975 } 976 } 977 } 978 } 979 return null; 980 } 981 982 @Override 983 public List<NaturalLanguageTemplate> findNaturalLanguageTemplatesByNaturalLanguageUsage(String naturalLanguageUsageId) 984 throws RiceIllegalArgumentException { 985 List<NaturalLanguageTemplate> list = new ArrayList<NaturalLanguageTemplate>(); 986 for (NaturalLanguageTemplate nlt : this.naturalLanguageTemplateMap.values()) { 987 if (nlt.getNaturalLanguageUsageId().equals(naturalLanguageUsageId)) { 988 list.add(nlt); 989 } 990 } 991 return list; 992 } 993 994 @Override 995 public List<NaturalLanguageTemplate> findNaturalLanguageTemplatesByType(String typeId) 996 throws RiceIllegalArgumentException { 997 List<NaturalLanguageTemplate> list = new ArrayList<NaturalLanguageTemplate>(); 998 for (NaturalLanguageTemplate nlt : this.naturalLanguageTemplateMap.values()) { 999 if (nlt.getTypeId().equals(typeId)) { 1000 list.add(nlt); 1001 } 1002 } 1003 return list; 1004 } 1005 1006 @Override 1007 public List<NaturalLanguageTemplate> findNaturalLanguageTemplatesByTemplate(String template) 1008 throws RiceIllegalArgumentException { 1009 List<NaturalLanguageTemplate> list = new ArrayList<NaturalLanguageTemplate>(); 1010 for (NaturalLanguageTemplate nlt : this.naturalLanguageTemplateMap.values()) { 1011 if (nlt.getTemplate().equals(template)) { 1012 list.add(nlt); 1013 } 1014 } 1015 return list; 1016 } 1017 1018 @Override 1019 public List<String> findContextIds(QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException { 1020 CriteriaMatcherInMemory<ContextDefinition> instance = new CriteriaMatcherInMemory<ContextDefinition>(); 1021 instance.setCriteria(queryByCriteria); 1022 Collection<ContextDefinition> selected = instance.findMatching(this.contextMap.values()); 1023 List<String> list = new ArrayList<String>(); 1024 for (ContextDefinition sel : selected) { 1025 list.add(sel.getId()); 1026 } 1027 return list; 1028 } 1029 1030 @Override 1031 public List<String> findAgendaIds(QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException { 1032 CriteriaMatcherInMemory<AgendaDefinition> instance = new CriteriaMatcherInMemory<AgendaDefinition>(); 1033 instance.setCriteria(queryByCriteria); 1034 Collection<AgendaDefinition> selected = instance.findMatching(this.agendaMap.values()); 1035 List<String> list = new ArrayList<String>(); 1036 for (AgendaDefinition sel : selected) { 1037 list.add(sel.getId()); 1038 } 1039 return list; 1040 } 1041 1042 @Override 1043 public List<String> findRuleIds(QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException { 1044 CriteriaMatcherInMemory<RuleDefinition> instance = new CriteriaMatcherInMemory<RuleDefinition>(); 1045 instance.setCriteria(queryByCriteria); 1046 Collection<RuleDefinition> selected = instance.findMatching(this.ruleMap.values()); 1047 List<String> list = new ArrayList<String>(); 1048 for (RuleDefinition sel : selected) { 1049 list.add(sel.getId()); 1050 } 1051 return list; 1052 } 1053 1054 @Override 1055 public List<String> findActionIds(QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException { 1056 CriteriaMatcherInMemory<ActionDefinition> instance = new CriteriaMatcherInMemory<ActionDefinition>(); 1057 instance.setCriteria(queryByCriteria); 1058 Collection<ActionDefinition> selected = instance.findMatching(this.actionMap.values()); 1059 List<String> list = new ArrayList<String>(); 1060 for (ActionDefinition sel : selected) { 1061 list.add(sel.getId()); 1062 } 1063 return list; 1064 } 1065 1066 @Override 1067 public List<String> findPropositionIds(QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException { 1068 CriteriaMatcherInMemory<PropositionDefinition> instance = new CriteriaMatcherInMemory<PropositionDefinition>(); 1069 instance.setCriteria(queryByCriteria); 1070 Collection<PropositionDefinition> selected = instance.findMatching(this.propositionMap.values()); 1071 List<String> list = new ArrayList<String>(); 1072 for (PropositionDefinition sel : selected) { 1073 list.add(sel.getId()); 1074 } 1075 return list; 1076 } 1077}