/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.extension.definition; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.teiid.core.designer.util.CoreArgCheck; /** * A MED status that has multiple statuses. */ public class MultiValidationStatus implements MedStatus { /** * @param status the status used to create the multi-status from (cannot be <code>null</code>) * @return the mulit-status (never <code>null</code>) */ public static final MultiValidationStatus create(final MedStatus status) { CoreArgCheck.isNotNull(status); final MultiValidationStatus multiStatus = new MultiValidationStatus(); multiStatus.add(status); return multiStatus; } private MedStatus status; private final List<MedStatus> children; /** * Don't allow public construction. */ private MultiValidationStatus() { this.children = new ArrayList<MedStatus>(); } /** * The children of multi-statuses being added are added as children. * * @param childStatus the status being added (cannot be <code>null</code>) */ public void add(final MedStatus childStatus) { CoreArgCheck.isNotNull(childStatus); if (childStatus.isMulti()) { for (final MedStatus kid : childStatus.getChildren()) { add(kid); } } else { if (childStatus.isOk()) { if (this.status == null) { this.status = childStatus; } } else { this.children.add(childStatus); if ((this.status == null) || (this.status.compareTo(childStatus) > 0)) { this.status = childStatus; } } } } /** * @see java.lang.Comparable#compareTo(java.lang.Object) */ @Override public int compareTo(MedStatus that) { return this.status.compareTo(that); } /** * @see org.teiid.designer.extension.definition.ValidationStatus#getChildren() */ @Override public List<MedStatus> getChildren() { return Collections.unmodifiableList(this.children); } /** * @see org.teiid.designer.extension.definition.MedStatus#getMessage() */ @Override public String getMessage() { return this.status.getMessage(); } /** * @see org.teiid.designer.extension.definition.MedStatus#getSeverity() */ @Override public Severity getSeverity() { return this.status.getSeverity(); } /** * @see org.teiid.designer.extension.definition.MedStatus#isError() */ @Override public boolean isError() { return this.status.isError(); } /** * @see org.teiid.designer.extension.definition.MedStatus#isInfo() */ @Override public boolean isInfo() { return this.status.isInfo(); } /** * @see org.teiid.designer.extension.definition.ValidationStatus#isMulti() */ @Override public boolean isMulti() { return true; } /** * @see org.teiid.designer.extension.definition.MedStatus#isOk() */ @Override public boolean isOk() { return this.status.isOk(); } /** * @see org.teiid.designer.extension.definition.MedStatus#isWarning() */ @Override public boolean isWarning() { return this.status.isWarning(); } }