/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.workbench.services.verifier.api.client.reporting;
import com.google.gwt.safehtml.shared.SafeHtml;
import org.drools.workbench.services.verifier.api.client.resources.i18n.AnalysisConstants;
public class ExplanationProvider {
public static SafeHtml toHTML(final Issue issue) {
if (issue == Issue.EMPTY) {
return new SafeHtml() {
@Override
public String asString() {
return "---";
}
};
}
switch (issue.getCheckType()) {
case CONFLICTING_ROWS:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.ConflictingRowsP1())
.addParagraph(AnalysisConstants.INSTANCE.ConflictingRowsP2())
.toHTML();
case DEFICIENT_ROW:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.DeficientRowsP1())
.startNote()
.addParagraph(AnalysisConstants.INSTANCE.DeficientRowsNoteP1())
.startExampleTable()
.startHeader()
.headerConditions(AnalysisConstants.INSTANCE.Salary(),
AnalysisConstants.INSTANCE.Savings())
.headerActions(AnalysisConstants.INSTANCE.ApproveLoan())
.end()
.startRow()
.addConditions("--",
"100 000")
.addActions("true")
.end()
.startRow()
.addConditions("30 000",
"--")
.addActions("false")
.end()
.end()
.end()
.addParagraph(AnalysisConstants.INSTANCE.DeficientRowsP2())
.toHTML();
case IMPOSSIBLE_MATCH:
ImpossibleMatchIssue impossibleMatchIssue = (ImpossibleMatchIssue) issue;
return new Explanation()
.startNote()
.addParagraph(
AnalysisConstants.INSTANCE.ImpossibleMatchNote1P1((impossibleMatchIssue.getRuleId()),
impossibleMatchIssue.getFieldName(),
impossibleMatchIssue.getFieldFactType()))
.addParagraph(AnalysisConstants.INSTANCE.ImpossibleMatchNote1P2(impossibleMatchIssue.getConflictedItem(),
impossibleMatchIssue.getConflictingItem()))
.end()
.addParagraph(AnalysisConstants.INSTANCE.ImpossibleMatchP1(impossibleMatchIssue.getFieldName()))
.toHTML();
case MISSING_ACTION:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.WhenARuleHasNoActionItDoesFireButSinceTheActionSideIsEmptyNothingHappens())
.addParagraph(AnalysisConstants.INSTANCE.ItIsPossibleThatTheActionsWereLeftOutByAccidentInThisCasePleaseAddThemOtherwiseTheRuleCanNeRemoved())
.toHTML();
case MISSING_RESTRICTION:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.MissingConditionP1())
.toHTML();
case MULTIPLE_VALUES_FOR_ONE_ACTION:
MultipleValuesForOneActionIssue multipleValuesForOneActionIssue = (MultipleValuesForOneActionIssue) issue;
return new Explanation()
.startNote()
.addParagraph(AnalysisConstants.INSTANCE.MultipleValuesNote1P1(multipleValuesForOneActionIssue.getConflictedItem(),
multipleValuesForOneActionIssue.getConflictingItem()))
.end()
.addParagraph(AnalysisConstants.INSTANCE.MultipleValuesP1())
.toHTML();
case VALUE_FOR_FACT_FIELD_IS_SET_TWICE:
ValueForFactFieldIsSetTwiceIssue valueForFactFieldIsSetTwiceIssue = (ValueForFactFieldIsSetTwiceIssue) issue;
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.RedundantActionsP1())
.startNote()
.addParagraph(AnalysisConstants.INSTANCE.RedundantActionsNote1P1(valueForFactFieldIsSetTwiceIssue.getFirstItem(),
valueForFactFieldIsSetTwiceIssue.getSecondItem()))
.end()
.toHTML();
case VALUE_FOR_ACTION_IS_SET_TWICE:
ValueForActionIsSetTwiceIssue valueForActionIsSetTwiceIssue = (ValueForActionIsSetTwiceIssue) issue;
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.RedundantActionsP1())
.startNote()
.addParagraph(AnalysisConstants.INSTANCE.RedundantActionsNote1P1(valueForActionIsSetTwiceIssue.getFirstItem(),
valueForActionIsSetTwiceIssue.getSecondItem()))
.end()
.toHTML();
case REDUNDANT_CONDITIONS_TITLE:
RedundantConditionsIssue redundantConditionsIssue = (RedundantConditionsIssue) issue;
return new Explanation()
.startNote()
.addParagraph(AnalysisConstants.INSTANCE.RedundantConditionsNote1P1(redundantConditionsIssue.getFactType(),
redundantConditionsIssue.getName()))
.addParagraph(AnalysisConstants.INSTANCE.RedundantConditionsNote1P2(redundantConditionsIssue.getFirstItem(),
redundantConditionsIssue.getSecondItem()))
.end()
.addParagraph(AnalysisConstants.INSTANCE.RedundantConditionsP1())
.toHTML();
case REDUNDANT_ROWS:
case SUBSUMPTANT_ROWS:
getExplanation(issue.getCheckType());
case MISSING_RANGE:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.MissingRangeP1(issue.getRowNumbers()
.iterator()
.next()))
.toHTML();
case SINGLE_HIT_LOST:
SingleHitLostIssue singleHitLostIssue = (SingleHitLostIssue) issue;
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.SingleHitP1(singleHitLostIssue.getFirstItem(),
singleHitLostIssue.getSecondItem()))
.toHTML();
case EMPTY_RULE:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.ProvideAtLeastOneConditionAndOneActionForTheRule())
.toHTML();
default:
return new SafeHtml() {
@Override
public String asString() {
return "---";
}
};
}
}
private static Explanation getExplanation(final CheckType checkType) {
switch (checkType) {
case REDUNDANT_ROWS:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.RedundantRowsP1())
.addParagraph(AnalysisConstants.INSTANCE.RedundantRowsP2())
.addParagraph(AnalysisConstants.INSTANCE.RedundantRowsP3());
case SUBSUMPTANT_ROWS:
return new Explanation()
.addParagraph(AnalysisConstants.INSTANCE.SubsumptantRowsP1())
.addParagraph(AnalysisConstants.INSTANCE.SubsumptantRowsP2());
default:
return new Explanation();
}
}
public static String toTitle(final Issue issue) {
if (issue == Issue.EMPTY) {
return "---";
}
switch (issue.getCheckType()) {
case CONFLICTING_ROWS:
return AnalysisConstants.INSTANCE.ConflictingRows();
case DEFICIENT_ROW:
return AnalysisConstants.INSTANCE.DeficientRow();
case IMPOSSIBLE_MATCH:
return AnalysisConstants.INSTANCE.ImpossibleMatch();
case MISSING_ACTION:
return AnalysisConstants.INSTANCE.RuleHasNoAction();
case MISSING_RESTRICTION:
return AnalysisConstants.INSTANCE.RuleHasNoRestrictionsAndWillAlwaysFire();
case MULTIPLE_VALUES_FOR_ONE_ACTION:
return AnalysisConstants.INSTANCE.MultipleValuesForOneAction();
case VALUE_FOR_FACT_FIELD_IS_SET_TWICE:
ValueForFactFieldIsSetTwiceIssue valueForFactFieldIsSetTwiceIssue = (ValueForFactFieldIsSetTwiceIssue) issue;
return AnalysisConstants.INSTANCE.ValueForFactFieldIsSetTwice(valueForFactFieldIsSetTwiceIssue.getBoundName(),
valueForFactFieldIsSetTwiceIssue.getName());
case VALUE_FOR_ACTION_IS_SET_TWICE:
return AnalysisConstants.INSTANCE.ValueForAnActionIsSetTwice();
case REDUNDANT_CONDITIONS_TITLE:
return AnalysisConstants.INSTANCE.RedundantConditionsTitle();
case REDUNDANT_ROWS:
return AnalysisConstants.INSTANCE.RedundantRows();
case SUBSUMPTANT_ROWS:
return AnalysisConstants.INSTANCE.SubsumptantRows();
case MISSING_RANGE:
return AnalysisConstants.INSTANCE.MissingRangeTitle();
case SINGLE_HIT_LOST:
return AnalysisConstants.INSTANCE.SingleHitLost();
case EMPTY_RULE:
return AnalysisConstants.INSTANCE.EmptyRule();
default:
return "---";
}
}
}