package com.celements.model.classes.metadata;
import java.util.Objects;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import javax.validation.constraints.NotNull;
import org.suigeneris.jrcs.rcs.Version;
import org.xwiki.model.reference.DocumentReference;
import com.celements.model.util.References;
import com.google.common.base.Strings;
@Immutable
public final class ImmutableDocumentMetaData implements DocumentMetaData {
private final DocumentReference docRef;
private final String lang;
private final Version version;
public static class Builder {
private final DocumentReference docRef;
private String lang;
private Version version;
public Builder(@NotNull DocumentReference docRef) {
Objects.requireNonNull(docRef);
this.docRef = References.cloneRef(docRef, DocumentReference.class);
this.lang = "";
}
public Builder language(@Nullable String val) {
lang = Strings.nullToEmpty(val).trim();
return this;
}
public Builder version(@Nullable Version val) {
version = val;
return this;
}
public ImmutableDocumentMetaData build() {
return new ImmutableDocumentMetaData(this);
}
}
protected ImmutableDocumentMetaData(@NotNull Builder builder) {
this.docRef = builder.docRef;
this.lang = builder.lang;
this.version = builder.version;
}
@Override
public DocumentReference getDocRef() {
return References.cloneRef(docRef, DocumentReference.class);
}
@Override
public String getLanguage() {
return lang;
}
@Override
public Version getVersion() {
return version;
}
@Override
public int hashCode() {
return Objects.hash(docRef, lang, version);
}
@Override
public boolean equals(Object obj) {
boolean ret = false;
if (this == obj) {
ret = true;
} else if (obj instanceof DocumentMetaData) {
DocumentMetaData other = (DocumentMetaData) obj;
ret = Objects.equals(this.docRef, other.getDocRef()) && Objects.equals(this.lang,
other.getLanguage()) && Objects.equals(this.version, other.getVersion());
}
return ret;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("ImmutableDocumentMetaData [docRef=").append(docRef).append(", lang=").append(
lang).append(", version=").append(version).append("]");
return sb.toString();
}
}