(JAL-975) ensure AACons is only run on protein sequences. (note - should really fix...
[jalview.git] / src / jalview / ws / jws2 / SequenceAnnotationWSClient.java
1 /**
2  * 
3  */
4 package jalview.ws.jws2;
5
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.util.List;
9
10 import javax.swing.JMenu;
11 import javax.swing.JMenuItem;
12 import javax.swing.JOptionPane;
13
14 import compbio.metadata.Argument;
15
16 import jalview.api.AlignCalcWorkerI;
17 import jalview.datamodel.AlignmentView;
18 import jalview.gui.AlignFrame;
19 import jalview.gui.Desktop;
20 import jalview.gui.JalviewDialog;
21 import jalview.gui.JvSwingUtils;
22 import jalview.ws.jws2.jabaws2.Jws2Instance;
23 import jalview.ws.params.WsParamSetI;
24
25 /**
26  * @author jimp
27  * 
28  */
29 public class SequenceAnnotationWSClient extends Jws2Client
30 {
31
32   /**
33    * initialise a client so its attachWSMenuEntry method can be called.
34    */
35   public SequenceAnnotationWSClient()
36   {
37     // TODO Auto-generated constructor stub
38   }
39
40   public SequenceAnnotationWSClient(final Jws2Instance sh,
41           AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
42   {
43     super(alignFrame, preset, null);
44     if (sh.serviceType.toLowerCase().contains("aaconws"))
45     {
46       // Build an AACons client
47       if (alignFrame.getViewport().getAlignment().isNucleotide())
48       {
49         JOptionPane
50                 .showMessageDialog(
51                         Desktop.desktop,
52                         "AACons can only be used\nfor amino acid alignments.\nSorry about that!",
53                         "Wrong type of sequences!",
54                         JOptionPane.WARNING_MESSAGE);
55         return;
56
57       }
58       List<AlignCalcWorkerI> clnts = alignFrame.getViewport()
59               .getCalcManager()
60               .getRegisteredWorkersOfClass(AAConsClient.class);
61       if (clnts == null || clnts.size() == 0)
62       {
63         if (!processParams(sh, editParams))
64         {
65           return;
66         }
67         alignFrame
68                 .getViewport()
69                 .getCalcManager()
70                 .registerWorker(
71                         new AAConsClient(sh, alignFrame, preset, paramset));
72       }
73       else
74       {
75         AAConsClient worker = (AAConsClient) clnts.get(0);
76         if (editParams)
77         {
78           paramset = worker.getArguments();
79           preset = worker.getPreset();
80         }
81
82         if (!processParams(sh, editParams, true))
83           return;
84         // reinstate worker if it was blacklisted (might have happened due to
85         // invalid parameters)
86         alignFrame.getViewport().getCalcManager().workerMayRun(worker);
87         worker.updateParameters(preset, paramset);
88
89       }
90     }
91     
92   }
93
94   /*
95    * (non-Javadoc)
96    * 
97    * @see jalview.ws.jws2.Jws2Client#attachWSMenuEntry(javax.swing.JMenu,
98    * jalview.ws.jws2.jabaws2.Jws2Instance, jalview.gui.AlignFrame)
99    */
100   public void attachWSMenuEntry(JMenu wsmenu, final Jws2Instance service,
101           final AlignFrame alignFrame)
102   {
103     if (service.serviceType.toLowerCase().contains("aaconws"))
104     {
105       boolean hasparams = service.hasParameters();
106       String calcName = "AACons";
107       JMenuItem aacons = new JMenuItem("AACons Defaults");
108       aacons.addActionListener(new ActionListener()
109       {
110
111         @Override
112         public void actionPerformed(ActionEvent e)
113         {
114           new SequenceAnnotationWSClient(service, alignFrame, null, false);
115         }
116       });
117       wsmenu.add(aacons);
118       if (hasparams)
119       {
120         // only add these menu options if the service has user-modifiable
121         // arguments
122         aacons = new JMenuItem("Edit settings and run ...");
123         aacons.setToolTipText("View and change the parameters before alignment.");
124
125         aacons.addActionListener(new ActionListener()
126         {
127           public void actionPerformed(ActionEvent e)
128           {
129             new SequenceAnnotationWSClient(service, alignFrame, null, true);
130           }
131         });
132         wsmenu.add(aacons);
133         List<WsParamSetI> presets = service.getParamStore().getPresets();
134         if (presets != null && presets.size() > 0)
135         {
136           JMenu presetlist = new JMenu("Run " + calcName + "with preset");
137
138           for (final WsParamSetI preset : presets)
139           {
140             final JMenuItem methodR = new JMenuItem(preset.getName());
141             methodR.setToolTipText("<html><p>"
142                     + JvSwingUtils.wrapTooltip("<strong>"
143                             + (preset.isModifiable() ? "User Preset"
144                                     : "Service Preset") + "</strong><br/>"
145                             + preset.getDescription() + "</p>") + "</html>");
146             methodR.addActionListener(new ActionListener()
147             {
148               public void actionPerformed(ActionEvent e)
149               {
150                 new SequenceAnnotationWSClient(service, alignFrame, preset,
151                         false);
152               }
153
154             });
155             presetlist.add(methodR);
156           }
157           wsmenu.add(presetlist);
158         }
159       }
160
161     }
162   }
163 }