Package eu.scape_project.planning.plato.wfview.full

Source Code of eu.scape_project.planning.plato.wfview.full.ValidatePlanView

/*******************************************************************************
* Copyright 2006 - 2012 Vienna University of Technology,
* Department of Software Technology and Interactive Systems, IFS
*
* 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 eu.scape_project.planning.plato.wfview.full;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import eu.scape_project.planning.exception.PlanningException;
import eu.scape_project.planning.manager.ByteStreamManager;
import eu.scape_project.planning.model.Alternative;
import eu.scape_project.planning.model.DigitalObject;
import eu.scape_project.planning.model.Plan;
import eu.scape_project.planning.model.PlanState;
import eu.scape_project.planning.model.PolicyNode;
import eu.scape_project.planning.model.Trigger;
import eu.scape_project.planning.model.User;
import eu.scape_project.planning.model.aggregators.WeightedMultiplication;
import eu.scape_project.planning.model.aggregators.WeightedSum;
import eu.scape_project.planning.model.beans.ResultNode;
import eu.scape_project.planning.model.tree.Leaf;
import eu.scape_project.planning.model.tree.TreeNode;
import eu.scape_project.planning.plato.bean.TreeHelperBean;
import eu.scape_project.planning.plato.wf.AbstractWorkflowStep;
import eu.scape_project.planning.plato.wf.ValidatePlan;
import eu.scape_project.planning.plato.wfview.AbstractView;
import eu.scape_project.planning.plato.wfview.beans.ReportLeaf;
import eu.scape_project.planning.utils.Downloader;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.slf4j.Logger;

@Named("validatePlan")
@ConversationScoped
public class ValidatePlanView extends AbstractView {
    private static final long serialVersionUID = 8505584799409203390L;

    @Inject
    private Logger log;

    @Inject
    private User user;
    @Inject
    private ValidatePlan validatePlan;

    @Inject
    private Downloader downloader;
    @Inject
    private ByteStreamManager bytestreamManager;

    @Inject
    private TreeHelperBean policytreeHelper;
    @Inject
    private TreeHelperBean requirementstreeHelper;
    @Inject
    private TreeHelperBean resultstreeHelper;
   
   

    /**
     * Variable encapsulating the PolicyTree-Root in a list. This is required,
     * because <rich:treeModelRecursiveAdaptor> root variable requires a list to
     * work properly.
     */
    private List<PolicyNode> policyRoots;

    /**
     * Variable encapsulating the RequirementsTree-Root in a list. This is
     * required, because <rich:treeModelRecursiveAdaptor> root variable requires
     * a list to work properly.
     */
    private List<TreeNode> requirementsRoots;

    private String repositoryUsername;
    private String repositoryPassword;

    private boolean displayChangelogs;
    private boolean displayEvalTransform;
    // private boolean showAllAlternatives;
    /**
     * for display on the page.
     */
    private String planetsExecutablePlanPrettyFormat = "";

    private Map<Trigger, String> selectedTriggers;

    private Map<Trigger, String> reevalSelectedTriggers;

    private List<ReportLeaf> leafBeans;

    /**
     * Variable encapsulating the aggregated sum result tree-Root in a list.
     * This is required, because <rich:treeModelRecursiveAdaptor> root variable
     * requires a list to work properly.
     */
    private List<ResultNode> aggSumResultNodes;

    /**
     * Variable encapsulating the aggregated multiplication result tree-Root in
     * a list. This is required, because <rich:treeModelRecursiveAdaptor> root
     * variable requires a list to work properly.
     */
    private List<ResultNode> aggMultResultNodes;

    /**
     * Indicates whether there are knocked out alternatives present.
     */
    private boolean knockedoutAlternativePresent;

    /**
     * Indicates if all considered alternatives should be shown in the weighted
     * sum result tree.
     */
    private boolean showAllConsideredAlternativesForWeightedSum;

    /**
     * Alternatives showed in weighted sum result tree.
     */
    private List<Alternative> weightedSumResultTreeShownAlternatives;

    public ValidatePlanView() {
        currentPlanState = PlanState.PLAN_DEFINED;
        name = "Validate Plan";
        viewUrl = "/plan/validateplan.jsf";
        group = "menu.buildPreservationPlan";
        policyRoots = new ArrayList<PolicyNode>();
        requirementsRoots = new ArrayList<TreeNode>();
        leafBeans = new ArrayList<ReportLeaf>();
        acceptableAlternatives = new ArrayList<Alternative>();
        aggSumResultNodes = new ArrayList<ResultNode>();
        aggMultResultNodes = new ArrayList<ResultNode>();
        knockedoutAlternativePresent = true;
        showAllConsideredAlternativesForWeightedSum = false;
        weightedSumResultTreeShownAlternatives = new ArrayList<Alternative>();
    }

    public void init(Plan plan) {
        super.init(plan);

        log.debug("initialising validatePlan");

        planetsExecutablePlanPrettyFormat = "";

        leafBeans.clear();
        for (Leaf l : this.plan.getTree().getRoot().getAllLeaves()) {
            leafBeans.add(new ReportLeaf(l, plan.getAlternativesDefinition().getConsideredAlternatives()));
        }

        policyRoots.clear();
        if (plan.getProjectBasis().getPolicyTree() != null) {
            PolicyNode policyRoot = plan.getProjectBasis().getPolicyTree().getRoot();
            if (policyRoot != null) {
                policyRoots.add(policyRoot);
                policytreeHelper.expandAll(policyRoot);
            }
        }

        requirementsRoots.clear();
        if (plan.getTree() != null) {
            TreeNode requirementsRoot = plan.getTree().getRoot();
            if (requirementsRoot != null) {
                requirementsRoots.add(requirementsRoot);
                requirementstreeHelper.expandAll(requirementsRoot);
            }
        }
        acceptableAlternatives = plan.getAcceptableAlternatives();

        aggMultResultNodes.clear();
        aggMultResultNodes.add(new ResultNode(plan.getTree().getRoot(), new WeightedMultiplication(), plan
            .getAlternativesDefinition().getConsideredAlternatives()));

        knockedoutAlternativePresent = acceptableAlternatives.size() != plan.getAlternativesDefinition()
            .getConsideredAlternatives().size();
        showAllConsideredAlternativesForWeightedSum = false;
        weightedSumResultTreeShownAlternatives = acceptableAlternatives;

        aggSumResultNodes.clear();
        // calculate result nodes for all considered alternatives
        ResultNode sumResultNode = new ResultNode(plan.getTree().getRoot(), new WeightedSum(), plan
            .getAlternativesDefinition().getConsideredAlternatives());
        aggSumResultNodes.add(sumResultNode);

        planetsExecutablePlanPrettyFormat = formatExecutablePlan(plan.getExecutablePlanDefinition().getExecutablePlan());

        if (user.getUserGroup().getRepository() != null) {
            repositoryUsername = user.getUserGroup().getRepository().getUsername();
        }
    }

    public String getCurrentDate() {
        return SimpleDateFormat.getDateTimeInstance().format(new Date());
    }

    public boolean isDisplayChangelogs() {
        return displayChangelogs;
    }

    public void switchDisplayChangelogs() {
        displayChangelogs = !displayChangelogs;
    }

    // public void switchShowAllAlternatives() {
    // showAllAlternatives = !showAllAlternatives;
    // }

    public void switchDisplayEvalTransform() {
        displayEvalTransform = !displayEvalTransform;
    }

    public boolean isDisplayEvalTransform() {
        return displayEvalTransform;
    }

    /**
     * reads the executable preservation plan and formats it.
     *
     */
    private String formatExecutablePlan(String executablePlan) {

        if (executablePlan == null || "".equals(executablePlan)) {
            return "";
        }

        try {
            Document doc = DocumentHelper.parseText(executablePlan);

            StringWriter sw = new StringWriter();

            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setNewlines(true);
            format.setTrimText(true);
            format.setIndent("  ");
            format.setExpandEmptyElements(false);
            format.setNewLineAfterNTags(20);

            XMLWriter writer = new XMLWriter(sw, format);

            writer.write(doc);
            writer.close();

            return sw.toString();

        } catch (DocumentException e) {
            return "";
        } catch (IOException e) {
            return "";
        }
    }

    private List<Alternative> acceptableAlternatives = new ArrayList<Alternative>();

    // public boolean isShowAllAlternatives() {
    // return showAllAlternatives;
    // }

    public List<ReportLeaf> getLeafBeans() {
        return leafBeans;
    }

    public List<Alternative> getAcceptableAlternatives() {
        return acceptableAlternatives;
    }

    public String getPlanetsExecutablePlanPrettyFormat() {
        return planetsExecutablePlanPrettyFormat;
    }

    public Map<Trigger, String> getSelectedTriggers() {
        return selectedTriggers;
    }

    public Map<Trigger, String> getReevalSelectedTriggers() {
        return reevalSelectedTriggers;
    }

    public void approvePlan() {
        validatePlan.approvePlan();
    }

    public void revisePlan() {
        validatePlan.revisePlan();
    }

    public void deployPlan() {
        try {
            validatePlan.deployPlan(user.getUserGroup().getRepository().getUrl(), repositoryUsername, repositoryPassword);
            facesMessages.addInfo("Plan sucessfully deployed.");
        } catch (PlanningException e) {
            facesMessages.addError("There was an error deploying the plan: " + e.getMessage());
            log.error("There was an error deploying the plan", e);
        }
    }
   
    public void deployTriggers() {
        try {
            validatePlan.deployTriggers();
            facesMessages.addInfo("Triggers sucessfully deployed.");
        } catch (PlanningException e) {
            facesMessages.addError("There was an error deploying the triggers: " + e.getMessage());
            log.error("There was an error deploying the triggers", e);
        }
     
    }

    /**
     * Starts a download for the given digital object. Uses
     * {@link eu.scape_project.planning.util.Downloader} to perform the
     * download.
     */
    public void download(final DigitalObject object) {
        File file = bytestreamManager.getTempFile(object.getPid());
        if (file != null) {
            downloader.download(object, file);
        } else {
            log.error("Failed to retrieve object: " + object.getPid());
        }
    }

    @Override
    protected AbstractWorkflowStep getWfStep() {
        return validatePlan;
    }

    public TreeHelperBean getPolicytreeHelper() {
        return policytreeHelper;
    }

    public String getRepositoryUsername() {
        return repositoryUsername;
    }

    public void setRepositoryUsername(String repositoryUsername) {
        this.repositoryUsername = repositoryUsername;
    }

    public String getRepositoryPassword() {
        return repositoryPassword;
    }

    public void setRepositoryPassword(String repositoryPassword) {
        this.repositoryPassword = repositoryPassword;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    /**
     * Switches listed weighted sum alternatives between all considered and all
     * acceptable.
     */
    public void switchShowAllConsideredAlternativesForWeightedSum() {
        if (showAllConsideredAlternativesForWeightedSum) {
            weightedSumResultTreeShownAlternatives = plan.getAlternativesDefinition().getConsideredAlternatives();
        } else {
            weightedSumResultTreeShownAlternatives = acceptableAlternatives;
        }
    }

    public TreeHelperBean getRequirementstreeHelper() {
        return requirementstreeHelper;
    }

    public TreeHelperBean getResultstreeHelper() {
        return resultstreeHelper;
    }

    public List<TreeNode> getRequirementsRoots() {
        return requirementsRoots;
    }

    public List<PolicyNode> getPolicyRoots() {
        return policyRoots;
    }

    public List<ResultNode> getAggSumResultNodes() {
        return aggSumResultNodes;
    }

    public List<ResultNode> getAggMultResultNodes() {
        return aggMultResultNodes;
    }

    public boolean isKnockedoutAlternativePresent() {
        return knockedoutAlternativePresent;
    }

    public boolean isShowAllConsideredAlternativesForWeightedSum() {
        return showAllConsideredAlternativesForWeightedSum;
    }

    public void setShowAllConsideredAlternativesForWeightedSum(boolean showAllConsideredAlternativesForWeightedSum) {
        this.showAllConsideredAlternativesForWeightedSum = showAllConsideredAlternativesForWeightedSum;
    }

    public List<Alternative> getWeightedSumResultTreeShownAlternatives() {
        return weightedSumResultTreeShownAlternatives;
    }

}
TOP

Related Classes of eu.scape_project.planning.plato.wfview.full.ValidatePlanView

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.