JAL-2422 a fix and a fudge for two failing ChimeraX commands
[jalview.git] / src / jalview / gui / JalviewChimeraXBindingModel.java
1 package jalview.gui;
2
3 import java.util.List;
4
5 import ext.edu.ucsf.rbvi.strucviz2.ChimeraModel;
6 import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
7 import ext.edu.ucsf.rbvi.strucviz2.StructureManager.ModelType;
8 import jalview.datamodel.PDBEntry;
9 import jalview.datamodel.SequenceI;
10 import jalview.ext.rbvi.chimera.ChimeraXCommands;
11 import jalview.gui.StructureViewer.ViewerType;
12 import jalview.io.DataSourceType;
13 import jalview.structure.AtomSpec;
14 import jalview.structure.StructureSelectionManager;
15
16 public class JalviewChimeraXBindingModel extends JalviewChimeraBindingModel
17 {
18   public static final String CHIMERAX_SESSION_EXTENSION = ".cxs";
19
20   public JalviewChimeraXBindingModel(ChimeraViewFrame chimeraViewFrame,
21           StructureSelectionManager ssm, PDBEntry[] pdbentry,
22           SequenceI[][] sequenceIs, DataSourceType protocol)
23   {
24     super(chimeraViewFrame, ssm, pdbentry, sequenceIs, protocol);
25     setStructureCommands(new ChimeraXCommands());
26   }
27
28   @Override
29   protected List<String> getChimeraPaths()
30   {
31     return StructureManager.getChimeraPaths(true);
32   }
33
34   @Override
35   protected void addChimeraModel(PDBEntry pe,
36           List<ChimeraModel> modelsToMap)
37   {
38     /*
39      * ChimeraX hack: force chimera model name to pdbId here
40      */
41     int modelNumber = chimeraMaps.size() + 1;
42     String command = "setattr #" + modelNumber + " models name "
43             + pe.getId();
44     // FIXME reinstate this for ChimeraX 1.2, see https://plato.cgl.ucsf.edu/trac/ChimeraX/ticket/4211#comment:2
45  //   executeCommand(new StructureCommand(command), false);
46     modelsToMap.add(new ChimeraModel(pe.getId(), ModelType.PDB_MODEL,
47             modelNumber, 0));
48   }
49
50   /**
51    * {@inheritDoc}
52    * 
53    * @return
54    */
55   @Override
56   protected String getCommandFileExtension()
57   {
58     return ".cxc";
59   }
60
61   /**
62    * Returns the file extension to use for a saved viewer session file (.cxs)
63    * 
64    * @return
65    * @see https://www.cgl.ucsf.edu/chimerax/docs/user/commands/save.html#sesformat
66    */
67   @Override
68   public String getSessionFileExtension()
69   {
70     return CHIMERAX_SESSION_EXTENSION;
71   }
72
73   @Override
74   public String getHelpURL()
75   {
76     return "http://www.rbvi.ucsf.edu/chimerax/docs/user/index.html";
77   }
78
79   @Override
80   protected ViewerType getViewerType()
81   {
82     return ViewerType.CHIMERAX;
83   }
84
85   @Override
86   protected String getModelId(int pdbfnum, String file)
87   {
88     return String.valueOf(pdbfnum + 1);
89   }
90
91   /**
92    * Returns a model of the structure positions described by the ChimeraX format atomspec
93    * @param atomSpec
94    * @return
95    */
96   @Override
97   protected AtomSpec parseAtomSpec(String atomSpec)
98   {
99     return AtomSpec.fromChimeraXAtomspec(atomSpec);
100   }
101
102 }