X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2FBioJsHTMLOutput.java;h=669054d64fe51372efaa3dadba04d8929360ba1f;hb=7ce1382b998c007a78c9b33a3dc331e966eebc4b;hp=7423e20c1b34d580bb05947ea9e8e182ef6903f7;hpb=d884105fcd0ac029684c62573e706e5d88b4301c;p=jalview.git diff --git a/src/jalview/io/BioJsHTMLOutput.java b/src/jalview/io/BioJsHTMLOutput.java index 7423e20..669054d 100644 --- a/src/jalview/io/BioJsHTMLOutput.java +++ b/src/jalview/io/BioJsHTMLOutput.java @@ -1,13 +1,9 @@ package jalview.io; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.SequenceI; +import jalview.exceptions.NoFileSelectedException; import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; import jalview.gui.FeatureRenderer; -import jalview.gui.SequenceRenderer; -import jalview.json.binding.v1.BioJsAlignmentPojo; -import jalview.json.binding.v1.BioJsSeqPojo; import jalview.util.MessageManager; import java.io.BufferedReader; @@ -16,116 +12,118 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; -import com.json.JSONException; - public class BioJsHTMLOutput { private AlignViewport av; - private FeatureRenderer fr; - public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr, + public BioJsHTMLOutput(AlignmentPanel ap, FeatureRenderer fr1) { - this.av = ap.av; - this.fr = new FeatureRenderer(ap); - fr.transferSettings(fr1); - exportAsBioJsHtml(); + + if (ap != null) + { + + this.av = ap.av; + av.setFeatureRenderer(new FeatureRenderer(ap)); + } + } - private void exportAsBioJsHtml() + public void exportJalviewAlignmentAsBioJsHtmlFile() { 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) + String outputFile = getOutputFile(); + String jalviewAlignmentJson = JSONFile.getJSONData(av); + String bioJSTemplateString = getBioJsTemplateAsString(this); + String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString + .replaceAll( +"#sequenceData#", jalviewAlignmentJson) + .toString(); + + PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( + outputFile)); + out.print(generatedBioJsWithJalviewAlignmentAsJson); + out.flush(); + out.close(); + jalview.util.BrowserLauncher.openURL("file:///" + outputFile); + } catch (NoFileSelectedException ex) + { + // do noting if no file was selected + } catch (Exception e) { - ex.printStackTrace(); + e.printStackTrace(); } } - private JalviewFileChooser getJalviewFileChooserOption() + public String getOutputFile() throws NoFileSelectedException { - JalviewFileChooser chooser = new JalviewFileChooser( + String selectedFile = null; + JalviewFileChooser jvFileChooser = new JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "html" }, new String[] { "HTML files" }, "HTML files"); - chooser.setFileView(new JalviewFileView()); + jvFileChooser.setFileView(new JalviewFileView()); // TODO uncomment when supported by MassageManager - chooser.setDialogTitle(MessageManager + jvFileChooser.setDialogTitle(MessageManager .getString("label.save_as_biojs_html")); - chooser.setDialogTitle("save as BioJs HTML"); - chooser.setToolTipText(MessageManager.getString("action.save")); - - return chooser; - } + jvFileChooser.setDialogTitle("save as BioJs HTML"); + jvFileChooser.setToolTipText(MessageManager.getString("action.save")); - private String generateBioJsAlignmentData(AlignmentI alignment) - throws IOException, JSONException - { - BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo(); - int count = 0; - for (SequenceI seq : alignment.getSequences()) + int fileChooserOpt = jvFileChooser.showSaveDialog(null); + if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) { - 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())); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser + .getSelectedFile().getParent()); + selectedFile = jvFileChooser.getSelectedFile().getPath(); } - - 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"); + else + { + throw new NoFileSelectedException("No file was selected."); + } + return selectedFile; } - public static String getBioJsTemplateAsString(AlignmentI bio) + public static String getBioJsTemplateAsString(Object currentObj) throws IOException { - StringBuilder sb = new StringBuilder(); - URL url = bio.getClass().getResource( + InputStreamReader isReader = null; + BufferedReader buffReader = null; + StringBuilder sb = new StringBuilder(); + URL url = currentObj.getClass().getResource( "/templates/BioJSTemplate.txt"); if (url != null) { try { - BufferedReader reader = new BufferedReader(new InputStreamReader( - url.openStream())); + isReader = new InputStreamReader(url.openStream()); + buffReader = new BufferedReader(isReader); String line; String lineSeparator = System.getProperty("line.separator"); - while ((line = reader.readLine()) != null) + while ((line = buffReader.readLine()) != null) { sb.append(line).append(lineSeparator); } + } catch (Exception ex) { ex.printStackTrace(); + } finally + { + if (isReader != null) + { + isReader.close(); + } + + if (buffReader != null) + { + buffReader.close(); + } } } - return sb.toString(); } - }