import java.io.File;
import java.io.IOException;
+import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
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.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.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;
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;
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<Entry<Arg, ArgValue>> openAvList = new ArrayList<>();
+ avm.getArgValueList(Arg.OPEN).stream()
+ .forEachOrdered(av -> openAvList.add(
+ new AbstractMap.SimpleEntry<Arg, ArgValue>(Arg.OPEN,
+ av)));
+ avm.getArgValueList(Arg.OPENNEW).stream()
+ .forEachOrdered(av -> openAvList
+ .add(new AbstractMap.SimpleEntry<Arg, ArgValue>(
+ Arg.OPENNEW, av)));
+ for (Entry<Arg, ArgValue> aav : openAvList)
{
+ Arg a = aav.getKey();
+ ArgValue av = aav.getValue();
String openFile = av.getValue();
if (openFile == null)
continue;
}
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
} 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<StructureImportSettings.TFType> it = Arrays
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))
{
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;
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)
// 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);
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
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();
}
}
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);
htmlSVG.exportHTML(fileName);
break;
default:
- Console.warn("--image type '" + type + "' not known. Ignoring");
+ Console.warn(Arg.IMAGE.argString() + " type '" + type
+ + "' not known. Ignoring");
break;
}
}
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;
}