Adapt to changes in Argeo Connect
[gpl/argeo-suite.git] / org.argeo.suite.workbench.rap / src / org / argeo / suite / workbench / commands / JxlUtils.java
diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/JxlUtils.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/JxlUtils.java
new file mode 100644 (file)
index 0000000..8be4fa4
--- /dev/null
@@ -0,0 +1,82 @@
+package org.argeo.suite.workbench.commands;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.argeo.connect.ConnectException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+
+import jxl.Cell;
+import jxl.CellType;
+import jxl.JXLException;
+import jxl.Sheet;
+import jxl.Workbook;
+import jxl.WorkbookSettings;
+
+/** Centralise useful methods to simplify development with JXL library */
+class JxlUtils {
+
+       public static boolean isEmptyCell(Sheet sheet, int x, int y) {
+               Cell cell = sheet.getCell(x, y);
+               CellType type = cell.getType();
+               return type == CellType.EMPTY;
+       }
+
+       public static String getStringValue(Sheet sheet, int x, int y) {
+               Cell cell = sheet.getCell(x, y);
+               CellType type = cell.getType();
+               String stringValue = null;
+               if (type == CellType.LABEL || type == CellType.NUMBER)
+                       stringValue = cell.getContents();
+               return stringValue;
+       }
+
+       public static String getCompulsoryStringValue(Sheet sheet, int x, int y) {
+               Cell cell = sheet.getCell(x, y);
+               CellType type = cell.getType();
+               String stringValue = null;
+               if (type == CellType.LABEL)
+                       stringValue = cell.getContents();
+               else if (type == CellType.NUMBER)
+                       stringValue = cell.getContents();
+               if (EclipseUiUtils.isEmpty(stringValue))
+                       throw new ConnectException("No name defined at [" + x + "," + y + "], cannot parse indicator file");
+               return stringValue;
+       }
+
+       public static Double getNumberValue(Sheet sheet, int x, int y) {
+               Cell cell = sheet.getCell(x, y);
+               CellType type = cell.getType();
+               if (type == CellType.NUMBER)
+                       return new Double(cell.getContents());
+               else if (type == CellType.EMPTY)
+                       return null;
+               else
+                       throw new ConnectException("Not a number at [" + x + "," + y + "]: " + type.toString());
+       }
+
+       public static Sheet getOnlySheet(InputStream in, String encoding) throws IOException {
+               Workbook wkb = toWorkbook(in, encoding);
+               Sheet sheet = wkb.getSheet(0);
+               return sheet;
+       }
+
+       public static Sheet getSheet(InputStream in, String encoding, int index) throws IOException {
+               Workbook wkb = toWorkbook(in, encoding);
+               return wkb.getSheet(index);
+       }
+
+       public static Workbook toWorkbook(InputStream in, String encoding) throws IOException {
+               try {
+                       WorkbookSettings ws = new WorkbookSettings();
+                       ws.setEncoding(encoding);
+                       return Workbook.getWorkbook(in, ws);
+               } catch (JXLException e) {
+                       throw new ConnectException("Unable to open XLS file", e);
+               }
+       }
+
+       // Prevents instantiation
+       private JxlUtils() {
+       }
+}