package org.robobinding.binder; import java.util.Collection; import java.util.Map; import org.robobinding.ViewResolutionErrors; import org.robobinding.util.Maps; /** * * @since 1.0 * @version $Revision: 1.0 $ * @author Cheng Wei */ @SuppressWarnings("serial") public class ViewHierarchyInflationErrorsException extends RuntimeException { private Map<Object, ViewInflationErrors> errorMap; private String errorMessage; ViewHierarchyInflationErrorsException() { errorMap = Maps.newLinkedHashMap(); } void addViewResolutionError(ViewResolutionErrors error) { errorMap.put(error.getView(), new ViewInflationErrors(error)); } void addViewBindingError(ViewBindingErrors error) { try { ViewInflationErrors inflationError = errorMap.get(error.getView()); inflationError.setBindingErrors(error); } catch (NullPointerException e) { throw e; } } void assertNoErrors(ErrorFormatter errorFormatter) { StringBuilder sb = new StringBuilder(); for (ViewInflationErrors error : errorMap.values()) { if (error.hasErrors()) { appendln(sb, errorFormatter.format(error)); } } if (sb.length() != 0) { errorMessage = sb.toString(); throw this; } } private static void appendln(StringBuilder sb, String str) { sb.append(str); sb.append("\r\n"); } @Override public String getMessage() { return errorMessage; } public Collection<ViewInflationErrors> getErrors() { return errorMap.values(); } protected interface ErrorFormatter { String format(ViewInflationErrors error); } }