com.evolveum.midpoint.web.page.admin.workflow.PageProcessInstance.java Source code

Java tutorial

Introduction

Here is the source code for com.evolveum.midpoint.web.page.admin.workflow.PageProcessInstance.java

Source

/*
 * Copyright (c) 2010-2013 Evolveum
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.evolveum.midpoint.web.page.admin.workflow;

import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.server.PageTaskAdd;
import com.evolveum.midpoint.web.page.admin.users.PageAdminUsers;
import com.evolveum.midpoint.web.page.admin.workflow.dto.ProcessInstanceDto;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.WfProcessInstanceType;

import com.evolveum.midpoint.xml.ns.model.workflow.process_instance_state_3.ProcessInstanceState;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;

/**
 * @author lazyman
 * @author mserbak
 * @author mederly
 */
@PageDescriptor(url = "/admin/workItems/processInstance", encoder = OnePageParameterEncoder.class, action = {
        @AuthorizationAction(actionUri = PageAdminWorkItems.AUTH_WORK_ITEMS_ALL, label = PageAdminWorkItems.AUTH_WORK_ITEMS_ALL_LABEL, description = PageAdminWorkItems.AUTH_WORK_ITEMS_ALL_DESCRIPTION),
        @AuthorizationAction(actionUri = AuthorizationConstants.NS_AUTHORIZATION
                + "#workItemsProcessInstance", label = "PageProcessInstance.auth.workItemsProcessInstance.label", description = "PageProcessInstance.auth.workItemsProcessInstance.description") })
public class PageProcessInstance extends PageAdminWorkItems {

    private static final Trace LOGGER = TraceManager.getTrace(PageProcessInstance.class);
    private static final String DOT_CLASS = PageTaskAdd.class.getName() + ".";
    public static final String PARAM_PROCESS_INSTANCE_FINISHED = "processInstanceFinished"; // boolean value
    private static final String OPERATION_LOAD_TASK = DOT_CLASS + "loadProcessInstance";

    private static final String ID_PROCESS_INSTANCE_PANEL = "processInstancePanel";

    private IModel<ProcessInstanceDto> model;

    private PageParameters parameters;

    public PageProcessInstance() {
        this(new PageParameters(), null);
    }

    public PageProcessInstance(final PageParameters parameters, PageBase previousPage) {

        this.parameters = parameters;
        setPreviousPage(previousPage);

        model = new LoadableModel<ProcessInstanceDto>(false) {

            @Override
            protected ProcessInstanceDto load() {
                return loadProcessInstance();
            }
        };

        initLayout();
    }

    private ProcessInstanceDto loadProcessInstance() {
        OperationResult result = new OperationResult(OPERATION_LOAD_TASK);

        try {
            StringValue pid = parameters.get(OnePageParameterEncoder.PARAMETER);
            boolean finished = parameters.get(PARAM_PROCESS_INSTANCE_FINISHED).toBoolean();
            WfProcessInstanceType processInstance;
            try {
                processInstance = getWorkflowManager().getProcessInstanceById(pid.toString(), finished, true,
                        result);
            } catch (ObjectNotFoundException e) {
                if (finished == false) {
                    // maybe the process instance has finished in the meanwhile...
                    processInstance = getWorkflowManager().getProcessInstanceById(pid.toString(), true, true,
                            result);
                } else {
                    throw e;
                }
            }
            ProcessInstanceState processInstanceState = (ProcessInstanceState) processInstance.getState();
            String shadowTaskOid = processInstanceState.getShadowTaskOid();
            Task shadowTask = null;
            try {
                shadowTask = getTaskManager().getTask(shadowTaskOid, result);
            } catch (ObjectNotFoundException e) {
                // task is already deleted, no problem here
            }
            return new ProcessInstanceDto(processInstance, shadowTask);
        } catch (Exception ex) {
            result.recordFatalError("Couldn't get process instance information.", ex);
            showResult(result);
            getSession().error(getString("pageProcessInstance.message.cantGetDetails"));

            if (!result.isSuccess()) {
                showResultInSession(result);
            }
            throw getRestartResponseException(PageProcessInstancesAll.class);
        }
    }

    private void initLayout() {
        Form mainForm = new Form("mainForm");
        add(mainForm);

        ProcessInstancePanel processInstancePanel = new ProcessInstancePanel(ID_PROCESS_INSTANCE_PANEL, model);
        mainForm.add(processInstancePanel);

        initButtons(mainForm);
    }

    private void initButtons(final Form mainForm) {
        AjaxButton backButton = new AjaxButton("backButton",
                createStringResource("pageProcessInstance.button.back")) {

            @Override
            public void onClick(AjaxRequestTarget target) {
                goBack(PageProcessInstancesAll.class);
            }
        };
        mainForm.add(backButton);
    }

    @Override
    public PageBase reinitialize() {
        return new PageProcessInstance(parameters, getPreviousPage());
    }
}