X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCommands.java;h=79b6ab691abd0509250478be4910185e8bf80284;hb=5cfef671be8362cbb0598ea405a10f96e08a4df3;hp=f33202d6fea86eb5863f5d14477252087c794a4f;hpb=a7474618cc5b839b6b33803f7e992d26b668244d;p=jalview.git diff --git a/src/jalview/bin/Commands.java b/src/jalview/bin/Commands.java index f33202d..79b6ab6 100644 --- a/src/jalview/bin/Commands.java +++ b/src/jalview/bin/Commands.java @@ -2,6 +2,7 @@ package jalview.bin; import java.io.File; import java.io.IOException; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -31,10 +32,13 @@ import jalview.gui.StructureChooser; import jalview.gui.StructureViewer; import jalview.gui.StructureViewer.ViewerType; import jalview.io.AppletFormatAdapter; +import jalview.io.BackupFiles; +import jalview.io.BioJsHTMLOutput; import jalview.io.DataSourceType; import jalview.io.FileFormat; import jalview.io.FileFormatException; import jalview.io.FileFormatI; +import jalview.io.FileFormats; import jalview.io.FileLoader; import jalview.io.HtmlSvgOutput; import jalview.io.IdentifyFile; @@ -87,15 +91,11 @@ public class Commands { ArgValuesMap avm = argParser.getLinkedArgs(id); theseArgsWereParsed = true; - if (id == null) - { - theseArgsWereParsed &= processUnlinked(id); - } - else - { - theseArgsWereParsed &= processLinked(id); - } + theseArgsWereParsed &= processLinked(id); + boolean processLinkedOkay = theseArgsWereParsed; theseArgsWereParsed &= processImages(id); + if (processLinkedOkay) + theseArgsWereParsed &= processOutput(id); // close ap if (avm.getBoolean(Arg.CLOSE)) @@ -252,8 +252,8 @@ public class Commands af.getCurrentView().setWrapAlignment(wrap); // colour aligment? - String colour = ArgParser.getFromSubValArgOrPref(avm, Arg.COLOUR, - sv, null, "DEFAULT_COLOUR_PROT", ""); + String colour = ArgParser.getFromSubValArgOrPref(avm, av, + Arg.COLOUR, sv, null, "DEFAULT_COLOUR_PROT", ""); if ("" != colour) { @@ -261,8 +261,8 @@ public class Commands } // change alignment frame title - String title = ArgParser.getFromSubValArgOrPref(avm, Arg.TITLE, - sv, null, null, null); + String title = ArgParser.getFromSubValArgOrPref(avm, av, + Arg.TITLE, sv, null, null, null); if (title != null) af.setTitle(title); @@ -586,16 +586,18 @@ public class Commands { String val = av.getValue(); SubVals subVal = av.getSubVals(); - String type = "png"; // default String fileName = subVal.getContent(); File file = new File(fileName); - if (subVal.has("type")) - { - type = subVal.get("type"); - } - else if (fileName != null) + String name = af.getName(); + String renderer = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.RENDERER, subVal); + if (renderer == null) + renderer = "text"; + String type = "png"; // default + type = ArgParser.getValueFromSubValOrArg(avm, av, Arg.TYPE, subVal); + if (type == null && fileName != null) { - for (String ext : new String[] { "svg", "png", "html" }) + for (String ext : new String[] { "svg", "png", "html", "eps" }) { if (fileName.toLowerCase(Locale.ROOT).endsWith("." + ext)) { @@ -609,19 +611,47 @@ public class Commands switch (type) { + case "svg": Console.debug("Outputting type '" + type + "' to " + fileName); - af.createSVG(file); + af.createSVG(file, renderer); break; + case "png": Console.debug("Outputting type '" + type + "' to " + fileName); af.createPNG(file); break; + case "html": Console.debug("Outputting type '" + type + "' to " + fileName); HtmlSvgOutput htmlSVG = new HtmlSvgOutput(af.alignPanel); - htmlSVG.exportHTML(fileName); + htmlSVG.exportHTML(fileName, renderer); + break; + + case "biojs": + try + { + BioJsHTMLOutput.refreshVersionInfo( + BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY); + } catch (URISyntaxException e) + { + e.printStackTrace(); + } + BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel); + bjs.exportHTML(fileName); + Console.debug("Creating BioJS MSA Viwer HTML file: " + fileName); break; + + case "eps": + af.createEPS(file, name); + Console.debug("Creating EPS file: " + fileName); + break; + + case "imagemap": + af.createImageMap(file, name); + Console.debug("Creating ImageMap file: " + fileName); + break; + default: Console.warn(Arg.IMAGE.argString() + " type '" + type + "' not known. Ignoring"); @@ -632,6 +662,119 @@ public class Commands return true; } + protected boolean processOutput(String id) + { + ArgValuesMap avm = argParser.getLinkedArgs(id); + AlignFrame af = afMap.get(id); + + if (af == null) + { + Console.warn("Did not have an alignment window for id=" + id); + return false; + } + + if (avm.containsArg(Arg.OUTPUT)) + { + for (ArgValue av : avm.getArgValueList(Arg.OUTPUT)) + { + String val = av.getValue(); + SubVals subVals = av.getSubVals(); + String fileName = subVals.getContent(); + File file = new File(fileName); + boolean overwrite = ArgParser.getFromSubValArgOrPref(avm, + Arg.OVERWRITE, subVals, null, "OVERWRITE_OUTPUT", false); + // backups. Use the Arg.BACKUPS or subval "backups" setting first, + // otherwise if headless assume false, if not headless use the user + // preference with default true. + boolean backups = ArgParser.getFromSubValArgOrPref(avm, Arg.BACKUPS, + subVals, null, + Platform.isHeadless() ? null : BackupFiles.ENABLED, + !Platform.isHeadless()); + + // if backups is not true then --overwrite must be specified + if (file.exists() && !(overwrite || backups)) + { + Console.error("Won't overwrite file '" + fileName + "' without " + + Arg.OVERWRITE.argString() + " or " + + Arg.BACKUPS.argString() + " set"); + return false; + } + + String name = af.getName(); + String format = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.FORMAT, subVals); + FileFormats ffs = FileFormats.getInstance(); + List validFormats = ffs.getWritableFormats(false); + + FileFormatI ff = null; + if (format == null && fileName != null) + { + FORMAT: for (String fname : validFormats) + { + FileFormatI tff = ffs.forName(fname); + String[] extensions = tff.getExtensions().split(","); + for (String ext : extensions) + { + if (fileName.toLowerCase(Locale.ROOT).endsWith("." + ext)) + { + ff = tff; + format = ff.getName(); + break FORMAT; + } + } + } + } + if (ff == null && format != null) + { + ff = ffs.forName(format); + } + if (ff == null) + { + StringBuilder validSB = new StringBuilder(); + for (String f : validFormats) + { + if (validSB.length() > 0) + validSB.append(", "); + validSB.append(f); + FileFormatI tff = ffs.forName(f); + validSB.append(" ("); + validSB.append(tff.getExtensions()); + validSB.append(")"); + } + + Jalview.exit("No valid format specified for " + + Arg.OUTPUT.argString() + ". Valid formats are " + + validSB.toString() + ".", 1); + // this return really shouldn't happen + return false; + } + + String savedBackupsPreference = Cache + .getDefault(BackupFiles.ENABLED, null); + Console.debug("Setting backups to " + backups); + Cache.applicationProperties.put(BackupFiles.ENABLED, + Boolean.toString(backups)); + af.saveAlignment(fileName, ff); + Console.debug("Returning backups to " + savedBackupsPreference); + if (savedBackupsPreference != null) + Cache.applicationProperties.put(BackupFiles.ENABLED, + savedBackupsPreference); + if (af.isSaveAlignmentSuccessful()) + { + Console.debug("Written alignment '" + name + "' in " + + ff.getName() + " format to " + file); + } + else + { + Console.warn("Error writing file " + file + " in " + ff.getName() + + " format!"); + } + + } + } + return true; + } + private SequenceI getSpecifiedSequence(AlignFrame af, SubVals subId) { if (subId == null) @@ -677,9 +820,6 @@ public class Commands else { structfile = likelyStructure.getValue(); - Console.debug( - "##### Comparing closest previous structure argument '" - + structfile + "'"); } } }