package org.uva.student.calinwouter.qlqls.qls.model; import java.util.Set; /** * This model is used for storing the type checker's results. */ public class QLSTypeCheckResults { private final Set<String> undefinedReferences; private final Set<String> unusedQLFieldsInQLS; private final Set<String> invalidWidgetAssignments; private final Set<WidgetType> invalidDefaultWidgetAssignments; private final Set<String> duplicateFieldUsages; public boolean hasUndefinedReferences() { return undefinedReferences.size() > 0; } public boolean hasUnusedQLFieldsInQLS() { return unusedQLFieldsInQLS.size() > 0; } public boolean hasInvalidWidgetAssignments() { return invalidWidgetAssignments.size() > 0; } public boolean hasInvalidDefaultWidgetAssignments() { return invalidDefaultWidgetAssignments.size() > 0; } public boolean hasDuplicateFieldUsages() { return duplicateFieldUsages.size() > 0; } public boolean hasErrors() { return hasUndefinedReferences() && hasUnusedQLFieldsInQLS() && hasInvalidWidgetAssignments() && hasInvalidDefaultWidgetAssignments() && hasDuplicateFieldUsages(); } public QLSTypeCheckResults(Set<String> undefinedReferences, Set<String> unusedQLFieldsInQLS, Set<String> invalidWidgetAssignments, Set<WidgetType> invalidDefaultWidgetAssignments, Set<String> duplicateFieldUsages) { this.undefinedReferences = undefinedReferences; this.unusedQLFieldsInQLS = unusedQLFieldsInQLS; this.invalidWidgetAssignments = invalidWidgetAssignments; this.invalidDefaultWidgetAssignments = invalidDefaultWidgetAssignments; this.duplicateFieldUsages = duplicateFieldUsages; } private boolean appendStrings(StringBuilder stringBuilder, Set<String> strings) { for (String s : strings) { stringBuilder.append("- "); stringBuilder.append(s); stringBuilder.append("\n"); } return strings.size() > 0; } private boolean appendWidgetTypesAsStrings(StringBuilder stringBuilder, Set<WidgetType> widgetTypes) { for (WidgetType widgetType : widgetTypes) { final String error = widgetType.asAssignmentError(); stringBuilder.append("- "); stringBuilder.append(error); stringBuilder.append("\n"); } return widgetTypes.size() > 0; } private void sayNoneIfNotAppended(StringBuilder stringBuilder, boolean hasAppended) { if (!hasAppended) { stringBuilder.append("- None!\n"); } } private void appendUndefinedReferences(StringBuilder stringBuilder) { stringBuilder.append("Undefined reference errors:\n"); final boolean hasAppended = appendStrings(stringBuilder, undefinedReferences); sayNoneIfNotAppended(stringBuilder, hasAppended); stringBuilder.append("\n"); } private void appendUnusedQLFieldsInQLS(StringBuilder stringBuilder) { stringBuilder.append("Undefined ql fields in qls errors:\n"); final boolean hasAppended = appendStrings(stringBuilder, unusedQLFieldsInQLS); sayNoneIfNotAppended(stringBuilder, hasAppended); stringBuilder.append("\n"); } private void appendInvalidWidgetAssignments(StringBuilder stringBuilder) { stringBuilder.append("Invalid widget assignment errors:\n"); final boolean hasAppended = appendStrings(stringBuilder, invalidWidgetAssignments); sayNoneIfNotAppended(stringBuilder, hasAppended); stringBuilder.append("\n"); } private void appendInvalidDefaultWidgetAssignments(StringBuilder stringBuilder) { stringBuilder.append("Invalid default widget assignment errors:\n"); final boolean hasAppended = appendWidgetTypesAsStrings(stringBuilder, invalidDefaultWidgetAssignments); sayNoneIfNotAppended(stringBuilder, hasAppended); stringBuilder.append("\n"); } private void appendDuplicateFieldUsages(StringBuilder stringBuilder) { stringBuilder.append("Duplicate field usages:\n"); final boolean hasAppended = appendStrings(stringBuilder, duplicateFieldUsages); sayNoneIfNotAppended(stringBuilder, hasAppended); stringBuilder.append("\n"); } @Override public String toString() { StringBuilder stringBuilder = new StringBuilder(); appendUndefinedReferences(stringBuilder); appendUnusedQLFieldsInQLS(stringBuilder); appendInvalidWidgetAssignments(stringBuilder); appendInvalidDefaultWidgetAssignments(stringBuilder); appendDuplicateFieldUsages(stringBuilder); return stringBuilder.toString(); } }