Package eu.planets_project.pp.plato.action.fte

Source Code of eu.planets_project.pp.plato.action.fte.DefineRequirementsFastTrack

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

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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

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 org.xml.sax.SAXException;

import eu.planets_project.pp.plato.action.interfaces.IDefineSampleRecords;
import eu.planets_project.pp.plato.action.interfaces.IFastTrackDefineRequirements;
import eu.planets_project.pp.plato.action.interfaces.IFastTrackEvaluateAlternatives;
import eu.planets_project.pp.plato.action.interfaces.IIdentifyRequirements;
import eu.planets_project.pp.plato.action.interfaces.IProjectImport;
import eu.planets_project.pp.plato.action.interfaces.IWorkflowStep;
import eu.planets_project.pp.plato.action.project.LoadPlanAction;
import eu.planets_project.pp.plato.action.workflow.AbstractWorkflowStep;
import eu.planets_project.pp.plato.bean.FastTrackTemplate;
import eu.planets_project.pp.plato.bean.FastTrackTemplates;
import eu.planets_project.pp.plato.bean.TreeHelperBean;
import eu.planets_project.pp.plato.evaluation.MiniRED;
import eu.planets_project.pp.plato.model.PlanState;
import eu.planets_project.pp.plato.model.SampleObject;
import eu.planets_project.pp.plato.model.User;
import eu.planets_project.pp.plato.model.tree.Leaf;
import eu.planets_project.pp.plato.model.tree.ObjectiveTree;
import eu.planets_project.pp.plato.model.tree.TemplateTree;
import eu.planets_project.pp.plato.model.tree.TreeNode;
import eu.planets_project.pp.plato.util.PlatoLogger;
import eu.planets_project.pp.plato.validators.INodeValidator;
import eu.planets_project.pp.plato.xml.TreeLoader;

