From d86ca2a55bfdf74c703e6f293232ff2fd92df0eb Mon Sep 17 00:00:00 2001 From: Marc Halperin Date: Wed, 17 Jun 2015 10:10:40 -0700 Subject: [PATCH 1/2] Added Cmd button to be used on Mac instead of CTRL when selecting rectangles Uses the OS's menu shortcut key mask as the button to hold when selecting multiple labeled rectangles. --- src/org/ohdsi/rabbitInAHat/MappingPanel.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/org/ohdsi/rabbitInAHat/MappingPanel.java b/src/org/ohdsi/rabbitInAHat/MappingPanel.java index b0f22fd9..9291f743 100644 --- a/src/org/ohdsi/rabbitInAHat/MappingPanel.java +++ b/src/org/ohdsi/rabbitInAHat/MappingPanel.java @@ -27,6 +27,7 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.RenderingHints; +import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; @@ -70,7 +71,7 @@ public class MappingPanel extends JPanel implements MouseListener, MouseMotionLi private Mapping mapping; private List sourceComponents = new ArrayList(); - private List cdmComponents = new ArrayList(); + private List cdmComponents = new ArrayList(); private List arrows = new ArrayList(); private LabeledRectangle dragRectangle = null; private LabeledRectangle lastSelectedRectangle = null; @@ -84,6 +85,8 @@ public class MappingPanel extends JPanel implements MouseListener, MouseMotionLi private MappingPanel slaveMappingPanel; private boolean showOnlyConnectedItems = false; + private int shortcutMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + private String lastSourceFilter = ""; private String lastTargetFilter = ""; @@ -355,8 +358,8 @@ public void mouseClicked(MouseEvent event) { detailsListener.showDetails(null); selectedArrow = null; } - - if (!event.isShiftDown() && !event.isControlDown()){ + + if (!event.isShiftDown() && !( (event.getModifiers() & shortcutMask ) == shortcutMask )){ for( LabeledRectangle component : cdmComponents){ component.setSelected(false); } @@ -370,6 +373,7 @@ public void mouseClicked(MouseEvent event) { }else if (event.getX() > cdmX && event.getX() < cdmX + ITEM_WIDTH) { // target component LabeledRectangleClicked(event, getVisibleTargetComponents()); }else if (event.getX() > sourceX + ITEM_WIDTH && event.getX() < cdmX) { // Arrows + lastSelectedRectangle = null; Arrow clickedArrow = null; for (HighlightStatus status: HighlightStatus.values()) { for (Arrow arrow : currentArrowStatus.get(status)) { @@ -407,6 +411,7 @@ public void mouseClicked(MouseEvent event) { detailsListener.showDetails(null); } }else{ + lastSelectedRectangle = null; detailsListener.showDetails(null); } @@ -696,7 +701,7 @@ private void LabeledRectangleClicked(MouseEvent event, List co if (component.contains(event.getPoint())) { - if(event.isControlDown()){ // Add one at a time + if((event.getModifiers() & shortcutMask ) == shortcutMask ){ // Add one at a time component.toggleSelected(); }else if(event.isShiftDown()){ // Add in consecutive order From 6e5841a718ae96537d8c990b7d10c78e49582196 Mon Sep 17 00:00:00 2001 From: Marc Halperin Date: Wed, 17 Jun 2015 12:02:39 -0700 Subject: [PATCH 2/2] Fixes bug that caused crash from loading target schema's This fixes a bug that caused the program to crash when trying to run outside of eclipse. Also renames the cdmv4 and cdmv5 csv's so the schema name does not include the word model. --- src/org/ohdsi/rabbitInAHat/DetailsPanel.java | 1 - .../ohdsi/rabbitInAHat/RabbitInAHatMain.java | 24 +++++++++++++++---- .../dataModel/{CDMV4Model.csv => CDMV4.csv} | 0 .../dataModel/{CDMv5Model.csv => CDMV5.csv} | 0 .../rabbitInAHat/dataModel/Database.java | 23 ++++++++---------- 5 files changed, 30 insertions(+), 18 deletions(-) rename src/org/ohdsi/rabbitInAHat/dataModel/{CDMV4Model.csv => CDMV4.csv} (100%) rename src/org/ohdsi/rabbitInAHat/dataModel/{CDMv5Model.csv => CDMV5.csv} (100%) diff --git a/src/org/ohdsi/rabbitInAHat/DetailsPanel.java b/src/org/ohdsi/rabbitInAHat/DetailsPanel.java index aa57df4a..0f012c11 100644 --- a/src/org/ohdsi/rabbitInAHat/DetailsPanel.java +++ b/src/org/ohdsi/rabbitInAHat/DetailsPanel.java @@ -25,7 +25,6 @@ import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; -import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.text.DecimalFormat; import java.util.ArrayList; diff --git a/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java b/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java index c5f227db..a7f763da 100644 --- a/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java +++ b/src/org/ohdsi/rabbitInAHat/RabbitInAHatMain.java @@ -28,8 +28,13 @@ import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.List; + import javax.swing.*; import javax.swing.border.TitledBorder; import javax.swing.filechooser.FileFilter; @@ -376,11 +381,22 @@ public void actionPerformed(ActionEvent event) { } private void doSetTargetCustom(String fileName) { - ETL etl = new ETL(ObjectExchange.etl.getSourceDatabase(),Database.generateModelFromCSV(fileName)); - etl.copyETLMappings(ObjectExchange.etl); - tableMappingPanel.setMapping(etl.getTableToTableMapping()); - ObjectExchange.etl = etl; + if( fileName != null ){ + File file = new File(fileName); + InputStream stream; + + try{ + stream = new FileInputStream(file); + ETL etl = new ETL(ObjectExchange.etl.getSourceDatabase(),Database.generateModelFromCSV(stream, file.getName())); + + etl.copyETLMappings(ObjectExchange.etl); + tableMappingPanel.setMapping(etl.getTableToTableMapping()); + ObjectExchange.etl = etl; + }catch (IOException e) { + //Do nothing if error + } + } } diff --git a/src/org/ohdsi/rabbitInAHat/dataModel/CDMV4Model.csv b/src/org/ohdsi/rabbitInAHat/dataModel/CDMV4.csv similarity index 100% rename from src/org/ohdsi/rabbitInAHat/dataModel/CDMV4Model.csv rename to src/org/ohdsi/rabbitInAHat/dataModel/CDMV4.csv diff --git a/src/org/ohdsi/rabbitInAHat/dataModel/CDMv5Model.csv b/src/org/ohdsi/rabbitInAHat/dataModel/CDMV5.csv similarity index 100% rename from src/org/ohdsi/rabbitInAHat/dataModel/CDMv5Model.csv rename to src/org/ohdsi/rabbitInAHat/dataModel/CDMV5.csv diff --git a/src/org/ohdsi/rabbitInAHat/dataModel/Database.java b/src/org/ohdsi/rabbitInAHat/dataModel/Database.java index f49662ca..dfa0845a 100644 --- a/src/org/ohdsi/rabbitInAHat/dataModel/Database.java +++ b/src/org/ohdsi/rabbitInAHat/dataModel/Database.java @@ -17,7 +17,7 @@ ******************************************************************************/ package org.ohdsi.rabbitInAHat.dataModel; -import java.io.File; +import java.io.InputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; @@ -33,15 +33,13 @@ public class Database implements Serializable { public enum CDMVersion { - CDMV4 ("CDMV4Model.csv", "CDMv4"), - CDMV5 ("CDMv5Model.csv", "CDMv5"); + CDMV4 ("CDMV4.csv"), + CDMV5 ("CDMV5.csv"); private final String fileName; - private final String dbName; - CDMVersion(String fileName, String dbName){ + CDMVersion(String fileName){ this.fileName = fileName; - this.dbName = dbName; } } @@ -62,18 +60,16 @@ public String getDbName(){ } public static Database generateCDMModel(CDMVersion cdmVersion) { - String path = Database.class.getResource(cdmVersion.fileName).getFile(); - return Database.generateModelFromCSV(path); + return Database.generateModelFromCSV(Database.class.getResourceAsStream(cdmVersion.fileName), cdmVersion.fileName); } - public static Database generateModelFromCSV(String fileName) { + public static Database generateModelFromCSV(InputStream stream, String dbName) { Database database = new Database(); - String dbname = new File(fileName).getName(); - database.dbName = dbname.substring(0,dbname.lastIndexOf(".")); - + database.dbName = dbName.substring(0, dbName.lastIndexOf(".")); + Map nameToTable = new HashMap(); - for (Row row : new ReadCSVFileWithHeader(fileName)) { + for (Row row : new ReadCSVFileWithHeader(stream)) { Table table = nameToTable.get(row.get("TABLE_NAME").toLowerCase()); @@ -171,4 +167,5 @@ private static String[][] getValueCounts(QuickAndDirtyXlsxReader workbook, Strin } return list.toArray(new String[list.size()][2]); } + }