X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCommands.java;h=e01d40acb22462298ea342dd0798e893bb8ad460;hb=b2d2f19d703fe5c499788bbd2947e65ac1ca7441;hp=1d65fc6e61ba187caa80e371f5fe2afa2c0d2060;hpb=809c044d96563eea97b00f2c55d2065480f6cac8;p=jalview.git diff --git a/src/jalview/bin/Commands.java b/src/jalview/bin/Commands.java index 1d65fc6..e01d40a 100644 --- a/src/jalview/bin/Commands.java +++ b/src/jalview/bin/Commands.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.bin; import java.awt.Color; @@ -13,6 +33,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import javax.swing.SwingUtilities; + import jalview.analysis.AlignmentUtils; import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Jalview.ExitCode; @@ -194,7 +216,7 @@ public class Commands if (avm.containsArg(Arg.APPEND) || avm.containsArg(Arg.OPEN)) { commandArgsProvided = true; - long progress = -1; + final long progress = System.currentTimeMillis(); boolean first = true; boolean progressBarSet = false; @@ -220,10 +242,18 @@ public class Commands first = false; if (!headless && desktop != null) { - desktop.setProgressBar( - MessageManager.getString( - "status.processing_commandline_args"), - progress = System.currentTimeMillis()); + SwingUtilities.invokeLater(new Runnable() + { + @Override + public void run() + { + desktop.setProgressBar( + MessageManager.getString( + "status.processing_commandline_args"), + progress); + + } + }); progressBarSet = true; } } @@ -365,24 +395,49 @@ public class Commands boolean showSSAnnotations = avm.getFromSubValArgOrPref( Arg.SHOWSSANNOTATIONS, av.getSubVals(), null, "STRUCT_FROM_PDB", true); - af.setAnnotationsVisibility(showSSAnnotations, true, false); // Show sequence annotations? boolean showAnnotations = avm.getFromSubValArgOrPref( Arg.SHOWANNOTATIONS, av.getSubVals(), null, "SHOW_ANNOTATIONS", true); - af.setAnnotationsVisibility(showAnnotations, false, true); - // show temperature factor annotations? - if (avm.getBoolean(Arg.NOTEMPFAC)) + boolean hideTFrows = (avm.getBoolean(Arg.NOTEMPFAC)); + final AlignFrame _af = af; + // many of jalview's format/layout methods are only thread safe on the + // swingworker thread. + // all these methods should be on the alignViewController so it can + // coordinate such details + try + { + SwingUtilities.invokeAndWait(new Runnable() + { + + @Override + public void run() + { + _af.setAnnotationsVisibility(showSSAnnotations, true, + false); + + _af.setAnnotationsVisibility(showAnnotations, false, true); + + // show temperature factor annotations? + if (hideTFrows) + { + // do this better (annotation types?) + List hideThese = new ArrayList<>(); + hideThese.add("Temperature Factor"); + hideThese.add(AlphaFoldAnnotationRowBuilder.LABEL); + AlignmentUtils.showOrHideSequenceAnnotations( + _af.getCurrentView().getAlignment(), hideThese, + null, false, false); + } + } + }); + } catch (Exception x) { - // do this better (annotation types?) - List hideThese = new ArrayList<>(); - hideThese.add("Temperature Factor"); - hideThese.add(AlphaFoldAnnotationRowBuilder.LABEL); - AlignmentUtils.showOrHideSequenceAnnotations( - af.getCurrentView().getAlignment(), hideThese, null, - false, false); + Console.warn( + "Unexpected exception adjusting annotation row visibility.", + x); } // wrap alignment? do this last for formatting reasons @@ -408,9 +463,11 @@ public class Commands { Console.debug( "Opening '" + openFile + "' in existing alignment frame"); + DataSourceType dst = HttpUtils.startsWithHttpOrHttps(openFile) ? DataSourceType.URL : DataSourceType.FILE; + FileLoader fileLoader = new FileLoader(!headless); fileLoader.LoadFile(af.getCurrentView(), openFile, dst, null, false); @@ -439,17 +496,18 @@ public class Commands // open the structure (from same PDB file or given PDBfile) if (!avm.getBoolean(Arg.NOSTRUCTURE)) { + AlignFrame af = afMap.get(id); if (avm.containsArg(Arg.STRUCTURE)) { commandArgsProvided = true; - for (ArgValue av : avm.getArgValueList(Arg.STRUCTURE)) + for (ArgValue structureAv : avm.getArgValueList(Arg.STRUCTURE)) { argParser.setStructureFilename(null); - String val = av.getValue(); - SubVals subVals = av.getSubVals(); - int argIndex = av.getArgIndex(); - SequenceI seq = getSpecifiedSequence(af, avm, av); + String val = structureAv.getValue(); + SubVals subVals = structureAv.getSubVals(); + int argIndex = structureAv.getArgIndex(); + SequenceI seq = getSpecifiedSequence(af, avm, structureAv); if (seq == null) { // Could not find sequence from subId, let's assume the first @@ -518,8 +576,8 @@ public class Commands // get PAEMATRIX file and label from subvals or Arg.PAEMATRIX String paeFilepath = avm.getFromSubValArgOrPrefWithSubstitutions( - argParser, Arg.PAEMATRIX, ArgValuesMap.Position.AFTER, av, - subVals, null, null, null); + argParser, Arg.PAEMATRIX, ArgValuesMap.Position.AFTER, + structureAv, subVals, null, null, null); if (paeFilepath != null) { File paeFile = new File(paeFilepath); @@ -543,8 +601,8 @@ public class Commands // get TEMPFAC type from subvals or Arg.TEMPFAC in case user Adds // reference annotations String tftString = avm.getFromSubValArgOrPrefWithSubstitutions( - argParser, Arg.TEMPFAC, ArgValuesMap.Position.AFTER, av, - subVals, null, null, null); + argParser, Arg.TEMPFAC, ArgValuesMap.Position.AFTER, + structureAv, subVals, null, null, null); boolean notempfac = avm.getFromSubValArgOrPref(Arg.NOTEMPFAC, subVals, null, "ADD_TEMPFACT_ANN", false, true); TFType tft = notempfac ? null : TFType.DEFAULT; @@ -576,8 +634,8 @@ public class Commands } String sViewerName = avm.getFromSubValArgOrPref( - Arg.STRUCTUREVIEWER, ArgValuesMap.Position.AFTER, av, - subVals, null, null, "jmol"); + Arg.STRUCTUREVIEWER, ArgValuesMap.Position.AFTER, + structureAv, subVals, null, null, "jmol"); ViewerType viewerType = ViewerType.getFromString(sViewerName); // TODO use ssFromStructure @@ -638,7 +696,8 @@ public class Commands if (avm.containsArg(Arg.STRUCTUREIMAGE)) { for (ArgValue structureImageArgValue : avm - .getArgValueList(Arg.STRUCTUREIMAGE)) + .getArgValueListFromSubValOrArg(structureAv, + Arg.STRUCTUREIMAGE, subVals)) { String structureImageFilename = argParser.makeSubstitutions( structureImageArgValue.getValue(), id, true); @@ -769,16 +828,17 @@ public class Commands AppJmol jmol = (AppJmol) sview; jmol.makePDBImage(structureImageFile, imageType, renderer, userBis); - Console.debug("Finished Rendering image to " + Console.info("Exported structure image to " + structureImageFile); // RESTORE SESSION AFTER EXPORT IF NEED BE if (sessionToRestore != null) { - Console.debug("Restoring session from " - + sessionToRestore); - - sview.getBinding().restoreSession(sessionToRestore.getAbsolutePath()); + Console.debug( + "Restoring session from " + sessionToRestore); + + sview.getBinding().restoreSession( + sessionToRestore.getAbsolutePath()); } } catch (ImageOutputException ioexec) @@ -789,11 +849,14 @@ public class Commands continue; } finally { - try { + try + { this.colourAlignFrame(af, originalColourScheme); } catch (Exception t) { - addError("Unexpected error when restoring colourscheme to alignment after temporary change for export.",t); + addError( + "Unexpected error when restoring colourscheme to alignment after temporary change for export.", + t); } } } @@ -806,6 +869,7 @@ public class Commands if (wrap) { + AlignFrame af = afMap.get(id); if (af != null) { @@ -817,16 +881,16 @@ public class Commands boolean doShading = avm.getBoolean(Arg.TEMPFAC_SHADING); if (doShading) { - AlignFrame af = afMap.get(id); - for (AlignmentAnnotation aa : af.alignPanel.getAlignment() - .findAnnotation(PDBChain.class.getName().toString())) - { - AnnotationColourGradient acg = new AnnotationColourGradient(aa, - af.alignPanel.av.getGlobalColourScheme(), 0); - acg.setSeqAssociated(true); - af.changeColour(acg); - Console.info("Changed colour " + acg.toString()); - } + AlignFrame af = afMap.get(id); + for (AlignmentAnnotation aa : af.alignPanel.getAlignment() + .findAnnotation(PDBChain.class.getName().toString())) + { + AnnotationColourGradient acg = new AnnotationColourGradient(aa, + af.alignPanel.av.getGlobalColourScheme(), 0); + acg.setSeqAssociated(true); + af.changeColour(acg); + Console.info("Changed colour " + acg.toString()); + } } */ @@ -838,21 +902,29 @@ public class Commands ArgValuesMap avm = argParser.getLinkedArgs(id); AlignFrame af = afMap.get(id); - if (af == null) + if (avm != null && !avm.containsArg(Arg.GROOVY)) { - addWarn("Did not have an alignment window for id=" + id); + // nothing to do return; } + if (af == null) + { + addWarn("Groovy script does not have an alignment window. Proceeding with caution!"); + } + if (avm.containsArg(Arg.GROOVY)) { - String groovyscript = avm.getValue(Arg.GROOVY); - if (groovyscript != null) + for (ArgValue groovyAv : avm.getArgValueList(Arg.GROOVY)) { - // Execute the groovy script after we've done all the rendering stuff - // and before any images or figures are generated. - Console.info("Executing script " + groovyscript); - Jalview.getInstance().executeGroovyScript(groovyscript, af); + String groovyscript = groovyAv.getValue(); + if (groovyscript != null) + { + // Execute the groovy script after we've done all the rendering stuff + // and before any images or figures are generated. + Console.info("Executing script " + groovyscript); + Jalview.getInstance().executeGroovyScript(groovyscript, af); + } } } } @@ -862,9 +934,16 @@ public class Commands ArgValuesMap avm = argParser.getLinkedArgs(id); AlignFrame af = afMap.get(id); + if (avm != null && !avm.containsArg(Arg.IMAGE)) + { + // nothing to do + return true; + } + if (af == null) { - addWarn("Did not have an alignment window for id=" + id); + addWarn("Do not have an alignment window to create image from (id=" + + id + "). Not proceeding."); return false; } @@ -991,9 +1070,16 @@ public class Commands ArgValuesMap avm = argParser.getLinkedArgs(id); AlignFrame af = afMap.get(id); + if (avm != null && !avm.containsArg(Arg.OUTPUT)) + { + // nothing to do + return true; + } + if (af == null) { - addWarn("Did not have an alignment window for id=" + id); + addWarn("Do not have an alignment window (id=" + id + + "). Not proceeding."); return false; }