package com.constellio.sdk.tests.setups; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Collections; import java.util.List; import com.constellio.model.entities.Taxonomy; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; 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.services.records.RecordProvider; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.schemas.builders.CommonMetadataBuilder; import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder; import com.constellio.sdk.tests.TestRecord; import com.constellio.sdk.tests.schemas.SchemasSetup; /** * This schema setup can be used to test multiple taxonomy behaviors : * * Taxonomy 1 : * - composed of two types, folders can only be added in the second type, * - the second type can be child of the first type or second type, but not both (a validation should be done) * * Taxonomy 2 : * - composed of one type, but folders can only be added in the custom type * - Folders can have multiple values of taxonomy2 * * Folders : * - can contains other folders and documents * */ public class TwoTaxonomiesContainingFolderAndDocumentsSetup extends SchemasSetup { Taxonomy1FirstSchemaType taxonomy1FirstSchemaType = new Taxonomy1FirstSchemaType(); Taxonomy1SecondSchemaType taxonomy1SecondSchemaType = new Taxonomy1SecondSchemaType(); Taxonomy2DefaultSchema taxonomy2DefaultSchema = new Taxonomy2DefaultSchema(); Taxonomy2CustomSchema taxonomy2CustomSchema = new Taxonomy2CustomSchema(); UserSchema userSchema = new UserSchema(); FolderSchema folderSchema; DocumentSchema documentSchema; private List<Taxonomy> taxonomies; private Taxonomy taxo1; private Taxonomy taxo2; public TwoTaxonomiesContainingFolderAndDocumentsSetup(String collection) { super(collection); } public List<Taxonomy> getTaxonomies() { return Collections.unmodifiableList(taxonomies); } public Taxonomy getTaxo1() { return taxo1; } public Taxonomy getTaxo2() { return taxo2; } public UserSchema getUserSchema() { return userSchema; } @Override public void setUp() { MetadataSchemaTypeBuilder taxo1Type1 = typesBuilder.createNewSchemaType("taxo1Type1"); MetadataSchemaTypeBuilder taxo1Type2 = typesBuilder.createNewSchemaType("taxo1Type2"); MetadataSchemaTypeBuilder taxo2Type = typesBuilder.createNewSchemaType("taxo2Type"); MetadataSchemaTypeBuilder folderType = typesBuilder.createNewSchemaType("folder"); MetadataSchemaTypeBuilder documentType = typesBuilder.createNewSchemaType("document"); setupTaxonomy1(taxo1Type1, taxo1Type2); setupTaxonomy2(taxo2Type); setupFolderType(folderType, taxo1Type2, taxo2Type); setupDocumentType(documentType, folderType); taxo1 = Taxonomy.createPublic("taxo1", "taxo1", collection, Arrays.asList("taxo1Type1", "taxo1Type2")); taxo2 = Taxonomy.createPublic("taxo2", "taxo2", collection, Arrays.asList("taxo2Type")); taxonomies = Arrays.asList(taxo1, taxo2); } private void setupFolderType(MetadataSchemaTypeBuilder folderType, MetadataSchemaTypeBuilder taxo1Type2, MetadataSchemaTypeBuilder taxo2Type) { folderType.getDefaultSchema().create("parent").defineChildOfRelationshipToType(folderType); folderType.getDefaultSchema().create("taxonomy1").defineTaxonomyRelationshipToType(taxo1Type2); folderType.getDefaultSchema().create("taxonomy2").setMultivalue(true).defineTaxonomyRelationshipToSchemas( taxo2Type.getCustomSchema("custom")); folderType.getDefaultSchema().create("conceptReferenceWithoutTaxonomyRelationship").defineReferencesTo(taxo1Type2); } private void setupDocumentType(MetadataSchemaTypeBuilder documentType, MetadataSchemaTypeBuilder folderType) { documentType.getDefaultSchema().create("parent").defineChildOfRelationshipToType(folderType); } private void setupTaxonomy1(MetadataSchemaTypeBuilder taxo1Type1, MetadataSchemaTypeBuilder taxo1Type2) { taxo1Type1.getDefaultSchema().create("parent").defineChildOfRelationshipToType(taxo1Type1); taxo1Type2.getDefaultSchema().create("parentOfType1").defineChildOfRelationshipToType(taxo1Type1); taxo1Type2.getDefaultSchema().create("parentOfType2").defineChildOfRelationshipToType(taxo1Type2); } private void setupTaxonomy2(MetadataSchemaTypeBuilder taxo2Type) { taxo2Type.getDefaultSchema().create("parent").defineChildOfRelationshipToType(taxo2Type); taxo2Type.createCustomSchema("custom"); } public String getCollection() { return collection; } public TaxonomyRecords givenTaxonomyRecords(RecordServices recordServices) { try { return new TaxonomyRecords(recordServices); } catch (RecordServicesException e) { throw new RuntimeException(e); } } public class UserSchema implements SchemaShortcuts { public MetadataSchemaType type() { return get("user"); } public String code() { return "user_default"; } public String collection() { return "zeCollection"; } @Override public MetadataSchema instance() { return getSchema(code()); } public Metadata username() { return getMetadata(code() + "_username"); } public Metadata groups() { return getMetadata(code() + "_groups"); } } public class Taxonomy1FirstSchemaType implements SchemaShortcuts { public MetadataSchemaType type() { return get("taxo1Type1"); } public String code() { return "taxo1Type1_default"; } public MetadataSchema instance() { return getSchema(code()); } public String collection() { return getCollection(); } public Metadata title() { return getMetadata(code() + "_title"); } public String parentCode() { return code() + "_parent"; } public Metadata parent() { return getMetadata(parentCode()); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata allAuthorizations() { return getMetadata(code() + "_allauthorizations"); } public Metadata inheritedAuthorizations() { return getMetadata(code() + "_inheritedauthorizations"); } } public class Taxonomy1SecondSchemaType implements SchemaShortcuts { public MetadataSchemaType type() { return get("taxo1Type2"); } public String code() { return "taxo1Type2_default"; } public MetadataSchema instance() { return getSchema(code()); } public String collection() { return getCollection(); } public Metadata title() { return getMetadata(code() + "_title"); } public String parentOfType1Code() { return code() + "_parentOfType1"; } public String parentOfType2Code() { return code() + "_parentOfType2"; } public Metadata parentOfType1() { return getMetadata(parentOfType1Code()); } public Metadata parentOfType2() { return getMetadata(parentOfType2Code()); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata allAuthorizations() { return getMetadata(code() + "_allauthorizations"); } public Metadata inheritedAuthorizations() { return getMetadata(code() + "_inheritedauthorizations"); } public Metadata allRemovedAuths() { return getMetadata(code() + "_" + CommonMetadataBuilder.ALL_REMOVED_AUTHS); } } public class Taxonomy2DefaultSchema implements SchemaShortcuts { public MetadataSchemaType type() { return get("taxo2Type"); } public String code() { return "taxo2Type_default"; } public MetadataSchema instance() { return getSchema(code()); } public String collection() { return getCollection(); } public Metadata title() { return getMetadata(code() + "_title"); } public String parentCode() { return code() + "_parent"; } public Metadata parent() { return getMetadata(parentCode()); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata allAuthorizations() { return getMetadata(code() + "_allauthorizations"); } public Metadata inheritedAuthorizations() { return getMetadata(code() + "_inheritedauthorizations"); } } public class Taxonomy2CustomSchema implements SchemaShortcuts { public MetadataSchemaType type() { return get("taxo2Type"); } public String code() { return "taxo2Type_custom"; } public MetadataSchema instance() { return getSchema(code()); } public String collection() { return getCollection(); } public Metadata title() { return getMetadata(code() + "_title"); } public Metadata parent() { return getMetadata(code() + "_parent"); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata allAuthorizations() { return getMetadata(code() + "_allauthorizations"); } public Metadata inheritedAuthorizations() { return getMetadata(code() + "_inheritedauthorizations"); } } public class CollectionSchema implements SchemaShortcuts { public MetadataSchemaType type() { return get("collection"); } public String code() { return "collection_default"; } public MetadataSchema instance() { return getSchema(code()); } public String collection() { return getCollection(); } public Metadata parent() { return getMetadata(code() + "_parent"); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata allAuthorizations() { return getMetadata(code() + "_allauthorizations"); } public Metadata inheritedAuthorizations() { return getMetadata(code() + "_inheritedauthorizations"); } } public class FolderSchema implements SchemaShortcuts { public MetadataSchemaType type() { return get("folder"); } public String code() { return "folder_default"; } public String collection() { return getCollection(); } public MetadataSchema instance() { return getSchema(code()); } public Metadata title() { return getMetadata(code() + "_title"); } public Metadata parent() { return getMetadata(code() + "_parent"); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata allAuthorizations() { return getMetadata(code() + "_allauthorizations"); } public Metadata inheritedAuthorizations() { return getMetadata(code() + "_inheritedauthorizations"); } public Metadata allRemovedAuths() { return getMetadata(code() + "_" + CommonMetadataBuilder.ALL_REMOVED_AUTHS); } public Metadata attachedAncestors() { return getMetadata(code() + "_" + CommonMetadataBuilder.ATTACHED_ANCESTORS); } public Metadata taxonomy1() { return getMetadata(code() + "_taxonomy1"); } public Metadata taxonomy2() { return getMetadata(code() + "_taxonomy2"); } public Metadata conceptReferenceWithoutTaxonomyRelationship() { return getMetadata(code() + "_conceptReferenceWithoutTaxonomyRelationship"); } } public class DocumentSchema implements SchemaShortcuts { public MetadataSchemaType type() { return get("document"); } public String code() { return "document_default"; } public MetadataSchema instance() { return getSchema(code()); } public String collection() { return getCollection(); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } public Metadata allAuthorizations() { return getMetadata(code() + "_allauthorizations"); } public Metadata inheritedAuthorizations() { return getMetadata(code() + "_inheritedauthorizations"); } public Metadata attachedAncestors() { return getMetadata(code() + "_attachedAncestors"); } public Metadata title() { return getMetadata(code() + "_title"); } public Metadata parent() { return getMetadata(code() + "_parent"); } } public class TaxonomyRecords { public final TestRecord taxo1_firstTypeItem1; public final TestRecord taxo1_firstTypeItem2; public final TestRecord taxo1_firstTypeItem2_firstTypeItem1; public final TestRecord taxo1_firstTypeItem2_firstTypeItem2; public final TestRecord taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem1; public final TestRecord taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2; public final TestRecord taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem1; public final TestRecord taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem2; public final TestRecord taxo1_firstTypeItem2_secondTypeItem1; public final TestRecord taxo1_firstTypeItem2_secondTypeItem2; public final TestRecord taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem1; public final TestRecord taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem2; public final TestRecord taxo2_defaultSchemaItem1; public final TestRecord taxo2_defaultSchemaItem2; public final TestRecord taxo2_defaultSchemaItem2_defaultSchemaItem1; public final TestRecord taxo2_defaultSchemaItem2_defaultSchemaItem2; public final TestRecord taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem1; public final TestRecord taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem2; public final TestRecord taxo2_defaultSchemaItem2_customSchemaItem1; public final TestRecord taxo2_defaultSchemaItem2_customSchemaItem2; private RecordServices recordServices; private TaxonomyRecords(RecordServices recordServices) throws RecordServicesException { this.recordServices = recordServices; Transaction transaction = new Transaction(); taxo1_firstTypeItem1 = addTaxo1FirstTypeRecord(transaction, "taxo1_firstTypeItem1", null); taxo1_firstTypeItem2 = addTaxo1FirstTypeRecord(transaction, "taxo1_firstTypeItem2", null); taxo1_firstTypeItem2_firstTypeItem1 = addTaxo1FirstTypeRecord(transaction, "taxo1_firstTypeItem2_firstTypeItem1", taxo1_firstTypeItem2); taxo1_firstTypeItem2_firstTypeItem2 = addTaxo1FirstTypeRecord(transaction, "taxo1_firstTypeItem2_firstTypeItem2", taxo1_firstTypeItem2); taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem1 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem1", taxo1_firstTypeItem2_firstTypeItem2, null); taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2", taxo1_firstTypeItem2_firstTypeItem2, null); taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem1 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem1", null, taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2); taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem2 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem2", null, taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2); taxo1_firstTypeItem2_secondTypeItem1 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_secondTypeItem1", taxo1_firstTypeItem2, null); taxo1_firstTypeItem2_secondTypeItem2 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_secondTypeItem2", taxo1_firstTypeItem2, null); taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem1 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem1", null, taxo1_firstTypeItem2_secondTypeItem2); taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem2 = addTaxo1SecondTypeRecord(transaction, "taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem2", null, taxo1_firstTypeItem2_secondTypeItem2); taxo2_defaultSchemaItem1 = addTaxo2DefaultSchema(transaction, "taxo2_defaultSchemaItem1", null); taxo2_defaultSchemaItem2 = addTaxo2DefaultSchema(transaction, "taxo2_defaultSchemaItem2", null); taxo2_defaultSchemaItem2_defaultSchemaItem1 = addTaxo2DefaultSchema(transaction, "taxo2_defaultSchemaItem2_defaultSchemaItem1", taxo2_defaultSchemaItem2); taxo2_defaultSchemaItem2_defaultSchemaItem2 = addTaxo2DefaultSchema(transaction, "taxo2_defaultSchemaItem2_defaultSchemaItem2", taxo2_defaultSchemaItem2); taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem1 = addTaxo2CustomSchema(transaction, "taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem1", taxo2_defaultSchemaItem2_defaultSchemaItem2); taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem2 = addTaxo2CustomSchema(transaction, "taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem2", taxo2_defaultSchemaItem2_defaultSchemaItem2); taxo2_defaultSchemaItem2_customSchemaItem1 = addTaxo2CustomSchema(transaction, "taxo2_defaultSchemaItem2_customSchemaItem1", taxo2_defaultSchemaItem2); taxo2_defaultSchemaItem2_customSchemaItem2 = addTaxo2CustomSchema(transaction, "taxo2_defaultSchemaItem2_customSchemaItem2", taxo2_defaultSchemaItem2); recordServices.execute(transaction); } private TestRecord addTaxo1FirstTypeRecord(Transaction transaction, String id, Record parent) { TestRecord record = new TestRecord(taxonomy1FirstSchemaType, collection + "_" + id); record.set(taxonomy1FirstSchemaType.title(), id); record.set(taxonomy1FirstSchemaType.parent(), parent); transaction.addUpdate(record); return record; } private TestRecord addTaxo1SecondTypeRecord(Transaction transaction, String id, Record firstTypeParent, TestRecord secondTypeParent) { TestRecord record = new TestRecord(taxonomy1SecondSchemaType, collection + "_" + id); record.set(taxonomy1SecondSchemaType.title(), id); record.set(taxonomy1SecondSchemaType.parentOfType1(), firstTypeParent); record.set(taxonomy1SecondSchemaType.parentOfType2(), secondTypeParent); transaction.addUpdate(record); return record; } private TestRecord addTaxo2DefaultSchema(Transaction transaction, String id, Record parent) { TestRecord record = new TestRecord(taxonomy2DefaultSchema, collection + "_" + id); record.set(taxonomy2DefaultSchema.title(), id); record.set(taxonomy2DefaultSchema.parent(), parent); transaction.addUpdate(record); return record; } private TestRecord addTaxo2CustomSchema(Transaction transaction, String id, Record parent) { TestRecord record = new TestRecord(taxonomy2CustomSchema, collection + "_" + id); record.set(taxonomy2CustomSchema.title(), id); record.set(taxonomy2CustomSchema.parent(), parent); transaction.addUpdate(record); return record; } public void mockRecordProviderToReturnRecordsById(RecordProvider recordProvider) { mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_firstTypeItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_firstTypeItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_firstTypeItem2_secondTypeItem2_secondTypeItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_secondTypeItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_secondTypeItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo1_firstTypeItem2_secondTypeItem2_secondTypeItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem2_defaultSchemaItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem2_defaultSchemaItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem2_defaultSchemaItem2_customSchemaItem2); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem2_customSchemaItem1); mockRecordProviderToReturnRecordById(recordProvider, taxo2_defaultSchemaItem2_customSchemaItem2); } public void mockRecordProviderToReturnRecordById(RecordProvider recordProvider, Record record) { when(recordProvider.getRecord(record.getId())).thenReturn(record); } } }