package com.constellio.app.ui.pages.search.criteria;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.framework.builders.MetadataToVOBuilder;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchemaType;
public class CriteriaBuilder {
List<Criterion> criteria = new ArrayList<>();
MetadataSchemaType schemaType;
SessionContext sessionContext;
public CriteriaBuilder(MetadataSchemaType schemaType, SessionContext sessionContext) {
this.schemaType = schemaType;
this.sessionContext = sessionContext;
}
public CriterionBuilder addCriterion(MetadataVO metadata) {
Criterion criterion = new Criterion(schemaType.getCode());
criteria.add(criterion);
String enumClassName = null;
if (metadata.getEnumClass() != null) {
enumClassName = metadata.getEnumClass().getName();
}
criterion.setMetadata(metadata.getCode(), metadata.getType(), enumClassName);
return new CriterionBuilder(criterion);
}
public CriterionBuilder addCriterion(String metadataCode) {
if (metadataCode.contains("_")) {
return addCriterion(schemaType.getMetadata(metadataCode));
} else {
return addCriterion(schemaType.getDefaultSchema().getMetadata(metadataCode));
}
}
public CriterionBuilder addCriterion(Metadata metadata) {
return addCriterion(new MetadataToVOBuilder().build(metadata, sessionContext));
}
public List<Criterion> build() {
return criteria;
}
}