package com.constellio.model.entities.calculators.dependencies;
import java.util.List;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import com.constellio.model.entities.records.Content;
import com.constellio.model.entities.schemas.MetadataValueType;
public class LocalDependency<T> implements Dependency {
final String metadataCode;
final boolean multivalue;
final boolean required;
final MetadataValueType returnType;
final boolean metadataCreatedLater;
public LocalDependency(String metadataCode, boolean required, boolean multivalue, MetadataValueType returnType,
boolean metadataCreatedLater) {
super();
this.metadataCode = metadataCode;
this.required = required;
this.multivalue = multivalue;
this.returnType = returnType;
this.metadataCreatedLater = metadataCreatedLater;
}
public <Z> LocalDependency<Z> whichIsRequired() {
return new LocalDependency<>(metadataCode, true, multivalue, returnType, metadataCreatedLater);
}
public <Z> LocalDependency<Z> whichIsCreatedLater() {
return new LocalDependency<>(metadataCode, required, multivalue, returnType, true);
}
public <Z> LocalDependency<List<Z>> whichIsMultivalue() {
return new LocalDependency<>(metadataCode, required, true, returnType, metadataCreatedLater);
}
public static LocalDependency<String> toAString(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.STRING, false);
}
public static <T> LocalDependency<T> toAnEnum(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.ENUM, false);
}
public static LocalDependency<List<String>> toAStringList(String metadataCode) {
return new LocalDependency<>(metadataCode, false, true, MetadataValueType.STRING, false);
}
public static LocalDependency<List<String>> toARequiredStringList(String metadataCode) {
return new LocalDependency<>(metadataCode, true, true, MetadataValueType.STRING, false);
}
public static LocalDependency<String> toAReference(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.REFERENCE, false);
}
public static LocalDependency<Boolean> toABoolean(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.BOOLEAN, false);
}
public static LocalDependency<Double> toANumber(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.NUMBER, false);
}
public static LocalDependency<LocalDate> toADate(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.DATE, false);
}
public static LocalDependency<LocalDateTime> toADateTime(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.DATE_TIME, false);
}
public static <T> LocalDependency<T> toAStructure(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.STRUCTURE, false);
}
public static LocalDependency<Content> toAContent(String metadataCode) {
return new LocalDependency<>(metadataCode, false, false, MetadataValueType.CONTENT, false);
}
@Override
public String getLocalMetadataCode() {
return metadataCode;
}
@Override
public MetadataValueType getReturnType() {
return returnType;
}
@Override
public boolean isRequired() {
return required;
}
@Override
public boolean isMultivalue() {
return multivalue;
}
public boolean isMetadataCreatedLater() {
return metadataCreatedLater;
}
@Override
public int hashCode() {
return metadataCode.hashCode();
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public String toString() {
return "LocalDependency{" +
"metadataCode='" + metadataCode + '\'' +
'}';
}
}