package com.constellio.model.services.search.query.logical; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.constellio.model.entities.CollectionObject; import com.constellio.model.entities.schemas.DataStoreField; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.search.query.logical.condition.CollectionFilters; import com.constellio.model.services.search.query.logical.condition.CompositeLogicalSearchCondition; import com.constellio.model.services.search.query.logical.condition.DataStoreFieldLogicalSearchCondition; import com.constellio.model.services.search.query.logical.condition.DataStoreFilters; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; import com.constellio.model.services.search.query.logical.condition.NegatedLogicalSearchCondition; import com.constellio.model.services.search.query.logical.condition.SchemaFilters; import com.constellio.model.services.search.query.logical.condition.SchemaTypesFilters; import com.constellio.model.services.search.query.logical.criteria.CompositeLogicalSearchValueOperator; import com.constellio.model.services.search.query.logical.criteria.IsContainingElementsCriterion; import com.constellio.model.services.search.query.logical.criteria.IsContainingTextCriterion; import com.constellio.model.services.search.query.logical.criteria.IsEndingWithTextCriterion; import com.constellio.model.services.search.query.logical.criteria.IsEqualCriterion; import com.constellio.model.services.search.query.logical.criteria.IsFalseCriterion; import com.constellio.model.services.search.query.logical.criteria.IsFalseOrNullCriterion; import com.constellio.model.services.search.query.logical.criteria.IsGreaterOrEqualThanCriterion; import com.constellio.model.services.search.query.logical.criteria.IsGreaterThanCriterion; import com.constellio.model.services.search.query.logical.criteria.IsInCriterion; import com.constellio.model.services.search.query.logical.criteria.IsLessOrEqualThanCriterion; import com.constellio.model.services.search.query.logical.criteria.IsLessThanCriterion; import com.constellio.model.services.search.query.logical.criteria.IsNewerThanCriterion; import com.constellio.model.services.search.query.logical.criteria.IsNotContainingElementsCriterion; import com.constellio.model.services.search.query.logical.criteria.IsNotEqualCriterion; import com.constellio.model.services.search.query.logical.criteria.IsNotInCriterion; import com.constellio.model.services.search.query.logical.criteria.IsNotNullCriterion; import com.constellio.model.services.search.query.logical.criteria.IsNullCriterion; import com.constellio.model.services.search.query.logical.criteria.IsOldLikeCriterion; import com.constellio.model.services.search.query.logical.criteria.IsOlderThanCriterion; import com.constellio.model.services.search.query.logical.criteria.IsStartingWithTextCriterion; import com.constellio.model.services.search.query.logical.criteria.IsTrueCriterion; import com.constellio.model.services.search.query.logical.criteria.IsTrueOrNullCriterion; import com.constellio.model.services.search.query.logical.criteria.IsValueInRangeCriterion; import com.constellio.model.services.search.query.logical.criteria.MeasuringUnitTime; import com.constellio.model.services.search.query.logical.criteria.NotCriterion; import com.constellio.model.services.search.query.logical.criteria.QueryCriterion; import com.constellio.model.services.search.query.logical.ongoing.OngoingLogicalSearchCondition; import com.constellio.model.services.search.query.logical.ongoing.OngoingLogicalSearchConditionWithDataStoreFields; public class LogicalSearchQueryOperators { public static LogicalSearchCondition ALL = LogicalSearchQueryOperators.where(Schemas.IDENTIFIER).isNotNull(); public static OngoingLogicalSearchCondition from(MetadataSchema schema) { return new OngoingLogicalSearchCondition(new SchemaFilters(schema)); } public static OngoingLogicalSearchCondition from(MetadataSchemaType firstSchemaType, MetadataSchemaType... otherSchemaType) { List<MetadataSchemaType> types = new ArrayList<>(); if (otherSchemaType.length == 0) { return new OngoingLogicalSearchCondition(new SchemaFilters(firstSchemaType)); } else { types.add(firstSchemaType); for (MetadataSchemaType type : otherSchemaType) { types.add(type); } return new OngoingLogicalSearchCondition(new SchemaTypesFilters(types)); } } public static OngoingLogicalSearchCondition from(List<String> schemaTypeCodes, String collection) { return new OngoingLogicalSearchCondition(new SchemaTypesFilters(schemaTypeCodes, collection)); } public static OngoingLogicalSearchCondition from(List<MetadataSchemaType> schemaTypes) { return new OngoingLogicalSearchCondition(new SchemaTypesFilters(schemaTypes)); } public static OngoingLogicalSearchCondition fromAllSchemasExcept(List<MetadataSchemaType> schemaTypes) { return new OngoingLogicalSearchCondition(new SchemaTypesFilters(schemaTypes, true)); } public static OngoingLogicalSearchCondition fromTypesInCollectionOf(CollectionObject collectionObject) { return new OngoingLogicalSearchCondition(new CollectionFilters(collectionObject.getCollection(), false)); } public static OngoingLogicalSearchCondition fromAllSchemasIn(String collection) { return new OngoingLogicalSearchCondition(new CollectionFilters(collection, false)); } public static OngoingLogicalSearchCondition fromAllSchemasInCollectionOf(CollectionObject collectionObject) { return new OngoingLogicalSearchCondition(new CollectionFilters(collectionObject.getCollection(), false)); } public static OngoingLogicalSearchCondition fromAllSchemasInExceptEvents(String collection) { return new OngoingLogicalSearchCondition(new CollectionFilters(collection, true)); } public static OngoingLogicalSearchCondition fromEveryTypesOfEveryCollection() { return new OngoingLogicalSearchCondition(null); } public static OngoingLogicalSearchConditionWithDataStoreFields whereAll(DataStoreField... metadatas) { return new OngoingLogicalSearchConditionWithDataStoreFields(new CollectionFilters(metadatas[0].getCollection(), false), Arrays.asList(metadatas), LogicalOperator.AND); } public static OngoingLogicalSearchConditionWithDataStoreFields whereAll(List<?> dataStoreFields) { List<DataStoreField> fields = (List<DataStoreField>) dataStoreFields; return new OngoingLogicalSearchConditionWithDataStoreFields(new CollectionFilters(fields.get(0).getCollection(), false), fields, LogicalOperator.AND); } public static OngoingLogicalSearchConditionWithDataStoreFields whereAny(List<?> dataStoreFields) { List<DataStoreField> fields = (List<DataStoreField>) dataStoreFields; return new OngoingLogicalSearchConditionWithDataStoreFields(new CollectionFilters(fields.get(0).getCollection(), false), fields, LogicalOperator.OR); } public static OngoingLogicalSearchConditionWithDataStoreFields where(DataStoreField metadata) { return new OngoingLogicalSearchConditionWithDataStoreFields(new CollectionFilters(metadata.getCollection(), false), Arrays.asList(metadata), LogicalOperator.AND); } public static LogicalSearchCondition returnAll() { return new DataStoreFieldLogicalSearchCondition(null); } public static LogicalSearchCondition allConditions(LogicalSearchCondition... otherOperators) { return allConditions(Arrays.asList(otherOperators)); } public static LogicalSearchCondition allConditions(List<LogicalSearchCondition> otherOperators) { DataStoreFilters filters = otherOperators.get(0).getFilters(); return new CompositeLogicalSearchCondition(filters, LogicalOperator.AND, otherOperators); } public static LogicalSearchCondition anyConditions(LogicalSearchCondition... otherOperators) { return anyConditions(Arrays.asList(otherOperators)); } public static LogicalSearchCondition not(LogicalSearchCondition otherOperator) { return new NegatedLogicalSearchCondition(otherOperator); } public static LogicalSearchCondition anyConditions(List<LogicalSearchCondition> otherOperators) { DataStoreFilters filters = otherOperators.get(0).getFilters(); return new CompositeLogicalSearchCondition(filters, LogicalOperator.OR, otherOperators); } public static <T> LogicalSearchValueCondition is(T value) { return new IsEqualCriterion(value); } public static <T> LogicalSearchValueCondition isNotEqual(T value) { return new IsNotEqualCriterion(value); } public static <T> LogicalSearchValueCondition in(List<T> values) { return new IsInCriterion(values); } public static <T> LogicalSearchValueCondition notIn(List<T> values) { return new IsNotInCriterion(values); } public static <T> LogicalSearchValueCondition containing(List<T> values) { return new IsContainingElementsCriterion(values); } public static <T> LogicalSearchValueCondition notContainingElements(List<T> values) { return new IsNotContainingElementsCriterion(values); } public static <T> LogicalSearchValueCondition isNull() { return new IsNullCriterion(); } public static <T> LogicalSearchValueCondition isNotNull() { return new IsNotNullCriterion(); } public static LogicalSearchValueCondition containingText(String value) { return new IsContainingTextCriterion(value); } public static <T> LogicalSearchValueCondition startingWithText(String value) { return new IsStartingWithTextCriterion(value); } public static <T> LogicalSearchValueCondition endingWithText(String value) { return new IsEndingWithTextCriterion(value); } public static <T> LogicalSearchValueCondition all(LogicalSearchValueCondition... otherOperators) { return all(Arrays.asList(otherOperators)); } public static <T> LogicalSearchValueCondition all(List<LogicalSearchValueCondition> otherOperators) { return new CompositeLogicalSearchValueOperator(LogicalOperator.AND, otherOperators); } public static <T> LogicalSearchValueCondition any(List<LogicalSearchValueCondition> otherOperators) { return new CompositeLogicalSearchValueOperator(LogicalOperator.OR, otherOperators); } public static <T> LogicalSearchValueCondition any(LogicalSearchValueCondition... otherOperators) { return any(Arrays.asList(otherOperators)); } public static <T> LogicalSearchValueCondition not(LogicalSearchValueCondition otherOperator) { return new NotCriterion(otherOperator); } public static LogicalSearchValueCondition isTrue() { return new IsTrueCriterion(); } public static LogicalSearchValueCondition isTrueOrNull() { return new IsTrueOrNullCriterion(); } public static LogicalSearchValueCondition isFalse() { return new IsFalseCriterion(); } public static LogicalSearchValueCondition isFalseOrNull() { return new IsFalseOrNullCriterion(); } public static LogicalSearchValueCondition valueInRange(Object beginIndex, Object endIndex) { return new IsValueInRangeCriterion(beginIndex, endIndex); } public static LogicalSearchValueCondition lessThan(Object index) { return new IsLessThanCriterion(index); } public static LogicalSearchValueCondition greaterThan(Object index) { return new IsGreaterThanCriterion(index); } public static LogicalSearchValueCondition lessOrEqualThan(Object index) { return new IsLessOrEqualThanCriterion(index); } public static LogicalSearchValueCondition newerThan(Object value, MeasuringUnitTime measuringUnitTime) { return new IsNewerThanCriterion(value, measuringUnitTime); } public static LogicalSearchValueCondition olderThan(Object value, MeasuringUnitTime measuringUnitTime) { return new IsOlderThanCriterion(value, measuringUnitTime); } public static LogicalSearchValueCondition oldLike(Object value, MeasuringUnitTime measuringUnitTime) { return new IsOldLikeCriterion(value, measuringUnitTime); } public static LogicalSearchValueCondition greaterOrEqualThan(Object index) { return new IsGreaterOrEqualThanCriterion(index); } public static LogicalSearchValueCondition equal(Object index) { return new IsEqualCriterion(index); } public static LogicalSearchValueCondition notEqual(Object value) { return new IsNotEqualCriterion(value); } public static LogicalSearchValueCondition query(String query) { return new QueryCriterion(query); } public static LogicalSearchCondition impossibleCondition(String collection) { return fromAllSchemasIn(collection).where(Schemas.IDENTIFIER).isEqualTo("impossibleID_42"); } }