Package eu.planets_project.pp.plato.action.project

Source Code of eu.planets_project.pp.plato.action.project.NewProjectAction

/*******************************************************************************
* 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.project;

import java.io.Serializable;
import java.sql.Date;
import java.text.SimpleDateFormat;

import javax.persistence.EntityManager;

import org.apache.commons.logging.Log;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.RaiseEvent;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;

import eu.planets_project.pp.plato.action.interfaces.IDefineBasis;
import eu.planets_project.pp.plato.action.interfaces.IFastTrackDefineRequirements;
import eu.planets_project.pp.plato.bean.PrepareChangesForPersist;
import eu.planets_project.pp.plato.model.Plan;
import eu.planets_project.pp.plato.model.PlanState;
import eu.planets_project.pp.plato.model.User;
import eu.planets_project.pp.plato.model.tree.Node;
import eu.planets_project.pp.plato.model.tree.TreeNode;
import eu.planets_project.pp.plato.util.PlatoLogger;

/**
* Action for creating a new preservation plan.
*
* @author Hannes Kulovits
*/
@Name("newProject")
@Scope(ScopeType.SESSION)
public class NewProjectAction implements Serializable  {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private static final Log log = PlatoLogger.getLogger(NewProjectAction.class);

    @Out
    private Plan selectedPlan;

    @In
    EntityManager em;


    @In(required=false)
    @Out
    protected String changed = "";

    /**
     * Workflow step 'Load Plan'
     */
    @In(create=true)
    private LoadPlanAction loadPlan;

    @In(create = true)
    IDefineBasis defineBasis;
   
    @In(create = true)
    IFastTrackDefineRequirements FTrequirements;
   
   
    @In (required=false)
    private User user;

    public String createFTE() {
        createProject();
       
        // set Fast Track properties
        selectedPlan.getState().setValue(PlanState.FTE_INITIALISED);
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-kkmmss");
        String timestamp = format.format(new Date(System.currentTimeMillis()));
        String identificationCode = Plan.fastTrackEvaluationPrefix + timestamp;
        selectedPlan.getProjectBasis().setIdentificationCode(identificationCode);

        // load the selected project (and keep the id!)
        loadPlan.setPlanPropertiesID(selectedPlan.getPlanProperties().getId());
       
        // The outjection doesnt work here (since this is not an EJB),
        // so we set the member explicitly
        Contexts.getSessionContext().set("selectedPlan", selectedPlan);

        loadPlan.initializeProject(selectedPlan);
        FTrequirements.enter();
       
        return "success";
    }
   
    /**
     * Creates a new preservation plan and unlocks an already loaded project
     * if necessary. Default values for the created project are as follows:
     * <ul>
     * <li>The responsible planner ist set to the username of the logged in user.</li>
     * <li>The project is set to private and can thus only be opened by the creator.</li>
     * </ul>
     *
     * @return success if the project could be created successfully. success is the only
     *         return value.
     */
    public String createProject() {

        // unlock current project, if there is one
        loadPlan.unlockProject();

        selectedPlan = new Plan();
        selectedPlan.getPlanProperties().setAuthor(user.getFullName());
        selectedPlan.getPlanProperties().setPrivateProject(true);
        selectedPlan.getPlanProperties().setOwner(user.getUsername());

        // We have to prevent the user from navigating to the step 'Load plan'
        // because the user wouldn't be able to leave this step: Going to 'Define
        // Basis' is not possible as the project hasn't been saved so far.
        //
        // We 'activate' the changed flag so that the user is asked to either
        // save the project or discard changes.
        changed = "T";

        TreeNode root = new Node();
        root.setName("Root");
        selectedPlan.getTree().setRoot(root);

//        PolicyNode policyRoot = new PolicyNode();
//        policyRoot.setName("Policy");
//        selectedPlan.getProjectBasis().getPolicyTree().setRoot(policyRoot);

        return "success";
    }

    /**
     * Stores the user's input value in the database.
     * Also calls {@link eu.planets_project.pp.plato.model.ITouchable#touch()} on the
     * project.
     *
     * @return success if the project was saved successfully. success is the only return
     *         value.
     */
    @RaiseEvent("reload")
    public String saveProject() {
       String s = saveProject(PlanState.INITIALISED);
       // As 'New Plan' is not a workflow step as 'Define Basis' for instance, which
       // in code terms means it is not derived from AbstractWorkflowStep, we have to
       // call the enter method of the next workflow step (Define Basis) ourselves.
       // Otherwise method init of defineBasis would not be called!
       if (defineBasis != null) {
           defineBasis.enter();
       }
       return s;
    }
   
    public String saveFTE() {
        String s =  saveProject(PlanState.FTE_INITIALISED);
        FTrequirements.enter();
        changed="";
        return s;
    }
   
    public String saveProject(int state) {
        log.debug("Persisting plan " + selectedPlan.getPlanProperties().getName());
        selectedPlan.touch();

        selectedPlan.getState().setValue(state);
        selectedPlan.getPlanProperties().setOpenHandle(1);

        /** dont forget to prepare changed entities e.g. set current user */
        PrepareChangesForPersist prep = new PrepareChangesForPersist(user.getUsername());
        prep.prepare(selectedPlan);

        em.persist(selectedPlan);
        loadPlan.setPlanPropertiesID(selectedPlan.getPlanProperties().getId());

        return "success";       
    }
}
TOP

Related Classes of eu.planets_project.pp.plato.action.project.NewProjectAction

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.