package com.constellio.app.ui.framework.components.breadcrumb.taxonomy; import static com.constellio.model.services.records.RecordUtils.parentPaths; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.framework.components.breadcrumb.BreadcrumbItem; import com.constellio.app.ui.framework.components.breadcrumb.BreadcrumbTrail; import com.constellio.app.ui.pages.base.SchemaPresenterUtils; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.pages.management.taxonomy.TaxonomyPresentersService; import com.constellio.app.ui.util.SchemaCaptionUtils; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.taxonomies.TaxonomiesManager; public class TaxonomyBreadcrumbTrailPresenter implements Serializable { private String collection; private String taxonomyCode; private String conceptId; private BreadcrumbTrail breadcrumbTrail; private transient TaxonomiesManager taxonomiesManager; private transient SchemaPresenterUtils taxonomyPresenterUtils; public TaxonomyBreadcrumbTrailPresenter(String taxonomyCode, String conceptId, BreadcrumbTrail breadcrumbTrail) { this.taxonomyCode = taxonomyCode; this.conceptId = conceptId; this.breadcrumbTrail = breadcrumbTrail; collection = breadcrumbTrail.getSessionContext().getCurrentCollection(); initTransientObjects(); addBreadcrumbItems(); } private void addBreadcrumbItems() { List<BreadcrumbItem> breadcrumbItems = new ArrayList<>(); breadcrumbItems.add(new TaxonomyRootBreadcrumbItem()); String[] pathParts = ((String) parentPaths(taxonomyPresenterUtils.getRecord(conceptId)).get(0)).split("/"); for (int i = 0; i < pathParts.length; i++) { String pathPart = pathParts[i]; if (!taxonomyCode.equals(pathPart) && StringUtils.isNotBlank(pathPart)) { breadcrumbItems.add(new TaxonomyBreadcrumbItem(pathPart)); } } breadcrumbItems.add(new TaxonomyBreadcrumbItem(conceptId)); for (BreadcrumbItem breadcrumbItem : breadcrumbItems) { breadcrumbTrail.addItem(breadcrumbItem); } } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); initTransientObjects(); } private void initTransientObjects() { ConstellioFactories constellioFactories = breadcrumbTrail.getConstellioFactories(); SessionContext sessionContext = breadcrumbTrail.getSessionContext(); ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory(); taxonomiesManager = modelLayerFactory.getTaxonomiesManager(); RecordServices recordServices = modelLayerFactory.newRecordServices(); String schema = recordServices.getDocumentById(conceptId).getSchemaCode(); taxonomyPresenterUtils = new SchemaPresenterUtils(schema, constellioFactories, sessionContext); } public boolean itemClicked(BreadcrumbItem item) { boolean handled; if (item instanceof TaxonomyBreadcrumbItem) { handled = true; String conceptId = ((TaxonomyBreadcrumbItem) item).getConceptId(); breadcrumbTrail.navigate().to().taxonomyManagement(taxonomyCode, conceptId); } else if (item instanceof TaxonomyRootBreadcrumbItem) { handled = true; breadcrumbTrail.navigate().to().taxonomyManagement(taxonomyCode); } else { handled = false; } return handled; } class TaxonomyBreadcrumbItem implements BreadcrumbItem { private String conceptId; TaxonomyBreadcrumbItem(String conceptId) { this.conceptId = conceptId; } public final String getConceptId() { return conceptId; } @Override public String getLabel() { return SchemaCaptionUtils.getCaptionForRecordId(conceptId); } @Override public boolean isEnabled() { boolean enabled; TaxonomyPresentersService taxonomyPresentersService = new TaxonomyPresentersService( breadcrumbTrail.getConstellioFactories().getAppLayerFactory()); if (conceptId.equals(TaxonomyBreadcrumbTrailPresenter.this.conceptId)) { enabled = false; } else { User user = taxonomyPresenterUtils.getCurrentUser(); enabled = taxonomyPresentersService.canManage(taxonomyCode, user); } return enabled; } } class TaxonomyRootBreadcrumbItem implements BreadcrumbItem { @Override public String getLabel() { return taxonomiesManager.getEnabledTaxonomyWithCode(collection, taxonomyCode).getTitle(); } @Override public boolean isEnabled() { return true; } } }