/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
package org.roda.core.data.v2;
import java.io.Serializable;
import java.util.Optional;
public class LiteOptionalWithCause implements Serializable {
private static final long serialVersionUID = 2354151020405129417L;
private static final String DEFAULT_EXCEPTION_CLASS = "Exception class not defined";
private static final String DEFAULT_EXCEPTION_MESSAGE = "Exception message not defined";
private SerializableOptional<LiteRODAObject> lite;
private String exceptionClass;
private String exceptionMessage;
private LiteOptionalWithCause(Optional<LiteRODAObject> lite, String exceptionClass, String exceptionMessage) {
super();
this.lite = SerializableOptional.setOptional(lite);
this.exceptionClass = exceptionClass;
this.exceptionMessage = exceptionMessage;
}
public Optional<LiteRODAObject> getLite() {
return lite.getOptional();
}
public String getExceptionClass() {
return exceptionClass;
}
public String getExceptionMessage() {
return exceptionMessage;
}
public void setLite(Optional<LiteRODAObject> lite) {
this.lite = SerializableOptional.setOptional(lite);
}
public void setExpressionClass(String exceptionClass) {
this.exceptionClass = exceptionClass;
}
public void setExceptionMessage(String exceptionMessage) {
this.exceptionMessage = exceptionMessage;
}
public static LiteOptionalWithCause empty(Exception cause) {
return new LiteOptionalWithCause(Optional.empty(), cause.getClass().getName(), cause.getMessage());
}
public static LiteOptionalWithCause empty(String exceptionClass, String exceptionMessage) {
return new LiteOptionalWithCause(Optional.empty(), exceptionClass, exceptionMessage);
}
public static LiteOptionalWithCause of(LiteRODAObject value) {
return new LiteOptionalWithCause(Optional.ofNullable(value), DEFAULT_EXCEPTION_CLASS, DEFAULT_EXCEPTION_MESSAGE);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((exceptionClass == null) ? 0 : exceptionClass.hashCode());
result = prime * result + ((exceptionMessage == null) ? 0 : exceptionMessage.hashCode());
result = prime * result + lite.hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
LiteOptionalWithCause other = (LiteOptionalWithCause) obj;
if (exceptionClass == null) {
if (other.exceptionClass != null)
return false;
} else if (!exceptionClass.equals(other.exceptionClass))
return false;
if (exceptionMessage == null) {
if (other.exceptionMessage != null)
return false;
} else if (!exceptionMessage.equals(other.exceptionMessage))
return false;
if (lite.getOptional().isPresent()) {
if (!lite.getOptional().isPresent())
return false;
} else if (!lite.equals(other.lite))
return false;
return true;
}
@Override
public String toString() {
return "LiteRODAObjectWithCause [lite=" + lite + ", exceptionClass=" + exceptionClass + ", exceptionMessage="
+ exceptionMessage + "]";
}
}