X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHtmlFile.java;h=6673446cc8304b3add845bfc097242b60d05bb60;hb=c19d2a91ca05e052e3408bf5852d88eb5d0608f1;hp=aadf2460cc35ca010cc17b2a18438c8cfeed822a;hpb=a40bbc57a85658544e2e5d7cc2a7596b762566dc;p=jalview.git diff --git a/src/jalview/io/HtmlFile.java b/src/jalview/io/HtmlFile.java index aadf246..6673446 100644 --- a/src/jalview/io/HtmlFile.java +++ b/src/jalview/io/HtmlFile.java @@ -1,21 +1,53 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2) + * Copyright (C) 2015 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.gui.AlignFrame; -import jalview.schemes.ColourSchemeI; +import jalview.api.ComplexAlignFile; +import jalview.api.FeaturesDisplayedI; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.SequenceI; import java.io.IOException; +import java.io.StringReader; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; -public class HtmlFile extends AlignFile +public class HtmlFile extends AlignFile implements ComplexAlignFile { - // public static final String FILE_EXT = "html"; - // - // public static final String FILE_DESC = "HTML"; + 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 ColourSchemeI cs; + private FeaturesDisplayedI displayedFeatures; public HtmlFile() { @@ -32,10 +64,11 @@ public class HtmlFile extends AlignFile super(inFile, type); } - @SuppressWarnings("unchecked") @Override public void parse() throws IOException { + Element content = null; + Document doc = null; try { StringBuilder htmlData = new StringBuilder(); @@ -44,107 +77,97 @@ public class HtmlFile extends AlignFile { htmlData.append(currentLine); } + doc = Jsoup.parse(htmlData.toString()); + } catch (OutOfMemoryError oom) + { + errormessage = "Not enough memory to process HTML document"; + throw new IOException(errormessage); + } - Document doc = Jsoup.parse(htmlData.toString()); - Element content = doc.getElementById("seqData"); - - String alignmentJsonString = content.val(); - - new JSONFile().parse(alignmentJsonString); - - // 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, Integer.valueOf(sequence.get("start") - // .toString()), Integer.valueOf(sequence.get("end") - // .toString())); - // - // JSONArray jsonSeqArray = (JSONArray) sequence.get("features"); - // SequenceFeature[] retrievedSeqFeatures = getJalviewSequenceFeatures( - // jsonSeqArray, seq); - // if (retrievedSeqFeatures != null) - // { - // seq.setSequenceFeatures(retrievedSeqFeatures); - // } - // seqs.add(seq); - // - // } + 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) { - e.printStackTrace(); + throw e; } } - // public SequenceFeature[] getJalviewSequenceFeatures( - // JSONArray jsonSeqFeatures, Sequence seq) - // { - // SequenceFeature[] seqFeatures = null; - // int count = 0; - // if (jsonSeqFeatures != null) - // { - // seqFeatures = new SequenceFeature[jsonSeqFeatures.size()]; - // for (@SuppressWarnings("unchecked") - // 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(seq.findPosition(begin.intValue())); - // sequenceFeature.setEnd(seq.findPosition(end.intValue()) - 1); - // sequenceFeature.setType(type); - // seqFeatures[count++] = sequenceFeature; - // } - // } - // return seqFeatures; - // } - - public void LoadAlignmentFeatures(AlignFrame af) + @Override + public String print() + { + throw new UnsupportedOperationException( + "Print method of HtmlFile is not supported!"); + } + + public boolean isShowSeqFeatures() { + return showSeqFeatures; + } - af.setShowSeqFeatures(true); - af.changeColour(cs); - af.setMenusForViewport(); + public void setShowSeqFeatures(boolean showSeqFeatures) + { + this.showSeqFeatures = showSeqFeatures; } - // private ColourSchemeI getJalviewColorScheme(String bioJsColourSchemeName) - // { - // ColourSchemeI jalviewColor = null; - // for (JalviewBioJsColorSchemeMapper cs : JalviewBioJsColorSchemeMapper - // .values()) - // { - // if (cs.getBioJsName().equals(bioJsColourSchemeName)) - // { - // jalviewColor = cs.getJvColourScheme(); - // break; - // } - // } - // return jalviewColor; - // } + public String getGlobalColourScheme() + { + return globalColourScheme; + } + + public void setColourScheme(String globalColourScheme) + { + this.globalColourScheme = globalColourScheme; + } + + public ColumnSelection getColumnSelection() + { + return columnSelection; + } + + public void setColumnSelection(ColumnSelection columnSelection) + { + this.columnSelection = columnSelection; + } + + public SequenceI[] getHiddenSequences() + { + return hiddenSequences; + } + + public void setHiddenSequences(SequenceI[] hiddenSequences) + { + this.hiddenSequences = hiddenSequences; + } @Override - public String print() + public FeaturesDisplayedI getDisplayedFeatures() { - throw new UnsupportedOperationException( - "Print method of HtmlFile not yet supported!"); + return displayedFeatures; } }