Avoid using DataThing when writing to Excel
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/commit/4655c382 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/4655c382 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/4655c382 Branch: refs/heads/master Commit: 4655c38284d92b2493771a184f64077c663f5d85 Parents: 6e83752 Author: Stian Soiland-Reyes <[email protected]> Authored: Fri Aug 19 11:44:49 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Fri Oct 21 09:16:52 2016 +0200 ---------------------------------------------------------------------- .../saveactions/SaveAllResultsAsExcel.java | 76 ++++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4655c382/taverna-results-view/src/main/java/org/apache/taverna/workbench/views/results/saveactions/SaveAllResultsAsExcel.java ---------------------------------------------------------------------- diff --git a/taverna-results-view/src/main/java/org/apache/taverna/workbench/views/results/saveactions/SaveAllResultsAsExcel.java b/taverna-results-view/src/main/java/org/apache/taverna/workbench/views/results/saveactions/SaveAllResultsAsExcel.java index 6a6fdad..654bbdf 100644 --- a/taverna-results-view/src/main/java/org/apache/taverna/workbench/views/results/saveactions/SaveAllResultsAsExcel.java +++ b/taverna-results-view/src/main/java/org/apache/taverna/workbench/views/results/saveactions/SaveAllResultsAsExcel.java @@ -17,22 +17,22 @@ package org.apache.taverna.workbench.views.results.saveactions; */ import static java.lang.Math.max; -import static java.util.Arrays.asList; -import static org.apache.taverna.workbench.icons.WorkbenchIcons.saveIcon; import static org.apache.poi.ss.usermodel.CellStyle.BORDER_NONE; import static org.apache.poi.ss.usermodel.CellStyle.BORDER_THIN; import static org.apache.poi.ss.usermodel.CellStyle.SOLID_FOREGROUND; +import static org.apache.taverna.workbench.icons.WorkbenchIcons.saveIcon; import java.beans.IntrospectionException; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Arrays; import java.util.Collection; +import java.util.Optional; import javax.swing.AbstractAction; - import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; @@ -91,51 +91,52 @@ public class SaveAllResultsAsExcel extends SaveAllResultsSPI { for (String portName : chosenReferences.keySet()) { logger.debug("Output for : " + portName); - DataThing resultValue = bake(getObjectForName(portName)); - // Check whether there's a textual type - Boolean textualType = isTextual(resultValue.getDataObject()); - if (textualType == null || !textualType) + Object v = getObjectForName(portName); + if (! isTextual(v).orElse(false)) { + logger.debug("Ignoring non-textual port " + portName); continue; - logger.debug("Output is textual"); + } getCell(currentCol, 0).setCellValue(portName); getCell(currentCol, 0).setCellStyle(headingStyle); int numCols = 1; int numRows = 1; int currentRow = 0; - BaclavaIterator rows; - try { - rows = resultValue.iterator("l('')"); - } catch (IntrospectionException ex) { - // Not a list, single value. We'll fake the iterator - DataThing fakeValues = new DataThing( - asList(resultValue.getDataObject())); - rows = fakeValues.iterator("l('')"); + + Collection rows; + if (v instanceof Collection) { + rows = (Collection) v; + } else { + // Not a list, single value. Wrap it! + rows = Arrays.asList(v); } /* * If we only have one row, we'll show each value on a new row * instead */ boolean isFlat = rows.size() == 1; - while (rows.hasNext()) { - DataThing row = (DataThing) rows.next(); + for (Object row : rows) { /* * Even increase first time, as we don't want to overwrite our * header */ currentRow++; - BaclavaIterator bi = row.iterator("''"); - while (bi.hasNext()) { - DataThing containedThing = (DataThing) bi.next(); - String containedValue = (String) containedThing.getDataObject(); - int columnOffset = 0; - int[] location = bi.getCurrentLocation(); - if (!isFlat && location.length > 0) { - columnOffset = location[location.length - 1]; + if (! (row instanceof Collection)) { + // Wrap it for the iterator + row = Arrays.asList(row); + } + + int columnOffset = -1; + for (Object containedValue : (Collection)row) { + if (!isFlat) { + columnOffset++; numCols = Math.max(numCols, columnOffset + 1); } logger.debug("Storing in cell " + (currentCol + columnOffset) + " " + currentRow + ": " + containedValue); - getCell(currentCol + columnOffset, currentRow).setCellValue(containedValue); + HSSFCell cell = getCell(currentCol + columnOffset, currentRow); + if (containedValue instanceof String) { + cell.setCellValue(containedValue.toString()); + } if (isFlat) currentRow++; } @@ -207,31 +208,30 @@ public class SaveAllResultsAsExcel extends SaveAllResultsSPI { * * @param o * Object to check - * @return true if o is a String or is a Collection that contains a string at the deepest level. + * @return true if o is a String or is a Collection that contains a string at the deepest level. * false if o is not a String or Collection, or if it is a collection that contains * non-strings. - * null if o is a Collection, but it is empty or contains nothing but Collections. + * Optional.empty() if o is a Collection, but it is empty or contains nothing but Collections. */ - Boolean isTextual(Object o) { + Optional<Boolean> isTextual(Object o) { if (o instanceof String) // We dug down and found a string. Hurray! - return true; + return Optional.of(true); if (o instanceof Collection) { for (Object child : (Collection<?>) o) { - Boolean isTxt = isTextual(child); - if (isTxt == null) - // Unknown, try next one - continue; - return isTxt; + Optional<Boolean> isTxt = isTextual(child); + if (isTxt.isPresent()) { + return isTxt; + } } /* * We looped through and found just empty collections (or we are an * empty collection), we don't know. */ - return null; + return Optional.empty(); } // No, sorry mate.. o was neither a String or Collection - return false; + return Optional.of(false); } /**
