3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.SequenceFeature;
5 import jalview.datamodel.SequenceI;
6 import jalview.gui.AlignViewport;
7 import jalview.gui.AlignmentPanel;
8 import jalview.gui.FeatureRenderer;
9 import jalview.gui.SequenceRenderer;
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;
23 import com.json.JSONException;
25 public class BioJsHTMLOutput
27 private AlignViewport av;
29 private FeatureRenderer fr;
31 public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr,
35 this.fr = new FeatureRenderer(ap);
36 fr.transferSettings(fr1);
41 private void exportAsBioJsHtml()
45 JalviewFileChooser jvFileChooser = getJalviewFileChooserOption();
46 int fileChooserOpt = jvFileChooser.showSaveDialog(null);
47 if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION)
49 jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser
50 .getSelectedFile().getParent());
51 String selectedFile = jvFileChooser.getSelectedFile().getPath();
52 String generartedBioJs = generateBioJsAlignmentData(av
54 PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(
56 out.print(generartedBioJs);
58 jalview.util.BrowserLauncher.openURL("file:///" + selectedFile);
60 } catch (Exception ex)
66 private JalviewFileChooser getJalviewFileChooserOption()
68 JalviewFileChooser chooser = new JalviewFileChooser(
69 jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
70 { "html" }, new String[]
71 { "HTML files" }, "HTML files");
72 chooser.setFileView(new JalviewFileView());
74 // TODO uncomment when supported by MassageManager
75 chooser.setDialogTitle(MessageManager
76 .getString("label.save_as_biojs_html"));
77 chooser.setDialogTitle("save as BioJs HTML");
78 chooser.setToolTipText(MessageManager.getString("action.save"));
83 private String generateBioJsAlignmentData(AlignmentI alignment)
84 throws IOException, JSONException
86 BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo();
87 bjsAlignment.setGlobalColorScheme(ColourSchemeProperty.getColourName(av
88 .getGlobalColourScheme()));
90 // av.setGlobalColourScheme(cs);
92 for (SequenceI seq : alignment.getSequences())
94 StringBuilder name = new StringBuilder();
95 name.append(seq.getName()).append("/").append(seq.getStart())
96 .append("-").append(seq.getEnd());
97 // BioJsSeqPojo seqPojo = new BioJsSeqPojo(seq.getStart(), seq.getEnd(),
98 // String.valueOf(++count),
99 // name.toString(), seq.getSequenceAsString());
101 BioJsSeqPojo seqPojo = new BioJsSeqPojo();
102 seqPojo.setId(String.valueOf(++count));
103 seqPojo.setEnd(seq.getEnd());
104 seqPojo.setStart(seq.getStart());
105 seqPojo.setName(name.toString());
106 seqPojo.setSeq(seq.getSequenceAsString());
108 SequenceFeature[] seqFeatures = seq.getDatasetSequence()
109 .getSequenceFeatures();
110 if (seqFeatures != null)
113 ArrayList<BioJsFeaturePojo> bjsSeqFeatures = new ArrayList<BioJsFeaturePojo>();
114 for (SequenceFeature sf : seqFeatures)
117 String featureColour = jalview.util.Format.getHexString(fr
119 BioJsFeaturePojo bjsFeature = new BioJsFeaturePojo();
120 bjsFeature.setFillColor(featureColour);
121 bjsFeature.setXstart(sf.getBegin());
122 bjsFeature.setXend(sf.getEnd());
123 bjsFeature.setText(sf.getType());
125 bjsSeqFeatures.add(bjsFeature);
129 seqPojo.setFeatures(bjsSeqFeatures);
131 bjsAlignment.getSeqs().add(seqPojo);
134 String jalviewData = new com.json.JSONObject(bjsAlignment).toString()
135 .replaceAll("xstart", "xStart").replaceAll("xend", "xEnd");
136 // String bioJSTemplate = new String(
137 // java.nio.file.Files.readAllBytes(java.nio.file.Paths
138 // .get("resources/templates/BioJSTemplate.txt")));
139 String bioJSTemplate = getBioJsTemplateAsString(this);
141 return bioJSTemplate.replaceAll("#sequenceData#", jalviewData)
145 .getResource("/images/Jalview_Logo.png")
149 public static String getBioJsTemplateAsString(Object currentObj)
152 InputStreamReader isReader = null;
153 BufferedReader buffReader = null;
154 StringBuilder sb = new StringBuilder();
155 URL url = currentObj.getClass().getResource(
156 "/templates/BioJSTemplate.txt");
161 isReader = new InputStreamReader(url.openStream());
162 buffReader = new BufferedReader(isReader);
164 String lineSeparator = System.getProperty("line.separator");
165 while ((line = buffReader.readLine()) != null)
167 sb.append(line).append(lineSeparator);
170 } catch (Exception ex)
172 ex.printStackTrace();
175 if (isReader != null)
180 if (buffReader != null)
187 return sb.toString();