Package eu.planets_project.pp.plato.action.workflow

Source Code of eu.planets_project.pp.plato.action.workflow.DefineBasisAction

/*******************************************************************************
* Copyright (c) 2006-2010 Vienna University of Technology,
* Department of Software Technology and Interactive Systems
*
* All rights reserved. This program and the accompanying
* materials are made available under the terms of the
* Apache License, Version 2.0 which accompanies
* this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/

package eu.planets_project.pp.plato.action.workflow;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.faces.application.FacesMessage;

import org.apache.commons.logging.Log;
import org.jboss.annotation.ejb.cache.Cache;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.faces.FacesMessages;

import eu.planets_project.pp.plato.action.interfaces.IDefineBasis;
import eu.planets_project.pp.plato.action.interfaces.IDefineSampleRecords;
import eu.planets_project.pp.plato.action.interfaces.IWorkflowStep;
import eu.planets_project.pp.plato.model.DigitalObject;
import eu.planets_project.pp.plato.model.IChangesHandler;
import eu.planets_project.pp.plato.model.PlanState;
import eu.planets_project.pp.plato.model.PolicyNode;
import eu.planets_project.pp.plato.model.User;
import eu.planets_project.pp.plato.model.tree.PolicyTree;
import eu.planets_project.pp.plato.util.PlatoLogger;
import eu.planets_project.pp.plato.xml.TreeLoader;


/**
* Session bean for workflow step 'Define Basis'.
*
* @author Hannes Kulovits
*/
@Stateful
@Scope(ScopeType.SESSION)
@Name("defineBasis")
@Cache(org.jboss.ejb3.cache.NoPassivationCache.class)
public class DefineBasisAction extends AbstractWorkflowStep implements IDefineBasis {

    /**
     *
     */
    private static final long serialVersionUID = -846554402422116674L;

    private static final Log log = PlatoLogger.getLogger(DefineBasisAction.class);
   
    @In
    private User user;


    /**
     * 'Define Sample Records' is our successor. Need this for {@link #getSuccessor()}.
     */
    @In(create=true)
    private IDefineSampleRecords defineSampleRecords;

    @Out(required=false)
    private DigitalObject policyMindMap = new DigitalObject();

    /**
     * Initialize current project state.
     */
    public DefineBasisAction() {
        requiredPlanState = new Integer(PlanState.INITIALISED);
    }

    public void removePolicyTree() {
        selectedPlan.getProjectBasis().getPolicyTree().setRoot(null);
    }

    public String uploadPolicyMindMap() {

        if (policyMindMap == null) {
            return "";
        }
        PolicyTree newtree = null;
        try {
            InputStream istream = new ByteArrayInputStream(policyMindMap.getData().getData());

            newtree = new TreeLoader().loadFreeMindPolicyTree(istream);
        } catch (Exception e) {
            log.error(e.getMessage(),e);
        }

        if (newtree == null) {
            log.error("Cannot upload policy tree.");

            FacesMessages.instance().add(FacesMessage.SEVERITY_ERROR, "The uploaded file is not a valid Freemind mindmap. Maybe it is corrupted?");

            return null;
        }

        selectedPlan.getProjectBasis().getPolicyTree().setRoot(newtree.getRoot());

        return "";
    }


    /**
     * Initializes 'Define Basis' workflow step, at the moment just the triggers.
     *
     * @see AbstractWorkflowStep#init()
     */
    @Override
    protected void init() {

        // adopt organisational policies (if existent) if it's a new project. if user
        // removes policy tree, proceeds and comes back, don't adopt the policies again. we
        // ensure that by checking the plan state.
        if (selectedPlan.getState().getValue() == PlanState.INITIALISED
                && selectedPlan.getProjectBasis().getPolicyTree().getRoot() == null) {
           
            if (user.getOrganisation() != null
                    && user.getOrganisation().getPolicyTree() != null) {
               
                PolicyNode clone = user.getOrganisation().getPolicyTree().getRoot().clone();
               
                selectedPlan.getProjectBasis().getPolicyTree().setRoot(clone);
            }
           
        }
       
    }

    /**
     * @see AbstractWorkflowStep#getSuccessor()
     */
    @Override
    protected IWorkflowStep getSuccessor() {
        return defineSampleRecords;
    }

    /**
     * Write both project basis and project properties to database.
     * @see AbstractWorkflowStep#save()
     */
    @Override
    public String save() {
        /*
         // we clear the list of triggers ...
        selectedPlan.getProjectBasis().getTriggers().clear();


        // ... as the user can also deselect one. We then add the newly selected ones.
        for (TriggerChoice choice : triggers) {
            if (choice.isSelected()) {
                em.persist(em.merge(choice.getTrigger()));
                selectedPlan.getProjectBasis().getTriggers().put(choice.getTrigger(), choice.getComment());
            }
        }
*/

        // user is set in save()
        save(selectedPlan.getPlanProperties());
        save(selectedPlan.getProjectBasis());
        changed = "";

        return null;
    }

    /**
     * @see AbstractWorkflowStep#validate(boolean)
     */
    public boolean validate(boolean showValidationErrors) {
        return true;
    }

    /**
     * Obligatory EJB destroy method.
     */
    @Destroy
    @Remove
    public void destroy() {
    }

    /**
     * @see AbstractWorkflowStep#getWorkflowstepName()
     */
    @Override
    protected String getWorkflowstepName() {
        return "defineBasis";
    }

    /**
     * @see AbstractWorkflowStep#processChanges(IChangesHandler)
     */
    @Override
    protected void processChanges(IChangesHandler t){
        t.visit(selectedPlan.getProjectBasis());
        t.visit(selectedPlan.getPlanProperties());
    }

    public DigitalObject getPolicyMindMap() {
        return policyMindMap;
    }

    public void setPolicyMindMap(DigitalObject policyMindMap) {
        this.policyMindMap = policyMindMap;
    }

}
TOP

Related Classes of eu.planets_project.pp.plato.action.workflow.DefineBasisAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.