X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCommands.java;h=4a70bd94b2c72bf6743a63d828a38c05c222451a;hb=f52d881ba992cf5d4570d487f6319666f13263a9;hp=26ce8c32c1709ebfa7d81a923b8d4271947392a0;hpb=a5928e2c1b9e2cea8d9c43f3d03f9cce2604f3b2;p=jalview.git diff --git a/src/jalview/bin/Commands.java b/src/jalview/bin/Commands.java index 26ce8c3..4a70bd9 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.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -10,13 +11,16 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Map.Entry; import jalview.analysis.AlignmentUtils; import jalview.api.AlignmentViewPanel; -import jalview.bin.ArgParser.Arg; -import jalview.bin.ArgParser.ArgValue; -import jalview.bin.ArgParser.ArgValuesMap; -import jalview.bin.ArgParser.SubVals; +import jalview.bin.argparser.Arg; +import jalview.bin.argparser.ArgParser; +import jalview.bin.argparser.ArgValue; +import jalview.bin.argparser.ArgValues; +import jalview.bin.argparser.ArgValuesMap; +import jalview.bin.argparser.SubVals; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.PDBEntry; @@ -31,6 +35,7 @@ import jalview.gui.StructureChooser; import jalview.gui.StructureViewer; import jalview.io.AppletFormatAdapter; import jalview.io.DataSourceType; +import jalview.io.FileFormat; import jalview.io.FileFormatException; import jalview.io.FileFormatI; import jalview.io.FileLoader; @@ -145,16 +150,13 @@ public class Commands return true; /* - // script to execute after all loading is completed one way or another - String groovyscript = m.get(Arg.GROOVY) == null ? null - : m.get(Arg.GROOVY).getValue(); - String file = m.get(Arg.OPEN) == null ? null - : m.get(Arg.OPEN).getValue(); - String data = null; - FileFormatI format = null; - DataSourceType protocol = null; - */ - if (avm.containsArg(Arg.OPEN)) + * // script to execute after all loading is completed one way or another String + * groovyscript = m.get(Arg.GROOVY) == null ? null : + * m.get(Arg.GROOVY).getValue(); String file = m.get(Arg.OPEN) == null ? null : + * m.get(Arg.OPEN).getValue(); String data = null; FileFormatI format = null; + * DataSourceType protocol = null; + */ + if (avm.containsArg(Arg.OPEN) || avm.containsArg(Arg.OPENNEW)) { commandArgsProvided = true; long progress = -1; @@ -162,8 +164,21 @@ public class Commands boolean first = true; boolean progressBarSet = false; AlignFrame af; - for (ArgValue av : avm.getArgValueList(Arg.OPEN)) + // Combine the OPEN and OPENNEW files into one list, along with whether it + // was OPEN or OPENNEW + List> openAvList = new ArrayList<>(); + avm.getArgValueList(Arg.OPEN).stream() + .forEachOrdered(av -> openAvList.add( + new AbstractMap.SimpleEntry(Arg.OPEN, + av))); + avm.getArgValueList(Arg.OPENNEW).stream() + .forEachOrdered(av -> openAvList + .add(new AbstractMap.SimpleEntry( + Arg.OPENNEW, av))); + for (Entry aav : openAvList) { + Arg a = aav.getKey(); + ArgValue av = aav.getValue(); String openFile = av.getValue(); if (openFile == null) continue; @@ -211,36 +226,23 @@ public class Commands } af = afMap.get(id); - if (af == null) + if (af == null || "true".equals(av.getSubVal("new")) + || a == Arg.OPENNEW || format == FileFormat.Jalview) { /* - * this approach isn't working yet - // get default annotations before opening AlignFrame - if (m.get(Arg.SSANNOTATION) != null) - { - Console.debug("***** SSANNOTATION=" - + m.get(Arg.SSANNOTATION).getBoolean()); - } - if (m.get(Arg.NOTEMPFAC) != null) - { - Console.debug( - "***** NOTEMPFAC=" + m.get(Arg.NOTEMPFAC).getBoolean()); - } - boolean showSecondaryStructure = (m.get(Arg.SSANNOTATION) != null) - ? m.get(Arg.SSANNOTATION).getBoolean() - : false; - boolean showTemperatureFactor = (m.get(Arg.NOTEMPFAC) != null) - ? !m.get(Arg.NOTEMPFAC).getBoolean() - : false; - Console.debug("***** tempfac=" + showTemperatureFactor - + ", showSS=" + showSecondaryStructure); - StructureSelectionManager ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); - if (ssm != null) - { - ssm.setAddTempFacAnnot(showTemperatureFactor); - ssm.setProcessSecondaryStructure(showSecondaryStructure); - } + * this approach isn't working yet // get default annotations before opening + * AlignFrame if (m.get(Arg.SSANNOTATION) != null) { + * Console.debug("##### SSANNOTATION=" + m.get(Arg.SSANNOTATION).getBoolean()); + * } if (m.get(Arg.NOTEMPFAC) != null) { Console.debug( "##### NOTEMPFAC=" + + * m.get(Arg.NOTEMPFAC).getBoolean()); } boolean showSecondaryStructure = + * (m.get(Arg.SSANNOTATION) != null) ? m.get(Arg.SSANNOTATION).getBoolean() : + * false; boolean showTemperatureFactor = (m.get(Arg.NOTEMPFAC) != null) ? + * !m.get(Arg.NOTEMPFAC).getBoolean() : false; Console.debug("##### tempfac=" + + * showTemperatureFactor + ", showSS=" + showSecondaryStructure); + * StructureSelectionManager ssm = StructureSelectionManager + * .getStructureSelectionManager(Desktop.instance); if (ssm != null) { + * ssm.setAddTempFacAnnot(showTemperatureFactor); + * ssm.setProcessSecondaryStructure(showSecondaryStructure); } */ // get kind of temperature factor annotation @@ -258,8 +260,8 @@ public class Commands } catch (IllegalArgumentException e) { // Just an error message! - StringBuilder sb = new StringBuilder().append("Cannot set --") - .append(Arg.TEMPFAC.getName()).append(" to '") + StringBuilder sb = new StringBuilder().append("Cannot set ") + .append(Arg.TEMPFAC.argString()).append(" to '") .append(tempfacType) .append("', ignoring. Valid values are: "); Iterator it = Arrays @@ -323,9 +325,10 @@ public class Commands false, false); } else - /* comment out hacky approach up to here and add this line: - if (showTemperatureFactor) - */ + /* + * comment out hacky approach up to here and add this line: if + * (showTemperatureFactor) + */ { if (avm.containsArg(Arg.TEMPFAC_LABEL)) { @@ -374,8 +377,7 @@ public class Commands { if (headless) { - Console.error("Could not open any files in headless mode"); - System.exit(1); + Jalview.exit("Could not open any files in headless mode", 1); } else { @@ -397,12 +399,20 @@ public class Commands for (ArgValue av : avm.getArgValueList(Arg.STRUCTURE)) { String val = av.getValue(); - SubVals subId = new SubVals(val); + SubVals subId = av.getSubVals(); SequenceI seq = getSpecifiedSequence(af, subId); if (seq == null) { - Console.warn("Could not find sequence for argument --" - + Arg.STRUCTURE + "=" + val); + // Could not find sequence from subId, let's assume the first + // sequence in the alignframe + AlignmentI al = af.getCurrentView().getAlignment(); + seq = al.getSequenceAt(0); + } + + if (seq == null) + { + Console.warn("Could not find sequence for argument " + + Arg.STRUCTURE.argString() + "=" + val); // you probably want to continue here, not break // break; continue; @@ -415,20 +425,16 @@ public class Commands Console.debug("Using structure file (from argument) '" + structureFile.getAbsolutePath() + "'"); } - // TRY THIS /* - PDBEntry fileEntry = new AssociatePdbFileWithSeq() - .associatePdbWithSeq(selectedPdbFileName, - DataSourceType.FILE, selectedSequence, true, - Desktop.instance); - - sViewer = launchStructureViewer(ssm, new PDBEntry[] { fileEntry }, - ap, new SequenceI[] - { selectedSequence }); - + * PDBEntry fileEntry = new AssociatePdbFileWithSeq() + * .associatePdbWithSeq(selectedPdbFileName, DataSourceType.FILE, + * selectedSequence, true, Desktop.instance); + * + * sViewer = launchStructureViewer(ssm, new PDBEntry[] { fileEntry }, ap, new + * SequenceI[] { selectedSequence }); + * */ - /* THIS DOESN'T WORK */ else if (seq.getAllPDBEntries() != null && seq.getAllPDBEntries().size() > 0) @@ -469,17 +475,17 @@ public class Commands // get tft, paeFilename, label? /* - ArgValue tftAv = avm.getArgValuesReferringTo("structid", structId, - Arg.TEMPFAC); + * ArgValue tftAv = avm.getArgValuesReferringTo("structid", structId, + * Arg.TEMPFAC); */ StructureChooser.openStructureFileForSequence(null, null, ap, seq, false, structureFile.getAbsolutePath(), null, null); // tft, - // paeFilename); + // paeFilename); } } } - // load a pAE file if given + // load a PAE file if given if (avm.containsArg(Arg.PAEMATRIX)) { AlignFrame af = afMap.get(id); @@ -488,7 +494,8 @@ public class Commands for (ArgValue av : avm.getArgValueList(Arg.PAEMATRIX)) { String val = av.getValue(); - SubVals subVals = ArgParser.getSubVals(val); + SubVals subVals = av.getSubVals(); + String paeLabel = subVals.get("label"); File paeFile = new File(subVals.getContent()); String paePath = null; try @@ -500,38 +507,66 @@ public class Commands Console.warn( "Problem with the PAE file path: '" + paePath + "'"); } - String structId = subVals.get("structid"); - if (subVals.notSet()) + String structid = subVals.get("structid"); + String structfile = subVals.get("structfile"); + String seqid = subVals.get("seqid"); + int seqindex = subVals.getIndex(); + + // let's find a structure + if (structfile == null && structid == null && seqid == null + && seqindex == SubVals.NOTSET) + { + 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(); + Console.debug( + "##### Using closest previous structure argument '" + + structfile + "'"); + } + } + } + + if (structfile != null) { - // take structid from pdbfilename + Console.debug("##### Attaching paeFile '" + paePath + "' to " + + "structfile=" + structfile); + EBIAlfaFold.addAlphaFoldPAE(af.getCurrentView().getAlignment(), + paeFile, seqindex, structfile, true, false, paeLabel); } - if (subVals.has("structfile")) + else if (structid != null) { - Console.info("***** Attaching paeFile '" + paePath + "' to " - + "structfile=" + subVals.get("structfile")); + Console.debug("##### Attaching paeFile '" + paePath + "' to " + + "structid=" + structid); EBIAlfaFold.addAlphaFoldPAE(af.getCurrentView().getAlignment(), - paeFile, subVals.getIndex(), subVals.get("structfile"), - true, false); + paeFile, seqindex, structid, true, true, paeLabel); } - else if (subVals.has("structid")) + else if (seqid != null) { - Console.info("***** Attaching paeFile '" + paePath + "' to " - + "structid=" + subVals.get("structid")); + Console.debug("##### Attaching paeFile '" + paePath + "' to " + + "seqid=" + seqid); EBIAlfaFold.addAlphaFoldPAE(af.getCurrentView().getAlignment(), - paeFile, subVals.getIndex(), subVals.get("structid"), - true, true); + paeFile, seqindex, seqid, false, false, paeLabel); } - else + else if (seqindex >= 0) { - Console.debug("***** Attaching paeFile '" + paePath - + "' to sequence index " + subVals.getIndex()); + Console.debug("##### Attaching paeFile '" + paePath + + "' to sequence index " + seqindex); EBIAlfaFold.addAlphaFoldPAE(af.getCurrentView().getAlignment(), - paeFile, subVals.getIndex(), null, false, false); - // required to readjust the height and position of the pAE - // annotation + paeFile, seqindex, null, false, false, paeLabel); } for (AlignmentViewPanel ap : af.getAlignPanels()) { + // required to readjust the height and position of the PAE + // annotation ap.adjustAnnotationHeight(); } } @@ -572,7 +607,7 @@ public class Commands for (ArgValue av : avm.getArgValueList(Arg.IMAGE)) { String val = av.getValue(); - SubVals subVal = new SubVals(val); + SubVals subVal = av.getSubVals(); String type = "png"; // default String fileName = subVal.getContent(); File file = new File(fileName); @@ -610,7 +645,8 @@ public class Commands htmlSVG.exportHTML(fileName); break; default: - Console.warn("--image type '" + type + "' not known. Ignoring"); + Console.warn(Arg.IMAGE.argString() + " type '" + type + + "' not known. Ignoring"); break; } } @@ -620,15 +656,17 @@ public class Commands private SequenceI getSpecifiedSequence(AlignFrame af, SubVals subId) { + if (subId == null) + return null; AlignmentI al = af.getCurrentView().getAlignment(); - if (-1 < subId.getIndex() - && subId.getIndex() < al.getSequences().size()) + if (subId.has("seqid")) { - return al.getSequenceAt(subId.getIndex()); + return al.findName(subId.get("seqid")); } - else if (subId.has("seqid")) + else if (-1 < subId.getIndex() + && subId.getIndex() < al.getSequences().size()) { - return al.findName(subId.get("seqid")); + return al.getSequenceAt(subId.getIndex()); } return null; }