package com.constellio.model.services.batch.controller; 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 java.util.Arrays; import java.util.List; import com.constellio.model.entities.calculators.CalculatorParameters; import com.constellio.model.entities.calculators.MetadataValueCalculator; import com.constellio.model.entities.calculators.dependencies.Dependency; import com.constellio.model.entities.calculators.dependencies.LocalDependency; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.services.schemas.builders.MetadataBuilder; import com.constellio.sdk.tests.schemas.TestsSchemasSetup; public class BatchProcessControllerAcceptanceTestSchemasSetup extends TestsSchemasSetup { public BatchProcessControllerAcceptanceTestSchemasSetup withCopiedTextMetadataFromAnotherSchema() { MetadataBuilder zeSchemaText = zeDefaultSchemaBuilder.create("text").setType(STRING); MetadataBuilder referenceToZeSchema = anOtherDefaultSchemaBuilder.create("referenceToZeSchema"); referenceToZeSchema.setType(REFERENCE).defineReferences().set(zeSchemaTypeBuilder); MetadataBuilder anotherSchemaCopiedText = anOtherDefaultSchemaBuilder.create("copiedTextMetadata") .setType(STRING).defineDataEntry().asCopied(referenceToZeSchema, zeSchemaText); anOtherDefaultSchemaBuilder.create("copiedTextLengthMetadata").setType(NUMBER).defineDataEntry() .asCalculated(TextMetadataLengthCalculator.class); MetadataBuilder referenceToAnotherSchema = athirdDefaultSchemaBuilder .create("referenceToAnotherSchema"); referenceToAnotherSchema.setType(REFERENCE).defineReferences().set(anOtherSchemaTypeBuilder); athirdDefaultSchemaBuilder.create("copiedTextMetadata").setType(STRING).defineDataEntry() .asCopied(referenceToAnotherSchema, anotherSchemaCopiedText); athirdDefaultSchemaBuilder.create("copiedTextLengthMetadata").setType(NUMBER).defineDataEntry() .asCalculated(TextMetadataLengthCalculator.class); return this; } public static class TextMetadataLengthCalculator implements MetadataValueCalculator<Double> { LocalDependency<String> copiedTextDependency = LocalDependency.toAString("copiedTextMetadata").whichIsRequired(); @Override public Double calculate(CalculatorParameters parameters) { return (double) parameters.get(copiedTextDependency).length(); } @Override public Double getDefaultValue() { return 0.0; } @Override public MetadataValueType getReturnType() { return NUMBER; } @Override public List<? extends Dependency> getDependencies() { return Arrays.asList(copiedTextDependency); } @Override public boolean isMultiValue() { return false; } } public class ZeSchemaMetadatas extends TestsSchemasSetup.ZeSchemaMetadatas { public Metadata text() { return getMetadata(code() + "_text"); } } public class AnotherSchemaMetadatas extends TestsSchemasSetup.AnotherSchemaMetadatas { public Metadata copiedText() { return getMetadata(code() + "_copiedTextMetadata"); } public Metadata copiedTextLength() { return getMetadata(code() + "_copiedTextLengthMetadata"); } public Metadata referenceToZeSchema() { return getMetadata(code() + "_referenceToZeSchema"); } } public class ThirdSchemaMetadatas extends TestsSchemasSetup.ThirdSchemaMetadatas { public Metadata copiedText() { return getMetadata(code() + "_copiedTextMetadata"); } public Metadata copiedTextLength() { return getMetadata(code() + "_copiedTextLengthMetadata"); } public Metadata referenceToAnotherSchema() { return getMetadata(code() + "_referenceToAnotherSchema"); } } }