All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.net.bluesoft.casemanagement.ui.CaseViewBuilder Maven / Gradle / Ivy

The newest version!
package pl.net.bluesoft.casemanagement.ui;

import org.aperteworkflow.webapi.main.ui.AbstractViewBuilder;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import pl.net.bluesoft.casemanagement.model.*;
import pl.net.bluesoft.casemanagement.util.CaseProcessUtil;
import pl.net.bluesoft.rnd.processtool.model.IAttributesProvider;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.config.IStateWidget;
import pl.net.bluesoft.rnd.processtool.plugins.QueueBean;
import pl.net.bluesoft.rnd.processtool.web.domain.IHtmlTemplateProvider;

import java.util.*;


/**
 * Created by pkuciapski on 2014-04-28.
 */
public class CaseViewBuilder extends AbstractViewBuilder {
	private static CaseViewBuilderFactory factory;

	protected final Case caseInstance;

    protected CaseViewBuilder(Case caseInstance) {
        this.caseInstance = caseInstance;
    }

	public static void setFactory(CaseViewBuilderFactory factory) {
		CaseViewBuilder.factory = factory;
	}

	public static CaseViewBuilder create(Case caseInstance) {
		return factory != null ? factory.create(caseInstance) : new CaseViewBuilder(caseInstance);
	}

	@Override
	protected void buildWidgets(Document document, Element widgetsNode) {
		super.buildWidgets(document, widgetsNode);
	}

	@Override
    protected CaseViewBuilder getThis() {
        return this;
    }

    @Override
    protected boolean showGenericButtons() {
        return true;
    }

    @Override
    protected IAttributesProvider getViewedObject() {
        return this.caseInstance;
    }

    @Override
    protected void addSpecificHtmlWidgetData(final Map viewData, final IAttributesProvider viewedObject) {
        viewData.put(IHtmlTemplateProvider.CASE_PARAMETER, caseInstance);
    }

    @Override
    protected void buildAdditionalData(final Document document) {
        // no additional data to show for a case
    }

    @Override
    protected Set getQueueBeans()
    {
        return new HashSet();
    }

    @Override
    protected String getViewedObjectId() {
        return String.valueOf(caseInstance.getId());
    }

    @Override
    protected boolean isViewedObjectClosed() {
        return false;
    }

    @Override
    protected String getSaveButtonDescriptionKey() {
        return "case.management.button.save.desc";
    }

    @Override
    protected String getSaveButtonMessageKey() {
        return "case.management.button.save";
    }

    @Override
    protected String getCancelButtonMessageKey() {
        return "case.management.button.close";
    }

    @Override
    protected boolean isSubstitutingUser() {
        return false;
    }

    @Override
    protected String getActionsListHtmlId() {
        return "case-actions-list";
    }

    @Override
    protected String getSaveButtonHtmlId() {
        return "case-action-button-save";
    }

    @Override
    protected String getActionsGenericListHtmlId() {
        return "case-actions-generic-list";
    }

    @Override
    protected String getVaadinWidgetsHtmlId() {
        return "case-vaadin-widgets";
    }

    @Override
    protected String getCancelButtonClickFunction() {
        return "caseManagement.onCloseButton";
    }

    @Override
    protected String getCancelButtonHtmlId() {
        return "case-action-button-cancel";
    }

    @Override
    protected boolean isUserAssignedToViewedObject() {
        return true;
    }

    @Override
    protected boolean isUserCanPerformActions() {
		if (!hasCurrentStageEditPrivilege()) {
			return false;
		}

		List privileges = new ArrayList();
		privileges.add(CaseStateRole.PRIVILEGE_EDIT);

		CasePrivilegeHandlers.INSTANCE.handleEdit(caseInstance, user, privileges);

		return privileges.contains(CaseStateRole.PRIVILEGE_EDIT);
    }

    protected boolean hasUserPriviledgesToViewTask()
    {
        List privileges = new ArrayList();
        privileges.add(CaseStateRole.PRIVILEGE_VIEW);

        CasePrivilegeHandlers.INSTANCE.handleView(caseInstance, user, privileges);

        return privileges.contains(CaseStateRole.PRIVILEGE_VIEW);
    }

	private boolean hasCurrentStageEditPrivilege() {
		if (this.caseInstance.getCurrentStage() != null) {
			for (CaseStateRole role : this.caseInstance.getCurrentStage().getCaseStateDefinition().getRoles()) {
				if (CaseStateRole.PRIVILEGE_EDIT.equals(role.getPrivilegeName()) && (role.getRoleName().contains("*") || user.hasRole(role.getRoleName()))) {
					return true;
				}
			}
		}
		return false;
	}

	@Override
	protected Collection getPrivileges(IStateWidget widget) {
        Collection privileges = super.getPrivileges(widget);
        // if user has am EDIT privilege, it forces all widgets privileges to EDIT
        if (isUserCanPerformActions()) {
            privileges.add(CaseStateRole.PRIVILEGE_EDIT);
        }
		CasePrivilegeHandlers.INSTANCE.handleEdit(caseInstance, user, privileges);
        return privileges;
    }

	@Override
	protected void buildSpecificActionButtons(final Element specificActionButtons) {
        CaseStateDefinition currentState = caseInstance.getCurrentStage().getCaseStateDefinition();
        List sortedProcesses = CaseProcessUtil.getSortedProcessesByPriority(currentState.getProcesses());
        for(CaseStateProcess process : sortedProcesses) {
            String bId = "action-button-".concat(process.getBpmDefinitionKey());
            String bClass = process.getProcessActionType();
            String bIcon = process.getProcessIcon();
            String bTitle = process.getProcessLabel();
            String bAction = "caseManagement.startProcess(\""+caseInstance.getId()+"\",\""+process.getBpmDefinitionKey()+"\");";
            createButton(specificActionButtons, bId, bClass, bIcon, bTitle, bTitle, bAction);
        }
    }


	protected void createButton(Element parent, String actionButtonId, String buttonClass, String iconClass,
                              String messageKey, String descriptionKey, String clickFunction) {
        Element buttonNode = parent.ownerDocument().createElement("button")
                .attr("class", buttonClass != null ? "btn btn-" + buttonClass : "btn")
                .attr("disabled", "true")
                .attr("id", actionButtonId)
                .attr("data-toggle", "tooltip")
                .attr("data-placement", "bottom")
                .attr("title", i18Source.getMessage(descriptionKey));

        Element buttonIcon = parent.ownerDocument().createElement("span")
                .attr("class", iconClass != null ? "glyphicon glyphicon-" + iconClass : "glyphicon");

        parent.appendChild(buttonNode);
        buttonNode.appendChild(buttonIcon);

        buttonNode.appendText(i18Source.getMessage(messageKey));

        scriptBuilder.append("$('#").append(actionButtonId).append("').click(function() {").append(clickFunction).append("});");
        scriptBuilder.append("$('#").append(actionButtonId).append("').tooltip();");
    }

    @Override
    protected String getActionsSpecificListHtmlId() {
        return "case-actions-specific-list";
    }

    @Override
    protected String getSaveButtonClickFunction() {
        return "caseManagement.onSaveButton";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy