@Override public void evaluate(KnowledgeHelper arg0, WorkingMemory arg1) throws Exception { InternalFactHandle a1f = arg0.getTuple().get(0); AbstractParameter a1 = (AbstractParameter) arg1.getObject(a1f); String a1Id = a1.getId(); InternalFactHandle a2f = arg0.getTuple().get(1); AbstractParameter a2 = (AbstractParameter) arg1.getObject(a2f); Sequence<AbstractParameter> s = new Sequence<>(a1Id, 2); s.add(a1); s.add(a2); Segment<AbstractParameter> segment = new Segment<>(s); JBossRulesDerivedLocalUniqueIdValuesProvider provider = new JBossRulesDerivedLocalUniqueIdValuesProvider(arg1, a1Id); UniqueIdFactory factory = new ProviderBasedUniqueIdFactory(provider); AbstractParameter result = new AbstractParameter(a1Id, factory.getInstance()); result.setSourceSystem(SourceSystem.DERIVED); result.setInterval(segment.getInterval()); result.setValue(a1.getValue()); result.setCreateDate(new Date()); Logger logger = ProtempaUtil.logger(); if (logger.isLoggable(Level.FINEST)) { logger.log(Level.FINEST, "Created {0} from {1} and {2}", new Object[] {result, a1, a2}); } arg1.retract(a1f); arg1.retract(a2f); arg1.insert(result); // There should not be any forward derivations yet. // List<Proposition> a1PropForward = // this.derivationsBuilder.propositionRetractedForward(a1); List<Proposition> a1PropBackward = this.derivationsBuilder.propositionRetractedBackward(a1); // There should not be any forward derivations yet. // List<Proposition> a2PropForward = // this.derivationsBuilder.propositionRetractedForward(a2); List<Proposition> a2PropBackward = this.derivationsBuilder.propositionRetractedBackward(a2); for (Proposition prop : a1PropBackward) { this.derivationsBuilder.propositionReplaceForward(prop, a1, result); this.derivationsBuilder.propositionAssertedBackward(prop, result); } for (Proposition prop : a2PropBackward) { this.derivationsBuilder.propositionReplaceForward(prop, a2, result); this.derivationsBuilder.propositionAssertedBackward(prop, result); } logger.log(Level.FINER, "Asserted derived proposition {0}", result); }