ServiceBrowser.java :  » Workflow-Engines » osbl-1_0 » org » osbl » client » wings » devtools » Java Open Source

Java Open Source » Workflow Engines » osbl 1_0 
osbl 1_0 » org » osbl » client » wings » devtools » ServiceBrowser.java
package org.osbl.client.wings.devtools;

import org.osbl.ServiceProvider;
import org.osbl.client.wings.shell.*;
import org.osbl.client.wings.XOptionPane;
import org.osbl.client.wings.form.DelegateEnvironment;
import org.wings.*;
import org.wings.table.SDefaultTableCellRenderer;
import org.wings.border.SLineBorder;
import org.wingx.XTable;
import org.wingx.XScrollPane;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.util.*;
import java.util.List;
import java.beans.*;
import java.lang.reflect.Method;

public class ServiceBrowser
    extends SPanel
    implements Application
{
    protected Environment environment = new DelegateEnvironment(true);

    SList beansList = new SList();
    PropertiesTableModel model = new PropertiesTableModel();
    XTable propertiesTable = new XTable(model);
    private ServiceProvider serviceProvider = ServiceProvider.getInstance();

    public ServiceBrowser() {
        super(new SBorderLayout());

        beansList.setListData(serviceProvider.getServiceNames());
        beansList.setSelectionMode(SList.SINGLE_SELECTION);
        beansList.addListSelectionListener(new ListSelectionListener()
        {
            public void valueChanged(ListSelectionEvent e) {
                String name = (String)beansList.getSelectedValue();
                Object bean = serviceProvider.getService(name);
                try {
                    PropertyDescriptor[] descriptors = Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors();
                    List list = new LinkedList();
                    for (int i = 0; i < descriptors.length; i++) {
                        PropertyDescriptor descriptor = descriptors[i];
                        if (descriptor.getReadMethod() != null)
                            list.add(descriptor);
                    }
                    model.setBean(bean);
                    model.setDescriptors((PropertyDescriptor[])list.toArray(new PropertyDescriptor[list.size()]));
                }
                catch (IntrospectionException e1) {
                    e1.printStackTrace();
                    model.setDescriptors(new PropertyDescriptor[0]);
                }
            }
        });

        propertiesTable.setEditable(false);
        propertiesTable.setDefaultRenderer(new ValueCellRenderer());

        XScrollPane scrollPane = new XScrollPane(propertiesTable);
        add(beansList, SBorderLayout.NORTH);
        add(scrollPane, SBorderLayout.CENTER);

        environment.setContentPane(this);
        environment.setTitle("org.osbl.client.wings.devtools.serviceBrowser");
    }

    public Environment getEnvironment() {
        return environment;
    }

    class PropertiesTableModel
        extends AbstractTableModel
    {
        Object bean;
        PropertyDescriptor[] descriptors = new PropertyDescriptor[0];

        public void setBean(Object bean) {
            this.bean = bean;
            fireTableDataChanged();
        }

        public void setDescriptors(PropertyDescriptor[] descriptors) {
            this.descriptors = descriptors;
            fireTableStructureChanged();
        }

        public int getRowCount() {
            return descriptors.length;
        }

        public int getColumnCount() {
            return 2;
        }

        public String getColumnName(int column) {
            return new String[]{
                "name",
                "value"
            }[column];
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
            switch (columnIndex) {
                case 0:
                    return descriptors[rowIndex].getName();
                case 1:
                    PropertyDescriptor descriptor = descriptors[rowIndex];
                    Method getter = descriptor.getReadMethod();
                    try {
                        return getter.invoke(bean);
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                        return e.getMessage();
                    }
                default:
                    return "";
            }
        }
    }

    private class ValueCellRenderer
        extends SDefaultTableCellRenderer
    {
        public ValueCellRenderer() {
            setStyle("SLabel wrap");
        }

        public SComponent getTableCellRendererComponent(STable table,
                                                        Object value,
                                                        boolean selected,
                                                        int row,
                                                        int col) {
            if (value instanceof Throwable) {
                Throwable throwable = (Throwable)value;
                StringBuffer buffer = new StringBuffer(throwable.getMessage());
                buffer.append("\n");
                for (int i = 0; i < throwable.getStackTrace().length; i++) {
                    StackTraceElement traceElement = throwable.getStackTrace()[i];
                    buffer.append(traceElement.toString());
                    buffer.append("\n");
                }
                setText(buffer.toString());
            }
            else
                setText("" + value);

            return this;
        }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.