Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix source fields in RiaH mapping view #61

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,22 @@ public enum CDMVersion {
private static final String CONCEPT_ID_HINTS_FILE_NAME = "CDMConceptIDHints.csv";
public String conceptIdHintsVocabularyVersion;
private List<Integer> selectedIndices;
private boolean hasStemTable = false;
private Table stemTable;

public List<Table> getTables() {
if(selectedIndices != null){
List<Table> maskedTables = new ArrayList<>();
for (Integer selectedIndex : selectedIndices) {
maskedTables.add(tables.get(selectedIndex));
}
if (hasStemTable) {
maskedTables.add(stemTable);
}
return maskedTables;
} else {
return tables;
}
return tables;
}

public List<Table> getUnmaskedTables() {
Expand All @@ -87,6 +93,16 @@ public void addTable(Table table) {
this.tables.add(table);
}

public void addStemTable(Table stemTable) {
this.stemTable = stemTable;
this.hasStemTable = true;
}

public void removeStemTable() {
this.hasStemTable = false;
this.stemTable = null;
}

public String getDbName() {
return dbName;
}
Expand Down
8 changes: 8 additions & 0 deletions rabbitinahat/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,14 @@
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<encoding>ISO-8859-1</encoding>
</configuration>
</plugin>
</plugins>
<testResources>
<testResource>
Expand Down
4 changes: 4 additions & 0 deletions rabbitinahat/src/main/java/org/ohdsi/rabbitInAHat/Arrow.java
Original file line number Diff line number Diff line change
Expand Up @@ -258,4 +258,8 @@ public boolean isSourceAndTargetVisible(){
public boolean isConnected(){
return source != null && target != null;
}

public Point getPointInside() {
return new Point((x1 + x2) / 2, (y1 + y2) / 2);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ void generate(String fileName, DocumentType documentType) {
}

private void addTableLevelSection() {
MappingPanel mappingPanel = new MappingPanel(etl.getTableToTableMapping());
MappingPanel mappingPanel = new MappingPanel(etl.getTableToTableMapping(), MappingPanel.MappingType.TABLES);
mappingPanel.setShowOnlyConnectedItems(true);
int height = mappingPanel.getMinimumSize().height;
mappingPanel.setSize(800, height);
Expand Down Expand Up @@ -130,7 +130,7 @@ private boolean addTargetTableSection(Table targetTable) {
}

// Add image of field to field mapping
MappingPanel mappingPanel = new MappingPanel(fieldtoFieldMapping);
MappingPanel mappingPanel = new MappingPanel(fieldtoFieldMapping, MappingPanel.MappingType.FIELDS);
mappingPanel.setShowOnlyConnectedItems(true);
int height = mappingPanel.getMinimumSize().height;
mappingPanel.setSize(800, height);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,33 +111,34 @@ private static void addTargetTableSection(CustomXWPFDocument document, ETL etl,
run.setFontSize(18);

createDocumentParagraph(document, targetTable.getComment());

for (ItemToItemMap tableToTableMap : etl.getTableToTableMapping().getSourceToTargetMaps())
if (tableToTableMap.getTargetItem() == targetTable && etl.isSelectedTable(tableToTableMap.getSourceItem())) {

for (ItemToItemMap tableToTableMap : etl.getTableToTableMapping().getSourceToTargetMaps()) {
MappableItem item = tableToTableMap.getSourceItem();
if (tableToTableMap.getTargetItem() == targetTable && (item.getClass().isInstance(Field.class) || etl.isSelectedTable(tableToTableMap.getSourceItem()))) {
Table sourceTable = (Table) tableToTableMap.getSourceItem();
Mapping<Field> fieldtoFieldMapping = etl.getFieldToFieldMapping(sourceTable, targetTable);

paragraph = document.createParagraph();
run = paragraph.createRun();
run.setText("Reading from " + tableToTableMap.getSourceItem());
run.setFontSize(14);

createDocumentParagraph(document, tableToTableMap.getLogic());

createDocumentParagraph(document, tableToTableMap.getComment());

// Add picture of field to field mapping
MappingPanel mappingPanel = new MappingPanel(fieldtoFieldMapping);
MappingPanel mappingPanel = new MappingPanel(fieldtoFieldMapping, MappingPanel.MappingType.FIELDS);
mappingPanel.setShowOnlyConnectedItems(true);
int height = mappingPanel.getMinimumSize().height;
mappingPanel.setSize(800, height);

BufferedImage im = new BufferedImage(800, height, BufferedImage.TYPE_INT_ARGB);
im.getGraphics().setColor(Color.WHITE);
im.getGraphics().fillRect(0, 0, im.getWidth(), im.getHeight());
mappingPanel.paint(im.getGraphics());
document.addPicture(im, 600, height * 6 / 8);

// Add table of field to field mapping
XWPFTable table = document.createTable(fieldtoFieldMapping.getTargetItems().size() + 1, 4);
// table.setWidth(2000);
Expand All @@ -158,7 +159,7 @@ private static void addTargetTableSection(CustomXWPFDocument document, ETL etl,
break;
}
}

StringBuilder source = new StringBuilder();
StringBuilder logic = new StringBuilder();
StringBuilder comment = new StringBuilder();
Expand All @@ -167,17 +168,17 @@ private static void addTargetTableSection(CustomXWPFDocument document, ETL etl,
if (source.length() != 0)
source.append("\n");
source.append(fieldToFieldMap.getSourceItem().getName().trim());

if (logic.length() != 0)
logic.append("\n");
logic.append(fieldToFieldMap.getLogic().trim());

if (comment.length() != 0)
comment.append("\n");
comment.append(fieldToFieldMap.getComment().trim());
}
}

for (Field field : targetTable.getFields()) {
if (field.getName().equals(targetField.getName())) {
if (comment.length() != 0)
Expand All @@ -194,13 +195,13 @@ private static void addTargetTableSection(CustomXWPFDocument document, ETL etl,
} else {
row.getCell(0).setText(fieldName);
}

createCellParagraph(row.getCell(1), source.toString());
createCellParagraph(row.getCell(2), logic.toString());
createCellParagraph(row.getCell(3), comment.toString());
}
}

}
}

private static void setTextAndHeaderShading(XWPFTableCell cell, String text) {
Expand All @@ -218,7 +219,7 @@ private static void addTableLevelSection(CustomXWPFDocument document, ETL etl) t
XWPFParagraph tmpParagraph = document.createParagraph();
XWPFRun tmpRun = tmpParagraph.createRun();

MappingPanel mappingPanel = new MappingPanel(etl.getTableToTableMapping());
MappingPanel mappingPanel = new MappingPanel(etl.getTableToTableMapping(), MappingPanel.MappingType.TABLES);
mappingPanel.setShowOnlyConnectedItems(true);
int height = mappingPanel.getMinimumSize().height;
mappingPanel.setSize(800, height);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,16 @@ public class MappingPanel extends JPanel implements MouseListener, MouseMotionLi
public static final int BORDER_HEIGHT = 25;
// Extra margin between header and first item when using stem table
public static final int STEM_HEIGHT_MARGIN = ITEM_HEIGHT / 2;
public static enum MappingType {
TABLES, FIELDS
}
private MappingType mappingType = MappingType.TABLES;

private int sourceX;
private int cdmX;
private int stemX;

private Mapping<?> mapping;
private Mapping<? extends MappableItem> mapping;
private List<LabeledRectangle> sourceComponents = new ArrayList<LabeledRectangle>();
private List<LabeledRectangle> cdmComponents = new ArrayList<LabeledRectangle>();
private List<Arrow> arrows = new ArrayList<Arrow>();
Expand All @@ -95,8 +99,12 @@ public class MappingPanel extends JPanel implements MouseListener, MouseMotionLi
private DetailsListener detailsListener;

@SuppressWarnings("serial")
public MappingPanel(Mapping<?> mapping) {
private MappingPanel(Mapping<? extends MappableItem> mapping) {
}

public MappingPanel(Mapping<? extends MappableItem> mapping, MappingType mappingType) {
super();
this.mappingType = mappingType;
this.mapping = mapping;
this.setFocusable(true);
addMouseListener(this);
Expand Down Expand Up @@ -129,7 +137,17 @@ public boolean isMinimized() {
return minimized;
}

public void setMapping(Mapping<?> mapping) {
public void setFieldMapping(Mapping<? extends MappableItem> mapping) {
mappingType = MappingType.FIELDS;
setMapping(mapping);
}

public void setTableMapping(Mapping<? extends MappableItem> mapping) {
mappingType = MappingType.TABLES;
setMapping(mapping);
}

private void setMapping(Mapping<? extends MappableItem> mapping) {
maximize();
this.mapping = mapping;
renderModel();
Expand Down Expand Up @@ -166,7 +184,7 @@ private void renderModel() {
cdmComponents.clear();
arrows.clear();
for (MappableItem item : mapping.getSourceItems()) {
if (ObjectExchange.etl.isSelectedTable(item)) {
if (isTableAndSelected(item)) {
if (!showOnlyConnectedItems || isConnected(item)) {
if (item.isStem())
sourceComponents.add(new LabeledRectangle(0, 400, ITEM_WIDTH, ITEM_HEIGHT, item, new Color(160, 0, 160)));
Expand All @@ -184,7 +202,7 @@ private void renderModel() {
}
}
for (ItemToItemMap map : mapping.getSourceToTargetMaps()) {
if (ObjectExchange.etl.isSelectedTable(map.getSourceItem())) {
if (isTableAndSelected(map.getSourceItem())) {
Arrow component = new Arrow(getComponentWithItem(map.getSourceItem(), sourceComponents), getComponentWithItem(map.getTargetItem(), cdmComponents),
map);
arrows.add(component);
Expand Down Expand Up @@ -436,7 +454,7 @@ public void mouseClicked(MouseEvent event) {
if (event.getClickCount() == 2) { // double click
zoomArrow = clickedArrow;
if (slaveMappingPanel != null) {
slaveMappingPanel.setMapping(ObjectExchange.etl.getFieldToFieldMapping((Table) zoomArrow.getSource().getItem(), (Table) zoomArrow
slaveMappingPanel.setFieldMapping(ObjectExchange.etl.getFieldToFieldMapping((Table) zoomArrow.getSource().getItem(), (Table) zoomArrow
.getTarget().getItem()));
new AnimateThread(true).start();

Expand Down Expand Up @@ -779,7 +797,7 @@ private void LabeledRectangleClicked(MouseEvent event, List<LabeledRectangle> co
if (event.getClickCount() == 2 && isSourceComponent && !component.getItem().isStem()) {
if (slaveMappingPanel != null) {
// Create dummy mapping
slaveMappingPanel.setMapping(
slaveMappingPanel.setFieldMapping(
new Mapping<>(((Table) component.getItem()).getFields(), new ArrayList<>(), new ArrayList<>())
);
// Zoom arrow has to be set, but will not be shown
Expand Down Expand Up @@ -910,4 +928,8 @@ public String getTargetDbName() {
public boolean isBeingFiltered() {
return lastSourceFilter != "" || lastTargetFilter != "";
}

private boolean isTableAndSelected(MappableItem item) {
return mappingType == MappingType.FIELDS || item.isStem() || ObjectExchange.etl.isSelectedTable(item);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ private void toggleTableStatusRegexCase(Boolean bool){

private void updateIndices(){
ObjectExchange.etl.getSourceDatabase().setSelectedIndices(getSelectedIndices());
mappingPanel.setMapping(ObjectExchange.etl.getTableToTableMapping());
mappingPanel.setTableMapping(ObjectExchange.etl.getTableToTableMapping());
}

public List<Integer> getSelectedIndices(){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public class RabbitInAHatMain implements ResizeListener {

public final static String PANEL_TABLE_MAPPING = "Table Mapping";
public final static String PANEL_FIELD_MAPPING = "Field Mapping";
public final static String PANEL_DETAILS = "Details";
public final static String MASK_LIST_DIALOG = "Mask List Dialog";

public final static String DOCUMENTATION_URL = "http://ohdsi.github.io/WhiteRabbit/RabbitInAHat.html";
Expand Down Expand Up @@ -140,7 +141,7 @@ public void windowClosing(WindowEvent e) {

ObjectExchange.etl = etl;

tableMappingPanel = new MappingPanel(etl.getTableToTableMapping());
tableMappingPanel = new MappingPanel(etl.getTableToTableMapping(), MappingPanel.MappingType.TABLES);
tableMappingPanel.setName(PANEL_TABLE_MAPPING);
tableMappingPanel.addResizeListener(this);
scrollPane1 = new JScrollPane(tableMappingPanel);
Expand All @@ -151,7 +152,11 @@ public void windowClosing(WindowEvent e) {
scrollPane1.setOpaque(true);
scrollPane1.setBackground(Color.WHITE);

fieldMappingPanel = new MappingPanel(etl.getTableToTableMapping());
// the statement below does not make sense (inserts a table mapping in the field mapping panel), but there is no
// easy way to initialize the panel in a meaningful way, and it does prevent some things in the UI from being
// uninitialized, so leaving it as-is
fieldMappingPanel = new MappingPanel(etl.getTableToTableMapping(), MappingPanel.MappingType.TABLES);

fieldMappingPanel.setName(PANEL_FIELD_MAPPING);
tableMappingPanel.setSlaveMappingPanel(fieldMappingPanel);
fieldMappingPanel.addResizeListener(this);
Expand All @@ -167,6 +172,7 @@ public void windowClosing(WindowEvent e) {
tableFieldSplitPane.setName("splitpane");

detailsPanel = new DetailsPanel();
detailsPanel.setName(PANEL_DETAILS);
detailsPanel.setBorder(new TitledBorder("Details"));
detailsPanel.setPreferredSize(new Dimension(200, 500));
detailsPanel.setMinimumSize(new Dimension(0, 0));
Expand Down Expand Up @@ -249,8 +255,8 @@ private JMenuBar createMenuBar() {
menuBar.add(editMenu);
addMenuItem(editMenu, ACTION_DISCARD_COUNTS, evt -> this.doDiscardCounts());
addMenuItem(editMenu, ACTION_FILTER, evt -> this.doOpenFilterDialog(), KeyEvent.VK_F);
addMenuItem(editMenu, ACTION_ADD_STEM_TABLE, evt -> this.doAddStemTable());
addMenuItem(editMenu, ACTION_REMOVE_STEM_TABLE, evt -> this.doRemoveStemTable());
addMenuItem(editMenu, ACTION_ADD_STEM_TABLE, evt -> this.doAddStemTable()).setName(ACTION_ADD_STEM_TABLE);
addMenuItem(editMenu, ACTION_REMOVE_STEM_TABLE, evt -> this.doRemoveStemTable()).setName(ACTION_REMOVE_STEM_TABLE);
addMenuItem(editMenu, ACTION_HIDE_TABLES, evt -> this.doHideTables()).setName(ACTION_HIDE_TABLES);

JMenu targetDatabaseMenu = new JMenu("Set Target Database");
Expand Down Expand Up @@ -437,7 +443,7 @@ private void doAddStemTable() {
}

StemTableFactory.addStemTable(ObjectExchange.etl);
tableMappingPanel.setMapping(ObjectExchange.etl.getTableToTableMapping());
tableMappingPanel.setTableMapping(ObjectExchange.etl.getTableToTableMapping());
}

private void doRemoveStemTable() {
Expand All @@ -454,7 +460,7 @@ private void doRemoveStemTable() {

if (PromptResult==JOptionPane.YES_OPTION) {
StemTableFactory.removeStemTable(ObjectExchange.etl);
tableMappingPanel.setMapping(ObjectExchange.etl.getTableToTableMapping());
tableMappingPanel.setTableMapping(ObjectExchange.etl.getTableToTableMapping());
}
}

Expand Down Expand Up @@ -501,7 +507,7 @@ private void doSetTargetCustom(String filename) {
ETL etl = new ETL(ObjectExchange.etl.getSourceDatabase(), Database.generateModelFromCSV(stream, file.getName()));

etl.copyETLMappings(ObjectExchange.etl);
tableMappingPanel.setMapping(etl.getTableToTableMapping());
tableMappingPanel.setTableMapping(etl.getTableToTableMapping());
ObjectExchange.etl = etl;
} catch (Exception e) {
e.printStackTrace();
Expand All @@ -518,7 +524,7 @@ private void doSetTargetCustom(String filename) {
private void doSetTargetCDM(CDMVersion cdmVersion) throws IOException {
ETL etl = new ETL(ObjectExchange.etl.getSourceDatabase(), Database.generateCDMModel(cdmVersion));
etl.copyETLMappings(ObjectExchange.etl);
tableMappingPanel.setMapping(etl.getTableToTableMapping());
tableMappingPanel.setTableMapping(etl.getTableToTableMapping());
ObjectExchange.etl = etl;
}

Expand Down Expand Up @@ -588,7 +594,7 @@ private void doOpenSpecs(String filename) {
: filename.endsWith(".json") ? ETL.FileFormat.Json : ETL.FileFormat.Binary;
try {
ObjectExchange.etl = ETL.fromFile(filename, fileFormat);
tableMappingPanel.setMapping(ObjectExchange.etl.getTableToTableMapping());
tableMappingPanel.setTableMapping(ObjectExchange.etl.getTableToTableMapping());
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Invalid File Format", "Error", JOptionPane.ERROR_MESSAGE);
Expand Down Expand Up @@ -623,7 +629,7 @@ private void doOpenScanReport(String filename) {
etl.setSourceDatabase(Database.generateModelFromScanReport(filename));
etl.setTargetDatabase(ObjectExchange.etl.getTargetDatabase());
ObjectExchange.etl = etl;
tableMappingPanel.setMapping(etl.getTableToTableMapping());
tableMappingPanel.setTableMapping(etl.getTableToTableMapping());
ObjectExchange.etl = etl;
} catch (Exception e) {
e.printStackTrace();
Expand Down Expand Up @@ -658,7 +664,7 @@ private void doOpenScanReport(String filename) {
oldData.addTable(newTable);
}
}
tableMappingPanel.setMapping(ObjectExchange.etl.getTableToTableMapping()); // Needed to render the model
tableMappingPanel.setTableMapping(ObjectExchange.etl.getTableToTableMapping()); // Needed to render the model
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Invalid File Format", "Error", JOptionPane.ERROR_MESSAGE);
Expand Down
Loading