package fr.openwide.core.commons.util.report;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.bindgen.Bindable;
import com.google.common.collect.Maps;
@Bindable
public class BatchReport implements Serializable {
private static final long serialVersionUID = 2058290436066602760L;
public static final String GLOBAL_CONTEXT = "GLOBAL";
private String context;
private Map<String, List<BatchReportItem>> items = Maps.newLinkedHashMap();
private boolean onError = false;
public BatchReport() {
this(GLOBAL_CONTEXT);
}
public BatchReport(String context) {
setContext(context);
}
public void setContext(String context) {
this.context = context;
}
public String getContext() {
return context;
}
public void info(String message) {
addItem(BatchReportItemSeverity.INFO, message);
}
public void debug(String message) {
addItem(BatchReportItemSeverity.DEBUG, message);
}
public void trace(String message) {
addItem(BatchReportItemSeverity.TRACE, message);
}
public void warn(String message) {
addItem(BatchReportItemSeverity.WARN, message);
}
public void error(String message) {
error(message, null);
}
public void error(String message, Exception e) {
setOnError(true);
addItem(BatchReportItemSeverity.ERROR, message, e);
}
private void addItem(BatchReportItemSeverity severity, String message) {
addItem(severity, message, null);
}
private void addItem(BatchReportItemSeverity severity, String message,
Exception e) {
if (!items.containsKey(context)) {
items.put(context, new ArrayList<BatchReportItem>());
}
items.get(context).add(new BatchReportItem(severity, message, e));
}
public Map<String, List<BatchReportItem>> getItems() {
return items;
}
public List<BatchReportItem> getItemsForContext(String context) {
if (items.containsKey(context)) {
return items.get(context);
} else {
return new ArrayList<BatchReportItem>(0);
}
}
public List<BatchReportItem> getGlobalItems() {
return getItemsForContext(GLOBAL_CONTEXT);
}
public boolean isOnError() {
return onError;
}
public void setOnError(boolean onError) {
this.onError = onError;
}
}