Package eu.scape_project.planning.criteria.bean

Source Code of eu.scape_project.planning.criteria.bean.CriteriaSetsFullView

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

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletResponse;

import eu.scape_project.planning.criteria.bean.data.DiagramData;
import eu.scape_project.planning.criteria.bean.data.PotentialToRangeData;
import eu.scape_project.planning.model.kbrowser.CriteriaHierarchy;
import eu.scape_project.planning.model.kbrowser.CriteriaNode;
import eu.scape_project.planning.model.kbrowser.CriteriaTreeNode;

import org.richfaces.component.SortOrder;
import org.slf4j.Logger;

/**
* Session Bean implementation class CriteriaSetsSummaryView
*/
@Named("criteriaSetsFull")
@SessionScoped
public class CriteriaSetsFullView implements Serializable {

    private static final long serialVersionUID = 2718623204104697111L;

    @Inject
    private Logger log;

    @Inject
    private ManageCriteriaSets manageCriteriaSets;

    /**
     * Sort order for summary table
     */
    private SortOrder[] summaryTableSortOrder = {SortOrder.ascending, SortOrder.unsorted, SortOrder.unsorted,
        SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted,
        SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted,
        SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted, SortOrder.unsorted};

    /**
     * The currently selected criteria set.
     */
    private CriteriaHierarchy selectedCriteriaSet;

    @PostConstruct
    public void init() {
        manageCriteriaSets.loadCriteriaHierarchyDependentData();
    }

    public CriteriaHierarchy getSelectedCriteriaSet() {
        return selectedCriteriaSet;
    }

    public void setSelectedCriteriaSet(CriteriaHierarchy selectedCriteriaSet) {
        if (selectedCriteriaSet == null) {
            log.debug("setSelectedCriteriaSet: null");
        } else {

            log.debug("setSelectedCriteriaSet: " + selectedCriteriaSet.getId() + " - " + selectedCriteriaSet.getName());
        }
        this.selectedCriteriaSet = selectedCriteriaSet;
    }

    /**
     * Returns a data object that holds data that shows the relation of
     * potential to range for all structural nodes of the selected criteria set.
     *
     * @return The data object
     */
    public DiagramData getSelectedPotentialToRangeData() {

        // Check if criteria set is selected
        if (selectedCriteriaSet == null) {
            return null;
        }

        log.debug("Adding potential and range of node " + selectedCriteriaSet.getName());

        // Create data object
        PotentialToRangeData data = new PotentialToRangeData();
        // Title
        data.setTitle("Potential to Range of " + selectedCriteriaSet.getName());
        data.setSourcesTitle("Structural nodes");

        data.setFormatString("%.3f");

        // Label of series
        ArrayList<String> seriesLabels = new ArrayList<String>();
        seriesLabels.add("SIF4: Potential");
        seriesLabels.add("SIF6: Range");

        // Data lists for structural nodes
        ArrayList<String> sourceLabels = new ArrayList<String>();
        ArrayList<Double> potentialSeries = new ArrayList<Double>();
        ArrayList<Double> rangeSeries = new ArrayList<Double>();

        // Get root of tree
        CriteriaNode treeRoot = selectedCriteriaSet.getCriteriaTreeRoot();

        // Add data of root
        sourceLabels.add(treeRoot.getName());
        potentialSeries.add(treeRoot.getImportanceFactorSIF4());
        rangeSeries.add(treeRoot.getImportanceFactorSIF6());

        // Add data of other structural nodes
        for (CriteriaTreeNode criteriaTreeNode : treeRoot.getAllSuccessiveTreeNodes()) {
            if (criteriaTreeNode instanceof CriteriaNode) {
                CriteriaNode criteriaNode = (CriteriaNode) criteriaTreeNode;
                sourceLabels.add(criteriaNode.getName());
                potentialSeries.add(criteriaNode.getImportanceFactorSIF4());
                rangeSeries.add(criteriaNode.getImportanceFactorSIF6());
            }
        }

        // Set data
        data.setSeriesLabels(seriesLabels);
        data.setSourceLabels(sourceLabels);
        data.setPotentialSeries(potentialSeries);
        data.setRangeSeries(rangeSeries);

        return data;
    }

    public List<CriteriaHierarchy> getAllCriteriaSetsForSummary() {
        return manageCriteriaSets.getAllCriteriaHierarchies();
    }

    public SortOrder[] getSummaryTableSortOrder() {
        return summaryTableSortOrder;
    }

    public void setSummaryTableSortOrder(SortOrder[] summaryTableSortOrder) {
        this.summaryTableSortOrder = summaryTableSortOrder;
    }

    /**
     * Sets the sort order of the specified column in summary table.
     *
     * @param column
     *            Column index starting from 0.
     */
    public void sortSummaryTableByColumn(long lcolumn) {
        int column = (int) lcolumn;
        log.debug("Sorting Criterion Impact Factors by IF" + column);
        SortOrder currentColumn = summaryTableSortOrder[column];
        clearSummaryTableSortOrders();
        if (currentColumn.equals(SortOrder.descending)) {
            summaryTableSortOrder[column] = SortOrder.ascending;
        } else {
            summaryTableSortOrder[column] = SortOrder.descending;
        }
    }

    /**
     * Clears the sort orders for all columns of the summary table.
     */
    private void clearSummaryTableSortOrders() {
        for (int i = 0; i < summaryTableSortOrder.length; i++) {
            summaryTableSortOrder[i] = SortOrder.unsorted;
        }
    }

    /**
     * Export criteria sets summary to CSV.
     */
    public void exportCriteriaSetsFullToCSV() {
        String csvString = "";
        // Header
        csvString += "Name;size;SIF1;SIF2;SIF3;SIF4;SIF5;SIF6;SIF7;SIF8;SIF9;SIF10;SIF11;SIF12;SIF13;SIF14;SIF15;SIF16\n";

        // Assemble CSV-data
        for (CriteriaHierarchy criteriaHierarchy : manageCriteriaSets.getAllCriteriaHierarchies()) {
            csvString += criteriaHierarchy.getName() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getAllSuccessiveLeaves().size() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF1() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF2() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF3() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF4() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF5() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF6() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF7() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF8() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF9() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF10() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF11() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF12() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF13() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF14() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF15() + ";";
            csvString += criteriaHierarchy.getCriteriaTreeRoot().getStringFormattedImportanceFactorSIF16() + ";";
            csvString += "\n";
        }

        // Send CSV-file to browser
        byte[] csvByteStream = csvString.getBytes();
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext()
            .getResponse();
        response.setHeader("Content-disposition", "attachment; filename= CriteriaHierarchiesSummary.csv");
        response.setContentLength(csvString.length());
        response.setContentType("application/vnd.ms-excel");
        try {
            response.getOutputStream().write(csvByteStream);
            response.getOutputStream().flush();
            response.getOutputStream().close();
            context.responseComplete();
            log.debug("Exported CriteriaHierarchiesSummary successfully to CSV-File.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
TOP

Related Classes of eu.scape_project.planning.criteria.bean.CriteriaSetsFullView

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.