package jalview.io; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.gui.AlignFrame; import jalview.json.binding.v1.BioJsAlignmentPojo.JalviewBioJsColorSchemeMapper; import jalview.schemes.ColourSchemeI; import java.io.IOException; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; public class HtmlFile extends AlignFile { // public static final String FILE_EXT = "html"; // // public static final String FILE_DESC = "HTML"; private ColourSchemeI cs; public HtmlFile() { super(); } public HtmlFile(FileParse source) throws IOException { super(source); } public HtmlFile(String inFile, String type) throws IOException { super(inFile, type); } @SuppressWarnings("unchecked") @Override public void parse() throws IOException { try { StringBuilder htmlData = new StringBuilder(); String currentLine; while ((currentLine = nextLine()) != null) { htmlData.append(currentLine); } Document doc = Jsoup.parse(htmlData.toString()); Element content = doc.getElementById("seqData"); String alignmentJsonString = content.val(); JSONParser jsonParser = new JSONParser(); JSONObject alignmentJsonObj = (JSONObject) jsonParser .parse(alignmentJsonString); JSONArray seqJsonArray = (JSONArray) alignmentJsonObj.get("seqs"); String bioJsColourScheme = (String) alignmentJsonObj .get("globalColorScheme"); cs = getJalviewColorScheme(bioJsColourScheme); for (Iterator sequenceIter = seqJsonArray.iterator(); sequenceIter .hasNext();) { JSONObject sequence = sequenceIter.next(); String sequcenceString = sequence.get("seq").toString(); Sequence seq = new Sequence(sequence.get("name").toString(), sequcenceString, 0, sequcenceString.length()); JSONArray jsonSeqArray = (JSONArray) sequence.get("features"); SequenceFeature[] retrievedSeqFeatures = getJalviewSequenceFeatures(jsonSeqArray); if (retrievedSeqFeatures != null) { seq.setSequenceFeatures(retrievedSeqFeatures); } seqs.add(seq); } } catch (Exception e) { e.printStackTrace(); } } public SequenceFeature[] getJalviewSequenceFeatures( JSONArray jsonSeqFeatures) { SequenceFeature[] seqFeatures = null; int count = 0; if (jsonSeqFeatures != null) { seqFeatures = new SequenceFeature[jsonSeqFeatures.size()]; for (Iterator seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr .hasNext();) { SequenceFeature sequenceFeature = new SequenceFeature(); JSONObject jsonFeature = seqFeatureItr.next(); Long begin = (Long) jsonFeature.get("xStart"); Long end = (Long) jsonFeature.get("xEnd"); String type = (String) jsonFeature.get("text"); String color = (String) jsonFeature.get("fillColor"); sequenceFeature.setBegin(begin.intValue()); sequenceFeature.setEnd(end.intValue()); sequenceFeature.setType(type); seqFeatures[count++] = sequenceFeature; } } return seqFeatures; } public void LoadAlignmentFeatures(AlignFrame af) { af.setShowSeqFeatures(true); af.changeColour(cs); af.setMenusForViewport(); } private ColourSchemeI getJalviewColorScheme(String bioJsColourSchemeName) { ColourSchemeI jalviewColor = null; for (JalviewBioJsColorSchemeMapper cs : JalviewBioJsColorSchemeMapper .values()) { if (cs.getBioJsName().equals(bioJsColourSchemeName)) { jalviewColor = cs.getJvColourScheme(); break; } } return jalviewColor; } @Override public String print() { throw new UnsupportedOperationException( "Print method of HtmlFile not yet supported!"); } }