protected void populateRHS( Rule rule, PMML pmmlDocument, Scorecard scorecard, Characteristic c, Attribute scoreAttribute, int position) { Consequence consequence = new Consequence(); StringBuilder stringBuilder = new StringBuilder(); String objectClass = scorecard.getModelName().replaceAll(" ", ""); String setter = "insertLogical(new PartialScore(\""; String field = ScorecardPMMLUtils.extractFieldNameFromCharacteristic(c); stringBuilder .append(setter) .append(objectClass) .append("\",\"") .append(field) .append("\",") .append(scoreAttribute.getPartialScore()); if (scorecard.isUseReasonCodes()) { String reasonCode = scoreAttribute.getReasonCode(); if (reasonCode == null || StringUtils.isEmpty(reasonCode)) { reasonCode = c.getReasonCode(); } stringBuilder.append(",\"").append(reasonCode).append("\", ").append(position); } stringBuilder.append("));"); consequence.setSnippet(stringBuilder.toString()); rule.addConsequence(consequence); }
/** * This makes sure that the rules have all their components added. As when there are * merged/spanned cells, they may be left out. */ private void flushRule() { for (Iterator<SourceBuilder> iter = sourceBuilders.iterator(); iter.hasNext(); ) { SourceBuilder src = iter.next(); if (src.hasValues()) { switch (src.getActionTypeCode()) { case CONDITION: Condition cond = new Condition(); cond.setSnippet(src.getResult()); _currentRule.addCondition(cond); break; case ACTION: Consequence cons = new Consequence(); cons.setSnippet(src.getResult()); _currentRule.addConsequence(cons); break; case METADATA: _currentRule.addMetadata(src.getResult()); break; } src.clearValues(); } } }
protected void createInitialRule(List<Rule> ruleList, Scorecard scorecard) { if (scorecard.getInitialScore() > 0 || scorecard.isUseReasonCodes()) { String objectClass = scorecard.getModelName().replaceAll(" ", ""); String ruleName = objectClass + "_init"; Rule rule = new Rule(ruleName, 999, 1); rule.setDescription("set the initial score"); Condition condition = createInitialRuleCondition(scorecard, objectClass); rule.addCondition(condition); if (scorecard.getInitialScore() > 0) { Consequence consequence = new Consequence(); // consequence.setSnippet("$sc.setInitialScore(" + scorecard.getInitialScore() + ");"); consequence.setSnippet( "insertLogical(new InitialScore(\"" + objectClass + "\"," + scorecard.getInitialScore() + "));"); rule.addConsequence(consequence); } if (scorecard.isUseReasonCodes()) { for (Object obj : scorecard.getExtensionsAndCharacteristicsAndMiningSchemas()) { if (obj instanceof Characteristics) { Characteristics characteristics = (Characteristics) obj; for (Characteristic characteristic : characteristics.getCharacteristics()) { String field = ScorecardPMMLUtils.extractFieldNameFromCharacteristic(characteristic); Consequence consequence = new Consequence(); if (characteristic.getBaselineScore() == null || characteristic.getBaselineScore() == 0) { consequence.setSnippet( "insertLogical(new BaselineScore(\"" + objectClass + "\",\"" + field + "\"," + scorecard.getBaselineScore() + "));"); // consequence.setSnippet("$sc.setBaselineScore(\"" + field + // "\","+scorecard.getBaselineScore()+");"); } else { consequence.setSnippet( "insertLogical(new BaselineScore(\"" + objectClass + "\",\"" + field + "\"," + characteristic.getBaselineScore() + "));"); // consequence.setSnippet("$sc.setBaselineScore(\"" + field + // "\","+characteristic.getBaselineScore()+");"); } rule.addConsequence(consequence); } } } if (scorecard.getReasonCodeAlgorithm() != null) { Consequence consequence = new Consequence(); if ("pointsAbove".equalsIgnoreCase(scorecard.getReasonCodeAlgorithm())) { // TODO: ReasonCode Algorithm consequence.setSnippet( "//$sc.setReasonCodeAlgorithm(DroolsScorecard.REASON_CODE_ALGORITHM_POINTSABOVE);"); } else if ("pointsBelow".equalsIgnoreCase(scorecard.getReasonCodeAlgorithm())) { consequence.setSnippet( "//$sc.setReasonCodeAlgorithm(DroolsScorecard.REASON_CODE_ALGORITHM_POINTSBELOW);"); } rule.addConsequence(consequence); } } ruleList.add(rule); } }