import jalview.datamodel.AlignmentI;
import jalview.datamodel.SequenceFeature;
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.BioJsFeaturePojo;
import jalview.json.binding.v1.BioJsSeqPojo;
import java.io.PrintWriter;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Hashtable;
import com.json.JSONException;
private FeatureRenderer fr;
- public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr,
+ private String globalColorScheme;
+
+ private Hashtable displayedFeatures;
+
+ private String jalviewVersion;
+
+ private String webStartLaunchServletUrl = "http://www.jalview.org/services/launchApp";
+
+ public BioJsHTMLOutput(AlignmentPanel ap,
FeatureRenderer fr1)
{
- this.av = ap.av;
- this.fr = new FeatureRenderer(ap);
+
+ jalviewVersion = jalview.bin.Cache.getProperty("VERSION");
+ webStartLaunchServletUrl = jalview.bin.Cache.getDefault(
+ "www.jalview.org", "http://www.jalview.org")
+ + "/services/launchApp";
+ if (ap != null)
+ {
+ this.av = ap.av;
+ this.globalColorScheme = ColourSchemeProperty.getColourName(av
+ .getGlobalColourScheme());
+ this.fr = new FeatureRenderer(ap);
fr.transferSettings(fr1);
+ displayedFeatures = av.getFeaturesDisplayed();
- exportAsBioJsHtml();
+ 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 = getJalviewAlignmentAsJsonString(av
+ .getAlignment());
+ 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"));
+ jvFileChooser.setDialogTitle("save as BioJs HTML");
+ jvFileChooser.setToolTipText(MessageManager.getString("action.save"));
+
+ 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 chooser;
+ return selectedFile;
}
- private String generateBioJsAlignmentData(AlignmentI alignment)
+ public String getJalviewAlignmentAsJsonString(AlignmentI alignment)
throws IOException, JSONException
{
BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo();
- bjsAlignment.setGlobalColorScheme(ColourSchemeProperty.getColourName(av
- .getGlobalColourScheme()));
- // av.setGlobalColourScheme(cs);
+ bjsAlignment.setGlobalColorScheme(getGlobalColorScheme());
+ bjsAlignment.setJalviewVersion(jalviewVersion);
+ bjsAlignment.setWebStartUrl(webStartLaunchServletUrl);
+
int count = 0;
for (SequenceI seq : alignment.getSequences())
{
StringBuilder name = new StringBuilder();
name.append(seq.getName()).append("/").append(seq.getStart())
.append("-").append(seq.getEnd());
- // BioJsSeqPojo seqPojo = new BioJsSeqPojo(seq.getStart(), seq.getEnd(),
- // String.valueOf(++count),
- // name.toString(), seq.getSequenceAsString());
- //
+
BioJsSeqPojo seqPojo = new BioJsSeqPojo();
seqPojo.setId(String.valueOf(++count));
seqPojo.setEnd(seq.getEnd());
.getSequenceFeatures();
if (seqFeatures != null)
{
-
ArrayList<BioJsFeaturePojo> bjsSeqFeatures = new ArrayList<BioJsFeaturePojo>();
for (SequenceFeature sf : seqFeatures)
{
-
- String featureColour = jalview.util.Format.getHexString(fr
- .getColour(sf));
- BioJsFeaturePojo bjsFeature = new BioJsFeaturePojo();
- bjsFeature.setFillColor(featureColour);
- bjsFeature.setXstart(sf.getBegin());
- bjsFeature.setXend(sf.getEnd());
- bjsFeature.setText(sf.getType());
-
- bjsSeqFeatures.add(bjsFeature);
-
+ if (displayedFeatures != null
+ && displayedFeatures.get(sf.getType()) != null)
+ {
+ String featureColour = jalview.util.Format.getHexString(fr
+ .getColour(sf));
+ BioJsFeaturePojo bjsFeature = new BioJsFeaturePojo();
+ bjsFeature.setFillColor(featureColour);
+ bjsFeature.setXstart(seq.findIndex(sf.getBegin()) - 1);
+ bjsFeature.setXend(seq.findIndex(sf.getEnd()));
+ bjsFeature.setText(sf.getType());
+ bjsSeqFeatures.add(bjsFeature);
+ }
}
-
seqPojo.setFeatures(bjsSeqFeatures);
}
bjsAlignment.getSeqs().add(seqPojo);
}
- String jalviewData = new com.json.JSONObject(bjsAlignment).toString()
+ return new com.json.JSONObject(bjsAlignment).toString()
.replaceAll("xstart", "xStart").replaceAll("xend", "xEnd");
- // String bioJSTemplate = new String(
- // java.nio.file.Files.readAllBytes(java.nio.file.Paths
- // .get("resources/templates/BioJSTemplate.txt")));
- String bioJSTemplate = getBioJsTemplateAsString(this);
-
- return bioJSTemplate.replaceAll("#sequenceData#", jalviewData)
- .replaceAll(
- "#jalview_logo#",
- alignment.getClass()
- .getResource("/images/Jalview_Logo.png")
- .toString());
}
public static String getBioJsTemplateAsString(Object currentObj)
}
}
}
-
return sb.toString();
}
+ public String getGlobalColorScheme()
+ {
+ return globalColorScheme;
+ }
+
+ public void setGlobalColorScheme(String globalColorScheme)
+ {
+ this.globalColorScheme = globalColorScheme;
+ }
+
}