X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHtmlFile.java;h=e31e78dcc2551fcf2c80df2059c05d0d10834b07;hb=e60cacff9260c47c12cf34a7e191678cfc97d265;hp=bc5c21941ca285ae4351824f82c0447619fb61fc;hpb=50ff87bdae1829a7a7471ec393142ae659b40a11;p=jalview.git diff --git a/src/jalview/io/HtmlFile.java b/src/jalview/io/HtmlFile.java index bc5c219..e31e78d 100644 --- a/src/jalview/io/HtmlFile.java +++ b/src/jalview/io/HtmlFile.java @@ -1,68 +1,193 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ + package jalview.io; -import jalview.datamodel.Sequence; +import jalview.api.ComplexAlignFile; +import jalview.api.FeatureSettingsModelI; +import jalview.api.FeaturesDisplayedI; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.SequenceI; import java.io.IOException; -import java.util.Iterator; +import java.io.StringReader; -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"; - - 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 = "{\"seqs\":" + content.val() + "}"; - JSONParser jsonParser = new JSONParser(); - JSONObject alignmentJsonObj = (JSONObject) jsonParser.parse(alignmentJsonString); - JSONArray seqJsonArray = (JSONArray) alignmentJsonObj.get("seqs"); - - for (Iterator sequenceIter = seqJsonArray.iterator(); sequenceIter.hasNext();) { - JSONObject sequence = sequenceIter.next(); - System.out.println(sequence.get("id").toString() + " " + sequence.get("name")); - String sequcenceString = sequence.get("seq").toString(); - Sequence seq = new Sequence(sequence.get("name").toString(), sequcenceString, 0, sequcenceString.length()); - seqs.add(seq); - - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public String print() { - throw new UnsupportedOperationException("Print method of HtmlFile not yet supported!"); - } +public class HtmlFile extends AlignFile implements ComplexAlignFile +{ + public static final String FILE_EXT = "html"; + + public static final String FILE_DESC = "HTML"; + + private String globalColourScheme; + + private boolean showSeqFeatures; + + private ColumnSelection columnSelection; + + private SequenceI[] hiddenSequences; + + private FeaturesDisplayedI displayedFeatures; + + public HtmlFile() + { + super(); + } + + public HtmlFile(FileParse source) throws IOException + { + super(source); + } + + public HtmlFile(String inFile, String type) throws IOException + { + super(inFile, type); + } + + @Override + public void parse() throws IOException + { + Element content = null; + Document doc = null; + try + { + StringBuilder htmlData = new StringBuilder(); + String currentLine; + while ((currentLine = nextLine()) != null) + { + htmlData.append(currentLine); + } + doc = Jsoup.parse(htmlData.toString()); + } catch (OutOfMemoryError oom) + { + errormessage = "Not enough memory to process HTML document"; + throw new IOException(errormessage); + } + + try + { + boolean contentFromDiv = true; + // search for BioJSON data in div element with id seqData + content = doc.select("div[id=seqData]").first(); + if (content == null) + { + contentFromDiv = false; + // search for BioJSON data in input element with id seqData + content = doc.getElementById("seqData"); + } + + if (content == null) + { + errormessage = "The html document is not embedded with BioJSON data"; + throw new IOException(errormessage); + } + JSONFile jsonFile = new JSONFile().parse(new StringReader( + contentFromDiv ? content.text() : content.val())); + this.seqs = jsonFile.getSeqs(); + this.seqGroups = jsonFile.getSeqGroups(); + this.annotations = jsonFile.getAnnotations(); + this.showSeqFeatures = jsonFile.isShowSeqFeatures(); + this.globalColourScheme = jsonFile.getGlobalColourScheme(); + this.hiddenSequences = jsonFile.getHiddenSequences(); + this.columnSelection = jsonFile.getColumnSelection(); + this.displayedFeatures = jsonFile.getDisplayedFeatures(); + } catch (Exception e) + { + throw e; + } + } + + @Override + public String print() + { + throw new UnsupportedOperationException( + "Print method of HtmlFile is not supported!"); + } + + @Override + public boolean isShowSeqFeatures() + { + return showSeqFeatures; + } + + public void setShowSeqFeatures(boolean showSeqFeatures) + { + this.showSeqFeatures = showSeqFeatures; + } + + @Override + public String getGlobalColourScheme() + { + return globalColourScheme; + } + + public void setColourScheme(String globalColourScheme) + { + this.globalColourScheme = globalColourScheme; + } + + @Override + public ColumnSelection getColumnSelection() + { + return columnSelection; + } + + public void setColumnSelection(ColumnSelection columnSelection) + { + this.columnSelection = columnSelection; + } + + @Override + public SequenceI[] getHiddenSequences() + { + return hiddenSequences; + } + + public void setHiddenSequences(SequenceI[] hiddenSequences) + { + this.hiddenSequences = hiddenSequences; + } + + @Override + public FeaturesDisplayedI getDisplayedFeatures() + { + return displayedFeatures; + } + + /** + * Returns a descriptor for suitable feature display settings with + * + */ + @Override + public FeatureSettingsModelI getFeatureColourScheme() + { + return new PDBFeatureSettings(); + } }