@Override public String importQuestionnareOds(String filename, String questionnaireName) throws Exception { SpreadsheetDocument document = SpreadsheetDocument.loadDocument(new File(filename)); Table sheet = document.getSheetByIndex(0); List<String> questions = new ArrayList<>(); for (int i = 1; i < sheet.getRowList().size(); i++) { Row row = sheet.getRowList().get(i); String question = getCellStringValue(row, 0); if (StringUtils.isBlank(question)) { break; } String levelString = getCellStringValue(row, 1); long level = Long.valueOf(StringUtils.replace(levelString, "D", "")); String tagsString = getCellStringValue(row, 2); List<String> tags = Collections.emptyList(); if (StringUtils.isNotBlank(tagsString)) { tags = Lists.newArrayList(StringUtils.split(tagsString, ", ")); } String tip = StringUtils.defaultIfBlank(getCellStringValue(row, 3), null); XContentBuilder builder = jsonBuilder() .startObject() .field("title", question) .field("level", level) .field("tags", tags) .field("tip", tip) .endObject(); IndexResponse indexResponse = client .prepareIndex(domainResolver.resolveQuestionIndex(), Types.question) .setSource(builder) .execute() .actionGet(); questions.add(indexResponse.getId()); } XContentBuilder questionnaireBuilder = jsonBuilder() .startObject() .field("name", questionnaireName) .field("questions", questions) .endObject(); IndexResponse indexResponse = client .prepareIndex(domainResolver.resolveQuestionIndex(), Types.questionnaire) .setSource(questionnaireBuilder) .execute() .actionGet(); return indexResponse.getId(); }
public ProfFile parseFile(File file) throws NotasParserException { logger.debug("Lendo arquivo " + file.getName()); SpreadsheetDocument planilha; try { planilha = SpreadsheetDocument.loadDocument(file); } catch (Exception e) { String msg = "Não pude ler o arquivo " + file.getName(); logger.error(msg, e); throw new NotasParserException(msg); } Table table = null; try { table = planilha.getTableList().get(0); } catch (ArrayIndexOutOfBoundsException e) { String msg = "Arquivo " + file.getName() + " não possui planilha 0"; logger.error(msg, e); throw new NotasParserException(msg); } // extract basic information String prof = table.getCellByPosition(CELL_PROF).getDisplayText(); if (prof == null || prof.isEmpty()) { String msg = "Célula B64 do arquivo " + file.getName() + " (1o bimestre) deveria conter o nome do professor"; logger.error(msg); throw new NotasParserException(msg); } ProfFile profFile = new ProfFile(prof, file.getName()); for (int bim = 1; bim <= 4; bim++) { ProfSheet profSheet = parseSheet(planilha.getTableList().get(bim - 1), prof, Periodo.valueOf(bim)); profFile.getSheets().add(profSheet); } return profFile; }
public IndicatorEntryCalcTemplate(final IndicatorEntryData data, final SpreadsheetDocument exDoc) throws Throwable { this.data = data; Table table = null; String tableName = data.getLocalizedVersion("flexibleElementIndicatorsList").replace(" ", "_"); if (exDoc == null) { doc = SpreadsheetDocument.newSpreadsheetDocument(); table = doc.getSheetByIndex(0); table.setTableName(tableName); } else { doc = exDoc; table = doc.appendSheet(tableName); } coreCellStyle = CalcUtils.prepareCoreStyle(doc); int rowIndex = -1; int cellIndex = 0; // skip row ++rowIndex; // title CalcUtils.putMainTitle( table, ++rowIndex, data.getNumbOfCols(), data.getLocalizedVersion("flexibleElementIndicatorsList").toUpperCase()); // emptry row CalcUtils.putEmptyRow(table, ++rowIndex); // column headers row = table.getRowByIndex(++rowIndex); cellIndex = 0; CalcUtils.putHeader(row, ++cellIndex, data.getLocalizedVersion("name")); CalcUtils.putHeader(row, ++cellIndex, data.getLocalizedVersion("code")); CalcUtils.putHeader(row, ++cellIndex, data.getLocalizedVersion("targetValue")); CalcUtils.putHeader(row, ++cellIndex, data.getLocalizedVersion("value")); row.setHeight(5, false); // empty row row = table.getRowByIndex(++rowIndex); row.setHeight(3.8, false); row.getCellByIndex(1).setCellStyleName(null); row.getCellByIndex(2).setCellStyleName(null); row.getCellByIndex(3).setCellStyleName(null); row.getCellByIndex(4).setCellStyleName(null); for (final IndicatorGroup group : data.getIndicators().getGroups()) { row = table.getRowByIndex(++rowIndex); CalcUtils.putGroupCell(table, 1, rowIndex, group.getName()); CalcUtils.mergeCell(table, 1, rowIndex, data.getNumbOfCols(), rowIndex); for (final IndicatorDTO indicator : group.getIndicators()) { // indicator's detail sheet createDetailSheet(indicator); row = table.getRowByIndex(++rowIndex); // ind name cell = CalcUtils.createBasicCell(table, 1, rowIndex, null); CalcUtils.applyLink( cell, indicator.getName(), ExportConstants.INDICATOR_SHEET_PREFIX + indicator.getName()); // code CalcUtils.createBasicCell(table, 2, rowIndex, indicator.getCode()); // target putValueCell(table, rowIndex, 3, indicator.getObjective(), true); // current value putValueCell(table, rowIndex, 4, data.getFormattedValue(indicator), true); } } table.getColumnByIndex(0).setWidth(3.8); table.getColumnByIndex(1).setWidth(83); table.getColumnByIndex(2).setWidth(55); table.getColumnByIndex(3).setWidth(55); table.getColumnByIndex(4).setWidth(55); }
@Override public void write(OutputStream output) throws Throwable { doc.save(output); doc.close(); }
private void createDetailSheet(final IndicatorDTO indicator) throws Throwable { final boolean isQualitative = indicator.getAggregation() == IndicatorDTO.AGGREGATE_MULTINOMIAL; final Table tableEx = doc.appendSheet( CalcUtils.normalizeAsLink( ExportConstants.INDICATOR_SHEET_PREFIX + indicator.getName())); int rowIndex = -1; List<PivotTableData.Axis> leaves = data.getEntryMap().get(indicator.getId()).getRootColumn().getLeaves(); int numbOfLeaves = leaves.size(); int numbOfCols = 4; // back to list link row = tableEx.getRowByIndex(++rowIndex); cell = tableEx.getCellByPosition(1, rowIndex); CalcUtils.applyLink( cell, data.getLocalizedVersion("goToIndicatorsList"), data.getLocalizedVersion("flexibleElementIndicatorsList")); CalcUtils.mergeCell(tableEx, 1, rowIndex, data.getNumbOfCols(), rowIndex); // title CalcUtils.putMainTitle(tableEx, ++rowIndex, numbOfCols, indicator.getName()); // empty row CalcUtils.putEmptyRow(tableEx, ++rowIndex); // put details putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("code"), indicator.getCode(), numbOfCols); putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("group"), data.getGroupMap().get(indicator.getGroupId()), numbOfCols); // type String type = null; ; if (isQualitative) { // qualitative type = data.getLocalizedVersion("qualitative"); } else { // quantitative type = data.getLocalizedVersion("quantitative"); } putBasicInfo(tableEx, ++rowIndex, data.getLocalizedVersion("type"), type, numbOfCols); // conditional if (isQualitative) { // qualitative // possible values row = tableEx.getRowByIndex(++rowIndex); // key cell = CalcUtils.putHeader(row, 1, data.getLocalizedVersion("possibleValues")); cell.setHorizontalAlignment(ExportConstants.ALIGH_HOR_RIGHT); // value final MultiItemText itemText = data.formatPossibleValues(indicator.getLabels()); CalcUtils.createBasicCell(tableEx, 2, rowIndex, itemText.text); CalcUtils.mergeCell(tableEx, 2, rowIndex, numbOfCols, rowIndex); } else { // quantitative // aggregation method String aggrMethod = null; if (indicator.getAggregation() == IndicatorDTO.AGGREGATE_AVG) aggrMethod = data.getLocalizedVersion("average"); else aggrMethod = data.getLocalizedVersion("sum"); putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("aggregationMethod"), aggrMethod, numbOfCols); // units putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("units"), indicator.getUnits(), numbOfCols); // target value putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("targetValue"), indicator.getObjective(), numbOfCols); } // source of ver putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("sourceOfVerification"), indicator.getSourceOfVerification(), numbOfCols); // comment putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("indicatorComments"), indicator.getDescription(), numbOfCols); // value putBasicInfo( tableEx, ++rowIndex, data.getLocalizedVersion("value"), data.getFormattedValue(indicator), numbOfCols); // empty row CalcUtils.putEmptyRow(tableEx, ++rowIndex); row = tableEx.getRowByIndex(rowIndex); row.getCellByIndex(1).setCellStyleName(null); row.getCellByIndex(2).setCellStyleName(null); row.getCellByIndex(3).setCellStyleName(null); row.getCellByIndex(4).setCellStyleName(null); // data entry // header row = tableEx.getRowByIndex(++rowIndex); int cellIndex = 0; CalcUtils.putHeader(row, ++cellIndex, data.getLocalizedVersion("sideAndMonth")); Map<String, Integer> columnIndexMap = new HashMap<String, Integer>(); for (PivotTableData.Axis axis : leaves) { CalcUtils.putHeader(row, ++cellIndex, axis.getLabel()); columnIndexMap.put(axis.getLabel(), cellIndex); } // rows for (PivotTableData.Axis axis : data.getEntryMap().get(indicator.getId()).getRootRow().getChildren()) { row = tableEx.getRowByIndex(++rowIndex); CalcUtils.putHeader(row, 1, axis.getLabel()); // populate empty cells for (int i = 0; i < numbOfLeaves; i++) { cell = CalcUtils.createBasicCell(tableEx, i + 2, rowIndex, ""); } // insert values for (Map.Entry<PivotTableData.Axis, PivotTableData.Cell> entry : axis.getCells().entrySet()) { cellIndex = columnIndexMap.get(entry.getKey().getLabel()); Object value = null; boolean rightAligned = false; if (isQualitative) { value = data.getLabelByIndex(indicator.getLabels(), entry.getValue().getValue()); } else { value = new Long(Math.round(entry.getValue().getValue())); rightAligned = true; } putValueCell(tableEx, rowIndex, cellIndex, value, rightAligned); } } // col width tableEx.getColumnByIndex(0).setWidth(3.8); tableEx.getColumnByIndex(1).setWidth(60); for (int i = 2; i < 2 + numbOfLeaves; i++) { tableEx.getColumnByIndex(i).setWidth(30); } }
@Override public void export(OutputStream output) throws Exception { // The project id. final String idString = requireParameter(RequestParameter.ID); final Integer projectId; try { projectId = Integer.parseInt(idString); } catch (NumberFormatException e) { LOG.error("[export] The id '" + idString + "' is invalid.", e); throw new Exception("The id '" + idString + "' is invalid.", e); } try { // data final ProjectSynthesisData synthesisData = prepareSynthesisData(projectId); LogFrameExportData logFrameData = null; IndicatorEntryData indicatorData = null; // appending options final String typeString = requireParameter(RequestParameter.TYPE); final ExportUtils.ExportType type = ExportUtils.ExportType.valueOfOrNull(typeString); switch (type) { case PROJECT_SYNTHESIS_LOGFRAME: { final Project project = injector.getInstance(EntityManager.class).find(Project.class, projectId); logFrameData = SpreadsheetDataUtil.prepareLogFrameData(project, this); } break; case PROJECT_SYNTHESIS_INDICATORS: { indicatorData = SpreadsheetDataUtil.prepareIndicatorsData(projectId, this); } break; case PROJECT_SYNTHESIS_LOGFRAME_INDICATORS: { // logframe data final Project project = injector.getInstance(EntityManager.class).find(Project.class, projectId); logFrameData = SpreadsheetDataUtil.prepareLogFrameData(project, this); logFrameData.setIndicatorsSheetExist(true); // indicator data indicatorData = SpreadsheetDataUtil.prepareIndicatorsData(projectId, this); } break; default: // TODO Throw exception ? break; } ExportTemplate template = null; switch (exportFormat) { case XLS: { final HSSFWorkbook wb = new HSSFWorkbook(); template = new ProjectSynthesisExcelTemplate( synthesisData, wb, getContext(), getI18ntranslator(), getLanguage()); if (logFrameData != null) template = new LogFrameExcelTemplate(logFrameData, wb); if (indicatorData != null) template = new IndicatorEntryExcelTemplate(indicatorData, wb); } break; case ODS: { final SpreadsheetDocument doc = SpreadsheetDocument.newSpreadsheetDocument(); template = new ProjectSynthesisCalcTemplate( synthesisData, doc, getContext(), getI18ntranslator(), getLanguage()); if (logFrameData != null) template = new LogFrameCalcTemplate(logFrameData, doc); if (indicatorData != null) template = new IndicatorEntryCalcTemplate(indicatorData, doc); } break; default: LOG.error("[export] The export format '" + exportFormat + "' is unknown."); throw new ServletException("The export format '" + exportFormat + "' is unknown."); } template.write(output); } catch (Throwable e) { LOG.error("[export] Error during the workbook writing.", e); throw new Exception("Error during the workbook writing.", e); } }