package com.constellio.sdk.tests.schemas; import static com.constellio.model.entities.schemas.MetadataValueType.BOOLEAN; import static com.constellio.model.entities.schemas.MetadataValueType.CONTENT; import static com.constellio.model.entities.schemas.MetadataValueType.DATE; import static com.constellio.model.entities.schemas.MetadataValueType.DATE_TIME; import static com.constellio.model.entities.schemas.MetadataValueType.INTEGER; import static com.constellio.model.entities.schemas.MetadataValueType.NUMBER; import static com.constellio.model.entities.schemas.MetadataValueType.REFERENCE; import static com.constellio.model.entities.schemas.MetadataValueType.STRING; import static com.constellio.model.entities.schemas.MetadataValueType.STRUCTURE; import static com.constellio.model.entities.schemas.MetadataValueType.TEXT; import static com.constellio.sdk.tests.TestUtils.asMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import com.constellio.model.api.impl.schemas.validation.impl.CreationDateIsBeforeOrEqualToLastModificationDateValidator; import com.constellio.model.api.impl.schemas.validation.impl.Maximum50CharsRecordMetadataValidator; import com.constellio.model.api.impl.schemas.validation.impl.Maximum50CharsRecordMultivalueMetadataValidator; import com.constellio.model.entities.Language; import com.constellio.model.entities.calculators.MetadataValueCalculator; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.MetadataTransiency; import com.constellio.model.entities.schemas.validation.RecordValidator; import com.constellio.model.services.schemas.SchemaUtils; import com.constellio.model.services.schemas.builders.MetadataBuilder; import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder; import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import com.constellio.model.services.schemas.testimpl.TestStructureFactory1; import com.constellio.sdk.tests.setups.SchemaShortcuts; public class TestsSchemasSetup extends SchemasSetup { public static final String ZE_SCHEMA_TYPE_CODE = "zeSchemaType"; public static final String ANOTHER_SCHEMA_TYPE_CODE = "anotherSchemaType"; public static final String A_THIRD_SCHEMA_TYPE_CODE = "aThirdSchemaType"; public static MetadataBuilderConfigurator limitedTo50Characters = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineValidators().add(Maximum50CharsRecordMetadataValidator.class); } }; public static MetadataBuilderConfigurator whichIsMultivaluesAndLimitedTo50Characters = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setMultivalue(true); builder.defineValidators().add(Maximum50CharsRecordMultivalueMetadataValidator.class); } }; public static MetadataBuilderConfigurator limitedTo50CharactersInCustomSchema = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { getCustomMetadata(builder, schemaTypes).defineValidators().add(Maximum50CharsRecordMetadataValidator.class); } }; public static MetadataBuilderConfigurator whichIsMultivaluesAndLimitedTo50CharactersInCustomSchema = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setMultivalue(true); getCustomMetadata(builder, schemaTypes).defineValidators().add(Maximum50CharsRecordMetadataValidator.class); } }; public static MetadataBuilderConfigurator whichHasDefaultRequirement = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setDefaultRequirement(true); } }; public static MetadataBuilderConfigurator whichHasInputMask(final String inputMask) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setInputMask(inputMask); } }; } public static MetadataBuilderConfigurator whichIsCalculatedUsing(final Class<? extends MetadataValueCalculator<?>> clazz) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineDataEntry().asCalculated(clazz); } }; } public static MetadataBuilderConfigurator whichIsScripted(final String script) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineDataEntry().asJexlScript(script); } }; } public static MetadataBuilderConfigurator whichHasTransiency(final MetadataTransiency transiency) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setTransiency(transiency); } }; } public static MetadataBuilderConfigurator whichHasDefaultValue(final Object value) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setDefaultValue(value); } }; } public static MetadataBuilderConfigurator whichIncreaseDependencyLevel = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setIncreasedDependencyLevel(true); } }; public static MetadataBuilderConfigurator whichHasCustomAttributes(final String... attributes) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { for (String attribute : attributes) { builder.addCustomAttribute(attribute); } } }; } public static MetadataBuilderConfigurator whichIsEssentialInSummary = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setEssentialInSummary(true); } }; public static MetadataBuilderConfigurator whichIsEncrypted = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setEncrypted(true); } }; public static MetadataBuilderConfigurator whichIsUnmodifiable = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setUnmodifiable(true); } }; public static MetadataBuilderConfigurator whichIsEssential = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setEssential(true); } }; public static MetadataBuilderConfigurator whichIsMarkedForDeletion = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setMarkedForDeletion(true); } }; public static MetadataBuilderConfigurator whichIsEnabled = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setEnabled(true); } }; public static MetadataBuilderConfigurator whichIsDisabled = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setEnabled(false); } }; public static MetadataBuilderConfigurator whichIsUndeletable = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setUndeletable(true); } }; public static MetadataBuilderConfigurator whichIsMultivalue = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setMultivalue(true); } }; public static MetadataBuilderConfigurator whichIsUnique = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setUniqueValue(true); } }; public static MetadataBuilderConfigurator whichIsSearchable = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setSearchable(true); } }; public static MetadataBuilderConfigurator whichIsSortable = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setSortable(true); } }; public static MetadataBuilderConfigurator whichIsSchemaAutocomplete = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setSchemaAutocomplete(true); } }; public static MetadataBuilderConfigurator whichIsEnabledInCustomSchema = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { getCustomMetadata(builder, schemaTypes).setEnabled(true); } }; public static MetadataBuilderConfigurator whichIsDisabledInCustomSchema = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { getCustomMetadata(builder, schemaTypes).setEnabled(false); } }; public static MetadataBuilderConfigurator whichHasNoDefaultRequirement = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setDefaultRequirement(false); } }; public static MetadataBuilderConfigurator whichIsSystemReserved = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setSystemReserved(true); } }; public static MetadataBuilderConfigurator whichHasDefaultRequirementInCustomSchema = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { getCustomMetadata(builder, schemaTypes).setDefaultRequirement(true); } }; public static MetadataBuilderConfigurator whichHasNoDefaultRequirementInCustomSchema = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { getCustomMetadata(builder, schemaTypes).setDefaultRequirement(false); } }; public static MetadataBuilderConfigurator whichIsTaxonomyRelationship = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setTaxonomyRelationship(true); } }; public static MetadataBuilderConfigurator whichIsChildOfRelationship = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setChildOfRelationship(true); } }; public static MetadataBuilderConfigurator whichAllowsThirdSchemaType = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineReferences().set(schemaTypes.getSchemaType("aThirdSchemaType")); } }; public static MetadataBuilderConfigurator whichDoesNotAllowAnotherSchema = whichAllowsThirdSchemaType; public static MetadataBuilderConfigurator whichAllowsAnotherSchemaType = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineReferences().set(schemaTypes.getSchemaType("anotherSchemaType")); } }; public static MetadataBuilderConfigurator whichAllowsAnotherDefaultSchema = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineReferences().add(schemaTypes.getSchema("anotherSchemaType_default")); } }; public static MetadataBuilderConfigurator whichIsCalculatedUsingPattern(final String pattern) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineDataEntry().asJexlScript(pattern); } }; } public static MetadataBuilderConfigurator whichHasStructureFactory = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineStructureFactory(TestStructureFactory1.class); } }; public static MetadataBuilderConfigurator whichIsDuplicable = new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.setDuplicable(true); } }; protected boolean security = true; protected MetadataSchemaTypeBuilder zeSchemaTypeBuilder; protected MetadataSchemaBuilder zeDefaultSchemaBuilder; protected MetadataSchemaBuilder zeCustomSchemaBuilder; protected MetadataSchemaTypeBuilder anOtherSchemaTypeBuilder; protected MetadataSchemaBuilder anOtherDefaultSchemaBuilder; protected MetadataSchemaTypeBuilder aThirdSchemaTypeBuilder; protected MetadataSchemaBuilder athirdDefaultSchemaBuilder; public TestsSchemasSetup() { this("zeCollection"); } public TestsSchemasSetup(String collection) { super(collection); } public static MetadataBuilderConfigurator whichHasLabel(final String label) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.addLabel(Language.French, label); } }; } public static MetadataBuilderConfigurator whichHasLabelInCustomSchema(final String label) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { getCustomMetadata(builder, schemaTypes).addLabel(Language.French, label); } }; } public static MetadataBuilderConfigurator whichHasFixedSequence(final String fixedSequenceCode) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineDataEntry().asFixedSequence(fixedSequenceCode); } }; } public static MetadataBuilderConfigurator whichHasSequenceDefinedByMetadata(final String metadataLocalCode) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { builder.defineDataEntry().asSequenceDefinedByMetadata(metadataLocalCode); } }; } private static MetadataBuilder getCustomMetadata(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { return schemaTypes.getMetadata(builder.getCode().replace("_default_", "_custom_")); } public TestsSchemasSetup withSecurityFlag(boolean flag) { this.security = flag; return this; } public TestsSchemasSetup withTwoMetadatasCopyingAnotherSchemaValuesUsingTwoDifferentReferenceMetadata(boolean multivalue, boolean multivalueReferences, boolean required) { MetadataBuilder stringReference = zeDefaultSchemaBuilder.create("stringRef").setType(REFERENCE) .setMultivalue(multivalueReferences); MetadataBuilder copiedStringMetadata = zeDefaultSchemaBuilder.create("copiedStringMeta").setType(STRING) .setLabels(asMap(Language.French, "Une métadonnée copiée")) .setDefaultRequirement(required).setMultivalue(multivalue || multivalueReferences); MetadataBuilder otherSchemaStringMetadata = anOtherSchemaTypeBuilder.getDefaultSchema().create("stringMetadata") .setType(STRING).setMultivalue(multivalue); MetadataBuilder dateReference = zeDefaultSchemaBuilder.create("dateRef").setType(REFERENCE) .setMultivalue(multivalueReferences); MetadataBuilder copiedDateMetadata = zeDefaultSchemaBuilder.create("copiedDateMeta").setType(DATE_TIME) .setDefaultRequirement(required).setMultivalue(multivalue || multivalueReferences); MetadataBuilder otherSchemaDateMetadata = anOtherSchemaTypeBuilder.getDefaultSchema().create("dateMeta").setType( DATE_TIME) .setMultivalue(multivalue); stringReference.defineReferences().set(anOtherSchemaTypeBuilder); copiedStringMetadata.defineDataEntry().asCopied(stringReference, otherSchemaStringMetadata); dateReference.defineReferences().set(anOtherSchemaTypeBuilder); copiedDateMetadata.defineDataEntry().asCopied(dateReference, otherSchemaDateMetadata); return this; } public TestsSchemasSetup withCalculatedDaysBetweenLocalDateAndAnotherSchemaRequiredDate(boolean multivalue) throws Exception { MetadataBuilder dateReference = zeDefaultSchemaBuilder.create("dateRef").setType(REFERENCE).setMultivalue(multivalue); anOtherSchemaTypeBuilder.getDefaultSchema().create("dateMeta").setType(DATE_TIME); MetadataBuilder metadata = zeDefaultSchemaBuilder.create("daysBetween").setType(NUMBER); if (multivalue) { metadata.defineDataEntry().asCalculated(DaysBetweenMultivalueLocalDateAndAnotherSchemaRequiredDateCalculator.class); } else { metadata.defineDataEntry().asCalculated(DaysBetweenSingleLocalDateAndAnotherSchemaRequiredDateCalculator.class); } if (multivalue) { withADateTimeMetadata(whichIsMultivalue); } else { withADateTimeMetadata(); } dateReference.defineReferences().set(anOtherSchemaTypeBuilder); return this; } public TestsSchemasSetup withCreationAndModificationDateInZeSchema() throws Exception { zeDefaultSchemaBuilder.create("creationDate").setType(DATE_TIME); zeDefaultSchemaBuilder.create("modificationDate").setType(DATE_TIME); zeDefaultSchemaBuilder.defineValidators().add(CreationDateIsBeforeOrEqualToLastModificationDateValidator.class); return this; } public TestsSchemasSetup withCreationAndModificationDateInZeCustomSchema() throws Exception { zeCustomSchemaBuilder.create("creationDate").setType(DATE_TIME); zeCustomSchemaBuilder.create("modificationDate").setType(DATE_TIME); zeCustomSchemaBuilder.defineValidators().add(CreationDateIsBeforeOrEqualToLastModificationDateValidator.class); return this; } public TestsSchemasSetup withATitle(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("zetitle").setType(STRING) .addLabel(Language.French, "Title"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAContent(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("content").setType(STRING) .addLabel(Language.French, "Content"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAParsedContent(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("parsedContent").setType(STRING) .addLabel(Language.French, "Parsed content"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { return withAStringMetadata(builderConfigurators); } public TestsSchemasSetup withAStructureMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("structureMetadata").setType(STRUCTURE) .defineStructureFactory(TestStructureFactory1.class); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAStringMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("stringMetadata").setType(STRING) .addLabel(Language.French, "A toAString metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAContentMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("contentMetadata").setType(CONTENT); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAMultivalueContentMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("contentMetadata").setType(CONTENT).setMultivalue(true); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAContentListMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("contentListMetadata").setType(CONTENT).setMultivalue( true); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withALargeTextMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("largeTextMetadata").setType(TEXT); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAMultivaluedLargeTextMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("multivaluedLargeTextMetadata").setType(TEXT); metadataBuilder.setMultivalue(true); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withZeDefaultSchema(MetadataSchemaTypeConfigurator... builderConfigurators) throws Exception { configureMetadataBuilder(zeSchemaTypeBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAModifiedStringMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("stringMetadata").setType(STRING) .addLabel(Language.French, "A toAString metadata"); metadataBuilder.addLabel(Language.French, "A modified label"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAnotherStringMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("anotherStringMetadata").setType(STRING) .addLabel(Language.French, "An other toAString metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAThirdStringMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("thirdStringMetadata").setType(STRING) .addLabel(Language.French, "A third string metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withRecordValidator(Class<? extends RecordValidator> validatorClass) throws Exception { zeDefaultSchemaBuilder.defineValidators().add(validatorClass); return this; } public TestsSchemasSetup withAnotherSchemaStringMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = anOtherDefaultSchemaBuilder.create("stringMetadata").setType(STRING) .addLabel(Language.French, "String metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withADateTimeMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("dateTimeMetadata").setType(DATE_TIME) .addLabel(Language.French, "a date time metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withADateMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("dateMetadata").setType(DATE) .addLabel(Language.French, "a date metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withANumberMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("numberMetadata").setType(NUMBER) .addLabel(Language.French, "A number metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAnIntegerMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("integerMetadata").setType(INTEGER) .addLabel(Language.French, "An integer metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withABooleanMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("booleanMetadata").setType(BOOLEAN) .addLabel(Language.French, "A boolean metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAReferenceMetadata(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("referenceMetadata").setType(REFERENCE) .addLabel(Language.French, "A reference metadata"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAReferenceMetadataToZeSchema(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("referenceMetadata").setType(REFERENCE) .addLabel(Language.French, "A reference metadata"); metadataBuilder.defineReferencesTo(zeSchemaTypeBuilder); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAParentReferenceFromZeSchemaToZeSchema(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("parentReferenceFromZeSchemaToZeSchema") .defineChildOfRelationshipToSchemas(Arrays.asList(zeDefaultSchemaBuilder)); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAParentReferenceFromAnotherSchemaToZeSchema(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = anOtherDefaultSchemaBuilder.create("referenceFromAnotherSchemaToZeSchema") .defineChildOfRelationshipToType(zeDefaultSchemaBuilder.getSchemaTypeBuilder()); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAReferenceFromAnotherSchemaToZeSchema(MetadataBuilderConfigurator... builderConfigurators) throws Exception { MetadataBuilder metadataBuilder = anOtherDefaultSchemaBuilder.create("referenceFromAnotherSchemaToZeSchema") .defineReferencesTo(zeDefaultSchemaBuilder.getSchemaTypeBuilder()); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } @Override public void setUp() { zeSchemaTypeBuilder = typesBuilder.createNewSchemaType(ZE_SCHEMA_TYPE_CODE).setSecurity(security).setLabels( asMap(Language.French, "Ze type de schéma", Language.English, "Ze schema type")); anOtherSchemaTypeBuilder = typesBuilder.createNewSchemaType(ANOTHER_SCHEMA_TYPE_CODE).setSecurity(security); aThirdSchemaTypeBuilder = typesBuilder.createNewSchemaType(A_THIRD_SCHEMA_TYPE_CODE).setSecurity(security); zeDefaultSchemaBuilder = zeSchemaTypeBuilder.getDefaultSchema(); anOtherDefaultSchemaBuilder = anOtherSchemaTypeBuilder.getDefaultSchema(); athirdDefaultSchemaBuilder = aThirdSchemaTypeBuilder.getDefaultSchema(); } public TestsSchemasSetup andCustomSchema() { zeCustomSchemaBuilder = zeSchemaTypeBuilder.createCustomSchema("custom"); return this; } public String zeDefaultSchemaCode() { return "zeSchemaType_default"; } public String zeCustomSchemaCode() { return "zeSchemaType_custom"; } public String anotherDefaultSchemaCode() { return "anotherSchemaType_default"; } public String aThirdDefaultSchemaCode() { return "aThirdSchemaType_default"; } public String zeCustomSchemaTypeCode() { return "zeSchemaType"; } public String anotherSchemaTypeCode() { return "anotherSchemaType"; } public String aThirdSchemaTypeCode() { return "aThirdSchemaType"; } public MetadataSchema zeDefaultSchema() { return getSchema(zeDefaultSchemaCode()); } public MetadataSchema zeCustomSchema() { return getSchema(zeCustomSchemaCode()); } public MetadataSchema anotherDefaultSchema() { return getSchema(anotherDefaultSchemaCode()); } public MetadataSchema aThirdDefaultSchema() { return getSchema(aThirdDefaultSchemaCode()); } public MetadataSchema zeCustomSchemaType() { return getSchema("zeSchemaType"); } public MetadataSchema anotherSchemaType() { return getSchema("anotherSchemaType"); } public MetadataSchema aThirdSchemaType() { return getSchema("aThirdSchemaType"); } public MetadataSchema aThirdOtherSchemaType() { return getSchema("aThirdOtherSchemaType"); } public TestsSchemasSetup withSchemaFrenchLabel(String label) { zeDefaultSchemaBuilder.addLabel(Language.French, label); return this; } public TestsSchemasSetup withTypeFrenchLabel(String label) { zeSchemaTypeBuilder.addLabel(Language.French, label); return this; } public TestsSchemasSetup withCustomSchemaFrenchLabel(String label) { zeCustomSchemaBuilder.addLabel(Language.French, label); return this; } public TestsSchemasSetup whichCustomSchemaIsUndeletable() throws Exception { zeCustomSchemaBuilder.setUndeletable(true); return this; } public TestsSchemasSetup whichCustomSchemaIsDeletable() throws Exception { zeCustomSchemaBuilder.setUndeletable(false); return this; } public TestsSchemasSetup withADateTimeMetadataInCustomSchema(MetadataBuilderConfigurator... builderConfigurators) { MetadataBuilder metadataBuilder = zeCustomSchemaBuilder.create("customDate").setType(DATE_TIME); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAStringMetadataInCustomSchema(MetadataBuilderConfigurator... builderConfigurators) { MetadataBuilder metadataBuilder = zeCustomSchemaBuilder.create("customString").setType(STRING); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withAnEnumMetadata(Class enumClass, MetadataBuilderConfigurator... builderConfigurators) { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("withAnEnumMetadata").defineAsEnum(enumClass); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public static MetadataBuilderConfigurator whichIsReferencing(SchemaShortcuts schemaShortcuts) { String schemaCode = schemaShortcuts.code(); String typeCode = new SchemaUtils().getSchemaTypeCode(schemaCode); return whichIsReferencing(typeCode); } public static MetadataBuilderConfigurator whichIsReferencing(final String typeCode) { return new MetadataBuilderConfigurator() { @Override public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) { MetadataSchemaTypeBuilder type = schemaTypes.getSchemaType(typeCode); builder.defineReferencesTo(type); } }; } public TestsSchemasSetup withAFixedSequence(MetadataBuilderConfigurator... builderConfigurators) { MetadataBuilder metadataBuilder = zeDefaultSchemaBuilder.create("fixedSequenceMetadata").defineDataEntry() .asFixedSequence("zeSequence"); configureMetadataBuilder(metadataBuilder, typesBuilder, builderConfigurators); return this; } public TestsSchemasSetup withADynamicSequence() { zeDefaultSchemaBuilder.create("metadataDefiningSequenceNumber").setType(STRING); zeDefaultSchemaBuilder.create("dynamicSequenceMetadata").defineDataEntry() .asSequenceDefinedByMetadata("metadataDefiningSequenceNumber"); return this; } public static class ZeSchemaMetadatasAdapter implements SchemaShortcuts { ZeSchemaMetadatas zeSchemaMetadatas; public ZeSchemaMetadatasAdapter(ZeSchemaMetadatas zeSchemaMetadatas) { this.zeSchemaMetadatas = zeSchemaMetadatas; } public Metadata metadataWithCode(String code) { return zeSchemaMetadatas.metadataWithCode(code); } @Override public String code() { return zeSchemaMetadatas.code(); } @Override public String collection() { return zeSchemaMetadatas.collection(); } public Metadata stringCopiedFromFirstReferenceStringMeta() { return zeSchemaMetadatas.stringCopiedFromFirstReferenceStringMeta(); } public Metadata dateCopiedFromSecondReferenceDateMeta() { return zeSchemaMetadatas.dateCopiedFromSecondReferenceDateMeta(); } public String firstReferenceToAnotherSchemaCompleteCode() { return zeSchemaMetadatas.firstReferenceToAnotherSchemaCompleteCode(); } public Metadata dynamicSequenceMetadata() { return zeSchemaMetadatas.dynamicSequenceMetadata(); } public Metadata fixedSequenceMetadata() { return zeSchemaMetadatas.fixedSequenceMetadata(); } public Metadata metadataDefiningSequenceNumber() { return zeSchemaMetadatas.metadataDefiningSequenceNumber(); } public Metadata firstReferenceToAnotherSchema() { return zeSchemaMetadatas.firstReferenceToAnotherSchema(); } public Metadata secondReferenceToAnotherSchema() { return zeSchemaMetadatas.secondReferenceToAnotherSchema(); } public Metadata stringMetadata() { return zeSchemaMetadatas.stringMetadata(); } public Metadata enumMetadata() { return zeSchemaMetadatas.enumMetadata(); } public Metadata contentMetadata() { return zeSchemaMetadatas.contentMetadata(); } public Metadata contentListMetadata() { return zeSchemaMetadatas.contentListMetadata(); } public Metadata parentReferenceFromZeSchemaToZeSchema() { return zeSchemaMetadatas.parentReferenceFromZeSchemaToZeSchema(); } public Metadata metadata() { return zeSchemaMetadatas.metadata(); } public Metadata anotherStringMetadata() { return zeSchemaMetadatas.anotherStringMetadata(); } public Metadata dateTimeMetadata() { return zeSchemaMetadatas.dateTimeMetadata(); } public Metadata dateMetadata() { return zeSchemaMetadatas.dateMetadata(); } public Metadata numberMetadata() { return zeSchemaMetadatas.numberMetadata(); } public Metadata integerMetadata() { return zeSchemaMetadatas.integerMetadata(); } public Metadata booleanMetadata() { return zeSchemaMetadatas.booleanMetadata(); } public Metadata referenceMetadata() { return zeSchemaMetadatas.referenceMetadata(); } public Metadata creationDate() { return zeSchemaMetadatas.creationDate(); } public Metadata modificationDate() { return zeSchemaMetadatas.modificationDate(); } public Metadata title() { return zeSchemaMetadatas.title(); } public Metadata content() { return zeSchemaMetadatas.content(); } public Metadata parsedContent() { return zeSchemaMetadatas.parsedContent(); } public Metadata calculatedDaysBetween() { return zeSchemaMetadatas.calculatedDaysBetween(); } public List<Metadata> allFieldsList() { return zeSchemaMetadatas.allFieldsList(); } public MetadataSchema instance() { return zeSchemaMetadatas.instance(); } public Metadata metadata(String code) { return zeSchemaMetadatas.metadata(code); } public Metadata path() { return zeSchemaMetadatas.path(); } public Metadata parentpath() { return zeSchemaMetadatas.parentpath(); } public Metadata largeTextMetadata() { return zeSchemaMetadatas.largeTextMetadata(); } public Metadata multivaluedLargeTextMetadata() { return zeSchemaMetadatas.multivaluedLargeTextMetadata(); } public String typeCode() { return zeSchemaMetadatas.typeCode(); } public MetadataSchemaType type() { return zeSchemaMetadatas.type(); } } public class ZeSchemaMetadatas implements SchemaShortcuts { public Metadata dynamicSequenceMetadata() { return getMetadata(code() + "_" + "dynamicSequenceMetadata"); } public Metadata fixedSequenceMetadata() { return getMetadata(code() + "_" + "fixedSequenceMetadata"); } public Metadata metadataDefiningSequenceNumber() { return getMetadata(code() + "_" + "metadataDefiningSequenceNumber"); } public Metadata metadataWithCode(String code) { return getMetadata(code); } public String code() { return "zeSchemaType_default"; } public String collection() { return collection; } public Metadata stringCopiedFromFirstReferenceStringMeta() { return getMetadata(code() + "_" + "copiedStringMeta"); } public Metadata dateCopiedFromSecondReferenceDateMeta() { return getMetadata(code() + "_" + "copiedDateMeta"); } public String firstReferenceToAnotherSchemaCompleteCode() { return code() + "_" + "stringRef"; } public Metadata firstReferenceToAnotherSchema() { return getMetadata(firstReferenceToAnotherSchemaCompleteCode()); } public Metadata secondReferenceToAnotherSchema() { return getMetadata(code() + "_" + "dateRef"); } public Metadata stringMetadata() { return getMetadata(code() + "_" + "stringMetadata"); } public Metadata enumMetadata() { return getMetadata(code() + "_" + "withAnEnumMetadata"); } public Metadata contentMetadata() { return getMetadata(code() + "_" + "contentMetadata"); } public Metadata contentListMetadata() { return getMetadata(code() + "_" + "contentListMetadata"); } public Metadata parentReferenceFromZeSchemaToZeSchema() { return getMetadata(code() + "_" + "parentReferenceFromZeSchemaToZeSchema"); } public Metadata metadata() { return stringMetadata(); } public Metadata anotherStringMetadata() { return getMetadata(code() + "_" + "anotherStringMetadata"); } public Metadata dateTimeMetadata() { return getMetadata(code() + "_" + "dateTimeMetadata"); } public Metadata dateMetadata() { return getMetadata(code() + "_" + "dateMetadata"); } public Metadata numberMetadata() { return getMetadata(code() + "_" + "numberMetadata"); } public Metadata integerMetadata() { return getMetadata(code() + "_" + "integerMetadata"); } public Metadata booleanMetadata() { return getMetadata(code() + "_" + "booleanMetadata"); } public Metadata referenceMetadata() { return getMetadata(code() + "_" + "referenceMetadata"); } public Metadata creationDate() { return getMetadata(code() + "_" + "creationDate"); } public Metadata modificationDate() { return getMetadata(code() + "_" + "modificationDate"); } public Metadata title() { return getMetadata(code() + "_" + "zetitle"); } public Metadata content() { return getMetadata(code() + "_" + "content"); } public Metadata parsedContent() { return getMetadata(code() + "_" + "parsedContent"); } public Metadata calculatedDaysBetween() { return getMetadata(code() + "_" + "daysBetween"); } public List<Metadata> allFieldsList() { List<Metadata> metadatas = new ArrayList<>(); metadatas.addAll(getSchema(code()).getMetadatas()); return Collections.unmodifiableList(metadatas); } public MetadataSchema instance() { return getSchema(code()); } public Metadata metadata(String code) { return getMetadata(code() + "_" + code); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata largeTextMetadata() { return getMetadata(code() + "_largeTextMetadata"); } public Metadata multivaluedLargeTextMetadata() { return getMetadata(code() + "_multivaluedLargeTextMetadata"); } public String typeCode() { return "zeSchemaType"; } public MetadataSchemaType type() { return get(code().split("_")[0]); } } public class ZeCustomSchemaMetadatas extends ZeSchemaMetadatas { @Override public String code() { return "zeSchemaType_custom"; } public Metadata customStringMetadata() { return getMetadata(code() + "_" + "customString"); } public Metadata customDateMetadata() { return getMetadata(code() + "_" + "customDate"); } } public class AnotherSchemaMetadatas implements SchemaShortcuts { public Metadata metadataWithCode(String code) { return getMetadata(code); } public String stringMetadataCompleteCode = code() + "_" + "stringMetadata"; public String code() { return "anotherSchemaType_default"; } public String collection() { return collection; } public Metadata stringMetadata() { return getMetadata(stringMetadataCompleteCode); } public Metadata dateMetadata() { return getMetadata(code() + "_" + "dateMeta"); } public MetadataSchema instance() { return getSchema(code()); } public MetadataSchemaType type() { return get(code().split("_")[0]); } public Metadata metadata(String code) { return getMetadata(this.code() + "_" + code); } public Metadata referenceFromAnotherSchemaToZeSchema() { return getMetadata(code() + "_" + "referenceFromAnotherSchemaToZeSchema"); } public String typeCode() { return "anotherSchemaType"; } } public class ThirdSchemaMetadatas implements SchemaShortcuts { public String code() { return "aThirdSchemaType_default"; } public String collection() { return collection; } public MetadataSchema instance() { return getSchema(code()); } public MetadataSchemaType type() { return get(code().split("_")[0]); } public Metadata metadata(String code) { return getMetadata(this.code() + "_" + code); } public String typeCode() { return "aThirdSchemaType"; } } }