/**
* Action handler for the first step of Fast-track evaluation: Define requirements
* @author cbu
*/
@Stateful
@Scope(ScopeType.SESSION)
@Name("FTrequirements")
@Cache(org.jboss.ejb3.cache.NoPassivationCache.class)
public class DefineRequirementsFastTrack
extends AbstractWorkflowStep
implements IFastTrackDefineRequirements {
   
    private static final long serialVersionUID = -5840252761666399020L;
   
    private static final Log log = PlatoLogger.getLogger(DefineRequirementsFastTrack.class);
   
    @In
    EntityManager em;
   
    @In(create=true)
    private LoadPlanAction loadPlan;
   
    @In(create=true)
    IFastTrackEvaluateAlternatives FTevaluate;
   
    @In(create=true)
    IIdentifyRequirements identifyRequirements;
  
    @In(create=true)
    IDefineSampleRecords defineSampleRecords;
   
    @In (required=false)
    private User user;
   

   
   
    @Out(required = false)
    private List<FastTrackTemplate> fastTrackTemplateList = new ArrayList<FastTrackTemplate>();;
   
    @In(create = true)
    private FastTrackTemplates fastTrackTemplates;
   
    public DefineRequirementsFastTrack() {
        requiredPlanState = new Integer(PlanState.FTE_INITIALISED);
    }
   

    @Override
    protected void init() {
        defineSampleRecords.init();
       
        fastTrackTemplates.init();
    }
   
    public void startFastTrackEvaluation() {

    }
   
    /**
     * @see AbstractWorkflowStep#getWorkflowstepName()
     */
    @Override
    protected String getWorkflowstepName() {
        return "FTrequirements";
    }
   
    /**
     * @see AbstractWorkflowStep#getSuccessor()
     */
    @Override
    protected IWorkflowStep getSuccessor() {
        return FTevaluate;
    }
   
    @Override
    protected void doClearEm() {
        super.doClearEm();
    }
   
  
        @Override
        public String save() {
        log.debug("Persisting plan " + selectedPlan.getPlanProperties().getName());
        selectedPlan.touch();

        selectedPlan.getPlanProperties().setOpenHandle(1);
       
        // we have to set the plan properties id so 'Close Plan' can do an unlock
        loadPlan.setPlanPropertiesID(selectedPlan.getPlanProperties().getId());

        for (Leaf leaf : selectedPlan.getTree().getRoot().getAllLeaves()) {
            leaf.resetValues(selectedPlan.getAlternativesDefinition().getConsideredAlternatives());
        }
       
        defineSampleRecords.save();
        super.save();
        changed="";
        return null;
    }
   
    @Destroy
    @Remove
    public void destroy() {
    }

    @In(create=true)
    @Out
    private TreeHelperBean treeHelper;
   
    private List<TreeNode> nodesToDelete = new ArrayList<TreeNode>();
   
      
    private void resetTransformers(){
        TreeNode root = this.selectedPlan.getTree().getRoot();
        for (Leaf leaf : root.getAllLeaves()) {
            /*
             * maybe the scaletype is not set yet
             * -> leaf.setDefaultTransformer has to handle null-values itself
             */
            if ((leaf.getScale() == null) ||
                (leaf.getScale().isDirty())) {
                leaf.setDefaultTransformer();
            }
        }
    }

   
    /**
     * @see INodeValidator#validateNode(TreeNode, List, List)
     */
    public boolean validateNode(TreeNode node, List<String> errorMessages,
            List<TreeNode> nodes) {
        boolean isValid = node.isCompletelySpecified(errorMessages);
        if (!isValid) {
            nodes.add(node);
        }
        return isValid;
    }
   
    @In(create=true)
    private IProjectImport projectImport;
   
    public void useFastTrackTemplate() {
       
        if (fastTrackTemplates.getFastTrackTemplate() != null) {
            log.info(fastTrackTemplates.getFastTrackTemplate().getAbsolutePath());
        }

        File file = new File(fastTrackTemplates.getFastTrackTemplate().getAbsolutePath());
       
        List<TemplateTree> templates = null;
       
        try {
            FileInputStream fis;
            fis = new FileInputStream(file);

            byte[] data = new byte[(int)file.length()];

            fis.read(data);
            fis.close();
           
            templates = projectImport.importTemplates(data);
           
            if (templates.size() != 1) {
                FacesMessages.instance().add(FacesMessage.SEVERITY_ERROR, "Unable to load template.");
                return;
            }
           
            TreeNode newRoot = ((TreeNode)templates.get(0).getRoot()).clone();

            newRoot.touchAll(user.getUsername());

            //newtree.adjustScalesToMeasurements(MiniRED.getInstance().getMeasurementsDescriptor());
            newRoot.initWeights();
           
            nodesToDelete.add(selectedPlan.getTree().getRoot());
           
            selectedPlan.getTree().setRoot(newRoot);
           
      // setWeightsInitialized must be called so that initWeights does its work
            selectedPlan.getTree().setWeightsInitialized(false);
            // initWeights *must* be called because it amongst other things
            // sets the weight of the root node to 1.0. if that doesn't happed
            // the whole evaluation doesn't work.
            selectedPlan.getTree().initWeights();
            changed = "true";

        } catch (FileNotFoundException e) {
            log.error(e.getMessage(),e);
            FacesMessages.instance().add(FacesMessage.SEVERITY_ERROR, e.getMessage());
            return;
        } catch (IOException e) {
            log.error(e.getMessage(),e);
            FacesMessages.instance().add(FacesMessage.SEVERITY_ERROR, e.getMessage());
            return;
        } catch (SAXException e) {
            log.error(e.getMessage(),e);
        }
       
    }


    public boolean validate(boolean showValidationErrors) {
       
        boolean valid = defineSampleRecords.validate(showValidationErrors);
       
        return valid && identifyRequirements.validate(showValidationErrors);
    }
}
TOP

Related Classes of eu.planets_project.pp.plato.action.fte.DefineRequirementsFastTrack

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.