private Column[] getColumns() { return new Column[] { new Column("Contingency"), new Column("Status" + RESULT + "1"), new Column("Status" + RESULT + "2"), new Column("Equipment"), new Column("End"), new Column("ViolationType"), new Column("ViolationName" + RESULT + "1"), new Column("Value" + RESULT + "1"), new Column("Limit" + RESULT + "1"), new Column("ViolationName" + RESULT + "2"), new Column("Value" + RESULT + "2"), new Column("Limit" + RESULT + "2"), new Column("Actions" + RESULT + "1"), new Column("Actions" + RESULT + "2"), new Column("Comparison") }; }
@Override protected void writeHeader() throws IOException { writer.append("#").append(title).append(System.lineSeparator()) .append("#"); for (int i = 0; i < columns.length; i++) { writer.append("\"").append(columns[i].getName()).append("\""); if (i < columns.length - 1) { writer.append(config.getCsvSeparator()); } } writer.append(System.lineSeparator()); }
@Test public void testPositiveColspan() { Column column = new Column("column"); assertEquals(1, column.getColspan()); column.setColspan(2); assertEquals(2, column.getColspan()); }
"", printConfig.getFormatterConfig(), new Column(EQUIPMENT + " (" + filteredViolations.size() + ")"), new Column(END), new Column(COUNTRY), new Column(BASE_VOLTAGE) .setHorizontalAlignment(HorizontalAlignment.RIGHT), new Column(VIOLATION_TYPE), new Column(VIOLATION_NAME), new Column(VALUE) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(LIMIT) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(ABS_VALUE_LIMIT) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(LOADING_RATE) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(percentageFormat))) { filteredViolations.stream() .sorted(Comparator.comparing(LimitViolation::getSubjectId))
@Test public void testAsciiTableFormatter2() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Writer writer = new OutputStreamWriter(bos, StandardCharsets.UTF_8); try (AsciiTableFormatter formatter = new AsciiTableFormatter(writer, null, config, new Column("column1").setColspan(4).setHorizontalAlignment(HorizontalAlignment.CENTER).setTitleHorizontalAlignment(HorizontalAlignment.CENTER), new Column("column2").setColspan(2).setHorizontalAlignment(HorizontalAlignment.CENTER).setTitleHorizontalAlignment(HorizontalAlignment.CENTER))) { formatter.writeCell("Line:1 Cell:1", 1) .writeCell("Line:1 Cell:2", 1) .writeCell("Line:1 Cell:3", 1) .writeCell("Line:1 Cell:4", 1) .writeCell("Line:1 Cell:5", 1) .writeCell("Line:1 Cell:6", 1); } assertEquals("+---------------------------------------------------------------+-------------------------------+\n" + "| column1 | column2 |\n" + "+---------------------------------------------------------------+-------------------------------+\n" + "| Line:1 Cell:1 | Line:1 Cell:2 | Line:1 Cell:3 | Line:1 Cell:4 | Line:1 Cell:5 | Line:1 Cell:6 |\n" + "+---------------+---------------+---------------+---------------+---------------+---------------+" + System.lineSeparator(), new String(bos.toByteArray(), StandardCharsets.UTF_8)); writer.close(); }
private static String writeInTable(ConnectedPower balanceMainCC, ConnectedPower balanceOtherCC) { Writer writer = new StringWriter(); try (AbstractTableFormatter formatter = new AsciiTableFormatter(writer, null, new Column("") .setTitleHorizontalAlignment(HorizontalAlignment.CENTER), new Column("Main CC connected/disconnected") .setColspan(2) .setTitleHorizontalAlignment(HorizontalAlignment.CENTER), new Column("Others CC connected/disconnected") .setColspan(2) .setTitleHorizontalAlignment(HorizontalAlignment.CENTER))) { formatter.writeCell("Bus count") .writeCell(Integer.toString(balanceMainCC.busCount), 2)
@Test public void testUnauthorizedColspan() throws IOException { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("You have exceded the authorized colspan"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); try (Writer writer = new OutputStreamWriter(bos, StandardCharsets.UTF_8); AsciiTableFormatter formatter = new AsciiTableFormatter(writer, null, config, new Column("column1").setColspan(4).setHorizontalAlignment(HorizontalAlignment.CENTER), new Column("column2").setColspan(2).setHorizontalAlignment(HorizontalAlignment.CENTER))) { formatter.writeCell("Line:1 Cell:1", 1) .writeCell("Line:1 Cell:2", 1) .writeCell("Line:1 Cell:3", 1) .writeCell("Line:1 Cell:4", 2) .writeCell("Line:1 Cell:5", 1); } }
@Test public void testNegativeColspan() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("colspan must be greater than 0"); new Column("column").setColspan(-5); }
"Post-contingency limit violations", writeConfig.getFormatterConfig(), new Column(CONTINGENCY), new Column(STATUS), new Column(ACTION), new Column(EQUIPMENT + " (" + sumFilter + ")"), new Column(END), new Column(COUNTRY), new Column(BASE_VOLTAGE) .setHorizontalAlignment(HorizontalAlignment.RIGHT), new Column(VIOLATION_TYPE), new Column(VIOLATION_NAME), new Column(VALUE) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(LIMIT) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(ABS_VALUE_LIMIT) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(LOADING_RATE) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(percentageFormat))) { result.getPostContingencyResults() .stream()
@Test public void testAsciiTableFormatter1() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Writer writer = new OutputStreamWriter(bos, StandardCharsets.UTF_8); try (AsciiTableFormatter formatter = new AsciiTableFormatter(writer, null, config, new Column("column1").setColspan(2).setHorizontalAlignment(HorizontalAlignment.CENTER).setTitleHorizontalAlignment(HorizontalAlignment.CENTER), new Column("column2").setHorizontalAlignment(HorizontalAlignment.CENTER).setTitleHorizontalAlignment(HorizontalAlignment.CENTER))) { formatter.writeCell("Line:1 Cell:1", 2) .writeCell("Line:1 Cell:2", 1) .writeCell("Line:2 Cell:1", 1) .writeCell("Line:2 Cell:2", 1) .writeCell("Line:2 Cell:3", 1); } assertEquals("+-------------------------------+---------------+\n" + "| column1 | column2 |\n" + "+-------------------------------+---------------+\n" + "| Line:1 Cell:1 | Line:1 Cell:2 |\n" + "| Line:2 Cell:1 | Line:2 Cell:2 | Line:2 Cell:3 |\n" + "+---------------+---------------+---------------+" + System.lineSeparator(), new String(bos.toByteArray(), StandardCharsets.UTF_8)); writer.close(); }
@Test public void testEmptyLines() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try (Writer writer = new OutputStreamWriter(bos, StandardCharsets.UTF_8); AsciiTableFormatter formatter = new AsciiTableFormatter(writer, null, config, new Column("column1").setColspan(4), new Column("column2").setColspan(2))) { formatter.writeCell("Line:1 Cell:1") .writeCell("Line:1 Cell:2") .writeCell("Line:1 Cell:3") .writeEmptyLine(); } assertEquals("+--------------------------------------------------+---------+\n" + "| column1 | column2 |\n" + "+--------------------------------------------------+---------+\n" + "| Line:1 Cell:1 | Line:1 Cell:2 | Line:1 Cell:3 | | | |\n" + "+---------------+---------------+---------------+--+--+------+" + System.lineSeparator(), new String(bos.toByteArray(), StandardCharsets.UTF_8)); } }
private void writeTapChangerTable() throws IOException { try (Writer writer = new OutputStreamWriter(dataSource.newOutputStream("_network_tct", "txt", append), StandardCharsets.UTF_8); TableFormatter formatter = new AmplDatTableFormatter(writer, getTableTitle("Tap changer table"), AmplConstants.INVALID_FLOAT_VALUE, !append, AmplConstants.LOCALE, new Column(VARIANT), new Column("num"), new Column("tap"), new Column("var ratio"), new Column("x (pu)"), new Column("angle (rad)"), new Column(FAULT), new Column(config.getActionType().getLabel()))) { writeTwoWindingsTransformerTapChangerTable(formatter); writeThreeWindingsTransformerTapChangerTable(formatter); } }
"Pre-contingency violations", printConfig.getFormatterConfig(), new Column(ACTION), new Column(EQUIPMENT + " (" + filteredLimitViolations.size() + ")"), new Column(END), new Column(COUNTRY), new Column(BASE_VOLTAGE) .setHorizontalAlignment(HorizontalAlignment.RIGHT), new Column(VIOLATION_TYPE), new Column(VIOLATION_NAME), new Column(VALUE) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(LIMIT) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(ABS_VALUE_LIMIT) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(numberFormat), new Column(LOADING_RATE) .setHorizontalAlignment(HorizontalAlignment.RIGHT) .setNumberFormat(percentageFormat))) { for (String action : result.getPreContingencyResult().getActionsTaken()) { formatter.writeCell(action)
columns.stream().skip(1).forEach(x -> { try { formatter.writeCell(metrics.get(x.getName())); } catch (IOException e) { throw new RuntimeException(e);
private void writeCurrentLimits() throws IOException { try (Writer writer = new OutputStreamWriter(dataSource.newOutputStream("_network_limits", "txt", append), StandardCharsets.UTF_8); TableFormatter formatter = new AmplDatTableFormatter(writer, getTableTitle("Temporary current limits"), AmplConstants.INVALID_FLOAT_VALUE, !append, AmplConstants.LOCALE, new Column(VARIANT), new Column("num"), new Column("branch"), new Column("side"), new Column("limit (A)"), new Column("accept. duration (s)"), new Column(FAULT), new Column(config.getActionType().getLabel()))) { writeBranchCurrentLimits(formatter); writeThreeWindingsTransformerCurrentLimits(formatter); writeDanglingLineCurrentLimits(formatter); } }
private void writeBuses(AmplExportContext context) throws IOException { try (Writer writer = new OutputStreamWriter(dataSource.newOutputStream("_network_buses", "txt", append), StandardCharsets.UTF_8); TableFormatter formatter = new AmplDatTableFormatter(writer, getTableTitle("Buses"), AmplConstants.INVALID_FLOAT_VALUE, !append, AmplConstants.LOCALE, new Column(VARIANT), new Column("num"), new Column(SUBSTATION), new Column("cc"), new Column("v (pu)"), new Column("theta (rad)"), new Column("p (MW)"), new Column("q (MVar)"), new Column(FAULT), new Column(config.getActionType().getLabel()), new Column("id"))) { writeBuses(context, formatter); writeThreeWindingsTransformerMiddleBuses(context, formatter); writeDanglingLineMiddleBuses(context, formatter); if (config.isExportXNodes()) { writeTieLineMiddleBuses(context, formatter); } } }
private void exportViolations(Path folder, String file, String title, WCALoadflowResult loadflowResult, List<LimitViolation> violations) throws IOException { Path violationsPath = folder.resolve(file); Column[] columns = { new Column("Basecase"), new Column("FailureStep"), new Column("FailureDescription"), new Column("ViolationType"), new Column("Equipment"), new Column("Value"), new Column("Limit"), new Column("Country"), new Column("BaseVoltage"), new Column("Side"), }; CsvTableFormatterFactory factory = new CsvTableFormatterFactory(); try (Writer writer = Files.newBufferedWriter(violationsPath, StandardCharsets.UTF_8); TableFormatter formatter = factory.create(writer, title, tableFormatterConfig, columns)) { writeViolations(formatter, null, loadflowResult, violations); } }
!append, AmplConstants.LOCALE, new Column(VARIANT), new Column("num"), new Column("bus1"), new Column("bus2"), new Column("3wt num"), new Column("sub.1"), new Column("sub.2"), new Column("ratio tc"), new Column("phase tc"), new Column("p1 (MW)"), new Column("p2 (MW)"), new Column("q1 (MVar)"), new Column("q2 (MVar)"), new Column("patl1 (A)"), new Column("patl2 (A)"), new Column("merged"), new Column(FAULT), new Column(config.getActionType().getLabel()), new Column("id"), new Column(DESCRIPTION))) {
private void exportPreventiveActionsApplication(Path folder) throws IOException { LOGGER.info("Exporting preventive action application report of basecase {} to file {}", basecase, folder + File.separator + POST_PREVENTIVE_ACTIONS_FILE); Path violationsPath = folder.resolve(POST_PREVENTIVE_ACTIONS_FILE); Column[] columns = { new Column("Basecase"), new Column("ActionId"), new Column("ViolatedEquipment"), new Column("ViolationType"), new Column("FailureStep"), new Column("FailureDescription"), new Column("ViolationRemoved"), new Column("ActionApplied"), new Column("Comment") }; CsvTableFormatterFactory factory = new CsvTableFormatterFactory(); try (Writer writer = Files.newBufferedWriter(violationsPath, StandardCharsets.UTF_8); TableFormatter formatter = factory.create(writer, POST_PREVENTIVE_ACTIONS_TITLE, tableFormatterConfig, columns)) { writeActionsApplications(formatter, null, new ArrayList<>(preventiveActionsApplication.values())); } }
private void writeTrustIntervals(Uncertainties uncertainties, DataSource dataSource) throws IOException { try (Writer writer = new OutputStreamWriter(dataSource.newOutputStream(TRUST_INTERVAL_FILE_SUFFIX, TXT_EXT, false), StandardCharsets.UTF_8); AmplDatTableFormatter formatter = new AmplDatTableFormatter( writer, "Trust intervals", INVALID_FLOAT_VALUE, true, LOCALE, new Column("var. num"), new Column("min"), new Column("max"))) { for (int varNum = 0; varNum < uncertainties.min.length; varNum++) { formatter.writeCell(varNum + 1) .writeCell(uncertainties.min[varNum]) .writeCell(uncertainties.max[varNum]); } } }