/** * Copyright (C) 2012 BonitaSoft S.A. * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2.0 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.bonitasoft.console.client.admin.bpm.task.view; import static org.bonitasoft.web.toolkit.client.common.i18n.AbstractI18n._; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import org.bonitasoft.console.client.admin.bpm.accessor.IActivityAccessor; import org.bonitasoft.console.client.admin.bpm.cases.view.ArchivedCaseMoreDetailsAdminPage; import org.bonitasoft.console.client.admin.bpm.cases.view.CaseMoreDetailsAdminPage; import org.bonitasoft.console.client.common.component.snippet.CommentSectionSnippet; import org.bonitasoft.console.client.common.metadata.MetadataTaskBuilder; import org.bonitasoft.web.rest.model.bpm.flownode.ArchivedFlowNodeDefinition; import org.bonitasoft.web.rest.model.bpm.flownode.FlowNodeDefinition; import org.bonitasoft.web.rest.model.bpm.flownode.IActivityItem; import org.bonitasoft.web.rest.model.bpm.flownode.IFlowNodeItem; import org.bonitasoft.web.rest.model.bpm.flownode.IHumanTaskItem; import org.bonitasoft.web.toolkit.client.data.APIID; import org.bonitasoft.web.toolkit.client.data.item.attribute.reader.DescriptionAttributeReader; import org.bonitasoft.web.toolkit.client.data.item.attribute.reader.NameAttributeReader; import org.bonitasoft.web.toolkit.client.ui.RawView; import org.bonitasoft.web.toolkit.client.ui.action.ActionShowView; import org.bonitasoft.web.toolkit.client.ui.component.Button; import org.bonitasoft.web.toolkit.client.ui.component.Clickable; import org.bonitasoft.web.toolkit.client.ui.component.Section; import org.bonitasoft.web.toolkit.client.ui.page.ItemQuickDetailsPage.ItemDetailsMetadata; import org.bonitasoft.web.toolkit.client.ui.utils.DateFormat.FORMAT; /** * @author Vincent Elcrin * */ public class TaskQuickDetailsAdminPage extends ArchivableItemDetailsPage<IFlowNodeItem> { public final static String TOKEN = "taskquickdetailsadmin"; public static final List<String> PRIVILEGES = new ArrayList<String>(); static { PRIVILEGES.add(TaskListingAdminPage.TOKEN); } public TaskQuickDetailsAdminPage() { super(FlowNodeDefinition.get(), ArchivedFlowNodeDefinition.get()); } /** * Constructor which set archived parameter of the page. * * @param archived */ public TaskQuickDetailsAdminPage(final boolean archived) { this(); setArchive(archived); } @Override protected void defineTitle(final IFlowNodeItem flowNode) { setTitle(new NameAttributeReader().read(flowNode)); addDescription(new DescriptionAttributeReader().read(flowNode)); } @Override protected void buildToolbar(final IFlowNodeItem flowNode) { addToolbarLink(moreDetailsButton(flowNode.getId())); } private Clickable moreDetailsButton(final APIID id) { return new Button("btn-more", _("More"), _("Show more details about this task"), new ActionShowView(createMoreDetailsPage(id))); } private RawView createMoreDetailsPage(APIID id) { RawView page = getTaskMoreDetailsPage(); page.addParameter(PARAMETER_ITEM_ID, id.toString()); return page; } protected RawView getTaskMoreDetailsPage() { return new TaskMoreDetailsAdminPage(isArchived()); } @Override protected LinkedList<ItemDetailsMetadata> defineMetadatas(final IFlowNodeItem item) { final MetadataTaskBuilder metadatas = new MetadataTaskBuilder(); metadatas.addCaseId(item, getCaseMoreDetailsPage() , getArchivedCaseMoreDetailsPage()); metadatas.addDueDate(getArchivedDateFormat()); metadatas.addAppsName(); if (!(item.getRootContainerProcess().ensureName().equals(item.getProcess().ensureName()))){ metadatas.AddSubAppsName(); } metadatas.addType(); if (item.isHumanTask()) { metadatas.addAssignedTo(); } return metadatas.build(); } protected String getArchivedCaseMoreDetailsPage() { return ArchivedCaseMoreDetailsAdminPage.TOKEN; } protected String getCaseMoreDetailsPage() { return CaseMoreDetailsAdminPage.TOKEN; } protected FORMAT getArchivedDateFormat() { return isArchived() ? FORMAT.DISPLAY : FORMAT.DISPLAY_RELATIVE; } @Override protected void buildBody(final IFlowNodeItem item) { if (item.isActivity()) { addBody(getTaskTechnicalInformation(new IActivityAccessor(item))); } addBody(new CommentSectionSnippet(item.getCaseId()) .setNbLinesByPage(3) .build()); } protected Section getTaskTechnicalInformation(final IActivityAccessor activity) { if (activity.isArchived()) { return new ArchivedTaskTechnicalInformationSnippet(activity) .build(); } else { return new TaskTechnicalInformationSnippet(activity) .build(); } } @Override protected List<String> defineDeploys() { return Arrays.asList(IActivityItem.ATTRIBUTE_PROCESS_ID, IActivityItem.ATTRIBUTE_EXECUTED_BY_USER_ID, IFlowNodeItem.ATTRIBUTE_ROOT_CONTAINER_ID, IHumanTaskItem.ATTRIBUTE_ASSIGNED_USER_ID, IFlowNodeItem.ATTRIBUTE_EXECUTED_BY_SUBSTITUTE_USER_ID); } @Override public String defineToken() { return TOKEN; } }