package com.constellio.app.ui.framework.data; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.entities.TaxonomyVO; import com.constellio.app.ui.framework.builders.TaxonomyToVOBuilder; import com.constellio.model.entities.Taxonomy; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.taxonomies.TaxonomiesManager; import com.constellio.model.services.users.UserServices; @SuppressWarnings("serial") public class TaxonomyVODataProvider extends AbstractDataProvider { private transient TaxonomiesManager taxonomiesManager; private transient List<TaxonomyVO> taxonomyVOs; private transient UserServices userServices; private TaxonomyToVOBuilder voBuilder; private String collection; private String username; public TaxonomyVODataProvider(TaxonomyToVOBuilder voBuilder, ModelLayerFactory modelLayerFactory, String collection, String username) { this.voBuilder = voBuilder; this.collection = collection; this.username = username; init(modelLayerFactory); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); ConstellioFactories constellioFactories = ConstellioFactories.getInstance(); init(constellioFactories.getModelLayerFactory()); } void init(ModelLayerFactory modelLayerFactory) { taxonomiesManager = modelLayerFactory.getTaxonomiesManager(); userServices = modelLayerFactory.newUserServices(); loadTaxonomiesVOs(); } void loadTaxonomiesVOs() { List<TaxonomyVO> newTaxonomyVOs = new ArrayList<>(); User user = userServices.getUserInCollection(username, collection); List<Taxonomy> taxonomies = taxonomiesManager.getAvailableTaxonomiesInHomePage(user); for (Taxonomy taxonomy : taxonomies) { TaxonomyVO taxonomyVO = voBuilder.build(taxonomy); newTaxonomyVOs.add(taxonomyVO); } sort(newTaxonomyVOs); setTaxonomyVOs(newTaxonomyVOs); } public void setTaxonomyVOs(List<TaxonomyVO> taxonomyVOs) { this.taxonomyVOs = taxonomyVOs; } public int size() { return taxonomyVOs.size(); } void sort(List<TaxonomyVO> taxonomyVOs) { Collections.sort(taxonomyVOs, new Comparator<TaxonomyVO>() { @Override public int compare(TaxonomyVO o1, TaxonomyVO o2) { return o1.getCode().toLowerCase().compareTo(o2.getCode().toLowerCase()); } }); } public List<TaxonomyVO> getTaxonomyVOs() { return taxonomyVOs; } public List<String> getTaxonomyVOsCodes() { List<String> codes = new ArrayList<>(); for (TaxonomyVO taxonomyVO : taxonomyVOs) { codes.add(taxonomyVO.getCode()); } return codes; } public List<String> getTaxonomyVOsTitles() { List<String> titles = new ArrayList<>(); for (TaxonomyVO taxonomyVO : taxonomyVOs) { titles.add(taxonomyVO.getTitle()); } return titles; } }