package org.robobinding.binder;
import static org.robobinding.util.CollectionUtils.isNotEmpty;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.robobinding.util.Lists;
import org.robobinding.viewattribute.AttributeBindingException;
import org.robobinding.viewattribute.grouped.AttributeGroupBindingException;
/**
*
* @since 1.0
* @version $Revision: 1.0 $
* @author Cheng Wei
*/
@SuppressWarnings("serial")
public class ViewBindingErrors extends RuntimeException {
private Object view;
private List<AttributeBindingException> attributeErrors;
public ViewBindingErrors(Object view) {
this.view = view;
attributeErrors = Lists.newArrayList();
}
public Object getView() {
return view;
}
public void assertNoErrors() {
if (hasErrors()) {
throw this;
}
}
public boolean hasErrors() {
return isNotEmpty(attributeErrors);
}
public int numErrors() {
return attributeErrors.size();
}
void addAttributeError(AttributeBindingException attributeError) {
attributeErrors.add(attributeError);
}
public void addAttributeGroupError(AttributeGroupBindingException e) {
attributeErrors.addAll(e.getChildAttributeErrors());
}
public Collection<AttributeBindingException> getAttributeErrors() {
return Collections.unmodifiableCollection(attributeErrors);
}
@Override
public String getMessage() {
if(hasErrors()) {
return firstAttributeError().getMessage();
}
return super.getMessage();
}
private Throwable firstAttributeError() {
return attributeErrors.get(0);
}
@Override
public synchronized Throwable getCause() {
if(hasErrors()) {
return firstAttributeError();
}
return super.getCause();
}
}