[MOBY-guts] biomoby commit
Andreas Groscurth
groscurt at dev.open-bio.org
Wed Nov 26 08:54:21 UTC 2008
groscurt
Wed Nov 26 03:54:21 EST 2008
Update of /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard
In directory dev.open-bio.org:/tmp/cvs-serv17543/src/main/org/biomoby/service/dashboard
Modified Files:
SimpleClientPanel.java ServiceCallerModel.java
DashboardProperties.java
Log Message:
changes done to enable authentication handling
moby-live/Java/src/main/org/biomoby/service/dashboard SimpleClientPanel.java,1.12,1.13 ServiceCallerModel.java,1.6,1.7 DashboardProperties.java,1.29,1.30
===================================================================
RCS file: /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/SimpleClientPanel.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/SimpleClientPanel.java 2008/05/27 16:06:14 1.12
+++ /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/SimpleClientPanel.java 2008/11/26 08:54:21 1.13
@@ -1,774 +1,791 @@
-// SimpleClientPanel.java
-//
-// Created: December 2005
-//
-// This file is a component of the BioMoby project.
-// Copyright Martin Senger (martin.senger at gmail.com).
-//
-
-package org.biomoby.service.dashboard;
-
-import org.tulsoft.shared.UUtils;
-import org.tulsoft.tools.gui.SwingUtils;
-import org.tulsoft.tools.gui.AwtUtils;
-import org.tulsoft.tools.gui.JFileChooserWithHistory;
-import org.tulsoft.tools.gui.JTextFieldWithHistory;
-
-import org.biomoby.shared.MobyException;
-import org.biomoby.shared.MobyService;
-import org.biomoby.shared.MobyDataType;
-import org.biomoby.service.dashboard.data.ServiceInputPanel;
-import org.biomoby.service.dashboard.data.DataContainer;
-
-import javax.swing.JPanel;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JRadioButton;
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
-import javax.swing.JSplitPane;
-import javax.swing.JComponent;
-import javax.swing.Box;
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import java.awt.GridBagLayout;
-import java.awt.Component;
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Insets;
-import java.awt.Dimension;
-import java.awt.event.KeyEvent;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeEvent;
-
-import java.io.File;
-import java.util.Date;
-
-/**
- * A panel allowing to formulate input data and to call an arbitrary
- * Biomoby service. Its interface is however not that user-friendly,
- * and it is supposed to be used more or less for testing purposes in
- * time when a new service is being created and developed. <p>
- *
- * @author <A HREF="mailto:martin.senger at gmail.com">Martin Senger</A>
- * @version $Id$
- */
-
-public class SimpleClientPanel
- extends AbstractPanel {
-
- private static org.apache.commons.logging.Log log =
- org.apache.commons.logging.LogFactory.getLog (SimpleClientPanel.class);
-
- /** A property name. Its value contains a name of color that will
- * be used to display service name.
- */
- protected static final String P_S_TITLE_COLOR = "simpleclient.service.title.color";
-
- /** A property name. Its value contains a name of color that will
- * be used as background for editable console with XML input.
- */
- protected static final String P_S_EDIT_BGCOLOR = "simpleclient.service.edit.bgcolor";
-
- // some texts
- protected static final String INIT_SELECT =
- "<html><center><font color='red'>Start by selecting a service<br>" +
- "that you wish to call.</font></center>";
-
- protected static final String CALLER_ERROR =
- "Sorry, an error happened when calling a service.\n\n";
-
- protected static final Insets BREATH_UP = new Insets (6,6,0,6);
- protected static final Insets BREATH_DOWN = new Insets (0,6,6,6);
-
- // associated models working behind the scene
- RegistryModel registryModel;
- ServiceCallerModel callerModel;
-
- // components that are used from more methods
- JLabel selService;
- CommonConsole input;
- JFileChooserWithHistory outFile, inFile;
- JButton runButton, stopButton;
- JCheckBox iShowXML, iFromFile;
- JTextFieldWithHistory className, endpoint;
- JPanel dataTablesPanel;
- ServiceInputPanel inputDataTables;
- MySwingWorker runWorker;
- ResultsPanel results;
- JComponent resultsComp;
- JSplitPane resSplit;
-// JTextFieldWithHistory recentServices;
-
- boolean selectionAllowed = false;
-
- // shared icons
- protected static Icon runIcon, runIconDis;
- protected static Icon stopIcon, stopIconDis;
- protected static Icon addDataIcon, addDataIconDis;
-
- /*********************************************************************
- * Default constructor.
- ********************************************************************/
- public SimpleClientPanel() {
- super();
- panelIconFileName = "images/debug.gif";
- }
-
- /*********************************************************************
- * Load shared icons.
- ********************************************************************/
- protected void loadIcons() {
- super.loadIcons();
-
- if (runIcon == null) runIcon = loadIcon ("images/smallRun.gif");
- if (runIconDis == null) runIconDis = loadIcon ("images/smallRun_dis.gif");
-
- if (stopIcon == null) stopIcon = loadIcon ("images/smallCancel.gif");
- if (stopIconDis == null) stopIconDis = loadIcon ("images/smallCancel_dis.gif");
-
- if (addDataIcon == null) addDataIcon = loadIcon ("images/smallAnnotate.gif");
- if (addDataIconDis == null) addDataIconDis = loadIcon ("images/smallAnnonate_dis.gif");
-
- }
-
- /**************************************************************************
- *
- **************************************************************************/
- public JComponent getComponent (PropertyChannel aPropertyChannel) {
- setPropertyChannel (aPropertyChannel);
- registryModel = createRegistryModel();
- callerModel = new ServiceCallerModel();
- callerModel.setPropertyChannel (aPropertyChannel);
-
- if (pComponent != null) return pComponent;
- pComponent = new JPanel (new GridBagLayout(), true);
-
- // result panel
- results = new ResultsPanel();
- resultsComp = results.getComponent (aPropertyChannel);
- propertyChannel.addPropertyChangeListener (new PropertyChangeListener() {
- public void propertyChange (PropertyChangeEvent e) {
- if (DP_DETACH_VIEW.equals (e.getPropertyName())) {
-
- MobyService srv =
- (MobyService)propertyChannel.get (DP_SC_SERVICE);
- String title = (srv == null ? "Service results" :
- srv.getName() + " at " + new Date());
- JComponent current = results.getComponent (propertyChannel);
- results.adjustForDetachement();
- JFrame newFrame =
- SwingUtils.createSoftMainFrame (current,
- title);
- Dimension dim = current.getPreferredSize();
- SwingUtils.showMainFrameRelativeTo
- (pComponent, newFrame, (int)dim.getWidth(), (int)dim.getHeight());
- results = new ResultsPanel();
- resultsComp = results.getComponent (propertyChannel);
- resSplit.setBottomComponent (resultsComp);
- }
- }});
-
-
- // panel with all the fields (except for building inputs)
- JPanel controls = getControlPanel();
-
- // panel with input data
- JPanel inputData = getInputPanel();
- updateInputDataPanel (INIT_SELECT);
-
- // service ontology tree
- JPanel sBoard = new JPanel (new GridBagLayout());
-// JLabel lRecent = new JLabel ("Recently called services");
-// recentServices = createText (null,
-// DP_SC_SERVICES,
-// DP_SC_SERVICES);
-// recentServices.addActionListener (new ActionListener() {
-// public void actionPerformed (ActionEvent e) {
-// String contents = ((JTextFieldWithHistory)e.getSource()).getText();
-// if (! "".equals (contents) && selectionAllowed) {
-// System.out.println ("SEL: " + contents);
-// selectService (contents);
-// }
-// }
-// });
-
- ServicesBoard servicesBoard =
- new ServicesBoard (registryModel,
- null,
- propertyChannel,
- new CustomServicesTree (registryModel,
- null));
- log.debug ("Services tree update started");
- servicesBoard.updateTree (CommonTree.SORTED_BY_AUTHORITY);
-// SwingUtils.addComponent (sBoard, lRecent, 0, 0, 1, 1, NONE, NWEST, 0.0, 0.0, BREATH_UP);
-// SwingUtils.addComponent (sBoard, recentServices, 0, 1, 1, 1, HORI, NWEST, 1.0, 0.0, BREATH_DOWN);
- SwingUtils.addComponent (sBoard, servicesBoard, 0, 2, 1, 1, BOTH, NWEST, 1.0, 1.0);
-
- // split it into moving panels
- JSplitPane split = hSplit (resSplit = vSplit (hSplit (controls,
- sBoard, 0.5),
- resultsComp, 0.1),
- inputData,
- 0.5);
-
- SwingUtils.addComponent (pComponent, split, 0, 0, 1, 1, BOTH, NWEST, 1.0, 1.0);
-
- // initialize by a last used service name from preferences
- String lastServiceName = getPrefValue (DP_SC_SERVICE_NAME, "");
- if (! "".equals (lastServiceName))
- selectService (lastServiceName);
-
- return pComponent;
- }
-
- /**************************************************************************
- * Create a sub-panel for all the controls...
- **************************************************************************/
- protected JPanel getControlPanel() {
- JPanel p = new JPanel (new GridBagLayout());
-
- // (selected) service name
- selService = new JLabel();
- selService.setFont (FAT_BORDER_FONT);
- selService.setForeground
- (GraphColours.getColour (DashboardConfig.getString (P_S_TITLE_COLOR, null),
- Color.blue));
-
- // how to invoke the service
- JPanel howTo = createTitledPanel ("Service invocation");
- endpoint = createText (null, DP_ENDPOINT, DP_ENDPOINT);
- className = createText (null, DP_IMPL_CLASS, DP_IMPL_CLASS);
-
- ButtonGroup group = new ButtonGroup();
- JRadioButton htNone, htRegistry, htEndpoint, htLocal, htNewURL;
- group.add (htEndpoint = createHowToButton ("Use service's usual endpoint", DP_CS_URL));
- htNone = createHowToButton ("No real call, just show/echo input", DP_CS_NONE);
- htNone.addItemListener(
- new ItemListener() {
- public void itemStateChanged (ItemEvent e) {
- boolean enabled = (e.getStateChange() == ItemEvent.SELECTED);
- if (enabled) runButton.setText(" Show Input ");
- else {
- if (propertyChannel.getBoolean(DP_INP_PING, false)){
- runButton.setText(" Ping Service ");
- }
- else {
- runButton.setText(" Call Service ");
- }
- }
- }
- });
- group.add (htNone);
- group.add (htRegistry = createHowToButton ("Ask registry where service is, and call it", DP_CS_REGISTRY));
- group.add (htNewURL = createHowToButton ("Use this endpoint", DP_CS_NEWURL));
- group.add (htLocal = createHowToButton ("Use this local class", DP_CS_CLASS));
-
- // run the service
- // determine button text from preferences
- boolean usingPing = getPrefValue (DP_INP_PING, false);
- boolean usingAsBytes = getPrefValue (DP_INP_ASBYTES, false);
- String runLabel = " Call Service ";
- if (propertyChannel.getString(DP_CALL_SERVICE).equals(DP_CS_NONE))
- runLabel = " Show Input ";
- else if (usingPing) runLabel = " Ping Service ";
-
- runButton =
- createButton (runLabel,
- "Invoke selected service",
- KeyEvent.VK_C,
- new ActionListener() {
- public void actionPerformed (ActionEvent e) {
- MobyService srv = (MobyService)propertyChannel.get (DP_SC_SERVICE);
- if (srv != null) {
- runWorker = new MySwingWorker (srv);
- runWorker.start();
- }
- }
- });
- runButton.setIcon (runIcon);
- runButton.setDisabledIcon (runIconDis);
- runButton.setEnabled (false); // will enable when a service is selected
-
- stopButton =
- createButton (" Stop service ",
- "Cancel connection to a running service",
- KeyEvent.VK_S,
- new ActionListener() {
- public void actionPerformed (ActionEvent e) {
- if (runWorker != null) {
-// runWorker.interrupt(); // no sense with the current Biomoby API
- runWorker.cancel();
- }
- serviceFinished();
- }
- });
- stopButton.setIcon (stopIcon);
- stopButton.setDisabledIcon (stopIconDis);
- stopButton.setEnabled (false); // will enable when a service is called
-
- JPanel buttonPanel = createButtonPanel (new JButton[] { runButton,
- stopButton });
-
- JCheckBox asPing = createCheckBox
- ("'Ping' this service",
- usingPing, -1,
- new ItemListener() {
- public void itemStateChanged (ItemEvent e) {
- boolean enabled = (e.getStateChange() == ItemEvent.SELECTED);
- setPropertySelect (enabled, DP_INP_PING);
- setPrefValue (DP_INP_PING, enabled);
- propertyChannel.put (DP_INP_PING,
- new Boolean (enabled).toString());
- if (enabled) {
- if (propertyChannel.getString(DP_CALL_SERVICE).equals(DP_CS_NONE))
- runButton.setText(" Show Input ");
- else
- runButton.setText(" Ping Service ");
- }
- else {
- if (propertyChannel.getString(DP_CALL_SERVICE).equals(DP_CS_NONE))
- runButton.setText(" Show Input ");
- else
- runButton.setText(" Call Service ");
- }
- }
- });
- setPropertySelect (usingPing, DP_INP_PING);
- asPing.setToolTipText ("A Moby 'Ping' is used to determine if the service is responsive " +
- "and if it responds in an API-compliant manner.");
- Font font = asPing.getFont();
- asPing.setFont (font.deriveFont (Math.max (1, font.getSize2D() - 1)));
-
- JCheckBox asBytes = createCheckBox
- ("Send data to service as a byte array",
- usingAsBytes, -1,
- new ItemListener() {
- public void itemStateChanged (ItemEvent e) {
- boolean enabled = (e.getStateChange() == ItemEvent.SELECTED);
- setPropertySelect (enabled, DP_INP_ASBYTES);
- setPrefValue (DP_INP_ASBYTES, enabled);
- propertyChannel.put (DP_INP_ASBYTES,
- new Boolean (enabled).toString());
- }
- });
- setPropertySelect (usingAsBytes, DP_INP_ASBYTES);
- asBytes.setToolTipText ("It should not have any effect on result; it is for debugging");
- font = asBytes.getFont();
- asBytes.setFont (font.deriveFont (Math.max (1, font.getSize2D() - 1)));
-
-
- SwingUtils.addComponent (howTo, htEndpoint, 0, 0, 2, 1, HORI, NWEST, 1.0, 0.0);
- SwingUtils.addComponent (howTo, htNewURL, 0, 1, 1, 1, NONE, NWEST, 0.0, 0.0);
- SwingUtils.addComponent (howTo, endpoint, 1, 1, 1, 1, HORI, NWEST, 1.0, 0.0);
- SwingUtils.addComponent (howTo, htRegistry, 0, 2, 2, 1, NONE, NWEST, 0.0, 0.0);
- SwingUtils.addComponent (howTo, htLocal, 0, 3, 1, 1, NONE, NWEST, 0.0, 0.0);
- SwingUtils.addComponent (howTo, className, 1, 3, 1, 1, HORI, NWEST, 1.0, 0.0);
- SwingUtils.addComponent (howTo, htNone, 0, 4, 2, 1, NONE, NWEST, 0.0, 0.0);
- SwingUtils.addComponent (howTo, asPing, 0, 5, 2, 1, NONE, NWEST, 0.0, 0.0, BREATH_TOP);
- SwingUtils.addComponent (howTo, asBytes, 0, 6, 2, 1, NONE, NWEST, 0.0, 0.0);
-
-
- Component glue = Box.createVerticalGlue();
- SwingUtils.addComponent (p, selService, 0, 0, 1, 1, NONE, CENTER, 0.0, 0.0);
- SwingUtils.addComponent (p, howTo, 0, 1, 1, 1, HORI, NWEST, 1.0, 0.0);
- SwingUtils.addComponent (p, buttonPanel, 0, 2, 1, 1, NONE, CENTER, 0.0, 0.0, BREATH_TOP);
- SwingUtils.addComponent (p, glue, 0, 3, 1, 1, VERT, NWEST, 0.0, 1.0);
- return p;
- }
-
- /**************************************************************************
- * Select/unselect using 'send as bytes' or 'ping'...
- **************************************************************************/
- protected void setPropertySelect (boolean enabled, String property) {
- setPrefValue (property, enabled);
- propertyChannel.put (property, new Boolean (enabled).toString());
- }
-
- /**************************************************************************
- * Create a specialized radio button - for various ways how to
- * call a service.
- **************************************************************************/
- private JRadioButton createHowToButton (String title, String howTo) {
- JRadioButton radio = new JRadioButton (title);
- radio.setActionCommand (howTo);
- radio.addActionListener (howToListener);
- String initHowTo = getPrefValue (DP_CALL_SERVICE, DP_CS_NONE);
- if (howTo.equals (initHowTo)) {
- radio.setSelected (true);
- radio.setEnabled (true);
- propertyChannel.put (DP_CALL_SERVICE, howTo);
- }
- endpoint.setEnabled (initHowTo.equals (DP_CS_NEWURL));
- className.setEnabled (initHowTo.equals (DP_CS_CLASS));
- return radio;
- }
-
- //
- private ActionListener howToListener = new ActionListener() {
- public void actionPerformed (ActionEvent e) {
- String howTo = e.getActionCommand();
- setPrefValue (DP_CALL_SERVICE, howTo);
- propertyChannel.put (DP_CALL_SERVICE, howTo);
- endpoint.setEnabled (howTo.equals (DP_CS_NEWURL));
- className.setEnabled (howTo.equals (DP_CS_CLASS));
- }
- };
-
- /**************************************************************************
- * Create a specialized check box for "what to do with input/output"...
- **************************************************************************/
- private JCheckBox createDataBox (String title,
- final String preferenceKey,
- boolean defaultValue) {
- boolean initValue = getPrefValue (preferenceKey, defaultValue);
- propertyChannel.put (preferenceKey,
- new Boolean (initValue).toString());
- return createCheckBox
- (title, initValue, -1,
- new ItemListener() {
- public void itemStateChanged (ItemEvent e) {
- boolean enabled = (e.getStateChange() == ItemEvent.SELECTED);
- setPrefValue (preferenceKey, enabled);
- propertyChannel.put (preferenceKey,
- new Boolean (enabled).toString());
- inFile.setEnabled (iFromFile.isSelected());
- }
- });
- }
-
- /**************************************************************************
- * Create a sub-panel for service inputs...
- **************************************************************************/
- protected JPanel getInputPanel() {
- JPanel inputData = new JPanel (new GridBagLayout());
- inputData.setBorder (createFatBorder
- ("Service Input Data",
- GraphColours.getColour ("cadetblue", Color.blue)));
-
- // upper part (tables, input file, show-xml check-box)
- JPanel upper = new JPanel (new GridBagLayout());
-
- dataTablesPanel = new JPanel (new GridBagLayout());
-
- iFromFile = createDataBox ("Take an input from this XML file", DP_SC_IN_FILE, false);
- inFile = createFileSelector ("Select input XML for calling a service",
- "Select",
- null,
- DP_SC_INPUT_FILE,
- DP_SC_INPUT_FILE);
- inFile.setEnabled (iFromFile.isSelected());
-
- iShowXML = createDataBox ("Show input as XML", DP_INP_SHOWXML, true);
-
- SwingUtils.addComponent (upper, dataTablesPanel, 0, 0, 2, 1, BOTH, NWEST, 1.0, 1.0);
- SwingUtils.addComponent (upper, iFromFile, 0, 1, 1, 1, NONE, NWEST, 0.0, 0.0);
- SwingUtils.addComponent (upper, inFile, 1, 1, 1, 1, HORI, NWEST, 1.0, 0.0);
- SwingUtils.addComponent (upper, iShowXML, 0, 2, 1, 1, NONE, NWEST, 0.0, 0.0);
-
- // lower part (console showing/editing input XML)
- input = new EditableConsole();
- input.setAppendMode (false);
- input.setVerboseMode (false);
-
- // split upper and lower parts into moving panels
- JSplitPane split = vSplit (upper, input, 0.5);
- SwingUtils.addComponent (inputData, split, 0, 0, 1, 1, BOTH, NWEST, 1.0, 1.0);
- return inputData;
- }
-
- class EditableConsole
- extends CommonConsole {
-
- public EditableConsole() {
- super();
- textArea.setEditable (true);
- textArea.setBackground
- (GraphColours.getColour (DashboardConfig.getString (P_S_EDIT_BGCOLOR, null),
- textArea.getBackground()));
- }
- }
-
- /**************************************************************************
- * Replace the global 'dataTablesPanel' with an information text.
- **************************************************************************/
- protected void updateInputDataPanel (String info) {
- dataTablesPanel.removeAll();
- AwtUtils.redisplay (dataTablesPanel);
-
- JLabel text = new JLabel (info);
- SwingUtils.addComponent (dataTablesPanel, text, 0, 0, 1, 1, NONE, CENTER, 0.0, 0.0);
- dataTablesPanel.validate();
- return;
- }
-
- /**************************************************************************
- * Replace the global 'dataTablesPanel' with fields defining the
- * input data for the given service.
- **************************************************************************/
- protected void updateInputDataPanel (MobyService service,
- MobyDataType[] dataTypes) {
- dataTablesPanel.removeAll();
-
- inputDataTables = new ServiceInputPanel (service, dataTypes);
- SwingUtils.addComponent (dataTablesPanel, inputDataTables, 0, 0, 1, 1, BOTH, NWEST, 1.0, 1.0);
- dataTablesPanel.validate();
- }
-
- /**************************************************************************
- * Find 'dataTypeToBeFound in 'dataTypes' and return it. The same
- * could be achieved by calling registryModel.getDataType() but
- * here I do not want to create yet another swing worker for it.
- **************************************************************************/
- protected MobyDataType findDataType (String dataTypeToBeFound,
- MobyDataType[] dataTypes) {
- for (int i = 0; i < dataTypes.length; i++) {
- if (dataTypeToBeFound.equals (dataTypes[i].getName()))
- return dataTypes[i];
- }
- log.error ("Strange, data type '" + dataTypeToBeFound +
- "' was not found in " + dataTypes.length + " data types.");
- return null;
- }
-
- /**************************************************************************
- *
- * A worker that calls the service...
- *
- **************************************************************************/
- class MySwingWorker
- extends SwingWorker {
-
- MobyException exception = null;
- DataContainer data = new DataContainer();
- boolean wasCancelled = false;
- MobyService service;
-
- public MySwingWorker (MobyService service) {
- super();
- this.service = service;
- data.setMetadata (propertyChannel);
- }
-
- public void cancel() {
- wasCancelled = true;
- propertyChannel.fire (DP_STATUS_MSG, "Service invocation cancelled.");
- }
-
- public Object construct() {
- try {
- runButton.setEnabled (false);
- propertyChannel.fire (DP_STATUS_MSG,
- "Calling service " + service.getName() + "...");
-
- // create a data container with input data...
- if (propertyChannel.getBoolean (DP_SC_IN_FILE, false)) {
-
- // ...either from a file
- String inputFile = propertyChannel.getString (DP_SC_INPUT_FILE);
- if (UUtils.isEmpty (inputFile))
- throw new MobyException ("No input XML file given.");
- data.setDataFromFile (new File (inputFile));
-
- } else {
- data.setData (inputDataTables.toXML());
- }
-
- // optionally, show XML data: we want to show this XML
- // input only (a) if it was explicitly asked for (property
- // DP_INP_SHOWXML is true), or (b) if "no real service
- // call" was selected (property DP_CALL_SERVICE has value
- // DP_CS_NONE)
- if ( DP_CS_NONE.equals (propertyChannel.getString (DP_CALL_SERVICE)) ||
- (propertyChannel.getBoolean (DP_INP_SHOWXML, false)) ) {
- input.setText ((String)data.getData());
- }
-
- // If we are only pinging the service, set the data object to an empty message
- if (propertyChannel.getString(DP_INP_PING).toLowerCase().equals("true")) {
- String emptyMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<moby:MOBY xmlns:moby=\"http://www.biomoby.org/moby\">\n" +
- " <moby:mobyContent />\n" +
- "</moby:MOBY>";
- data.setData(emptyMsg);
- input.setText(emptyMsg);
- }
-
- // finally, call the service
- stopButton.setEnabled (true);
- callerModel.runIt (data);
-
- } catch (MobyException e) {
- exception = e;
-
- } catch (Error e) {
- exception = new MobyException (e.toString());
- }
- return null; // not used here
- }
-
- // runs on the event-dispatching thread
- public void finished() {
- if (wasCancelled) {
- // service was interrupted by the Stop button - do
- // nothing (the whole GUI should be already in a good
- // state - the button 'Stop' took care about it)
- return;
- }
-
- if (exception == null) {
-
- // handle results here (using renderers...)
- if (propertyChannel.getString(DP_INP_PING).toLowerCase().equals("true")) {
- propertyChannel.fire (DP_STATUS_MSG, service.getName()+" isAlive.");
- } else {
- propertyChannel.fire (DP_STATUS_MSG, "Service invocation finished.");
- }
-
- if (! DP_CS_NONE.equals (propertyChannel.getString (DP_CALL_SERVICE))) {
- results.updateComponent (data);
- }
-
- } else {
- if (propertyChannel.getString(DP_INP_PING).toLowerCase().equals("true")) {
- propertyChannel.fire (DP_STATUS_MSG, service.getName()+" is dead.");
- results.removeResults();
- } else {
- propertyChannel.fire (DP_STATUS_MSG, "Service invocation failed.");
- error (CALLER_ERROR, exception);
- }
- exception.printStackTrace();
- }
- serviceFinished();
- }
- }
-
- /**************************************************************************
- * Called when a call to a service finished.
- **************************************************************************/
- protected void serviceFinished() {
- runButton.setEnabled (true);
- stopButton.setEnabled (false);
- }
-
- /**************************************************************************
- * Called when a service is selected in a service tree (or in a
- * 'recently used services' combo box), and also at the beginning
- * when a service name is retrieved from user preferences.
- *
- * Get selected service from a registry model and generate a new
- * 'input data panel' to reflect input data of the selected
- * service.
- **************************************************************************/
- protected void selectService (final String serviceName) {
- final Object source = this;
- final SwingWorker worker = new SwingWorker() {
- MobyService service;
- MobyDataType[] dataTypes;
- public Object construct() {
- try {
- service = registryModel.getService (serviceName);
- dataTypes = registryModel.getDataTypes (source);
- } catch (MobyException e) {
- error (ServicesTree.SERVICES_ACCESS_ERROR, e);
- }
- return service; // not used here
- }
-
- // runs on the event-dispatching thread.
- public void finished() {
- if (service == null) {
- deselectService();
- } else {
- updateInputDataPanel (service, dataTypes);
- selService.setText (service.getName());
-// selectionAllowed = false;
-// recentServices.setText (service.getName());
-// selectionAllowed = true;
- propertyChannel.put (DP_SC_SERVICE, service);
- runButton.setEnabled (true);
-
- }
- }
- };
- worker.start();
- }
-
- /**************************************************************************
- * Called when no service is selected in order to display this
- * fact on various places in the panel.
- **************************************************************************/
- protected void deselectService() {
- selService.setText ("");
- updateInputDataPanel (INIT_SELECT);
- propertyChannel.remove (DP_SC_SERVICE);
- runButton.setEnabled (false);
- }
-
- /**************************************************************************
- *
- **************************************************************************/
- public String getName() {
- return "Simple Client";
- }
-
- /**************************************************************************
- *
- **************************************************************************/
- public String getDescription() {
- return
- "A panel allowing to create input data and to call an arbitrary Biomoby service. " +
- "Its purpose is mostly for the service developers to test their new services.";
- }
-
- /**************************************************************************
- *
- * Customized tree of services...
- *
- **************************************************************************/
- protected class CustomServicesTree
- extends ServicesTree {
-
- /*********************************************************************
- * Construtor
- ********************************************************************/
- public CustomServicesTree (RegistryModel model,
- CommonConsole console) {
- super (model, console);
- }
-
- /*********************************************************************
- *
- ********************************************************************/
- protected void createPopups (String title) {
- super.createPopups (title);
- removeFromPopups (AC_RELOAD);
- removeSeparatorAfter (AC_COLLAPSE);
- }
-
- /*********************************************************************
- * Service selected in a service tree...
- ********************************************************************/
- protected void selected (DefaultMutableTreeNode node) {
- if (node == null) {
- // nothing selected
- deselectService();
- return;
- }
- updateInputDataPanel ("Loading...");
- selService.setText ("");
- final CommonNode nodeObject = (CommonNode)node.getUserObject();
- String currentServiceName = nodeObject.getValue();
- selectService (currentServiceName);
- setPrefValue (DP_SC_SERVICE_NAME, currentServiceName);
- }
- }
-
-}
+// SimpleClientPanel.java
+//
+// Created: December 2005
+//
+// This file is a component of the BioMoby project.
+// Copyright Martin Senger (martin.senger at gmail.com).
+//
+
+package org.biomoby.service.dashboard;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.util.Date;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.ButtonGroup;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JRadioButton;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.biomoby.service.dashboard.data.DataContainer;
+import org.biomoby.service.dashboard.data.ServiceInputPanel;
+import org.biomoby.shared.MobyDataType;
+import org.biomoby.shared.MobyException;
+import org.biomoby.shared.MobyService;
+import org.tulsoft.shared.UUtils;
+import org.tulsoft.tools.gui.AwtUtils;
+import org.tulsoft.tools.gui.JFileChooserWithHistory;
+import org.tulsoft.tools.gui.JTextFieldWithHistory;
+import org.tulsoft.tools.gui.SwingUtils;
+
+/**
+ * A panel allowing to formulate input data and to call an arbitrary Biomoby service. Its interface is however not that
+ * user-friendly, and it is supposed to be used more or less for testing purposes in time when a new service is being
+ * created and developed.
+ * <p>
+ *
+ * @author <A HREF="mailto:martin.senger at gmail.com">Martin Senger</A>
+ * @version $Id$
+ */
+
+public class SimpleClientPanel extends AbstractPanel {
+
+ private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
+ .getLog( SimpleClientPanel.class );
+
+ /**
+ * A property name. Its value contains a name of color that will be used to display service name.
+ */
+ protected static final String P_S_TITLE_COLOR = "simpleclient.service.title.color";
+
+ /**
+ * A property name. Its value contains a name of color that will be used as background for editable console with XML
+ * input.
+ */
+ protected static final String P_S_EDIT_BGCOLOR = "simpleclient.service.edit.bgcolor";
+
+ // some texts
+ protected static final String INIT_SELECT = "<html><center><font color='red'>Start by selecting a service<br>"
+ + "that you wish to call.</font></center>";
+
+ protected static final String CALLER_ERROR = "Sorry, an error happened when calling a service.\n\n";
+
+ protected static final Insets BREATH_UP = new Insets( 6, 6, 0, 6 );
+ protected static final Insets BREATH_DOWN = new Insets( 0, 6, 6, 6 );
+
+ // associated models working behind the scene
+ RegistryModel registryModel;
+ ServiceCallerModel callerModel;
+
+ // components that are used from more methods
+ JLabel selService;
+ CommonConsole input;
+ JFileChooserWithHistory outFile, inFile;
+ JButton runButton, stopButton;
+ JCheckBox iShowXML, iFromFile;
+ JTextFieldWithHistory className, endpoint;
+ JPanel dataTablesPanel;
+ ServiceInputPanel inputDataTables;
+ MySwingWorker runWorker;
+ ResultsPanel results;
+ JComponent resultsComp;
+ JSplitPane resSplit;
+ // JTextFieldWithHistory recentServices;
+
+ boolean selectionAllowed = false;
+
+ // shared icons
+ protected static Icon runIcon, runIconDis;
+ protected static Icon stopIcon, stopIconDis;
+ protected static Icon addDataIcon, addDataIconDis;
+
+ /*******************************************************************************************************************
+ * Default constructor.
+ ******************************************************************************************************************/
+ public SimpleClientPanel() {
+ super();
+ panelIconFileName = "images/debug.gif";
+ }
+
+ /*******************************************************************************************************************
+ * Load shared icons.
+ ******************************************************************************************************************/
+ protected void loadIcons() {
+ super.loadIcons();
+
+ if ( runIcon == null ) runIcon = loadIcon( "images/smallRun.gif" );
+ if ( runIconDis == null ) runIconDis = loadIcon( "images/smallRun_dis.gif" );
+
+ if ( stopIcon == null ) stopIcon = loadIcon( "images/smallCancel.gif" );
+ if ( stopIconDis == null ) stopIconDis = loadIcon( "images/smallCancel_dis.gif" );
+
+ if ( addDataIcon == null ) addDataIcon = loadIcon( "images/smallAnnotate.gif" );
+ if ( addDataIconDis == null ) addDataIconDis = loadIcon( "images/smallAnnonate_dis.gif" );
+
+ }
+
+ /*******************************************************************************************************************
+ *
+ ******************************************************************************************************************/
+ public JComponent getComponent( PropertyChannel aPropertyChannel ) {
+ setPropertyChannel( aPropertyChannel );
+ registryModel = createRegistryModel();
+ callerModel = new ServiceCallerModel();
+ callerModel.setPropertyChannel( aPropertyChannel );
+
+ if ( pComponent != null ) return pComponent;
+ pComponent = new JPanel( new GridBagLayout(), true );
+
+ // result panel
+ results = new ResultsPanel();
+ resultsComp = results.getComponent( aPropertyChannel );
+ propertyChannel.addPropertyChangeListener( new PropertyChangeListener() {
+ public void propertyChange( PropertyChangeEvent e ) {
+ if ( DP_DETACH_VIEW.equals( e.getPropertyName() ) ) {
+
+ MobyService srv = ( MobyService ) propertyChannel.get( DP_SC_SERVICE );
+ String title = ( srv == null ? "Service results" : srv.getName() + " at " + new Date() );
+ JComponent current = results.getComponent( propertyChannel );
+ results.adjustForDetachement();
+ JFrame newFrame = SwingUtils.createSoftMainFrame( current, title );
+ Dimension dim = current.getPreferredSize();
+ SwingUtils.showMainFrameRelativeTo( pComponent, newFrame, ( int ) dim.getWidth(), ( int ) dim
+ .getHeight() );
+ results = new ResultsPanel();
+ resultsComp = results.getComponent( propertyChannel );
+ resSplit.setBottomComponent( resultsComp );
+ }
+ }
+ } );
+
+ // panel with all the fields (except for building inputs)
+ JPanel controls = getControlPanel();
+
+ // panel with input data
+ JPanel inputData = getInputPanel();
+ updateInputDataPanel( INIT_SELECT );
+
+ // service ontology tree
+ JPanel sBoard = new JPanel( new GridBagLayout() );
+ // JLabel lRecent = new JLabel ("Recently called services");
+ // recentServices = createText (null,
+ // DP_SC_SERVICES,
+ // DP_SC_SERVICES);
+ // recentServices.addActionListener (new ActionListener() {
+ // public void actionPerformed (ActionEvent e) {
+ // String contents = ((JTextFieldWithHistory)e.getSource()).getText();
+ // if (! "".equals (contents) && selectionAllowed) {
+ // System.out.println ("SEL: " + contents);
+ // selectService (contents);
+ // }
+ // }
+ // });
+
+ ServicesBoard servicesBoard = new ServicesBoard( registryModel, null, propertyChannel, new CustomServicesTree(
+ registryModel, null ) );
+ log.debug( "Services tree update started" );
+ servicesBoard.updateTree( CommonTree.SORTED_BY_AUTHORITY );
+ // SwingUtils.addComponent (sBoard, lRecent, 0, 0, 1, 1, NONE, NWEST, 0.0, 0.0, BREATH_UP);
+ // SwingUtils.addComponent (sBoard, recentServices, 0, 1, 1, 1, HORI, NWEST, 1.0, 0.0, BREATH_DOWN);
+ SwingUtils.addComponent( sBoard, servicesBoard, 0, 2, 1, 1, BOTH, NWEST, 1.0, 1.0 );
+
+ // split it into moving panels
+ JSplitPane split = hSplit( resSplit = vSplit( hSplit( controls, sBoard, 0.5 ), resultsComp, 0.1 ), inputData,
+ 0.5 );
+
+ SwingUtils.addComponent( pComponent, split, 0, 0, 1, 1, BOTH, NWEST, 1.0, 1.0 );
+
+ // initialize by a last used service name from preferences
+ String lastServiceName = getPrefValue( DP_SC_SERVICE_NAME, "" );
+ if ( !"".equals( lastServiceName ) ) selectService( lastServiceName );
+
+ return pComponent;
+ }
+
+ /*******************************************************************************************************************
+ * Create a sub-panel for all the controls...
+ ******************************************************************************************************************/
+ protected JPanel getControlPanel() {
+ JPanel p = new JPanel( new GridBagLayout() );
+
+ // (selected) service name
+ selService = new JLabel();
+ selService.setFont( FAT_BORDER_FONT );
+ selService.setForeground( GraphColours.getColour( DashboardConfig.getString( P_S_TITLE_COLOR, null ),
+ Color.blue ) );
+
+ // how to invoke the service
+ JPanel howTo = createTitledPanel( "Service invocation" );
+ endpoint = createText( null, DP_ENDPOINT, DP_ENDPOINT );
+ className = createText( null, DP_IMPL_CLASS, DP_IMPL_CLASS );
+
+ ButtonGroup group = new ButtonGroup();
+ JRadioButton htNone, htRegistry, htEndpoint, htLocal, htNewURL;
+ group.add( htEndpoint = createHowToButton( "Use service's usual endpoint", DP_CS_URL ) );
+ htNone = createHowToButton( "No real call, just show/echo input", DP_CS_NONE );
+ htNone.addItemListener( new ItemListener() {
+ public void itemStateChanged( ItemEvent e ) {
+ boolean enabled = ( e.getStateChange() == ItemEvent.SELECTED );
+ if ( enabled )
+ runButton.setText( " Show Input " );
+ else {
+ if ( propertyChannel.getBoolean( DP_INP_PING, false ) ) {
+ runButton.setText( " Ping Service " );
+ }
+ else {
+ runButton.setText( " Call Service " );
+ }
+ }
+ }
+ } );
+ group.add( htNone );
+ group.add( htRegistry = createHowToButton( "Ask registry where service is, and call it", DP_CS_REGISTRY ) );
+ group.add( htNewURL = createHowToButton( "Use this endpoint", DP_CS_NEWURL ) );
+ group.add( htLocal = createHowToButton( "Use this local class", DP_CS_CLASS ) );
+
+ // run the service
+ // determine button text from preferences
+ boolean usingPing = getPrefValue( DP_INP_PING, false );
+ boolean usingAsBytes = getPrefValue( DP_INP_ASBYTES, false );
+ String runLabel = " Call Service ";
+ if ( propertyChannel.getString( DP_CALL_SERVICE ).equals( DP_CS_NONE ) )
+ runLabel = " Show Input ";
+ else if ( usingPing ) runLabel = " Ping Service ";
+
+ runButton = createButton( runLabel, "Invoke selected service", KeyEvent.VK_C, new ActionListener() {
+ public void actionPerformed( ActionEvent e ) {
+ MobyService srv = ( MobyService ) propertyChannel.get( DP_SC_SERVICE );
+ if ( srv != null ) {
+ // if the authentication was selected a dialog opens to ask for the user/password
+ if ( propertyChannel.getBoolean( DP_AUTHENTICATION, false ) ) {
+ askForAuthentication();
+ }
+ // if not make sure to remove any previous authentication
+ else {
+ propertyChannel.remove( DP_USER_AUTHENTICATION );
+ propertyChannel.remove( DP_PASSWORD_AUTHENTICATION );
+ }
+ runWorker = new MySwingWorker( srv );
+ runWorker.start();
+ }
+ }
+ } );
+ runButton.setIcon( runIcon );
+ runButton.setDisabledIcon( runIconDis );
+ runButton.setEnabled( false ); // will enable when a service is selected
+
+ stopButton = createButton( " Stop service ", "Cancel connection to a running service", KeyEvent.VK_S,
+ new ActionListener() {
+ public void actionPerformed( ActionEvent e ) {
+ if ( runWorker != null ) {
+ // runWorker.interrupt(); // no sense with the current Biomoby API
+ runWorker.cancel();
+ }
+ serviceFinished();
+ }
+ } );
+ stopButton.setIcon( stopIcon );
+ stopButton.setDisabledIcon( stopIconDis );
+ stopButton.setEnabled( false ); // will enable when a service is called
+
+ JPanel buttonPanel = createButtonPanel( new JButton[] { runButton, stopButton } );
+
+ JCheckBox asPing = createCheckBox( "'Ping' this service", usingPing, -1, new ItemListener() {
+ public void itemStateChanged( ItemEvent e ) {
+ boolean enabled = ( e.getStateChange() == ItemEvent.SELECTED );
+ setPropertySelect( enabled, DP_INP_PING );
+ setPrefValue( DP_INP_PING, enabled );
+ propertyChannel.put( DP_INP_PING, new Boolean( enabled ).toString() );
+ if ( enabled ) {
+ if ( propertyChannel.getString( DP_CALL_SERVICE ).equals( DP_CS_NONE ) )
+ runButton.setText( " Show Input " );
+ else
+ runButton.setText( " Ping Service " );
+ }
+ else {
+ if ( propertyChannel.getString( DP_CALL_SERVICE ).equals( DP_CS_NONE ) )
+ runButton.setText( " Show Input " );
+ else
+ runButton.setText( " Call Service " );
+ }
+ }
+ } );
+ setPropertySelect( usingPing, DP_INP_PING );
+ asPing.setToolTipText( "A Moby 'Ping' is used to determine if the service is responsive "
+ + "and if it responds in an API-compliant manner." );
+ Font font = asPing.getFont();
+ asPing.setFont( font.deriveFont( Math.max( 1, font.getSize2D() - 1 ) ) );
+
+ JCheckBox asBytes = createCheckBox( "Send data to service as a byte array", usingAsBytes, -1,
+ new ItemListener() {
+ public void itemStateChanged( ItemEvent e ) {
+ boolean enabled = ( e.getStateChange() == ItemEvent.SELECTED );
+ setPropertySelect( enabled, DP_INP_ASBYTES );
+ setPrefValue( DP_INP_ASBYTES, enabled );
+ propertyChannel.put( DP_INP_ASBYTES, new Boolean( enabled ).toString() );
+ }
+ } );
+ setPropertySelect( usingAsBytes, DP_INP_ASBYTES );
+ asBytes.setToolTipText( "It should not have any effect on result; it is for debugging" );
+ font = asBytes.getFont();
+ asBytes.setFont( font.deriveFont( Math.max( 1, font.getSize2D() - 1 ) ) );
+
+ JCheckBox authenticationBox = createCheckBox( "Use a user/password for authentication", false, -1,
+ new ItemListener() {
+ public void itemStateChanged( ItemEvent e ) {
+ propertyChannel.put( DP_AUTHENTICATION, e.getStateChange() == ItemEvent.SELECTED );
+ }
+ } );
+ authenticationBox.setToolTipText( "If the service requires authentication. "
+ + "A dialog will open if you call the service to enter the authentication." );
+ font = authenticationBox.getFont();
+ authenticationBox.setFont( font.deriveFont( Math.max( 1, font.getSize2D() - 1 ) ) );
+
+ SwingUtils.addComponent( howTo, htEndpoint, 0, 0, 2, 1, HORI, NWEST, 1.0, 0.0 );
+ SwingUtils.addComponent( howTo, htNewURL, 0, 1, 1, 1, NONE, NWEST, 0.0, 0.0 );
+ SwingUtils.addComponent( howTo, endpoint, 1, 1, 1, 1, HORI, NWEST, 1.0, 0.0 );
+ SwingUtils.addComponent( howTo, htRegistry, 0, 2, 2, 1, NONE, NWEST, 0.0, 0.0 );
+ SwingUtils.addComponent( howTo, htLocal, 0, 3, 1, 1, NONE, NWEST, 0.0, 0.0 );
+ SwingUtils.addComponent( howTo, className, 1, 3, 1, 1, HORI, NWEST, 1.0, 0.0 );
+ SwingUtils.addComponent( howTo, htNone, 0, 4, 2, 1, NONE, NWEST, 0.0, 0.0 );
+ SwingUtils.addComponent( howTo, asPing, 0, 5, 2, 1, NONE, NWEST, 0.0, 0.0, BREATH_TOP );
+ SwingUtils.addComponent( howTo, asBytes, 0, 6, 2, 1, NONE, NWEST, 0.0, 0.0 );
+ SwingUtils.addComponent( howTo, authenticationBox, 0, 7, 2, 1, NONE, NWEST, 0.0, 0.0 );
+
+ Component glue = Box.createVerticalGlue();
+ SwingUtils.addComponent( p, selService, 0, 0, 1, 1, NONE, CENTER, 0.0, 0.0 );
+ SwingUtils.addComponent( p, howTo, 0, 1, 1, 1, HORI, NWEST, 1.0, 0.0 );
+ SwingUtils.addComponent( p, buttonPanel, 0, 2, 1, 1, NONE, CENTER, 0.0, 0.0, BREATH_TOP );
+ SwingUtils.addComponent( p, glue, 0, 3, 1, 1, VERT, NWEST, 0.0, 1.0 );
+ return p;
+ }
+
+ /*******************************************************************************************************************
+ * Select/unselect using 'send as bytes' or 'ping'...
+ ******************************************************************************************************************/
+ protected void setPropertySelect( boolean enabled, String property ) {
+ setPrefValue( property, enabled );
+ propertyChannel.put( property, new Boolean( enabled ).toString() );
+ }
+
+ /*******************************************************************************************************************
+ * Opens a dialog and asks for webservice authentication
+ ******************************************************************************************************************/
+ private void askForAuthentication() {
+ final JDialog dialog = new JDialog( new JFrame(), "Authentication", true );
+ JPanel panel = new JPanel( new GridBagLayout() );
+ panel.setBorder( BorderFactory.createEmptyBorder( 5, 5, 5, 5 ) );
+
+ Insets insets = new Insets( 4, 4, 4, 4 );
+
+ JLabel label = new JLabel( "Please enter your username and password !" );
+ SwingUtils.addComponent( panel, label, 0, 0, 2, 1, HORI, CENTER, 1, 0, insets );
+
+ label = new JLabel( "User: " );
+ SwingUtils.addComponent( panel, label, 0, 1, 1, 1, HORI, NWEST, 0, 0, insets );
+
+ final JTextField userField = new JTextField( propertyChannel.getString( DP_USER_AUTHENTICATION ), 20 );
+ SwingUtils.addComponent( panel, userField, 1, 1, 1, 1, HORI, NWEST, 0, 0, insets );
+
+ label = new JLabel( "Password: " );
+ SwingUtils.addComponent( panel, label, 0, 2, 1, 1, HORI, NWEST, 0, 0, insets );
+
+ final JPasswordField passwordField = new JPasswordField(
+ propertyChannel.getString( DP_PASSWORD_AUTHENTICATION ), 20 );
+ SwingUtils.addComponent( panel, passwordField, 1, 2, 1, 1, HORI, NWEST, 0, 0, insets );
+
+ JButton button = new JButton( "Enter..." );
+ button.addActionListener( new ActionListener() {
+ public void actionPerformed( ActionEvent e ) {
+ propertyChannel.put( DP_USER_AUTHENTICATION, userField.getText() );
+ propertyChannel.put( DP_PASSWORD_AUTHENTICATION, passwordField.getPassword() );
+
+ dialog.setVisible( false );
+ }
+ } );
+ SwingUtils.addComponent( panel, button, 0, 3, 2, 1, HORI, CENTER, 0, 0, insets );
+
+ dialog.setContentPane( panel );
+ dialog.pack();
+ dialog.setLocationRelativeTo( this );
+ dialog.setVisible( true );
+ }
+
+ /*******************************************************************************************************************
+ * Create a specialized radio button - for various ways how to call a service.
+ ******************************************************************************************************************/
+ private JRadioButton createHowToButton( String title, String howTo ) {
+ JRadioButton radio = new JRadioButton( title );
+ radio.setActionCommand( howTo );
+ radio.addActionListener( howToListener );
+ String initHowTo = getPrefValue( DP_CALL_SERVICE, DP_CS_NONE );
+ if ( howTo.equals( initHowTo ) ) {
+ radio.setSelected( true );
+ radio.setEnabled( true );
+ propertyChannel.put( DP_CALL_SERVICE, howTo );
+ }
+ endpoint.setEnabled( initHowTo.equals( DP_CS_NEWURL ) );
+ className.setEnabled( initHowTo.equals( DP_CS_CLASS ) );
+ return radio;
+ }
+
+ //
+ private ActionListener howToListener = new ActionListener() {
+ public void actionPerformed( ActionEvent e ) {
+ String howTo = e.getActionCommand();
+ setPrefValue( DP_CALL_SERVICE, howTo );
+ propertyChannel.put( DP_CALL_SERVICE, howTo );
+ endpoint.setEnabled( howTo.equals( DP_CS_NEWURL ) );
+ className.setEnabled( howTo.equals( DP_CS_CLASS ) );
+ }
+ };
+
+ /*******************************************************************************************************************
+ * Create a specialized check box for "what to do with input/output"...
+ ******************************************************************************************************************/
+ private JCheckBox createDataBox( String title, final String preferenceKey, boolean defaultValue ) {
+ boolean initValue = getPrefValue( preferenceKey, defaultValue );
+ propertyChannel.put( preferenceKey, new Boolean( initValue ).toString() );
+ return createCheckBox( title, initValue, -1, new ItemListener() {
+ public void itemStateChanged( ItemEvent e ) {
+ boolean enabled = ( e.getStateChange() == ItemEvent.SELECTED );
+ setPrefValue( preferenceKey, enabled );
+ propertyChannel.put( preferenceKey, new Boolean( enabled ).toString() );
+ inFile.setEnabled( iFromFile.isSelected() );
+ }
+ } );
+ }
+
+ /*******************************************************************************************************************
+ * Create a sub-panel for service inputs...
+ ******************************************************************************************************************/
+ protected JPanel getInputPanel() {
+ JPanel inputData = new JPanel( new GridBagLayout() );
+ inputData
+ .setBorder( createFatBorder( "Service Input Data", GraphColours.getColour( "cadetblue", Color.blue ) ) );
+
+ // upper part (tables, input file, show-xml check-box)
+ JPanel upper = new JPanel( new GridBagLayout() );
+
+ dataTablesPanel = new JPanel( new GridBagLayout() );
+
+ iFromFile = createDataBox( "Take an input from this XML file", DP_SC_IN_FILE, false );
+ inFile = createFileSelector( "Select input XML for calling a service", "Select", null, DP_SC_INPUT_FILE,
+ DP_SC_INPUT_FILE );
+ inFile.setEnabled( iFromFile.isSelected() );
+
+ iShowXML = createDataBox( "Show input as XML", DP_INP_SHOWXML, true );
+
+ SwingUtils.addComponent( upper, dataTablesPanel, 0, 0, 2, 1, BOTH, NWEST, 1.0, 1.0 );
+ SwingUtils.addComponent( upper, iFromFile, 0, 1, 1, 1, NONE, NWEST, 0.0, 0.0 );
+ SwingUtils.addComponent( upper, inFile, 1, 1, 1, 1, HORI, NWEST, 1.0, 0.0 );
+ SwingUtils.addComponent( upper, iShowXML, 0, 2, 1, 1, NONE, NWEST, 0.0, 0.0 );
+
+ // lower part (console showing/editing input XML)
+ input = new EditableConsole();
+ input.setAppendMode( false );
+ input.setVerboseMode( false );
+
+ // split upper and lower parts into moving panels
+ JSplitPane split = vSplit( upper, input, 0.5 );
+ SwingUtils.addComponent( inputData, split, 0, 0, 1, 1, BOTH, NWEST, 1.0, 1.0 );
+ return inputData;
+ }
+
+ class EditableConsole extends CommonConsole {
+
+ public EditableConsole() {
+ super();
+ textArea.setEditable( true );
+ textArea.setBackground( GraphColours.getColour( DashboardConfig.getString( P_S_EDIT_BGCOLOR, null ),
+ textArea.getBackground() ) );
+ }
+ }
+
+ /*******************************************************************************************************************
+ * Replace the global 'dataTablesPanel' with an information text.
+ ******************************************************************************************************************/
+ protected void updateInputDataPanel( String info ) {
+ dataTablesPanel.removeAll();
+ AwtUtils.redisplay( dataTablesPanel );
+
+ JLabel text = new JLabel( info );
+ SwingUtils.addComponent( dataTablesPanel, text, 0, 0, 1, 1, NONE, CENTER, 0.0, 0.0 );
+ dataTablesPanel.validate();
+ return;
+ }
+
+ /*******************************************************************************************************************
+ * Replace the global 'dataTablesPanel' with fields defining the input data for the given service.
+ ******************************************************************************************************************/
+ protected void updateInputDataPanel( MobyService service, MobyDataType[] dataTypes ) {
+ dataTablesPanel.removeAll();
+
+ inputDataTables = new ServiceInputPanel( service, dataTypes );
+ SwingUtils.addComponent( dataTablesPanel, inputDataTables, 0, 0, 1, 1, BOTH, NWEST, 1.0, 1.0 );
+ dataTablesPanel.validate();
+ }
+
+ /*******************************************************************************************************************
+ * Find 'dataTypeToBeFound in 'dataTypes' and return it. The same could be achieved by calling
+ * registryModel.getDataType() but here I do not want to create yet another swing worker for it.
+ ******************************************************************************************************************/
+ protected MobyDataType findDataType( String dataTypeToBeFound, MobyDataType[] dataTypes ) {
+ for ( int i = 0; i < dataTypes.length; i++ ) {
+ if ( dataTypeToBeFound.equals( dataTypes[ i ].getName() ) ) return dataTypes[ i ];
+ }
+ log.error( "Strange, data type '" + dataTypeToBeFound + "' was not found in " + dataTypes.length
+ + " data types." );
+ return null;
+ }
+
+ /*******************************************************************************************************************
+ *
+ * A worker that calls the service...
+ *
+ ******************************************************************************************************************/
+ class MySwingWorker extends SwingWorker {
+
+ MobyException exception = null;
+ DataContainer data = new DataContainer();
+ boolean wasCancelled = false;
+ MobyService service;
+
+ public MySwingWorker( MobyService service ) {
+ super();
+ this.service = service;
+ data.setMetadata( propertyChannel );
+ }
+
+ public void cancel() {
+ wasCancelled = true;
+ propertyChannel.fire( DP_STATUS_MSG, "Service invocation cancelled." );
+ }
+
+ public Object construct() {
+ try {
+ runButton.setEnabled( false );
+ propertyChannel.fire( DP_STATUS_MSG, "Calling service " + service.getName() + "..." );
+
+ // create a data container with input data...
+ if ( propertyChannel.getBoolean( DP_SC_IN_FILE, false ) ) {
+
+ // ...either from a file
+ String inputFile = propertyChannel.getString( DP_SC_INPUT_FILE );
+ if ( UUtils.isEmpty( inputFile ) ) throw new MobyException( "No input XML file given." );
+ data.setDataFromFile( new File( inputFile ) );
+
+ }
+ else {
+ data.setData( inputDataTables.toXML() );
+ }
+
+ // optionally, show XML data: we want to show this XML
+ // input only (a) if it was explicitly asked for (property
+ // DP_INP_SHOWXML is true), or (b) if "no real service
+ // call" was selected (property DP_CALL_SERVICE has value
+ // DP_CS_NONE)
+ if ( DP_CS_NONE.equals( propertyChannel.getString( DP_CALL_SERVICE ) )
+ || ( propertyChannel.getBoolean( DP_INP_SHOWXML, false ) ) ) {
+ input.setText( ( String ) data.getData() );
+ }
+
+ // If we are only pinging the service, set the data object to an empty message
+ if ( propertyChannel.getString( DP_INP_PING ).toLowerCase().equals( "true" ) ) {
+ String emptyMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ + "<moby:MOBY xmlns:moby=\"http://www.biomoby.org/moby\">\n" + " <moby:mobyContent />\n"
+ + "</moby:MOBY>";
+ data.setData( emptyMsg );
+ input.setText( emptyMsg );
+ }
+
+ // finally, call the service
+ stopButton.setEnabled( true );
+ callerModel.runIt( data );
+
+ }
+ catch ( MobyException e ) {
+ exception = e;
+
+ }
+ catch ( Error e ) {
+ exception = new MobyException( e.toString() );
+ }
+ return null; // not used here
+ }
+
+ // runs on the event-dispatching thread
+ public void finished() {
+ if ( wasCancelled ) {
+ // service was interrupted by the Stop button - do
+ // nothing (the whole GUI should be already in a good
+ // state - the button 'Stop' took care about it)
+ return;
+ }
+
+ if ( exception == null ) {
+
+ // handle results here (using renderers...)
+ if ( propertyChannel.getString( DP_INP_PING ).toLowerCase().equals( "true" ) ) {
+ propertyChannel.fire( DP_STATUS_MSG, service.getName() + " isAlive." );
+ }
+ else {
+ propertyChannel.fire( DP_STATUS_MSG, "Service invocation finished." );
+ }
+
+ if ( !DP_CS_NONE.equals( propertyChannel.getString( DP_CALL_SERVICE ) ) ) {
+ results.updateComponent( data );
+ }
+
+ }
+ else {
+ if ( propertyChannel.getString( DP_INP_PING ).toLowerCase().equals( "true" ) ) {
+ propertyChannel.fire( DP_STATUS_MSG, service.getName() + " is dead." );
+ results.removeResults();
+ }
+ else {
+ propertyChannel.fire( DP_STATUS_MSG, "Service invocation failed." );
+ error( CALLER_ERROR, exception );
+ }
+ exception.printStackTrace();
+ }
+ serviceFinished();
+ }
+ }
+
+ /*******************************************************************************************************************
+ * Called when a call to a service finished.
+ ******************************************************************************************************************/
+ protected void serviceFinished() {
+ runButton.setEnabled( true );
+ stopButton.setEnabled( false );
+ }
+
+ /*******************************************************************************************************************
+ * Called when a service is selected in a service tree (or in a 'recently used services' combo box), and also at the
+ * beginning when a service name is retrieved from user preferences.
+ *
+ * Get selected service from a registry model and generate a new 'input data panel' to reflect input data of the
+ * selected service.
+ ******************************************************************************************************************/
+ protected void selectService( final String serviceName ) {
+ final Object source = this;
+ final SwingWorker worker = new SwingWorker() {
+ MobyService service;
+ MobyDataType[] dataTypes;
+
+ public Object construct() {
+ try {
+ service = registryModel.getService( serviceName );
+ dataTypes = registryModel.getDataTypes( source );
+ }
+ catch ( MobyException e ) {
+ error( ServicesTree.SERVICES_ACCESS_ERROR, e );
+ }
+ return service; // not used here
+ }
+
+ // runs on the event-dispatching thread.
+ public void finished() {
+ if ( service == null ) {
+ deselectService();
+ }
+ else {
+ updateInputDataPanel( service, dataTypes );
+ selService.setText( service.getName() );
+ // selectionAllowed = false;
+ // recentServices.setText (service.getName());
+ // selectionAllowed = true;
+ propertyChannel.put( DP_SC_SERVICE, service );
+ runButton.setEnabled( true );
+
+ }
+ }
+ };
+ worker.start();
+ }
+
+ /*******************************************************************************************************************
+ * Called when no service is selected in order to display this fact on various places in the panel.
+ ******************************************************************************************************************/
+ protected void deselectService() {
+ selService.setText( "" );
+ updateInputDataPanel( INIT_SELECT );
+ propertyChannel.remove( DP_SC_SERVICE );
+ runButton.setEnabled( false );
+ }
+
+ /*******************************************************************************************************************
+ *
+ ******************************************************************************************************************/
+ public String getName() {
+ return "Simple Client";
+ }
+
+ /*******************************************************************************************************************
+ *
+ ******************************************************************************************************************/
+ public String getDescription() {
+ return "A panel allowing to create input data and to call an arbitrary Biomoby service. "
+ + "Its purpose is mostly for the service developers to test their new services.";
+ }
+
+ /*******************************************************************************************************************
+ *
+ * Customized tree of services...
+ *
+ ******************************************************************************************************************/
+ protected class CustomServicesTree extends ServicesTree {
+
+ /***************************************************************************************************************
+ * Construtor
+ **************************************************************************************************************/
+ public CustomServicesTree( RegistryModel model, CommonConsole console ) {
+ super( model, console );
+ }
+
+ /***************************************************************************************************************
+ *
+ **************************************************************************************************************/
+ protected void createPopups( String title ) {
+ super.createPopups( title );
+ removeFromPopups( AC_RELOAD );
+ removeSeparatorAfter( AC_COLLAPSE );
+ }
+
+ /***************************************************************************************************************
+ * Service selected in a service tree...
+ **************************************************************************************************************/
+ protected void selected( DefaultMutableTreeNode node ) {
+ if ( node == null ) {
+ // nothing selected
+ deselectService();
+ return;
+ }
+ updateInputDataPanel( "Loading..." );
+ selService.setText( "" );
+ final CommonNode nodeObject = ( CommonNode ) node.getUserObject();
+ String currentServiceName = nodeObject.getValue();
+ selectService( currentServiceName );
+ setPrefValue( DP_SC_SERVICE_NAME, currentServiceName );
+ }
+ }
+
+}
===================================================================
RCS file: /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/ServiceCallerModel.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/ServiceCallerModel.java 2008/05/14 20:37:10 1.6
+++ /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/ServiceCallerModel.java 2008/11/26 08:54:21 1.7
@@ -1,168 +1,168 @@
-// ServiceCallerModel.java
-//
-// Created: February 2006
-//
-// This file is a component of the BioMoby project.
-// Copyright Martin Senger (martin.senger at gmail.com).
-//
-
-package org.biomoby.service.dashboard;
-
-import org.biomoby.shared.MobyException;
-import org.biomoby.shared.MobyService;
-import org.biomoby.shared.parser.MobyPackage;
-import org.biomoby.shared.parser.MobyJob;
-import org.biomoby.client.ExtendedProtocolClient;
-import org.biomoby.client.MobyServiceLocator;
-import org.biomoby.client.ExtendedServiceLocator;
-import org.biomoby.service.dashboard.data.DataContainer;
-
-import org.tulsoft.shared.UUtils;
-
-/**
- * A model that achieves its task by calling (local, remote, or none)
- * Biomoby service. It delegates the task of calling a service to a
- * true Biomoby client (that extends <tt>BaseClient</tt>). <p>
- *
- * @author <A HREF="mailto:martin.senger at gmail.com">Martin Senger</A>
- * @version $Id$
- */
-
-public class ServiceCallerModel
- extends AbstractModel {
-
-// private static org.apache.commons.logging.Log log =
-// org.apache.commons.logging.LogFactory.getLog (ServiceCallerModel.class);
-
- /**************************************************************************
- * Call a service. This is the main purpose of this model. <p>
- *
- * @param data contains input data and this method replaces them
- * by result data
- *************************************************************************/
- public void runIt (DataContainer data)
- throws MobyException {
- SimpleClient worker = new SimpleClient (data);
- worker.process();
- }
-
- /**************************************************************************
- *
- * A real client - the main worker for this model..
- *
- *************************************************************************/
- protected class SimpleClient
- extends ExtendedProtocolClient {
-
- DataContainer data;
-
- /**************************************************************************
- * Constructor.
- *************************************************************************/
- public SimpleClient (DataContainer data) {
- super();
- this.data = data;
- }
-
- /**************************************************************************
- * What service to call and where to find it.
- *************************************************************************/
- public MobyServiceLocator getServiceLocator()
- throws MobyException {
- return new MyServiceLocator();
- }
-
- /**************************************************************************
- * Not used here...
- *************************************************************************/
- public boolean fillRequest (MobyJob request, MobyPackage inputContext)
- throws MobyException {
- return true;
- }
-
- /**************************************************************************
- * Not used here...
- *************************************************************************/
- public boolean useResponse (MobyJob response,
- MobyPackage responseContext)
- throws MobyException {
- return true;
- }
-
- /**************************************************************************
- * Return input XML (from a data container obtained in the
- * constructor).
- *************************************************************************/
- public String fillRequest()
- throws MobyException {
-
- if (data == null)
- throw new MobyException ("No input data given.");
-
- return (String)data.getData();
- }
-
- /**************************************************************************
- *
- *************************************************************************/
- public boolean useResponse (String xmlResponse)
- throws MobyException {
-
- data.setData (xmlResponse);
-
- // do nothing more if it is just an input echo
- if ( ((ExtendedServiceLocator)getServiceLocator()).isLoop())
- return false;
-
- return false;
- }
- }
-
- /**************************************************************************
- *
- * A service locator filled from the property channel.
- *
- *************************************************************************/
- protected class MyServiceLocator
- extends ExtendedServiceLocator {
-
- public MyServiceLocator()
- throws MobyException {
- super();
-
- // fill this locator by a service
- MobyService selService = (MobyService)propertyChannel.get (DP_SC_SERVICE);
- if (selService == null)
- throw new MobyException ("No service given.");
- MobyService clonedService = new MobyService (selService.getName(), selService.getAuthority());
- clonedService.setURL (selService.getURL());
- setService (clonedService);
-
- // fill how to call this service
- String howToCall = propertyChannel.getString (DP_CALL_SERVICE);
- if (DP_CS_NEWURL.equals (howToCall)) {
- String sEndpoint = propertyChannel.getString (DP_ENDPOINT);
- if (! UUtils.isEmpty (sEndpoint))
- clonedService.setURL (sEndpoint);
-
- } else if (DP_CS_REGISTRY.equals (howToCall)) {
- clonedService.setURL (null);
- setRegistryEndpoint (propertyChannel.getString (DP_REGISTRY_ENDPOINT));
- setRegistryNamespace (propertyChannel.getString (DP_REGISTRY_NAMESPACE));
-
- } else if (DP_CS_CLASS.equals (howToCall)) {
- String localClass = propertyChannel.getString (DP_IMPL_CLASS);
- if (UUtils.isEmpty (localClass))
- throw new MobyException ("No local class given.");
- setLocalClass (localClass);
-
- } else if (DP_CS_NONE.equals (howToCall)) {
- setLoop (true);
- }
-
- setAsBytes (propertyChannel.getBoolean (DP_INP_ASBYTES, false));
-
- }
- }
-
-}
+// ServiceCallerModel.java
+//
+// Created: February 2006
+//
+// This file is a component of the BioMoby project.
+// Copyright Martin Senger (martin.senger at gmail.com).
+//
+
+package org.biomoby.service.dashboard;
+
+import org.apache.axis.client.Call;
+import org.biomoby.client.ExtendedProtocolClient;
+import org.biomoby.client.ExtendedServiceLocator;
+import org.biomoby.client.MobyServiceLocator;
+import org.biomoby.service.dashboard.data.DataContainer;
+import org.biomoby.shared.MobyException;
+import org.biomoby.shared.MobyService;
+import org.biomoby.shared.parser.MobyJob;
+import org.biomoby.shared.parser.MobyPackage;
+import org.tulsoft.shared.UUtils;
+
+/**
+ * A model that achieves its task by calling (local, remote, or none) Biomoby service. It delegates the task of calling
+ * a service to a true Biomoby client (that extends <tt>BaseClient</tt>).
+ * <p>
+ *
+ * @author <A HREF="mailto:martin.senger at gmail.com">Martin Senger</A>
+ * @version $Id$
+ */
+
+public class ServiceCallerModel extends AbstractModel {
+
+ // private static org.apache.commons.logging.Log log =
+ // org.apache.commons.logging.LogFactory.getLog (ServiceCallerModel.class);
+
+ /*******************************************************************************************************************
+ * Call a service. This is the main purpose of this model.
+ * <p>
+ *
+ * @param data
+ * contains input data and this method replaces them by result data
+ ******************************************************************************************************************/
+ public void runIt( DataContainer data ) throws MobyException {
+ SimpleClient worker = new SimpleClient( data );
+ worker.process();
+ }
+
+ /*******************************************************************************************************************
+ *
+ * A real client - the main worker for this model..
+ *
+ ******************************************************************************************************************/
+ protected class SimpleClient extends ExtendedProtocolClient {
+
+ DataContainer data;
+
+ /***************************************************************************************************************
+ * Constructor.
+ **************************************************************************************************************/
+ public SimpleClient( DataContainer data ) {
+ super();
+ this.data = data;
+ }
+
+ /***************************************************************************************************************
+ * What service to call and where to find it.
+ **************************************************************************************************************/
+ public MobyServiceLocator getServiceLocator() throws MobyException {
+ return new MyServiceLocator();
+ }
+
+ /***************************************************************************************************************
+ * Not used here...
+ **************************************************************************************************************/
+ public boolean fillRequest( MobyJob request, MobyPackage inputContext ) throws MobyException {
+ return true;
+ }
+
+ /***************************************************************************************************************
+ * Not used here...
+ **************************************************************************************************************/
+ public boolean useResponse( MobyJob response, MobyPackage responseContext ) throws MobyException {
+ return true;
+ }
+
+ /***************************************************************************************************************
+ * Return input XML (from a data container obtained in the constructor).
+ **************************************************************************************************************/
+ public String fillRequest() throws MobyException {
+
+ if ( data == null ) throw new MobyException( "No input data given." );
+
+ return ( String ) data.getData();
+ }
+
+ /**
+ * Sets the authentication for the service call. If the user has checked the corresponding box in the Dashboard
+ * the values are stored in the propertychannel.
+ */
+ protected void setAuthentication( Call call ) {
+ String user = propertyChannel.getString( DashboardProperties.DP_USER_AUTHENTICATION );
+ if ( !isEmpty( user ) ) {
+ call.setProperty( Call.USERNAME_PROPERTY, user );
+ call.setProperty( Call.PASSWORD_PROPERTY, new String( ( char[] ) propertyChannel
+ .get( DashboardProperties.DP_PASSWORD_AUTHENTICATION ) ) );
+ }
+ }
+
+ /***************************************************************************************************************
+ *
+ **************************************************************************************************************/
+ public boolean useResponse( String xmlResponse ) throws MobyException {
+
+ data.setData( xmlResponse );
+
+ // do nothing more if it is just an input echo
+ if ( ( ( ExtendedServiceLocator ) getServiceLocator() ).isLoop() ) return false;
+
+ return false;
+ }
+ }
+
+ /*******************************************************************************************************************
+ *
+ * A service locator filled from the property channel.
+ *
+ ******************************************************************************************************************/
+ protected class MyServiceLocator extends ExtendedServiceLocator {
+
+ public MyServiceLocator() throws MobyException {
+ super();
+
+ // fill this locator by a service
+ MobyService selService = ( MobyService ) propertyChannel.get( DP_SC_SERVICE );
+ if ( selService == null ) throw new MobyException( "No service given." );
+ MobyService clonedService = new MobyService( selService.getName(), selService.getAuthority() );
+ clonedService.setURL( selService.getURL() );
+ setService( clonedService );
+
+ // fill how to call this service
+ String howToCall = propertyChannel.getString( DP_CALL_SERVICE );
+ if ( DP_CS_NEWURL.equals( howToCall ) ) {
+ String sEndpoint = propertyChannel.getString( DP_ENDPOINT );
+ if ( !UUtils.isEmpty( sEndpoint ) ) clonedService.setURL( sEndpoint );
+
+ }
+ else if ( DP_CS_REGISTRY.equals( howToCall ) ) {
+ clonedService.setURL( null );
+ setRegistryEndpoint( propertyChannel.getString( DP_REGISTRY_ENDPOINT ) );
+ setRegistryNamespace( propertyChannel.getString( DP_REGISTRY_NAMESPACE ) );
+
+ }
+ else if ( DP_CS_CLASS.equals( howToCall ) ) {
+ String localClass = propertyChannel.getString( DP_IMPL_CLASS );
+ if ( UUtils.isEmpty( localClass ) ) throw new MobyException( "No local class given." );
+ setLocalClass( localClass );
+
+ }
+ else if ( DP_CS_NONE.equals( howToCall ) ) {
+ setLoop( true );
+ }
+
+ setAsBytes( propertyChannel.getBoolean( DP_INP_ASBYTES, false ) );
+
+ }
+ }
+
+}
===================================================================
RCS file: /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/DashboardProperties.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/DashboardProperties.java 2008/11/18 06:40:11 1.29
+++ /home/repository/moby/moby-live/Java/src/main/org/biomoby/service/dashboard/DashboardProperties.java 2008/11/26 08:54:21 1.30
@@ -9,10 +9,10 @@
package org.biomoby.service.dashboard;
/**
- * A list of names of most/all recognized properties that can be fired
- * by dashboard panels, and a list of names of Java properties that
- * can be used to configure the dashboard. <p>
- *
+ * A list of names of most/all recognized properties that can be fired by dashboard panels, and a list of names of Java
+ * properties that can be used to configure the dashboard.
+ * <p>
+ *
* @author <A HREF="mailto:martin.senger at gmail.com">Martin Senger</A>
* @version $Id$
*/
@@ -44,9 +44,9 @@
static final String DP_FL_BIOCASE = "biocase";
static final String DP_FL_HIBERNATE = "hibernate";
- static final String DP_SEL_SERVICES = "selectedServices"; // type: Vector with service/authority name
- static final String DP_SEL_AUTHORITIES = "selectedAuthorities"; // type: Vector with authority name
- static final String DP_DEPL_SERVICES = "servicesToDeploy"; // type: Map with serviceName => className
+ static final String DP_SEL_SERVICES = "selectedServices"; // type: Vector with service/authority name
+ static final String DP_SEL_AUTHORITIES = "selectedAuthorities"; // type: Vector with authority name
+ static final String DP_DEPL_SERVICES = "servicesToDeploy"; // type: Map with serviceName => className
static final String DP_LOCAL_DEPLOY = "use-local-deploy";
static final String DP_TOMCAT_HOME = "tomcatHome";
@@ -82,10 +82,10 @@
static final String DP_DETACH_VIEW = "detachViewers";
-// static final String DP_SC_IN_DATA = "sc-inputData";
+ // static final String DP_SC_IN_DATA = "sc-inputData";
static final String DP_SC_IN_FILE = "sc-inputFromFile";
static final String DP_SC_INPUT_FILE = "sc-inputFile";
- static final String DP_SC_SERVICE = "dp-sc-service"; // type: MobyService
+ static final String DP_SC_SERVICE = "dp-sc-service"; // type: MobyService
static final String DP_SC_SERVICE_NAME = "dp-sc-service-name";
static final String DP_SC_SERVICES = "dp-sc-recent-services";
@@ -97,21 +97,21 @@
static final String DP_DATATYPE_NAME = "dp-datatype-name";
// names of properties used in property channel storage
- static final String DP_REGISTRY_MODEL = "dp-registry-model"; // type: RegistryModel
- static final String DP_ANT_MODEL = "dp-ant-model"; // type: AntModel
+ static final String DP_REGISTRY_MODEL = "dp-registry-model"; // type: RegistryModel
+ static final String DP_ANT_MODEL = "dp-ant-model"; // type: AntModel
static final String DP_REGISTRY_SYNONYM = "dp-registry-synonym";
- static final String DP_REG_INFO = "dp-reg-info"; // type: Boolean
+ static final String DP_REG_INFO = "dp-reg-info"; // type: Boolean
static final String DP_REGISTRY_ENDPOINT = "dp-registry-endpoint";
static final String DP_REGISTRY_NAMESPACE = "dp-registry-namespace";
static final String DP_CACHE_DIR = "dp-cache-dir";
- static final String DP_USE_CACHE = "dp-use-cache"; // type: Boolean
+ static final String DP_USE_CACHE = "dp-use-cache"; // type: Boolean
static final String DP_REG_DT_NAME = "dp-reg-dt-name";
static final String DP_REG_DT_AUTH = "dp-reg-dt-auth";
static final String DP_REG_DT_EMAIL = "dp-reg-dt-email";
static final String DP_REG_DT_DESC = "dp-reg-dt-desc";
- static final String DP_REG_DT_TREE = "dp-reg-dt-tree"; // type: MobyDataType
+ static final String DP_REG_DT_TREE = "dp-reg-dt-tree"; // type: MobyDataType
static final String DP_REG_NS_NAME = "dp-reg-ns-name";
static final String DP_REG_NS_AUTH = "dp-reg-ns-auth";
@@ -132,94 +132,103 @@
static final String DP_REG_S_RDF_URL = "dp-reg-s-rdf-url";
static final String DP_REG_S_RDF_PATH = "dp-reg-s-rdf-path";
static final String DP_REG_S_XML_PATH = "dp-reg-s-xml-path";
- static final String DP_USE_SIGNATURE = "dp-use-signature"; // type: Boolean
- static final String DP_USE_AUTHORITATIVE = "dp-use-auth"; // type: Boolean
+ static final String DP_USE_SIGNATURE = "dp-use-signature"; // type: Boolean
+ static final String DP_USE_AUTHORITATIVE = "dp-use-auth"; // type: Boolean
static final String DP_REG_S_TYPE = "dp-reg-s-type";
static final String DP_REG_VERBOSE = "dp-reg-verbose";
- static final String DP_S_SELECTED = "dp-s-selected"; // type: MobyService
+ static final String DP_S_SELECTED = "dp-s-selected"; // type: MobyService
- /** A property name. Its value contains a title that will appear
- * in big fonts on top of the dashboard. It may be empty if
- * property {@link #DP_TITLE_ICON} is defined; otherwise a default
- * value will be used.
+ /**
+ * A property name. Its value contains a title that will appear in big fonts on top of the dashboard. It may be
+ * empty if property {@link #DP_TITLE_ICON} is defined; otherwise a default value will be used.
*/
static final String DP_TITLE = "dashboard.title";
- /** A property name. Its value contains a filename with an icon
- * accompanying a dashboard title (defined by property {@link
- * #DP_TITLE}. No default value used. Specify here either an
- * absolute path (not recommended) or a relative path whose
- * beginning can be found somewhere on the CLASSPATH.
+ /**
+ * A property name. Its value contains a filename with an icon accompanying a dashboard title (defined by property
+ * {@link #DP_TITLE}. No default value used. Specify here either an absolute path (not recommended) or a relative
+ * path whose beginning can be found somewhere on the CLASSPATH.
*/
static final String DP_TITLE_ICON = "dashboard.title.icon";
- /** A property name. Its value contains a filename with the main
- * dashboard icon. Specify here either an absolute path (not
- * recommended) or a relative path whose beginning can be found
- * somewhere on the CLASSPATH.
+ /**
+ * A property name. Its value contains a filename with the main dashboard icon. Specify here either an absolute path
+ * (not recommended) or a relative path whose beginning can be found somewhere on the CLASSPATH.
*/
static final String DP_ICON = "dashboard.icon";
- /** A property name. Its value contains a color name used to paint
- * main dashboard background. The name can be a color name, or a
- * number in various format (see <tt>GraphColours</tt> for
- * details).
+ /**
+ * A property name. Its value contains a color name used to paint main dashboard background. The name can be a color
+ * name, or a number in various format (see <tt>GraphColours</tt> for details).
*/
static final String DP_BGCOLOR = "dashboard.bgcolor";
- /** A property name. Its value contains a short description what a
- dashboard can do generally. Often, however, it is more
- convenient to put the description in a file and to use
- property {@link #DP_DESCRIPTION_FILE}.
+ /**
+ * A property name. Its value contains a short description what a dashboard can do generally. Often, however, it is
+ * more convenient to put the description in a file and to use property {@link #DP_DESCRIPTION_FILE}.
*/
static final String DP_DESCRIPTION = "dashboard.description";
- /** A property name. Its value contains a file name with a short
- description what a dashboard can do generally.
+ /**
+ * A property name. Its value contains a file name with a short description what a dashboard can do generally.
*/
static final String DP_DESCRIPTION_FILE = "dashboard.description.file";
- /** A property name. Its value contains a short description of a
- project that uses this dashboard. Often, however, it is more
- convenient to put the description in a file and to use
- property {@link #DP_P_DESCRIPTION_FILE}.
+ /**
+ * A property name. Its value contains a short description of a project that uses this dashboard. Often, however, it
+ * is more convenient to put the description in a file and to use property {@link #DP_P_DESCRIPTION_FILE}.
*/
static final String DP_P_DESCRIPTION = "project.description";
- /** A property name. Its value contains a file name with a short
- description of a project that uses this dashboard.
+ /**
+ * A property name. Its value contains a file name with a short description of a project that uses this dashboard.
*/
static final String DP_P_DESCRIPTION_FILE = "project.description.file";
- /** A property name. Its value contains a name of a contact
- person, possibly with an email address.
+ /**
+ * A property name. Its value contains a name of a contact person, possibly with an email address.
*/
static final String DP_CONTACT = "dashboard.contact";
- /** A property name. Its value contains a directory name with the
- * local cache of a BiMoby Central registry.
+ /**
+ * A property name. Its value contains a directory name with the local cache of a BiMoby Central registry.
*/
static final String DP_REGISTRY_CACHE_DIR = "registry.cache.dir";
- /** A property name. Its value contains a name or a
- * comma-separated list of names of BioMoby registries that will
- * be displayed in the RegistryPanel. If this property is missing,
- * the list is taken from the hard-coded known registries in the
- * Java source file. <p>
- *
- * The names (values of this property) are equivalent to the
- * 'synonym' attribute of the Registry class.
+ /**
+ * A property name. Its value contains a name or a comma-separated list of names of BioMoby registries that will be
+ * displayed in the RegistryPanel. If this property is missing, the list is taken from the hard-coded known
+ * registries in the Java source file.
+ * <p>
+ *
+ * The names (values of this property) are equivalent to the 'synonym' attribute of the Registry class.
*/
static final String DP_WANTED_REGISTRIES = "dashboard.wanted.registries";
- /** A property name. Its value contains a name (synonym) of a
- * default BioMoby registry. By default, the default registry is
- * taken either from the first element in {@link
- * #DP_WANTED_REGISTRIES} or from
+ /**
+ * A property name. Its value contains a name (synonym) of a default BioMoby registry. By default, the default
+ * registry is taken either from the first element in {@link #DP_WANTED_REGISTRIES} or from
* <tt>Registries.DEFAULT_REGISTRY_SYNONYM</tt>.
*/
static final String DP_DEFAULT_REGISTRY = "dashboard.default.registry";
+ /**
+ * A property name. Its value contains the user name used for the authentication required for the servlet container
+ * the service is hosted at.
+ */
+ static final String DP_USER_AUTHENTICATION = "service-authentication-user";
+
+ /**
+ * A property name. Its value contains the password used for the authentication required for the servlet container
+ * the service is hosted at.
+ */
+ static final String DP_PASSWORD_AUTHENTICATION = "service-authentication-passwd";
+
+ /**
+ * A property name. Its value contains whether authentication is required for the servlet container the service is
+ * hosted at.
+ */
+ static final String DP_AUTHENTICATION = "service-authentication";
}
More information about the MOBY-guts
mailing list