package com.constellio.app.modules.tasks.ui.components.breadcrumb; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.tasks.model.wrappers.Task; import com.constellio.app.modules.tasks.navigation.TaskViews; import com.constellio.app.modules.tasks.services.TasksSchemasRecordsServices; 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.util.SchemaCaptionUtils; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.User; public class TaskBreadcrumbTrailPresenter implements Serializable { private String recordId; private BreadcrumbTrail breadcrumbTrail; private transient SchemaPresenterUtils folderPresenterUtils; private transient TasksSchemasRecordsServices tasksSchemasRecordsServices; public TaskBreadcrumbTrailPresenter(String recordId, BreadcrumbTrail breadcrumbTrail) { this.recordId = recordId; this.breadcrumbTrail = breadcrumbTrail; initTransientObjects(); addBreadcrumbItems(); } private void addBreadcrumbItems() { List<BreadcrumbItem> breadcrumbItems = new ArrayList<>(); String currentRecordId = recordId; while (currentRecordId != null) { breadcrumbItems.add(0, new TaskBreadcrumbItem(currentRecordId)); Task task = tasksSchemasRecordsServices.getTask(currentRecordId); currentRecordId = task.getParentTask(); } 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(); String collection = sessionContext.getCurrentCollection(); folderPresenterUtils = new SchemaPresenterUtils(Folder.DEFAULT_SCHEMA, constellioFactories, sessionContext); tasksSchemasRecordsServices = new TasksSchemasRecordsServices(collection, constellioFactories.getAppLayerFactory()); } public boolean itemClicked(BreadcrumbItem item) { boolean handled; if (item instanceof TaskBreadcrumbItem) { handled = true; String taskId = ((TaskBreadcrumbItem) item).getTaskId(); breadcrumbTrail.navigate().to(TaskViews.class).displayTask(taskId); } else { handled = false; } return handled; } class TaskBreadcrumbItem implements BreadcrumbItem { private String itemTaskId; TaskBreadcrumbItem(String itemTaskId) { this.itemTaskId = itemTaskId; } public final String getTaskId() { return itemTaskId; } @Override public String getLabel() { return SchemaCaptionUtils.getCaptionForRecordId(itemTaskId); } @Override public boolean isEnabled() { boolean enabled; if (itemTaskId.equals(recordId)) { enabled = false; } else { Record record = folderPresenterUtils.getRecord(itemTaskId); User user = folderPresenterUtils.getCurrentUser(); enabled = user.hasReadAccess().on(record); } return enabled; } } }