package com.mopub.common.event; import java.io.PrintWriter; import java.io.StringWriter; /** * Immutable data class with error event data. */ public class ErrorEvent extends BaseEvent { private final String mErrorExceptionClassName; private final String mErrorMessage; private final String mErrorStackTrace; private final String mErrorFileName; private final String mErrorClassName; private final String mErrorMethodName; private final Integer mErrorLineNumber; private ErrorEvent(Builder builder) { super(builder); mErrorExceptionClassName = builder.mErrorExceptionClassName; mErrorMessage = builder.mErrorMessage; mErrorStackTrace = builder.mErrorStackTrace; mErrorFileName = builder.mErrorFileName; mErrorClassName = builder.mErrorClassName; mErrorMethodName = builder.mErrorMethodName; mErrorLineNumber = builder.mErrorLineNumber; } public String getErrorExceptionClassName() { return mErrorExceptionClassName; } public String getErrorMessage() { return mErrorMessage; } public String getErrorStackTrace() { return mErrorStackTrace; } public String getErrorFileName() { return mErrorFileName; } public String getErrorClassName() { return mErrorClassName; } public String getErrorMethodName() { return mErrorMethodName; } public Integer getErrorLineNumber() { return mErrorLineNumber; } @Override public String toString() { final String string = super.toString(); return string + "ErrorEvent\n" + "ErrorExceptionClassName: " + getErrorExceptionClassName() + "\n" + "ErrorMessage: " + getErrorMessage() + "\n" + "ErrorStackTrace: " + getErrorStackTrace() + "\n" + "ErrorFileName: " + getErrorFileName() + "\n" + "ErrorClassName: " + getErrorClassName() + "\n" + "ErrorMethodName: " + getErrorMethodName() + "\n" + "ErrorLineNumber: " + getErrorLineNumber() + "\n"; } public static class Builder extends BaseEvent.Builder { private String mErrorExceptionClassName; private String mErrorMessage; private String mErrorStackTrace; private String mErrorFileName; private String mErrorClassName; private String mErrorMethodName; private Integer mErrorLineNumber; public Builder(String eventName, String eventCategory) { super(eventName, eventCategory); } public Builder withErrorExceptionClassName(String errorExceptionClassName) { mErrorExceptionClassName = errorExceptionClassName; return this; } public Builder withErrorMessage(String errorMessage) { mErrorMessage = errorMessage; return this; } public Builder withErrorStackTrace(String errorStackTrace) { mErrorStackTrace = errorStackTrace; return this; } public Builder withErrorFileName(String errorFileName) { mErrorFileName = errorFileName; return this; } public Builder withErrorClassName(String errorClassName) { mErrorClassName = errorClassName; return this; } public Builder withErrorMethodName(String errorMethodName) { mErrorMethodName = errorMethodName; return this; } public Builder withErrorLineNumber(Integer errorLineNumber) { mErrorLineNumber = errorLineNumber; return this; } public Builder withException(Exception exception) { mErrorExceptionClassName = exception.getClass().getName(); mErrorMessage = exception.getMessage(); StringWriter stringWriter = new StringWriter(); exception.printStackTrace(new PrintWriter(stringWriter)); mErrorStackTrace = stringWriter.toString(); if (exception.getStackTrace().length > 0) { mErrorFileName = exception.getStackTrace()[0].getFileName(); mErrorClassName = exception.getStackTrace()[0].getClassName(); mErrorMethodName = exception.getStackTrace()[0].getMethodName(); mErrorLineNumber = exception.getStackTrace()[0].getLineNumber(); } return this; } @Override public ErrorEvent build() { return new ErrorEvent(this); } } }