From e60e4ee73851a9f66d1623dc1a806fde903ae5ef Mon Sep 17 00:00:00 2001 From: Mark Velez Date: Sat, 4 Apr 2015 18:55:46 -0400 Subject: [PATCH] Add option to exclude counts from RabbitInAHat output Enable value counts to be excluded from specs file (in both binary or JSON format) and ETL document appendix via command line argument --no-counts (resolves #29). --- .../rabbitInAHat/ETLDocumentGenerator.java | 10 ++++--- .../ohdsi/rabbitInAHat/RabbitInAHatMain.java | 15 ++++++++--- src/org/ohdsi/rabbitInAHat/dataModel/ETL.java | 26 ++++++++++++++++--- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/org/ohdsi/rabbitInAHat/ETLDocumentGenerator.java b/src/org/ohdsi/rabbitInAHat/ETLDocumentGenerator.java index b6218dba..9bbdab97 100644 --- a/src/org/ohdsi/rabbitInAHat/ETLDocumentGenerator.java +++ b/src/org/ohdsi/rabbitInAHat/ETLDocumentGenerator.java @@ -52,7 +52,7 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio generate(etl, "C:/Users/mschuemi/Desktop/test.docx"); } - public static void generate(ETL etl, String filename) { + public static void generate(ETL etl, String filename, boolean includeCounts) { try { CustomXWPFDocument document = new CustomXWPFDocument(); @@ -60,8 +60,8 @@ public static void generate(ETL etl, String filename) { for (Table cdmTable : etl.getCDMDatabase().getTables()) addCDMTableSection(document, etl, cdmTable); - - addSourceTablesAppendix(document, etl); + + if (includeCounts) addSourceTablesAppendix(document, etl); document.write(new FileOutputStream(new File(filename))); } catch (FileNotFoundException e) { @@ -72,6 +72,10 @@ public static void generate(ETL etl, String filename) { e.printStackTrace(); } } + + public static void generate(ETL etl, String filename) { + generate(etl, filename, true); + } private static void addSourceTablesAppendix(CustomXWPFDocument document, ETL etl) { XWPFParagraph paragraph = document.createParagraph(); diff --git a/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java b/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java index d34f29bb..4f084b7a 100644 --- a/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java +++ b/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java @@ -58,12 +58,19 @@ public class RabbitInAHatMain implements ResizeListener, ActionListener { private JScrollPane scrollPane2; private MappingPanel tableMappingPanel; private JSplitPane tableFieldSplitPane; + private boolean includeCounts; public static void main(String[] args) { - new RabbitInAHatMain(); + boolean includeCounts = true; + for (String arg: args) { + if (arg.equals("--no-counts")) includeCounts = false; + } + new RabbitInAHatMain(includeCounts); } - public RabbitInAHatMain() { + public RabbitInAHatMain(boolean includeCounts) { + this.includeCounts = includeCounts; + frame = new JFrame("Rabbit in a hat"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { @@ -247,7 +254,7 @@ private void doSave(String filename) { if (filename != null) { frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); ETL.FileFormat fileFormat = filename.endsWith("json") ? ETL.FileFormat.Json : ETL.FileFormat.Binary; - ObjectExchange.etl.save(filename, fileFormat); + ObjectExchange.etl.save(filename, fileFormat, includeCounts); frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } @@ -281,7 +288,7 @@ private void doOpenScanReport(String filename) { private void doGenerateEtlDoc(String filename) { if (filename != null) { frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - ETLDocumentGenerator.generate(ObjectExchange.etl, filename); + ETLDocumentGenerator.generate(ObjectExchange.etl, filename, includeCounts); frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } diff --git a/src/org/ohdsi/rabbitInAHat/dataModel/ETL.java b/src/org/ohdsi/rabbitInAHat/dataModel/ETL.java index 85c1af77..188af9ec 100644 --- a/src/org/ohdsi/rabbitInAHat/dataModel/ETL.java +++ b/src/org/ohdsi/rabbitInAHat/dataModel/ETL.java @@ -19,6 +19,7 @@ import com.cedarsoftware.util.io.JsonReader; import com.cedarsoftware.util.io.JsonWriter; +import com.cedarsoftware.util.io.MetaUtils; import java.io.*; import java.nio.file.Files; @@ -95,13 +96,32 @@ public ItemToItemMap createItemToItemMap(MappableItem source, MappableItem targe /** * Convert into pretty-print JSON + * @param includeCounts if false, exclude the valueCounts field from result * @return JSON representation of object */ + public String toJson(boolean includeCounts) { + Map args = new HashMap<>(); + if (!includeCounts) { + Map> fieldSpecifier = new HashMap<>(); + ArrayList fieldFields = + new ArrayList<>(MetaUtils.getDeepDeclaredFields(Field.class).values()); + ArrayList fieldNames = new ArrayList<>(); + for (java.lang.reflect.Field field : fieldFields) { + String fieldName = field.getName(); + if (Objects.equals(fieldName, "valueCounts")) continue; + fieldNames.add(fieldName); + } + fieldSpecifier.put(Field.class, fieldNames); + args.put(JsonWriter.FIELD_SPECIFIERS, fieldSpecifier); + } + return JsonWriter.formatJson(JsonWriter.objectToJson(this, args)); + } + public String toJson() { - return JsonWriter.formatJson(JsonWriter.objectToJson(this)); + return toJson(true); } - public void save(String filename, FileFormat format) { + public void save(String filename, FileFormat format, boolean includeCounts) { try { switch (format) { case Binary: @@ -113,7 +133,7 @@ public void save(String filename, FileFormat format) { } break; case Json: - String json = toJson(); + String json = toJson(includeCounts); Files.write(Paths.get(filename), json.getBytes("utf-8")); break; }