import java.io.File;
import java.io.IOException;
+import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
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;
{
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))
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)
{
}
// 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);
{
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))
{
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");
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<String> 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)
else
{
structfile = likelyStructure.getValue();
- Console.debug(
- "##### Comparing closest previous structure argument '"
- + structfile + "'");
}
}
}