X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHTMLOutput.java;h=77006db33573e9bd5b0eecdf62c319dc6fcc8c55;hb=136c0793b90b72b928c4d77dc109dd5c644e00d3;hp=d15a6e807b1406e4927f50aaa885f2ccf924cadf;hpb=5b62ff2899b8263a89d41086195bdeea1ba96b3b;p=jalview.git diff --git a/src/jalview/io/HTMLOutput.java b/src/jalview/io/HTMLOutput.java index d15a6e8..77006db 100755 --- a/src/jalview/io/HTMLOutput.java +++ b/src/jalview/io/HTMLOutput.java @@ -1,125 +1,350 @@ -package jalview.io; - -import jalview.gui.*; -import jalview.datamodel.*; -import jalview.schemes.*; -import java.awt.*; -import javax.swing.*; -import java.io.*; -import java.util.*; - - -public class HTMLOutput -{ - - - public HTMLOutput(AlignViewport av) - { - SequenceRenderer sr = new SequenceRenderer(av); - Color color; - JFileChooser chooser = new JFileChooser(jalview.bin.Cache.LAST_DIRECTORY); - chooser.setDialogTitle("Save as HTML"); - chooser.setToolTipText("Save"); - int value = chooser.showSaveDialog(null); - if(value == JFileChooser.APPROVE_OPTION) - { - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.LAST_DIRECTORY = choice; - try{ - PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(choice)); - out.println(""); - out.println(""); - out.println(""); - out.println("
\n"); - out.println("\n"); - - - ////////////// - SequenceGroup [] groups; - SequenceI seq; - ColourSchemeI cs = null; - AlignmentI alignment = av.getAlignment(); - String r,g,b; - - // draws the top row, the measure rule - out.println(""); - int i=0; - for(i=10; i"+i+"
|
"); - - out.println(""); - out.println(""); - - for (i = 0; i < alignment.getHeight(); i++) - { - seq = alignment.getSequenceAt(i); - groups = alignment.findAllGroups( seq ); - out.println(""); - - - for (int res = 0; res < seq.getLength(); res++) - { - cs = av.getGlobalColourScheme(); - - if(groups!=null) - { - for (int k = 0; k < groups.length; k++) - if (groups[k].getStartRes() <= res && groups[k].getEndRes() >= res) - { - cs = groups[k].cs; - break; - } - } - - - color = sr.getResidueBoxColour(cs, seq, res); - - if(color.getRGB()<-1) - { - r = Integer.toHexString(color.getRed()); - if(r.length()<2) - r = "0"+r; - g = Integer.toHexString(color.getGreen()); - if(g.length()<2) - g = "0"+g; - b = Integer.toHexString(color.getBlue()); - if(b.length()<2) - b = "0"+b; - out.println(""); - } - else - out.println(""); - - } - - out.println(""); - } - ////////////// - out.println("
"+i+"
|
"+seq.getDisplayId()+"  "+seq.getCharAt(res)+""+seq.getCharAt(res)+"
"); - out.println("
\n\n"); - - out.close(); - - jalview.util.BrowserLauncher.openURL( "file:///"+choice ); - } - catch(Exception ex){ex.printStackTrace();} - } - } - - -} +package jalview.io; + +import jalview.api.AlignExportSettingI; +import jalview.datamodel.AlignmentExportData; +import jalview.exceptions.NoFileSelectedException; +import jalview.gui.AlignmentPanel; +import jalview.gui.IProgressIndicator; +import jalview.util.MessageManager; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Objects; + +public abstract class HTMLOutput implements Runnable +{ + protected AlignmentPanel ap; + + protected long pSessionId; + + protected IProgressIndicator pIndicator; + + protected File generatedFile; + + public HTMLOutput(AlignmentPanel ap) + { + if (ap != null) + { + this.ap = ap; + this.pIndicator = ap.alignFrame; + } + } + + public String getBioJSONData() + { + return getBioJSONData(null); + } + + public String getBioJSONData(AlignExportSettingI exportSettings) + { + if (!isEmbedData()) + { + return null; + } + if (exportSettings == null) + { + exportSettings = new AlignExportSettingI() + { + @Override + public boolean isExportHiddenSequences() + { + return true; + } + + @Override + public boolean isExportHiddenColumns() + { + return true; + } + + @Override + public boolean isExportAnnotations() + { + return true; + } + + @Override + public boolean isExportFeatures() + { + return true; + } + + @Override + public boolean isExportGroups() + { + return true; + } + + @Override + public boolean isCancelled() + { + return false; + } + }; + } + AlignmentExportData exportData = jalview.gui.AlignFrame + .getAlignmentForExport(FileFormat.Json, + ap.getAlignViewport(), exportSettings); + String bioJSON = new FormatAdapter(ap, exportData.getSettings()) + .formatSequences(FileFormat.Json, exportData.getAlignment(), + exportData.getOmitHidden(), exportData +.getStartEndPostions(), ap.getAlignViewport() + .getAlignment().getHiddenColumns()); + return bioJSON; + } + + /** + * Read a template file content as string + * + * @param file + * - the file to be read + * @return File content as String + * @throws IOException + */ + public static String readFileAsString(File file) throws IOException + { + InputStreamReader isReader = null; + BufferedReader buffReader = null; + StringBuilder sb = new StringBuilder(); + Objects.requireNonNull(file, "File must not be null!"); + @SuppressWarnings("deprecation") + URL url = file.toURL(); + if (url != null) + { + try + { + isReader = new InputStreamReader(url.openStream()); + buffReader = new BufferedReader(isReader); + String line; + String lineSeparator = System.getProperty("line.separator"); + while ((line = buffReader.readLine()) != null) + { + sb.append(line).append(lineSeparator); + } + + } catch (Exception ex) + { + ex.printStackTrace(); + } finally + { + if (isReader != null) + { + isReader.close(); + } + + if (buffReader != null) + { + buffReader.close(); + } + } + } + return sb.toString(); + } + + public static String getImageMapHTML() + { + return new String( + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "
\n" + + "\n"); + + } + + public String getOutputFile() throws NoFileSelectedException + { + String selectedFile = null; + if (pIndicator != null && !isHeadless()) + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.waiting_for_user_to_select_output_file", "HTML"), + pSessionId); + } + + JalviewFileChooser jvFileChooser = new JalviewFileChooser("html", + "HTML files"); + jvFileChooser.setFileView(new JalviewFileView()); + + jvFileChooser.setDialogTitle(MessageManager + .getString("label.save_as_html")); + jvFileChooser.setToolTipText(MessageManager.getString("action.save")); + + int fileChooserOpt = jvFileChooser.showSaveDialog(null); + if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) + { + jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser + .getSelectedFile().getParent()); + selectedFile = jvFileChooser.getSelectedFile().getPath(); + } + else + { + throw new NoFileSelectedException("No file was selected."); + } + return selectedFile; + } + + protected void setProgressMessage(String message) + { + if (pIndicator != null && !isHeadless()) + { + pIndicator.setProgressBar(message, pSessionId); + } + else + { + System.out.println(message); + } + } + + /** + * Answers true if HTML export is invoke in headless mode or false otherwise + * + * @return + */ + protected boolean isHeadless() + { + return System.getProperty("java.awt.headless") != null + && System.getProperty("java.awt.headless").equals("true"); + } + + /** + * This method provides implementation of consistent behaviour which should + * occur before a HTML file export. It MUST be called at the start of the + * exportHTML() method implementation. + */ + protected void exportStarted() + { + pSessionId = System.currentTimeMillis(); + } + + /** + * This method provides implementation of consistent behaviour which should + * occur after a HTML file export. It MUST be called at the end of the + * exportHTML() method implementation. + */ + protected void exportCompleted() + { + if (isLaunchInBrowserAfterExport() && !isHeadless()) + { + try + { + jalview.util.BrowserLauncher + .openURL("file:///" + getExportedFile()); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + /** + * if this answers true then BioJSON data will be embedded to the exported + * HTML file otherwise it won't be embedded. + * + * @return + */ + public abstract boolean isEmbedData(); + + /** + * if this answers true then the generated HTML file is opened for viewing in + * a browser after its generation otherwise it won't be opened in a browser + * + * @return + */ + public abstract boolean isLaunchInBrowserAfterExport(); + + /** + * handle to the generated HTML file + * + * @return + */ + public abstract File getExportedFile(); + + /** + * This is the main method to handle the HTML generation. + * + * @param outputFile + * the file path of the generated HTML + */ + public abstract void exportHTML(String outputFile); +} \ No newline at end of file