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.exceptions.NoFileSelectedException;
import jalview.gui.AlignViewport;
import jalview.gui.AlignmentPanel;
import jalview.gui.FeatureRenderer;
-import jalview.gui.SequenceRenderer;
import jalview.util.MessageManager;
+import java.io.BufferedReader;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.io.PrintWriter;
+import java.net.URL;
public class BioJsHTMLOutput
{
private AlignViewport av;
- private FeatureRenderer fr;
- public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr,
+
+ public BioJsHTMLOutput(AlignmentPanel ap,
FeatureRenderer fr1)
{
- System.out.println("BioJs working as expected so far");
- 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));
+ }
+ exportJalviewAlignmentAsBioJsHtmlFile();
}
- private void exportAsBioJsHtml()
+ private 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");
+ jvFileChooser.setFileView(new JalviewFileView());
- 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"));
+ jvFileChooser.setDialogTitle(MessageManager
+ .getString("label.save_as_biojs_html"));
+ jvFileChooser.setDialogTitle("save as BioJs HTML");
+ jvFileChooser.setToolTipText(MessageManager.getString("action.save"));
- return chooser;
+ int fileChooserOpt = jvFileChooser.showSaveDialog(null);
+ if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION)
+ {
+ jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser
+ .getSelectedFile().getParent());
+ selectedFile = jvFileChooser.getSelectedFile().getPath();
+ }
+ else
+ {
+ throw new NoFileSelectedException("No file was selected.");
+ }
+ return selectedFile;
}
- private String generateBioJsAlignmentData(AlignmentI alignment)
+
+ public static String getBioJsTemplateAsString(Object currentObj)
throws IOException
{
- StringBuilder bioJsData = new StringBuilder();
- int count = 0;
- for (SequenceI seq : alignment.getSequences())
+ InputStreamReader isReader = null;
+ BufferedReader buffReader = null;
+ StringBuilder sb = new StringBuilder();
+ URL url = currentObj.getClass().getResource(
+ "/templates/BioJSTemplate.txt");
+ if (url != null)
{
- bioJsData.append("seqOnFly.push({seq:'" + seq.getSequenceAsString()
- + "', name:'" + seq.getName() + "', id:" + ++count + "});");
- }
- String bioJSTemplate = new String(
- readAllBytes(get("resources/templates/BioJSTemplate.txt")));
-
- return bioJSTemplate.replaceAll("#sequenceData#", bioJsData.toString());
- }
+ try
+ {
+ isReader = new InputStreamReader(url.openStream());
+ buffReader = new BufferedReader(isReader);
+ String line;
+ String lineSeparator = System.getProperty("line.separator");
+ 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();
+ }
}
-