package com.constellio.app.ui.pages.management.taxonomy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; 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.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder; import com.constellio.sdk.tests.TestRecord; import com.constellio.sdk.tests.schemas.SchemasSetup; import com.constellio.sdk.tests.setups.SchemaShortcuts; public class TaxonomyManagementViewAcceptTestSetup extends SchemasSetup { public static final String CLASSIFICATION = "classification"; public static final String CLASSIFICATION_COMPLEX = "classificationComplex"; public static final String CATEGORY = "category"; public static final String SUB_CATEGORY = "subCategory"; Category category = new Category(); SubCategory subCategory = new SubCategory(); private Map<String, Taxonomy> taxonomies; public TaxonomyManagementViewAcceptTestSetup(String collection) { super(collection); } @Override public void setUp() { MetadataSchemaTypeBuilder categoryType = typesBuilder.createNewSchemaType(CATEGORY); MetadataSchemaTypeBuilder subCategoryType = typesBuilder.createNewSchemaType(SUB_CATEGORY); setupClassificationTaxonomy(categoryType); setupClassificationComplexTaxonomy(categoryType, subCategoryType); Taxonomy classificationTaxonomy = Taxonomy.createPublic(CLASSIFICATION, "Classification Plan", collection, Arrays.asList("category")); Taxonomy classificationComplexTaxonomy = Taxonomy.createPublic(CLASSIFICATION_COMPLEX, "Classification Plan", collection, Arrays.asList("category", "subCategory")); taxonomies = new HashMap<>(); taxonomies.put(CLASSIFICATION, classificationTaxonomy); taxonomies.put(CLASSIFICATION_COMPLEX, classificationComplexTaxonomy); } public Taxonomy getClassificationTaxonomy() { return taxonomies.get(CLASSIFICATION); } public Taxonomy getClassificationComplexTaxonomy() { return taxonomies.get(CLASSIFICATION_COMPLEX); } private void setupClassificationTaxonomy(MetadataSchemaTypeBuilder categoryType) { categoryType.getDefaultSchema().create("parentCategory").defineChildOfRelationshipToType(categoryType); } private void setupClassificationComplexTaxonomy(MetadataSchemaTypeBuilder categoryType, MetadataSchemaTypeBuilder subCategoryType) { subCategoryType.getDefaultSchema().create("parentCategory").defineChildOfRelationshipToType(categoryType); subCategoryType.getDefaultSchema().create("parentSubCategory").defineChildOfRelationshipToType(subCategoryType); } public class Category implements SchemaShortcuts { public MetadataSchemaType type() { return get(CATEGORY); } @Override public String code() { return CATEGORY + "_default"; } @Override public String collection() { return collection; } @Override public MetadataSchema instance() { return getSchema(code()); } public Metadata title() { return getMetadata(code() + "_title"); } public String parentCategoryCode() { return code() + "_parentCategory"; } public Metadata parentCategory() { return getMetadata(parentCategoryCode()); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } } public class SubCategory implements SchemaShortcuts { public MetadataSchemaType type() { return get(SUB_CATEGORY); } @Override public String code() { return SUB_CATEGORY + "_default"; } @Override public String collection() { return collection; } @Override public MetadataSchema instance() { return getSchema(code()); } public Metadata title() { return getMetadata(code() + "_title"); } public String parentCategoryCode() { return code() + "_parentCategory"; } public String parentSubCategoryCode() { return code() + "_parentSubCategory"; } public Metadata parentCategory() { return getMetadata(parentCategoryCode()); } public Metadata parentSubCategory() { return getMetadata(parentSubCategoryCode()); } public Metadata path() { return getMetadata(code() + "_path"); } public Metadata parentpath() { return getMetadata(code() + "_parentpath"); } } public BaseClassificationRecords givenBaseClassificationRecords(RecordServices recordServices) { try { return new BaseClassificationRecords(recordServices); } catch (RecordServicesException e) { throw new RuntimeException(e); } } public BaseClassificationComplexRecords givenBaseClassificationComplexRecords(RecordServices recordServices) { try { return new BaseClassificationComplexRecords(recordServices); } catch (RecordServicesException e) { throw new RuntimeException(e); } } public class BaseClassificationRecords { public final Record category_A; public final Record category_A_1; public final Record category_A_2; public final Record category_B; public final Record category_B_1; public final Record category_B_11; public final Record category_B_12; public final Record category_C; List<Record> records = new ArrayList<>(); private RecordServices recordServices; private BaseClassificationRecords(RecordServices recordServices) throws RecordServicesException { this.recordServices = recordServices; Transaction transaction = new Transaction(); records.add(category_A = createCategory(transaction, "category_A", null)); records.add(category_A_1 = createCategory(transaction, "category_A_1", category_A)); records.add(category_A_2 = createCategory(transaction, "category_A_2", category_A)); records.add(category_B = createCategory(transaction, "category_B", null)); records.add(category_B_1 = createCategory(transaction, "category_B_1", category_B)); records.add(category_B_11 = createCategory(transaction, "category_B_11", category_B_1)); records.add(category_B_12 = createCategory(transaction, "category_B_12", category_B_1)); records.add(category_C = createCategory(transaction, "category_C", null)); recordServices.execute(transaction); } private Record createCategory(Transaction transaction, String id, Record parentCategory) { Record record = new TestRecord(category, id); record.set(category.title(), id); record.set(category.parentCategory(), parentCategory); transaction.addUpdate(record); return record; } } public class BaseClassificationComplexRecords { public final Record category_A; public final Record subCategory_SA1; public final Record subCategory_SA2; public final Record subCategory_SA2_1; public final Record category_A_1; public final Record category_A_2; public final Record category_B; public final Record category_B_1; public final Record category_C; List<Record> records = new ArrayList<>(); private RecordServices recordServices; private BaseClassificationComplexRecords(RecordServices recordServices) throws RecordServicesException { this.recordServices = recordServices; Transaction transaction = new Transaction(); records.add(category_A = createCategory(transaction, "category_A", null)); records.add(subCategory_SA1 = createSubCategory(transaction, "subCategory_SA1", category_A, null)); records.add(subCategory_SA2 = createSubCategory(transaction, "subCategory_SA2", category_A, null)); records.add(subCategory_SA2_1 = createSubCategory(transaction, "subCategory_SA2_1", null, subCategory_SA2)); records.add(category_A_1 = createCategory(transaction, "category_A_1", category_A)); records.add(category_A_2 = createCategory(transaction, "category_A_2", category_A)); records.add(category_B = createCategory(transaction, "category_B", null)); records.add(category_B_1 = createCategory(transaction, "category_B_1", category_B)); records.add(category_C = createCategory(transaction, "category_C", null)); recordServices.execute(transaction); } private Record createCategory(Transaction transaction, String id, Record parentCategory) { Record record = new TestRecord(category, id); record.set(category.title(), id); record.set(category.parentCategory(), parentCategory); transaction.addUpdate(record); return record; } private Record createSubCategory(Transaction transaction, String id, Record parentCategory, Record parentSubCategory) { Record record = new TestRecord(subCategory, id); record.set(subCategory.title(), id); record.set(subCategory.parentCategory(), parentCategory); record.set(subCategory.parentSubCategory(), parentSubCategory); transaction.addUpdate(record); return record; } } }