3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.SequenceFeature;
5 import jalview.datamodel.SequenceI;
6 import jalview.exceptions.NoFileSelectedException;
7 import jalview.gui.AlignViewport;
8 import jalview.gui.AlignmentPanel;
9 import jalview.gui.FeatureRenderer;
10 import jalview.json.binding.v1.BioJsAlignmentPojo;
11 import jalview.json.binding.v1.BioJsFeaturePojo;
12 import jalview.json.binding.v1.BioJsSeqPojo;
13 import jalview.schemes.ColourSchemeProperty;
14 import jalview.util.MessageManager;
16 import java.io.BufferedReader;
17 import java.io.IOException;
18 import java.io.InputStreamReader;
19 import java.io.PrintWriter;
21 import java.util.ArrayList;
22 import java.util.Hashtable;
24 import com.json.JSONException;
26 public class BioJsHTMLOutput
28 private AlignViewport av;
30 private FeatureRenderer fr;
32 private String globalColorScheme;
34 private Hashtable displayedFeatures;
36 private String jalviewVersion;
38 private String webStartLaunchServletUrl = "http://www.jalview.org/services/launchApp";
40 public BioJsHTMLOutput(AlignmentPanel ap,
44 jalviewVersion = jalview.bin.Cache.getProperty("VERSION");
45 webStartLaunchServletUrl = jalview.bin.Cache.getDefault(
46 "www.jalview.org", "http://www.jalview.org")
47 + "/services/launchApp";
51 this.globalColorScheme = ColourSchemeProperty.getColourName(av
52 .getGlobalColourScheme());
53 this.fr = new FeatureRenderer(ap);
54 fr.transferSettings(fr1);
55 displayedFeatures = av.getFeaturesDisplayed();
57 exportJalviewAlignmentAsBioJsHtmlFile();
61 private void exportJalviewAlignmentAsBioJsHtmlFile()
65 String outputFile = getOutputFile();
66 String jalviewAlignmentJson = getJalviewAlignmentAsJsonString(av
68 String bioJSTemplateString = getBioJsTemplateAsString(this);
69 String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString
71 "#sequenceData#", jalviewAlignmentJson)
74 PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(
76 out.print(generatedBioJsWithJalviewAlignmentAsJson);
79 jalview.util.BrowserLauncher.openURL("file:///" + outputFile);
80 } catch (NoFileSelectedException ex)
82 // do noting if no file was selected
89 public String getOutputFile() throws NoFileSelectedException
91 String selectedFile = null;
92 JalviewFileChooser jvFileChooser = new JalviewFileChooser(
93 jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
94 { "html" }, new String[]
95 { "HTML files" }, "HTML files");
96 jvFileChooser.setFileView(new JalviewFileView());
98 // TODO uncomment when supported by MassageManager
99 jvFileChooser.setDialogTitle(MessageManager
100 .getString("label.save_as_biojs_html"));
101 jvFileChooser.setDialogTitle("save as BioJs HTML");
102 jvFileChooser.setToolTipText(MessageManager.getString("action.save"));
104 int fileChooserOpt = jvFileChooser.showSaveDialog(null);
105 if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION)
107 jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser
108 .getSelectedFile().getParent());
109 selectedFile = jvFileChooser.getSelectedFile().getPath();
113 throw new NoFileSelectedException("No file was selected.");
119 public String getJalviewAlignmentAsJsonString(AlignmentI alignment)
120 throws IOException, JSONException
122 BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo();
124 bjsAlignment.setGlobalColorScheme(getGlobalColorScheme());
125 bjsAlignment.setJalviewVersion(jalviewVersion);
126 bjsAlignment.setWebStartUrl(webStartLaunchServletUrl);
129 for (SequenceI seq : alignment.getSequences())
131 StringBuilder name = new StringBuilder();
132 name.append(seq.getName()).append("/").append(seq.getStart())
133 .append("-").append(seq.getEnd());
135 BioJsSeqPojo seqPojo = new BioJsSeqPojo();
136 seqPojo.setId(String.valueOf(++count));
137 seqPojo.setEnd(seq.getEnd());
138 seqPojo.setStart(seq.getStart());
139 seqPojo.setName(name.toString());
140 seqPojo.setSeq(seq.getSequenceAsString());
142 SequenceFeature[] seqFeatures = seq.getDatasetSequence()
143 .getSequenceFeatures();
144 if (seqFeatures != null)
146 ArrayList<BioJsFeaturePojo> bjsSeqFeatures = new ArrayList<BioJsFeaturePojo>();
147 for (SequenceFeature sf : seqFeatures)
149 if (displayedFeatures != null
150 && displayedFeatures.get(sf.getType()) != null)
152 String featureColour = jalview.util.Format.getHexString(fr
154 BioJsFeaturePojo bjsFeature = new BioJsFeaturePojo();
155 bjsFeature.setFillColor(featureColour);
156 bjsFeature.setXstart(seq.findIndex(sf.getBegin()) - 1);
157 bjsFeature.setXend(seq.findIndex(sf.getEnd()));
158 bjsFeature.setText(sf.getType());
159 bjsSeqFeatures.add(bjsFeature);
162 seqPojo.setFeatures(bjsSeqFeatures);
164 bjsAlignment.getSeqs().add(seqPojo);
167 return new com.json.JSONObject(bjsAlignment).toString()
168 .replaceAll("xstart", "xStart").replaceAll("xend", "xEnd");
171 public static String getBioJsTemplateAsString(Object currentObj)
174 InputStreamReader isReader = null;
175 BufferedReader buffReader = null;
176 StringBuilder sb = new StringBuilder();
177 URL url = currentObj.getClass().getResource(
178 "/templates/BioJSTemplate.txt");
183 isReader = new InputStreamReader(url.openStream());
184 buffReader = new BufferedReader(isReader);
186 String lineSeparator = System.getProperty("line.separator");
187 while ((line = buffReader.readLine()) != null)
189 sb.append(line).append(lineSeparator);
192 } catch (Exception ex)
194 ex.printStackTrace();
197 if (isReader != null)
202 if (buffReader != null)
208 return sb.toString();
211 public String getGlobalColorScheme()
213 return globalColorScheme;
216 public void setGlobalColorScheme(String globalColorScheme)
218 this.globalColorScheme = globalColorScheme;