X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FBioJsHTMLOutput.java;h=7423e20c1b34d580bb05947ea9e8e182ef6903f7;hb=d884105fcd0ac029684c62573e706e5d88b4301c;hp=6e2ec8c05f9d9f2e4a022a282ac85156fc7e4983;hpb=f511799b8f00b4a224f0f902ad6f25df862c60ed;p=jalview.git diff --git a/src/jalview/io/BioJsHTMLOutput.java b/src/jalview/io/BioJsHTMLOutput.java index 6e2ec8c..7423e20 100644 --- a/src/jalview/io/BioJsHTMLOutput.java +++ b/src/jalview/io/BioJsHTMLOutput.java @@ -1,7 +1,5 @@ package jalview.io; -import static java.nio.file.Files.readAllBytes; -import static java.nio.file.Paths.get; import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceI; import jalview.gui.AlignViewport; @@ -12,75 +10,122 @@ import jalview.json.binding.v1.BioJsAlignmentPojo; import jalview.json.binding.v1.BioJsSeqPojo; import jalview.util.MessageManager; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; import java.io.PrintWriter; - -import org.json.simple.parser.ParseException; +import java.net.URL; import com.json.JSONException; -public class BioJsHTMLOutput { - private AlignViewport av; - private FeatureRenderer fr; - - public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr, FeatureRenderer fr1) { - this.av = ap.av; - this.fr = new FeatureRenderer(ap); - fr.transferSettings(fr1); - exportAsBioJsHtml(); - } - - private void exportAsBioJsHtml() { - try { - JalviewFileChooser jvFileChooser = getJalviewFileChooserOption(); - int fileChooserOpt = jvFileChooser.showSaveDialog(null); - if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) { - jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser.getSelectedFile().getParent()); - String selectedFile = jvFileChooser.getSelectedFile().getPath(); - String generartedBioJs = generateBioJsAlignmentData(av.getAlignment()); - PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(selectedFile)); - out.print(generartedBioJs); - out.close(); - jalview.util.BrowserLauncher.openURL("file:///" + selectedFile); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - private JalviewFileChooser getJalviewFileChooserOption() { - JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "html" }, new String[] { "HTML files" }, "HTML files"); - chooser.setFileView(new JalviewFileView()); - - // TODO uncomment when supported by MassageManager - chooser.setDialogTitle(MessageManager.getString("label.save_as_biojs_html")); - chooser.setDialogTitle("save as BioJs HTML"); - chooser.setToolTipText(MessageManager.getString("action.save")); - - return chooser; - } - - private String generateBioJsAlignmentData(AlignmentI alignment) throws IOException, JSONException { - BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo(); - int count = 0; - for (SequenceI seq : alignment.getSequences()) { - StringBuilder name = new StringBuilder(); - name.append(seq.getName()).append("/").append(seq.getStart()).append("-").append(seq.getEnd()); - bjsAlignment.getSeqs().add(new BioJsSeqPojo(String.valueOf(++count), name.toString(), seq.getSequenceAsString())); - } - - // Taylor - // av.getGlobalColourScheme().; - String seqs = new com.json.JSONObject(bjsAlignment).getString("seqs"); - String bioJSTemplate = new String(readAllBytes(get("resources/templates/BioJSTemplate.txt"))); - - // av.get - // fr. - return bioJSTemplate.replaceAll("#sequenceData#", seqs).replaceAll("#scheme#", "zappo"); - } - - public static void main(String[] args) throws IOException, ParseException { - - } +public class BioJsHTMLOutput +{ + private AlignViewport av; + + private FeatureRenderer fr; + + public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr, + FeatureRenderer fr1) + { + this.av = ap.av; + this.fr = new FeatureRenderer(ap); + fr.transferSettings(fr1); + exportAsBioJsHtml(); + } + + private void exportAsBioJsHtml() + { + try + { + JalviewFileChooser jvFileChooser = getJalviewFileChooserOption(); + int fileChooserOpt = jvFileChooser.showSaveDialog(null); + if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) + { + jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser + .getSelectedFile().getParent()); + String selectedFile = jvFileChooser.getSelectedFile().getPath(); + String generartedBioJs = generateBioJsAlignmentData(av + .getAlignment()); + PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( + selectedFile)); + out.print(generartedBioJs); + out.close(); + jalview.util.BrowserLauncher.openURL("file:///" + selectedFile); + } + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + + private JalviewFileChooser getJalviewFileChooserOption() + { + JalviewFileChooser chooser = new JalviewFileChooser( + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] + { "html" }, new String[] + { "HTML files" }, "HTML files"); + chooser.setFileView(new JalviewFileView()); + + // TODO uncomment when supported by MassageManager + chooser.setDialogTitle(MessageManager + .getString("label.save_as_biojs_html")); + chooser.setDialogTitle("save as BioJs HTML"); + chooser.setToolTipText(MessageManager.getString("action.save")); + + return chooser; + } + + private String generateBioJsAlignmentData(AlignmentI alignment) + throws IOException, JSONException + { + BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo(); + int count = 0; + for (SequenceI seq : alignment.getSequences()) + { + StringBuilder name = new StringBuilder(); + name.append(seq.getName()).append("/").append(seq.getStart()) + .append("-").append(seq.getEnd()); + bjsAlignment.getSeqs().add( + new BioJsSeqPojo(String.valueOf(++count), name.toString(), + seq.getSequenceAsString())); + } + + String seqs = new com.json.JSONObject(bjsAlignment).getString("seqs"); + // String bioJSTemplate = new String( + // java.nio.file.Files.readAllBytes(java.nio.file.Paths + // .get("resources/templates/BioJSTemplate.txt"))); + String bioJSTemplate = getBioJsTemplateAsString(alignment); + + return bioJSTemplate.replaceAll("#sequenceData#", seqs).replaceAll( + "#scheme#", "zappo"); + } + + + public static String getBioJsTemplateAsString(AlignmentI bio) + throws IOException + { + StringBuilder sb = new StringBuilder(); + URL url = bio.getClass().getResource( + "/templates/BioJSTemplate.txt"); + if (url != null) + { + try + { + BufferedReader reader = new BufferedReader(new InputStreamReader( + url.openStream())); + String line; + String lineSeparator = System.getProperty("line.separator"); + while ((line = reader.readLine()) != null) + { + sb.append(line).append(lineSeparator); + } + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + + return sb.toString(); + } }