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