X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCommands.java;h=30fdc30fd1340d6b4939590e6a49bb4a474322c3;hb=bda60947eaabb464920b733509ace12e745f3910;hp=af4c675def115d09aa519648d8fd5a4fd4919d24;hpb=ab54fa42cc7b67c41afde9411f183cac60743071;p=jalview.git diff --git a/src/jalview/bin/Commands.java b/src/jalview/bin/Commands.java index af4c675..30fdc30 100644 --- a/src/jalview/bin/Commands.java +++ b/src/jalview/bin/Commands.java @@ -14,11 +14,11 @@ import java.util.Locale; import java.util.Map; import jalview.analysis.AlignmentUtils; +import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.argparser.Arg; import jalview.bin.argparser.ArgParser; import jalview.bin.argparser.ArgParser.Position; import jalview.bin.argparser.ArgValue; -import jalview.bin.argparser.ArgValues; import jalview.bin.argparser.ArgValuesMap; import jalview.bin.argparser.SubVals; import jalview.datamodel.AlignmentI; @@ -26,6 +26,7 @@ import jalview.datamodel.SequenceI; import jalview.datamodel.annotations.AlphaFoldAnnotationRowBuilder; import jalview.gui.AlignFrame; import jalview.gui.AlignmentPanel; +import jalview.gui.AppJmol; import jalview.gui.Desktop; import jalview.gui.Preferences; import jalview.gui.StructureChooser; @@ -45,9 +46,13 @@ import jalview.io.IdentifyFile; import jalview.io.NewickFile; import jalview.structure.StructureImportSettings.TFType; import jalview.structure.StructureSelectionManager; +import jalview.util.FileUtils; import jalview.util.HttpUtils; +import jalview.util.ImageMaker; +import jalview.util.ImageMaker.TYPE; import jalview.util.MessageManager; import jalview.util.Platform; +import jalview.util.imagemaker.BitmapImageSizing; public class Commands { @@ -73,7 +78,7 @@ public class Commands argParser = argparser; headless = h; desktop = d; - afMap = new HashMap(); + afMap = new HashMap<>(); if (argparser != null) { processArgs(argparser, headless); @@ -447,14 +452,6 @@ public class Commands Console.debug("Using structure file " + structureFile.getAbsolutePath()); - // ##### Does this need to happen? Follow - // openStructureFileForSequence() below - /* - PDBEntry fileEntry = new AssociatePdbFileWithSeq() - .associatePdbWithSeq(structureFile.getAbsolutePath(), - DataSourceType.FILE, seq, true, Desktop.instance); - */ - // open structure view AlignmentPanel ap = af.alignPanel; if (headless) @@ -466,14 +463,13 @@ public class Commands String structureFilepath = structureFile.getAbsolutePath(); // get PAEMATRIX file and label from subvals or Arg.PAEMATRIX - String paeFilepath = subVals.getWithSubstitutions(argParser, id, - "paematrix"); - ArgValue paeAv = getArgAssociatedWithStructure(Arg.PAEMATRIX, avm, - af, structureFilepath); - if (paeFilepath == null && paeAv != null) + String paeFilepath = ArgParser + .getFromSubValArgOrPrefWithSubstitutions(argParser, avm, + Arg.PAEMATRIX, Position.AFTER, av, subVals, null, + null, null); + if (paeFilepath != null) { - SubVals sv = paeAv.getSubVals(); - File paeFile = new File(sv.getContent()); + File paeFile = new File(paeFilepath); try { @@ -493,16 +489,15 @@ public class Commands // get TEMPFAC type from subvals or Arg.TEMPFAC in case user Adds // reference annotations - String tftString = subVals.get("tempfac"); - TFType tft = avm.getBoolean(Arg.NOTEMPFAC) ? null - : TFType.DEFAULT; - ArgValue tftAv = getArgAssociatedWithStructure(Arg.TEMPFAC, avm, - af, structureFilepath); - if (tftString == null && tftAv != null) - { - tftString = tftAv.getSubVals().getContent(); - } - if (tftString != null) + String tftString = ArgParser + .getFromSubValArgOrPrefWithSubstitutions(argParser, avm, + Arg.TEMPFAC, Position.AFTER, av, subVals, null, + null, null); + boolean notempfac = ArgParser.getFromSubValArgOrPref(avm, + Arg.NOTEMPFAC, subVals, null, "ADD_TEMPFACT_ANN", false, + true); + TFType tft = notempfac ? null : TFType.DEFAULT; + if (tftString != null && !notempfac) { // get kind of temperature factor annotation try @@ -547,13 +542,82 @@ public class Commands } } - boolean addTempFac = tft != null - || Cache.getDefault("ADD_TEMPFACT_ANN", false); - // TODO use ssFromStructure - StructureChooser.openStructureFileForSequence(null, null, ap, seq, - false, structureFilepath, tft, paeFilepath, false, - ssFromStructure, false, viewerType); + StructureViewer sv = StructureChooser + .openStructureFileForSequence(null, null, ap, seq, false, + structureFilepath, tft, paeFilepath, false, + ssFromStructure, false, viewerType); + + if (headless) + { + sv.setAsync(false); + } + + String structureImageFilename = ArgParser.getValueFromSubValOrArg( + avm, av, Arg.STRUCTUREIMAGE, subVals); + if (sv != null && structureImageFilename != null) + { + ArgValue siAv = avm.getClosestNextArgValueOfArg(av, + Arg.STRUCTUREIMAGE); + SubVals sisv = null; + if (structureImageFilename.equals(siAv.getValue())) + { + sisv = siAv.getSubVals(); + } + File structureImageFile = new File(structureImageFilename); + String width = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.STRUCTUREIMAGEWIDTH, sisv); + String height = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.STRUCTUREIMAGEHEIGHT, sisv); + String scale = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.STRUCTUREIMAGESCALE, sisv); + String renderer = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.STRUCTUREIMAGETEXTRENDERER, sisv); + String typeS = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.STRUCTUREIMAGETYPE, sisv); + if (typeS == null || typeS.length() == 0) + { + typeS = FileUtils.getExtension(structureImageFile); + } + TYPE imageType; + try + { + imageType = Enum.valueOf(TYPE.class, + typeS.toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) + { + Console.warn("Do not know image format '" + typeS + + "', using PNG"); + imageType = TYPE.PNG; + } + BitmapImageSizing userBis = ImageMaker + .parseScaleWidthHeightStrings(scale, width, height); + switch (StructureViewer.getViewerType()) + { + case JMOL: + try + { + Thread.sleep(1000); + } catch (InterruptedException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + JalviewStructureDisplayI sview = sv + .getJalviewStructureDisplay(); + if (sview instanceof AppJmol) + { + AppJmol jmol = (AppJmol) sview; + jmol.makePDBImage(structureImageFile, imageType, renderer, + userBis); + } + break; + default: + Console.warn("Cannot export image for structure viewer " + + sv.getViewerType() + " yet"); + break; + } + } } } } @@ -627,6 +691,16 @@ public class Commands if (renderer == null) renderer = "text"; String type = "png"; // default + + String scale = ArgParser.getValueFromSubValOrArg(avm, av, Arg.SCALE, + subVal); + String width = ArgParser.getValueFromSubValOrArg(avm, av, Arg.WIDTH, + subVal); + String height = ArgParser.getValueFromSubValOrArg(avm, av, + Arg.HEIGHT, subVal); + BitmapImageSizing userBis = ImageMaker + .parseScaleWidthHeightStrings(scale, width, height); + type = ArgParser.getValueFromSubValOrArg(avm, av, Arg.TYPE, subVal); if (type == null && fileName != null) { @@ -642,6 +716,8 @@ public class Commands Cache.setPropsAreReadOnly(true); Cache.setProperty("EXPORT_EMBBED_BIOJSON", "false"); + Console.info("Writing " + file); + switch (type) { @@ -652,7 +728,7 @@ public class Commands case "png": Console.debug("Outputting type '" + type + "' to " + fileName); - af.createPNG(file); + af.createPNG(file, null, userBis); break; case "html": @@ -787,6 +863,9 @@ public class Commands Console.debug("Setting backups to " + backups); Cache.applicationProperties.put(BackupFiles.ENABLED, Boolean.toString(backups)); + + Console.info("Writing " + fileName); + af.saveAlignment(fileName, ff); Console.debug("Returning backups to " + savedBackupsPreference); if (savedBackupsPreference != null) @@ -816,9 +895,15 @@ public class Commands SequenceI seq = null; if (subVals == null && idAv == null) return null; + if (af == null || af.getCurrentView() == null) + { + return null; + } AlignmentI al = af.getCurrentView().getAlignment(); if (al == null) + { return null; + } if (subVals != null) { if (subVals.has(Arg.SEQID.getName())) @@ -837,54 +922,4 @@ public class Commands } return seq; } - - // returns the first Arg value intended for the structure structFilename - // (in the given AlignFrame from the ArgValuesMap) - private ArgValue getArgAssociatedWithStructure(Arg arg, ArgValuesMap avm, - AlignFrame af, String structFilename) - { - if (af != null) - { - for (ArgValue av : avm.getArgValueList(arg)) - { - SubVals subVals = av.getSubVals(); - String structid = subVals.get("structid"); - String structfile = subVals.get("structfile"); - - // let's find a structure - if (structfile == null && structid == null) - { - ArgValue likelyStructure = avm.getClosestPreviousArgValueOfArg(av, - Arg.STRUCTURE); - if (likelyStructure != null) - { - SubVals sv = likelyStructure.getSubVals(); - if (sv != null && sv.has(ArgValues.ID)) - { - structid = sv.get(ArgValues.ID); - } - else - { - structfile = likelyStructure.getValue(); - } - } - } - - if (structfile == null && structid != null) - { - StructureSelectionManager ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); - if (ssm != null) - { - structfile = ssm.findFileForPDBId(structid); - } - } - if (structfile != null && structfile.equals(structFilename)) - { - return av; - } - } - } - return null; - } }