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

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

/*******************************************************************************
* 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.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.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.SampleObject;
import eu.scape_project.planning.model.SampleRecordsDefinition;
import eu.scape_project.planning.model.User;
import eu.scape_project.planning.model.tree.ObjectiveTree;
import eu.scape_project.planning.plato.wf.AbstractWorkflowStep;
import eu.scape_project.planning.plato.wf.DefineSampleObjects;
import eu.scape_project.planning.plato.wfview.AbstractView;
import eu.scape_project.planning.utils.CharacterisationReportGenerator;
import eu.scape_project.planning.utils.Downloader;
import eu.scape_project.planning.utils.FacesMessages;
import eu.scape_project.planning.utils.FileUtils;
import eu.scape_project.planning.utils.ParserException;

/**
* @author kraxner
*
*/
@Named("defineSampleRecords")
@ConversationScoped
public class DefineSampleRecordsView extends AbstractView {
    private static final long serialVersionUID = 1982741879942387660L;

    @Inject
    private Logger log;

    @Inject
    private DefineSampleObjects defineSamples;

    @Inject
    private ByteStreamManager bytestreamManager;

    @Inject
    private FacesMessages facesMessages;

    @Inject
    private Downloader downloader;

    @Inject
    private User user;

    private String sampleCharacterisationReportAsHTML;

    private String repositoryUsername;
    private String repositoryPassword;

    /**
     * this determines the behaviour of the remove-buttons on the pag (see
     * there) - to remove sample samples from the list
     */
    private int allowRemove = -1;

    public DefineSampleRecordsView() {
        currentPlanState = PlanState.BASIS_DEFINED;
        name = "Define Sample Objects";
        viewUrl = "/plan/definesamples.jsf";
        group = "menu.defineRequirements";
    }

    @Override
    public void init(final Plan plan) {
        super.init(plan);
        allowRemove = -1;
        repositoryUsername = user.getUserGroup().getRepository().getUsername();
    }

    protected boolean needsClearEm() {
        return true;
    }

    public List<SampleObject> getSamples() {
        List<SampleObject> samples = plan.getSampleRecordsDefinition().getRecords();
        if (samples.size() == 0) {
            return null;
        } else {
            return samples;
        }
    }

    public SampleRecordsDefinition getSampleRecordsDefintion() {
        return plan.getSampleRecordsDefinition();
    }

    /**
     * Uploads a file into a newly created sample sample and adds this sample to
     * the list in the project.
     *
     * @param event
     *            the file upload event
     */
    public void uploadSample(final FileUploadEvent event) {
        UploadedFile item = event.getUploadedFile();
        String fileName = item.getName();
        log.debug("Sample file {} uploaded", fileName);

        // try {
        try {
            defineSamples.addSample(fileName, item.getContentType(),
                FileUtils.inputStreamToBytes(item.getInputStream()));
        } catch (PlanningException e) {
            log.error("An error occurred while adding the sample to the plan", e);
            facesMessages.addError("An error occurred while adding the file to your plan");
        } catch (IOException e) {
            log.warn("An error occurred while opening the input stream", e);
            this.facesMessages.addError("An error occurred while reading the file. Please try again");
        }
        System.gc();
    }

    /**
     * Uploads a profile file and reads the profile into the plan.
     *
     * @param event
     *            the file upload event
     */
    public void uploadCollectionProfile(final FileUploadEvent event) {
        UploadedFile item = event.getUploadedFile();
        String fileName = item.getName();
        log.debug("Collection Profile file {} uploaded", fileName);

        if (!fileName.endsWith(".xml")) {
            log.warn("The uploaded file {} is not an xml file", fileName);
            facesMessages.addError("The uploaded file is not an xml");
            return;
        }

        try {
            this.defineSamples.readProfile(item.getInputStream(), repositoryUsername, repositoryPassword);
        } catch (ParserException e) {
            log.warn("An error occurred during parsing", e);
            this.facesMessages.addError("An error occurred while reading the uploaded profile: " + e.getMessage());
        } catch (PlanningException e) {
            log.warn("An error occurred during parsing", e);
            this.facesMessages.addError("An error occurred while reading the uploaded profile: " + e.getMessage());
        } catch (IOException e) {
            log.warn("An error occurred while opening the input stream", e);
            this.facesMessages.addError("An error occurred while reading the file. Please try again");
        }
    }

    /**
     * Adds a new sample to the list of sample samples in the project. This is a
     * sample sample without data.
     */
    public String newSample() {
        SampleObject newSample = new SampleObject("<add name>");

        plan.getSampleRecordsDefinition().addRecord(newSample);
        // this SampleRecordsDefinition has been changed
        plan.getSampleRecordsDefinition().touch();

        return null;
    }

    /**
     * Removes a sample from the list of samplerecords in the project AND also
     * removes all associated:
     * <ul>
     * <li>evaluation values contained in the tree</li>
     * <li>experiment results and their xcdl-files</li>
     * </ul>
     * - if there are any.
     */
    public String removeSample(final SampleObject sample) {
        log.info("Removing SampleObject from Plan: " + sample.getFullname());
        defineSamples.removeSample(sample);
        allowRemove = -1;
        return null;
    }

    public void characteriseFits(final SampleObject object) {
        defineSamples.characteriseFits(object);
    }

    /**
     * Generates characterisation report for selected sample object
     *
     * @param sampleObj
     *            Sample object to select.
     */
    public void generateCharacterisationReport(final SampleObject sampleObj) {
        CharacterisationReportGenerator reportGen = new CharacterisationReportGenerator();
        this.sampleCharacterisationReportAsHTML = reportGen.generateHTMLReport(sampleObj);
    }

    /**
     * checks if the sample contains evaluation values. If yes, the user should
     * be asked for confirmation before removing it. If not, the sample is
     * removed. *
     *
     * @see ObjectiveTree#hasValues(int[],Alternative)
     *
     * @return always returns null
     */
    public String askRemoveSample(final SampleObject sample) {
        if (defineSamples.hasDependetValues(sample)) {
            allowRemove = sample.getId();
        } else {
            removeSample(sample);
        }

        return null;
    }

    public int getAllowRemove() {
        return allowRemove;
    }

    /**
     * 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 defineSamples;
    }

    public String getSampleCharacterisationReportAsHTML() {
        return sampleCharacterisationReportAsHTML;
    }

    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;
    }
}
TOP

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

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.