+/*******************************************************************************
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ *******************************************************************************/
package jalview.gui;
-import jalview.bin.Cache;
import jalview.io.packed.DataProvider.JvDataType;
-import jalview.jbgui.*;
+import jalview.jbgui.GRestServiceEditorPane;
import jalview.ws.rest.InputType;
import jalview.ws.rest.RestServiceDescription;
-import java.awt.*;
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
-import java.awt.event.ContainerEvent;
-import java.awt.event.ContainerListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.awt.event.WindowStateListener;
-import java.util.ArrayList;
+import java.awt.event.MouseEvent;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.swing.*;
-import javax.swing.event.CaretEvent;
+import javax.swing.JFrame;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.GapContent;
-
-import org.apache.log4j.lf5.LogLevel;
public class RestServiceEditorPane extends GRestServiceEditorPane
{
// begin with initial text description box enabled.
urldesc.addKeyListener(new KeyListener()
{
- long lastWait;
- boolean doUpdate;
- Thread updater=null;
@Override
public void keyTyped(KeyEvent e)
{
@Override
public void keyPressed(KeyEvent e)
{
- // TODO Auto-generated method stub
}
});
panels.addChangeListener(new ChangeListener()
{
+
+ /**
+ * last panel selected - used to decide whether the service or the GUI has the latest info
+ */
Object lastComp;
@Override
public void stateChanged(ChangeEvent e)
}
});
+ currentservice = new RestServiceDescription("Analysis", "service description", "service name", "http://localhost/", "", null, false, false, '-');
+ initGuiWith(currentservice);
+ refreshCutnPaste(false);
+ updateButtons();
}
public RestServiceEditorPane(RestServiceDescription toedit)
{
this();
oldservice = toedit;
- currentservice = new RestServiceDescription(toedit);
+ if (oldservice!=null)
+ { currentservice = new RestServiceDescription(toedit);
+ } else {
+ currentservice = new RestServiceDescription("Analysis", "service description", "service name", "http://localhost/", "", null, false, false, '-');
+ }
initGuiWith(currentservice);
refreshCutnPaste(false);
updateButtons();
*/
public void updateButtons()
{
- cancelButton.setEnabled(oldservice != null);
+ cancelButton.setEnabled(true);
okButton.setEnabled(currentservice != null && currentservice.isValid());
}
*/
private void initGuiWith(RestServiceDescription currentservice)
{
+ _iparam.clear();
+ _rparam.clear();
+ action.removeAllItems();
+ action.addItem("Alignment");
+ action.addItem("Analysis");
+ gapChar.removeAllItems();
+ gapChar.addItem(".");
+ gapChar.addItem(" ");
+ gapChar.addItem("-");
+ if (currentservice==null)
+ {
+ name.setText("");
+ descr.setText("");
+ url.setText("");
+ urlsuff.setText("");
+ action.setSelectedItem("Analysis");
+ gapChar.setSelectedItem("-");
+ } else {
name.setText(currentservice.getName());
descr.setText(currentservice.getDescription());
url.setText(currentservice.getPostUrl());
urlsuff.setText(currentservice.getUrlSuffix());
- _iparam.clear();
- _rparam.clear();
for (Map.Entry<String, InputType> inparam : currentservice
.getInputParams().entrySet())
{
+ inparam.getValue().getURLtokenPrefix() + ":"
+ inparam.getValue().getURLEncodedParameter().toString());
}
+
for (JvDataType oparam : currentservice.getResultDataTypes())
{
- _rparam.add((oparam.name()));
+ _rparam.add(oparam.name());
}
iprms.setListData(_iparam);
rdata.setListData(_rparam);
- action.removeAllItems();
- action.addItem("Alignment");
- action.addItem("Analysis");
- // action.addItem("Analysis");
action.setSelectedItem(currentservice.getAction());
+
+ gapChar.setSelectedItem(""+currentservice.getGapCharacter());
+ }
revalidate();
}
+ private String getSelectedInputToken()
+ {
+ if (iprms.getSelectedIndex()>-1)
+ {
+ String toktoedit = (String) iprms.getSelectedValue();
+ toktoedit=toktoedit.substring(0, toktoedit.indexOf(" "));
+ return toktoedit;
+ }
+ return null;
+ }
+ @Override
+ protected void iprmListSelection_doubleClicked()
+ {
+ String toktoedit = getSelectedInputToken();
+ if (toktoedit!=null)
+ {
+ InputType toedit = currentservice.getInputParams().get(toktoedit);
+ String oldParam=toktoedit;
+ RestInputParamEditDialog dialog=new RestInputParamEditDialog(this, currentservice, toedit);
+ if (dialog.wasUpdated()) {
+ currentservice.getInputParams().remove(oldParam);
+ currentservice.getInputParams().put(dialog.current.token, dialog.current);
+ initGuiWith(currentservice);
+ }
+
+ }
+ }
+ @Override
+ protected void iprmsAdd_actionPerformed(ActionEvent e)
+ {
+ RestInputParamEditDialog dialog=new RestInputParamEditDialog(this, currentservice, "param"+(1+currentservice.getInputParams().size()));
+ if (dialog.wasUpdated()) {
+ currentservice.getInputParams().put(dialog.current.token, dialog.current);
+ initGuiWith(currentservice);
+ }
+
+ }
+ @Override
+ protected void iprmsRem_actionPerformed(ActionEvent e)
+ {
+ String toktoedit = getSelectedInputToken();
+ if (toktoedit!=null)
+ {
+ currentservice.getInputParams().remove(toktoedit);
+ initGuiWith(currentservice);
+
+ }
+ }
+ @Override
+ protected void rdata_rightClicked(MouseEvent mouse)
+ {
+ final int rdatasel = rdata.getSelectedIndex();
+ if (rdatasel>-1)
+ {
+ JPopupMenu popup = new JPopupMenu("Select return type");
+ for (final JvDataType type:JvDataType.values()) {
+ popup.add(new JMenuItem(type.name())).addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ currentservice.getResultDataTypes().set(rdatasel, type);
+ initGuiWith(currentservice);
+ rdata.setSelectedIndex(rdatasel);
+ }
+ });
+ }
+ popup.show(rdata, mouse.getX(), mouse.getY());
+ }
+ }
+ @Override
+ protected void rdataAdd_actionPerformed(ActionEvent e)
+ {
+ int p;
+ if ((p=rdata.getSelectedIndex())>-1)
+ {
+ currentservice.getResultDataTypes().add(p+1, JvDataType.ANNOTATION);
+ } else {
+ currentservice.addResultDatatype(JvDataType.ANNOTATION);
+ }
+ initGuiWith(currentservice);
+ rdata.setSelectedIndex(p==-1 ? currentservice.getResultDataTypes().size()-1 : p+1);
+ }
+ @Override
+ protected void rdataNdown_actionPerformed(ActionEvent e)
+ {
+ int p;
+ if ((p=rdata.getSelectedIndex())>-1 && p<_rparam.size()-1)
+ {
+ List<JvDataType> rtypes = currentservice.getResultDataTypes();
+ JvDataType below = rtypes.get(p+1);
+ rtypes.set(p+1, rtypes.get(p));
+ rtypes.set(p, below);
+ initGuiWith(currentservice);
+ rdata.setSelectedIndex(p+1);
+ }
+ }
+ @Override
+ protected void rdataNup_actionPerformed(ActionEvent e)
+ {
+ int p;
+ if ((p=rdata.getSelectedIndex())>0)
+ {
+ List<JvDataType> rtypes = currentservice.getResultDataTypes();
+ JvDataType above = rtypes.get(p-1);
+ rtypes.set(p-1, rtypes.get(p));
+ rtypes.set(p, above);
+ initGuiWith(currentservice);
+ rdata.setSelectedIndex(p-1);
+ }
+ }
+ @Override
+ protected void rdataRem_actionPerformed(ActionEvent e)
+ {
+ if (rdata.getSelectedIndex()>-1)
+ {
+ currentservice.getResultDataTypes().remove(rdata.getSelectedIndex());
+ initGuiWith(currentservice);
+ }
+ }
private boolean updateServiceFromGui() {
- boolean valid=true;
Map<String,InputType>inputTypes = new HashMap<String, InputType>();
StringBuffer warnings=new StringBuffer();
for (String its:_iparam)
public void run()
{
+ boolean nulserv=true;
while (visible)
{
final Thread runner = Thread.currentThread();
JFrame df = new JFrame();
df.getContentPane().setLayout(new BorderLayout());
df.getContentPane().add(
- new RestServiceEditorPane(jalview.ws.rest.RestClient
- .makeShmmrRestClient().getRestDescription()),
+ (nulserv=!nulserv) ? new RestServiceEditorPane(jalview.ws.rest.RestClient
+ .makeShmmrRestClient().getRestDescription()) : new RestServiceEditorPane(),
BorderLayout.CENTER);
- df.setBounds(100, 100, 400, 600);
+ df.setBounds(100, 100, 600, 400);
df.addComponentListener(new ComponentListener()
{
@Override
public void componentShown(ComponentEvent e)
{
- // TODO Auto-generated method stub
}
@Override
public void componentResized(ComponentEvent e)
{
- // TODO Auto-generated method stub
}
@Override
public void componentMoved(ComponentEvent e)
{
- // TODO Auto-generated method stub
}
}
}
+ String finalService=null;
+ public void showDialog(String title)
+ {
+ if (oldservice!=null)
+ {
+ finalService = oldservice.toString();
+ }
+ JalviewDialog jvd = new JalviewDialog()
+ {
+
+ @Override
+ protected void raiseClosed()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ protected void okPressed()
+ {
+ updateServiceFromGui();
+ finalService = currentservice.toString();
+ }
+
+ @Override
+ protected void cancelPressed()
+ {
+
+ }
+ };
+ JPanel pane = new JPanel(new BorderLayout()),okcancel=new JPanel(new FlowLayout());
+ pane.add(this,BorderLayout.CENTER);
+ okcancel.add(jvd.ok);
+ okcancel.add(jvd.cancel);
+ pane.add(okcancel, BorderLayout.SOUTH);
+ jvd.initDialogFrame(pane, true, true, title, 600,350);
+ jvd.waitForInput();
+ }
+
+ public String getEditedRestService()
+ {
+ return finalService;
+ }
}