private IntConstraintMatchTotal findIntConstraintMatchTotal(
     RuleContext kcontext, int scoreLevel) {
   Rule rule = kcontext.getRule();
   String constraintPackage = rule.getPackageName();
   String constraintName = rule.getName();
   List<Object> key = Arrays.<Object>asList(constraintPackage, constraintName, scoreLevel);
   IntConstraintMatchTotal matchTotal = (IntConstraintMatchTotal) constraintMatchTotalMap.get(key);
   if (matchTotal == null) {
     matchTotal = new IntConstraintMatchTotal(constraintPackage, constraintName, scoreLevel);
     constraintMatchTotalMap.put(key, matchTotal);
   }
   return matchTotal;
 }
 private void putConstraintUndoListener(
     RuleContext kcontext, int scoreLevel, ConstraintUndoListener constraintUndoListener) {
   AgendaItem<?> agendaItem = (AgendaItem) kcontext.getMatch();
   ActivationUnMatchListener activationUnMatchListener = agendaItem.getActivationUnMatchListener();
   if (activationUnMatchListener != null) {
     MultiLevelActivationUnMatchListener multiLevelActivationUnMatchListener =
         (MultiLevelActivationUnMatchListener) activationUnMatchListener;
     multiLevelActivationUnMatchListener.overwriteMatch(scoreLevel, constraintUndoListener);
   } else {
     MultiLevelActivationUnMatchListener multiLevelActivationUnMatchListener =
         new MultiLevelActivationUnMatchListener(scoreLevel, constraintUndoListener);
     agendaItem.setActivationUnMatchListener(multiLevelActivationUnMatchListener);
   }
 }