2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
23 import jalview.jbgui.GRestInputParamEditDialog;
24 import jalview.ws.params.InvalidArgumentException;
25 import jalview.ws.params.OptionI;
26 import jalview.ws.params.ParameterI;
27 import jalview.ws.rest.InputType;
28 import jalview.ws.rest.RestServiceDescription;
30 import java.util.ArrayList;
31 import java.util.Hashtable;
33 import javax.swing.JOptionPane;
34 import javax.swing.JPanel;
35 import javax.swing.event.ListSelectionEvent;
37 import net.miginfocom.swing.MigLayout;
39 public class RestInputParamEditDialog extends GRestInputParamEditDialog
40 implements OptsParametersContainerI
42 Hashtable<String, Class> typeclass = new Hashtable<String, Class>();
44 Hashtable<String, ArrayList<JPanel>> typeopts = new Hashtable<String, ArrayList<JPanel>>();
46 Hashtable<String, OptsAndParamsPage> opanps = new Hashtable<String, OptsAndParamsPage>();
48 private InputType getTypeFor(String name)
52 return (InputType) (typeclass.get(name).getConstructor()
57 "Unexpected exception when instantiating rest input type.");
65 JalviewDialog frame = new JalviewDialog()
69 protected void raiseClosed()
75 protected void okPressed()
77 reply = JvOptionPane.OK_OPTION;
81 protected void cancelPressed()
83 reply = JvOptionPane.CANCEL_OPTION;
88 InputType old, current;
90 public RestInputParamEditDialog(
91 RestServiceEditorPane restServiceEditorPane,
92 RestServiceDescription currentservice, InputType toedit)
94 initFor(restServiceEditorPane, currentservice, toedit);
96 // TODO: warn user if they are about to overwrite an existing parameter
97 // because they have used the same name when editing a different parameter.
98 // TODO: make any press of the return key cause 'OK' to be pressed
101 private void initFor(RestServiceEditorPane restServiceEditorPane,
102 RestServiceDescription currentservice, InputType toedit)
104 okcancel.add(frame.cancel);
105 okcancel.add(frame.ok);
106 frame.initDialogFrame(dpane, true, true,
107 "Edit parameter for service " + currentservice.getName(), 600,
111 reply = JvOptionPane.CANCEL_OPTION;
118 updated = updated && reply == JvOptionPane.OK_OPTION;
122 public RestInputParamEditDialog(
123 RestServiceEditorPane restServiceEditorPane,
124 RestServiceDescription currentservice, String string)
126 initFor(restServiceEditorPane, currentservice, null);
128 frame.waitForInput();
131 private void setStateFor(InputType current)
133 tok.setText(current.token);
134 OptsAndParamsPage opanp = opanps.get(current.getURLtokenPrefix());
135 for (OptionI ops : current.getOptions())
137 if (ops instanceof ParameterI)
139 opanp.setParameter((ParameterI) ops);
143 if (ops.getValue() != null && ops.getValue().length() > 0)
145 opanp.selectOption(ops, ops.getValue());
149 typeList.setSelectedValue(current.getURLtokenPrefix(), true);
150 type_SelectionChangedActionPerformed(null);
153 private void updateCurrentType()
155 if (typeList.getSelectedValue() != null)
157 InputType newType = getTypeFor((String) typeList.getSelectedValue());
160 newType.token = tok.getText().trim();
163 newType.configureFromArgumentI(opanps
164 .get(newType.getURLtokenPrefix()).getCurrentSettings());
167 } catch (InvalidArgumentException ex)
170 "IMPLEMENTATION ERROR: Invalid argument for type : "
171 + typeList.getSelectedValue() + "\n");
172 ex.printStackTrace();
179 private void initTypeLists()
181 ArrayList<String> types = new ArrayList<String>();
182 // populate type list
183 for (Class type : RestServiceDescription.getInputTypes())
186 InputType jtype = null;
189 JPanel inopts = new JPanel(new MigLayout());
190 ArrayList<JPanel> opts = new ArrayList<JPanel>(),
191 prms = new ArrayList<JPanel>();
192 jtype = (InputType) (type.getConstructor().newInstance());
193 typeclass.put(jtype.getURLtokenPrefix(), type);
194 // and populate parameters from this type
195 OptsAndParamsPage opanp = new OptsAndParamsPage(this, true);
196 opanps.put(jtype.getURLtokenPrefix(), opanp);
197 for (OptionI opt : jtype.getOptions())
200 if (opt instanceof ParameterI)
202 prms.add(opanp.addParameter((ParameterI) opt));
206 opts.add(opanp.addOption(opt));
209 // then tag the params at the end of the options.
210 for (JPanel pnl : prms)
214 typeopts.put(jtype.getURLtokenPrefix(), opts);
215 types.add(jtype.getURLtokenPrefix());
216 } catch (Throwable x)
219 "Unexpected exception when instantiating rest input type.");
223 typeList.setListData(types.toArray());
228 protected void type_SelectionChangedActionPerformed(ListSelectionEvent e)
231 String typen = (String) typeList.getSelectedValue();
232 if (typeopts.get(typen) != null)
234 for (JPanel opt : typeopts.get(typen))
237 options.add(opt, "wrap");
239 options.invalidate();
240 optionsPanel.setVisible(true);
244 optionsPanel.setVisible(false);
250 boolean updated = false;
252 public boolean wasUpdated()
258 public void refreshParamLayout()
260 options.invalidate();
265 protected void tokChanged_actionPerformed()
267 if (tok.getText().trim().length() > 0)
271 current.token = tok.getText().trim();
278 public void argSetModified(Object modifiedElement, boolean b)
280 updated = updated | b;