package com.constellio.app.ui.framework.data; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import com.constellio.app.extensions.AppLayerCollectionExtensions; import com.constellio.app.modules.rm.wrappers.RetentionRule; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.entities.MetadataSchemaTypeVO; import com.constellio.app.ui.framework.builders.MetadataSchemaTypeToVOBuilder; import com.constellio.model.entities.Taxonomy; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.taxonomies.TaxonomiesManager; @SuppressWarnings("serial") public class SchemaTypeVODataProvider implements Serializable { transient MetadataSchemasManager schemasManager; transient TaxonomiesManager taxonomiesManager; transient List<MetadataSchemaTypeVO> schemaTypes; transient AppLayerCollectionExtensions extensions; MetadataSchemaTypeToVOBuilder voBuilder; String collection; public SchemaTypeVODataProvider(MetadataSchemaTypeToVOBuilder voBuilder, AppLayerFactory appLayerFactory, String collection) { this.voBuilder = voBuilder; this.collection = collection; init(appLayerFactory); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { ConstellioFactories constellioFactories = ConstellioFactories.getInstance(); init(constellioFactories.getAppLayerFactory()); } void init(AppLayerFactory appLayerFactory) { ModelLayerFactory modelLayerFactory = appLayerFactory.getModelLayerFactory(); schemasManager = modelLayerFactory.getMetadataSchemasManager(); taxonomiesManager = modelLayerFactory.getTaxonomiesManager(); extensions = appLayerFactory.getExtensions().forCollection(collection); schemaTypes = initSchemaTypes(); } public MetadataSchemaTypeVO getSchemaTypeVO(Integer index) { return schemaTypes.get(index); } public int size() { return schemaTypes.size(); } public List<Integer> list() { List<Integer> listInt = new ArrayList<>(); for (int i = 0; i < schemaTypes.size(); i++) { listInt.add(i); } return listInt; } public List<MetadataSchemaTypeVO> listSchemaTypeVO() { return schemaTypes; } public void sort(Object[] propertyId, boolean[] ascending) { final boolean asc = ascending[0]; Collections.sort(schemaTypes, new Comparator<MetadataSchemaTypeVO>() { @Override public int compare(MetadataSchemaTypeVO o1, MetadataSchemaTypeVO o2) { int result = o1.getLabel().compareTo(o2.getLabel()); return asc ? result : -result; } }); } private List<MetadataSchemaTypeVO> initSchemaTypes() { List<MetadataSchemaTypeVO> result = new ArrayList<>(); MetadataSchemaTypes types = schemasManager.getSchemaTypes(collection); if (types == null) { return result; } for (final MetadataSchemaType type : types.getSchemaTypes()) { boolean visible = false; Taxonomy taxonomy = taxonomiesManager.getTaxonomyFor(type.getCollection(), type.getCode()); if (taxonomy != null) { visible = true; } else if (type.hasSecurity() || type.getCode().startsWith("ddv")) { visible = true; } else if (type.getCode().equals(RetentionRule.SCHEMA_TYPE)) { visible = true; } visible = extensions.isSchemaTypeConfigurable(visible, type); if (visible && isAccepted(type)) { result.add(voBuilder.build(type)); } } return result; } protected boolean isAccepted(MetadataSchemaType type) { return true; } }