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

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

/*******************************************************************************
* Copyright 2006 - 2014 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.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.List;

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

import org.richfaces.event.FileUploadEvent;
import org.richfaces.model.UploadedFile;
import org.slf4j.Logger;

import eu.scape_project.planning.exception.PlanningException;
import eu.scape_project.planning.manager.ByteStreamManager;
import eu.scape_project.planning.manager.DigitalObjectManager;
import eu.scape_project.planning.manager.StorageException;
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.plato.wf.AbstractWorkflowStep;
import eu.scape_project.planning.plato.wf.CreateExecutablePlan;
import eu.scape_project.planning.plato.wfview.AbstractView;
import eu.scape_project.planning.services.taverna.parser.TavernaParserException;
import eu.scape_project.planning.utils.Downloader;
import eu.scape_project.planning.utils.ParserException;
import eu.scape_project.planning.xml.C3POProfileParser;

/**
* View bean for step Create Executable Plan.
*/
@Named("createExecutablePlan")
@ConversationScoped
public class CreateExecutablePlanView extends AbstractView {
    private static final long serialVersionUID = 1L;

    @Inject
    private Logger log;

    @Inject
    private CreateExecutablePlan createExecutablePlan;

    @Inject
    private DigitalObjectManager digitalObjectManager;

    @Inject
    private Downloader downloader;

    @Inject
    private ByteStreamManager bytestreamManager;

    private List<String> collectionProfileElements;

    /**
     * Constructs a new view bean.
     */
    public CreateExecutablePlanView() {
        currentPlanState = PlanState.ANALYSED;
        name = "Create Executable Plan";
        viewUrl = "/plan/createexecutableplan.jsf";
        group = "menu.buildPreservationPlan";
    }

    @Override
    protected AbstractWorkflowStep getWfStep() {
        return createExecutablePlan;
    }
   
    @Override
    public void init(Plan plan) {
        super.init(plan);
        collectionProfileElements = null;       
    }   

    /**
     * Checks if a collection profile is defined for the plan.
     *
     * @return true if a collection profile is defined, false otherwise
     */
    public boolean isCollectionProfileDefined() {
        return plan.getSampleRecordsDefinition().getCollectionProfile().getProfile() != null
            && plan.getSampleRecordsDefinition().getCollectionProfile().getProfile().isDataExistent();
    }

    /**
     * Loads objects specified in the collection profile.
     */
    public void loadCollectionProfileElements() {
        DigitalObject profile = plan.getSampleRecordsDefinition().getCollectionProfile().getProfile();
        try {
            DigitalObject datafilledProfile = digitalObjectManager.getCopyOfDataFilledDigitalObject(profile);

            C3POProfileParser parser = new C3POProfileParser();
            parser.read(new ByteArrayInputStream(datafilledProfile.getData().getRealByteStream().getData()), false);

            collectionProfileElements = parser.getObjectIdentifiers();

            parser = null;
            datafilledProfile = null;
        } catch (StorageException e) {
            facesMessages.addError("Could not load collection profile. Please try again.");
        } catch (ParserException e) {
            facesMessages
                .addError("Could not parse collection profile. Please make sure the collection profile is valid.");
        }
    }

    /**
     * Copy the experiment workflow from the recommended alternative as to the
     * executable plan.
     */
    public void copyRecommendedExperimentWorkflow() {
        try {
            createExecutablePlan.copyRecommendedExperimentWorkflow();
            facesMessages.addInfo("Copied experiment workflow from recommended alternative : "
                + plan.getRecommendation().getAlternative().getName());
        } catch (PlanningException e) {
            facesMessages.addError("Could not use the workflow from the recommended alternative: " + e.getMessage()
                + ". Please try again.");
        }
    }

    /**
     * Uploads an executable plan and stores it.
     *
     * @param event
     *            the event containing the upload data
     */
    public void uploadT2flowExecutablePlan(final FileUploadEvent event) {
        UploadedFile item = event.getUploadedFile();
        String fileName = item.getName();
        log.debug("Executable plan file [{}] uploaded", fileName);

        if (!fileName.endsWith(".t2flow")) {
            log.warn("The uploaded file {} is not an t2flow file", fileName);
            facesMessages.addError("The uploaded file is not an t2flow. Please upload a valid Taverna t2flow file.");
            return;
        }

        try {
            createExecutablePlan.readT2flowExecutablePlan(item.getInputStream());
        } catch (TavernaParserException e) {
            log.warn("An error occurred during parsing: {}", e.getMessage());
            facesMessages.addError("There was a problem reading the plan: " + e.getMessage()
                + ". Please make sure you have selected a valid executable plan.");
        } catch (PlanningException e) {
            log.warn("An error occurred during storing the plan: {}", e.getMessage());
            facesMessages.addError("There was a problem reading the plan: " + e.getMessage() + ". Please try again.");
        } catch (IOException e) {
            log.warn("An error occurred while opening the input stream: {}", e.getMessage());
            facesMessages.addError("There was a problem reading the file. Please try again.");
        }
    }

    /**
     * Starts a download for the given digital object. Uses
     * {@link eu.scape_project.planning.util.Downloader} to perform the
     * download.
     *
     * @param object
     *            the object to download
     */
    public void download(final DigitalObject object) {
        File file = bytestreamManager.getTempFile(object.getPid());
        downloader.download(object, file);
    }

    /**
     * Initiates the generation of a preservation action plan.
     */

    public void generatePreservationActionPlan() {
        if (!isPapGenerationPossible()) {
            facesMessages
                .addError("Cannot generate Preservation Action Plan. Please add a collection profile and executable plan first.");
            return;
        }

        try {
            createExecutablePlan.generatePreservationActionPlan();
            facesMessages.addInfo("Preservation action plan generated.");
        } catch (PlanningException e) {
            log.warn("An error occured while generating the preservation action plan: {}", e.getMessage());
            facesMessages.addError("An error occured while generating the preservation ation plan: " + e.getMessage());
        }
    }

    /**
     * Checks if it is possible to generate a preservation action plan.
     *
     * @return true if possible, false otherwise
     */
    public boolean isPapGenerationPossible() {
        return plan.getExecutablePlanDefinition() != null
            && plan.getExecutablePlanDefinition().getT2flowExecutablePlan() != null
            && plan.getExecutablePlanDefinition().getT2flowExecutablePlan().isDataExistent()
            && plan.getSampleRecordsDefinition() != null
            && plan.getSampleRecordsDefinition().getCollectionProfile() != null
            && plan.getSampleRecordsDefinition().getCollectionProfile().getProfile() != null
            && plan.getSampleRecordsDefinition().getCollectionProfile().getProfile().isDataExistent();
    }

    // ---------------------- getters/setters --------------------
    public List<String> getCollectionProfileElements() {
        return collectionProfileElements;
    }

}
TOP

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

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.