diff --git a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/actions/EnrichmentMapSessionAction.java b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/actions/EnrichmentMapSessionAction.java index da89ca6e9..ad67e32bd 100644 --- a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/actions/EnrichmentMapSessionAction.java +++ b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/actions/EnrichmentMapSessionAction.java @@ -415,7 +415,7 @@ public void handleEvent(SessionAboutToBeSavedEvent e) { String tmpDir = System.getProperty("java.io.tmpdir"); System.out.println("java.io.tmpdir: [" + tmpDir + "]"); - String prop_file_content = ""; + StringBuilder prop_file_content = new StringBuilder(); //get the networks HashMap networks = EnrichmentMapManager.getInstance().getCyNetworkList(); @@ -447,8 +447,9 @@ public void handleEvent(SessionAboutToBeSavedEvent e) { //geneset file for PostAnalysis Signature Genesets File siggmt = new File(tmpDir,name+".signature.gmt"); - prop_file_content = prop_file_content + "Version\t2.0\n"; - prop_file_content = prop_file_content + params.toString(); + prop_file_content.append("Version\t2.0\n"); + prop_file_content.append(params.toString()); + try{ if (!em.getSignatureGenesets().isEmpty() ) { BufferedWriter sigGmtwriter = new BufferedWriter(new FileWriter(siggmt)); @@ -474,7 +475,7 @@ public void handleEvent(SessionAboutToBeSavedEvent e) { HashMap all_datasets = em.getDatasets(); //output to the property file how many datasets we have (so we know on reload) - prop_file_content = prop_file_content + "Datasets\t"+ all_datasets.keySet().toString() +"\n"; + prop_file_content.append("Datasets\t"+ all_datasets.keySet().toString() + "\n"); for(Iterator k = all_datasets.keySet().iterator(); k.hasNext();){ String dataset_name = k.next().toString(); @@ -499,7 +500,7 @@ public void handleEvent(SessionAboutToBeSavedEvent e) { enr1writer_backcomp.close(); pFileList.add(enrichmentresults_backcomp); - prop_file_content = prop_file_content + em.getDataset(current).getSetofgenesets().toString(current); + prop_file_content.append(em.getDataset(current).getSetofgenesets().toString(current)); //enrichments File enrichmentresults = new File(tmpDir, name+"." + dataset_name +".ENR.txt"); @@ -509,7 +510,7 @@ public void handleEvent(SessionAboutToBeSavedEvent e) { enr1writer.close(); pFileList.add(enrichmentresults); - prop_file_content = prop_file_content + em.getDataset(current).getEnrichments().toString(current); + prop_file_content.append(em.getDataset(current).getEnrichments().toString(current)); //expression if(em.getDataset(current).getExpressionSets() != null){ @@ -521,7 +522,7 @@ public void handleEvent(SessionAboutToBeSavedEvent e) { pFileList.add(expression); //print out the information about the expression files - prop_file_content = prop_file_content + em.getDataset(current).getExpressionSets().toString(current); + prop_file_content.append(em.getDataset(current).getExpressionSets().toString(current)); //save all the rank files if(!em.getDataset(current).getExpressionSets().getRanks().isEmpty()){ @@ -553,7 +554,7 @@ public void handleEvent(SessionAboutToBeSavedEvent e) { } } BufferedWriter writer = new BufferedWriter(new FileWriter(session_prop_file)); - writer.write(prop_file_content); + writer.write(prop_file_content.toString()); writer.close(); pFileList.add(session_prop_file); } diff --git a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/heatmap/ColumnHeaderVerticalRenderer.java b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/heatmap/ColumnHeaderVerticalRenderer.java index 27ffbc5ee..45e3dbbb8 100644 --- a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/heatmap/ColumnHeaderVerticalRenderer.java +++ b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/heatmap/ColumnHeaderVerticalRenderer.java @@ -43,12 +43,14 @@ package org.baderlab.csplugins.enrichmentmap.heatmap; +import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; +import java.util.Optional; import javax.swing.Icon; import javax.swing.ImageIcon; @@ -66,14 +68,24 @@ *

* Flips column headers to vertical position */ +@SuppressWarnings("serial") public class ColumnHeaderVerticalRenderer extends DefaultTableCellRenderer { + private Optional labelBackgroundColor; + + public ColumnHeaderVerticalRenderer(Color labelBackgroundColor) { + this.labelBackgroundColor = Optional.ofNullable(labelBackgroundColor); + } + + public ColumnHeaderVerticalRenderer() { + this.labelBackgroundColor = Optional.empty(); + } + @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - JLabel label = new JLabel(); label.setBorder(UIManager.getBorder("TableHeader.cellBorder")); @@ -81,7 +93,7 @@ public Component getTableCellRendererComponent(JTable table, label.setForeground(UIManager.getColor("TableHeader.foreground")); label.setFont(UIManager.getFont("TableHeader.font")); - Icon icon = VerticalCaption.getVerticalCaption(label, value.toString(), false); + Icon icon = getVerticalCaption(label, value.toString(), false); label.setIcon(icon); label.setVerticalAlignment(JLabel.BOTTOM); @@ -89,11 +101,9 @@ public Component getTableCellRendererComponent(JTable table, return label; } -} - -class VerticalCaption { - static Icon getVerticalCaption(JComponent component, String caption, boolean clockwise) { + + private Icon getVerticalCaption(JComponent component, String caption, boolean clockwise) { Font f = component.getFont(); FontMetrics fm = component.getFontMetrics(f); int captionHeight = fm.getHeight(); @@ -101,6 +111,11 @@ static Icon getVerticalCaption(JComponent component, String caption, boolean clo BufferedImage bi = new BufferedImage(captionHeight + 4, captionWidth + 4, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) bi.getGraphics(); + if(labelBackgroundColor.isPresent()) { + g.setColor(labelBackgroundColor.get()); + g.fillRect(0, 0, bi.getWidth(), bi.getHeight()); + } + g.setColor(component.getForeground()); g.setFont(f); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); diff --git a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/GeneExpressionMatrix.java b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/GeneExpressionMatrix.java index 2d6cdf181..1bead5331 100644 --- a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/GeneExpressionMatrix.java +++ b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/GeneExpressionMatrix.java @@ -43,6 +43,7 @@ package org.baderlab.csplugins.enrichmentmap.model; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -409,7 +410,7 @@ public String toString(String ds) { paramVariables.append(ds + "%" + simpleName + "%expressionUniverse\t" + expressionUniverse + "\n"); if(phenotypes != null) - paramVariables.append(ds + "%" + simpleName + "%phenotypes\t" + phenotypes.toString() + "\n"); + paramVariables.append(ds + "%" + simpleName + "%phenotypes\t" + Arrays.toString(phenotypes) + "\n"); return paramVariables.toString(); } @@ -418,7 +419,7 @@ public String toString(String ds) { * Restores parameters saved in the session file. * Note, most of this object is restored by the ExpressionFileReaderTask. */ - public void restoreProps(String ds, Map props) { + public void restoreProps(String ds, Map props) { String simpleName = this.getClass().getSimpleName(); String val = props.get(ds + "%" + simpleName + "%expressionUniverse"); if(val != null) { @@ -426,6 +427,33 @@ public void restoreProps(String ds, Map props) { expressionUniverse = Integer.parseInt(val); } catch(NumberFormatException e) {} } + + if(props.containsKey(ds + "%" + simpleName + "%phenotype1")) { + String prop = props.get(ds + "%" + simpleName + "%phenotype1"); + if(!"null".equals(prop)) { + this.phenotype1 = prop; + } + } + if(props.containsKey(ds + "%" + simpleName + "%phenotype2")) { + String prop = props.get(ds + "%" + simpleName + "%phenotype2"); + if(!"null".equals(prop)) { + this.phenotype2 = prop; + } + } + + String[] col_names = getColumnNames(); + + if(props.containsKey(ds + "%" + simpleName + "%phenotypes") && col_names != null && col_names.length > 0) { + try { + String prop = props.get(ds + "%" + simpleName + "%phenotypes"); + if(!prop.startsWith("[Ljava.lang.String")) { // avoid bug #144 + String[] restored_phenotypes = prop.replace("[", "").replace("]", "").split(", "); + if(restored_phenotypes.length == col_names.length-2) { + this.phenotypes = restored_phenotypes; + } + } + } catch(Exception e) { } + } } diff --git a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/HeatMapPanel.java b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/HeatMapPanel.java index b9a46b919..b6c2708c9 100644 --- a/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/HeatMapPanel.java +++ b/EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/HeatMapPanel.java @@ -439,13 +439,9 @@ public void updatePanel() { table.setCellSelectionEnabled(true); //set the table header renderer to the vertical renderer - ColumnHeaderVerticalRenderer pheno1_renderer = new ColumnHeaderVerticalRenderer(); - pheno1_renderer.setBackground(EnrichmentMapVisualStyle.LIGHTEST_PHENOTYPE_1); - ColumnHeaderVerticalRenderer pheno2_renderer = new ColumnHeaderVerticalRenderer(); - pheno2_renderer.setBackground(EnrichmentMapVisualStyle.LIGHTEST_PHENOTYPE_2); - + ColumnHeaderVerticalRenderer pheno1_renderer = new ColumnHeaderVerticalRenderer(EnrichmentMapVisualStyle.LIGHTEST_PHENOTYPE_1); + ColumnHeaderVerticalRenderer pheno2_renderer = new ColumnHeaderVerticalRenderer(EnrichmentMapVisualStyle.LIGHTEST_PHENOTYPE_2); ColumnHeaderVerticalRenderer default_renderer = new ColumnHeaderVerticalRenderer(); - default_renderer.setBackground(Color.white); if (params.isData2() && map.getDataset(EnrichmentMap.DATASET2).getExpressionSets() != null && !map.getDataset(EnrichmentMap.DATASET1) .getExpressionSets().getFilename().equalsIgnoreCase(map.getDataset(EnrichmentMap.DATASET2).getExpressionSets().getFilename())) {