de.dfki.dmas.owls2wsdl.gui.ServiceDetailPanel.java Source code

Java tutorial

Introduction

Here is the source code for de.dfki.dmas.owls2wsdl.gui.ServiceDetailPanel.java

Source

/*
 * ServiceDetailPanel.java
 *
 * Created on 22. September 2006, 01:17
 *
 * Copyright (C) 2007
 * German Research Center for Artificial Intelligence (DFKI GmbH) Saarbruecken
 * Hochschule fuer Technik und Wirtschaft (HTW) des Saarlandes
 * Developed by Oliver Fourman, Ingo Zinnikus, Matthias Klusch
 *
 * The code is free for non-commercial use only.
 * You can redistribute it and/or modify it under the terms
 * of the Mozilla Public License version 1.1  as
 * published by the Mozilla Foundation at
 * http://www.mozilla.org/MPL/MPL-1.1.txt
 */

package de.dfki.dmas.owls2wsdl.gui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import java.util.Observable;
import java.util.Observer;

import javax.swing.DefaultListModel;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.factories.DefaultComponentFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

import de.dfki.dmas.owls2wsdl.core.AbstractDatatype;
import de.dfki.dmas.owls2wsdl.core.AbstractDatatypeKB;
import de.dfki.dmas.owls2wsdl.core.AbstractService;
import de.dfki.dmas.owls2wsdl.core.AbstractServiceParameter;
import de.dfki.dmas.owls2wsdl.gui.models.ServiceParameterTableColumnModel;

/**
 * 
 * @author Oliver Fourman
 */
public class ServiceDetailPanel extends JComponent implements ListSelectionListener, Observer {

    /**
     * 
     */
    private static final long serialVersionUID = 1381596961838234874L;
    private JTextField serviceFilenameField;
    private JTextField serviceVersionField;
    private JTextField serviceIdField;
    private JTextField serviceNameField;
    private JTextField serviceBaseNameField;

    private ServiceParameterTableModel serviceParameterModel;
    private JTable serviceParameterTable; // JTP

    private JTextPane serviceDescriptionField; // JTP

    private JList<String> serviceNamespaceList; // JTP
    private JList<String> serviceImportedFilesList; // JTP

    private int counter;

    /** Creates a new instance of ServiceDetailPanel */
    public ServiceDetailPanel() {
        counter = 0;
        initComponents();
        buildPanel();
        RuntimeModel.getInstance().addObserver(this);
    }

    public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
            int idx = serviceParameterTable.getSelectedRow();
            System.out.println("SELECTION: " + idx);
        }
    }

    /**
     * Creates, intializes and configures the UI components. Real applications
     * may further bind the components to underlying models.
     */
    private void initComponents() {
        // General infos

        serviceIdField = new JTextField(30);
        serviceNameField = new JTextField(30);
        serviceVersionField = new JTextField(5);
        serviceFilenameField = new JTextField(30);
        serviceBaseNameField = new JTextField(30);

        serviceIdField.setEditable(false);
        serviceNameField.setEditable(false);
        serviceVersionField.setEditable(false);
        serviceFilenameField.setEditable(false);
        serviceBaseNameField.setEditable(false);

        serviceParameterModel = new ServiceParameterTableModel();
        final ServiceParameterTableColumnModel columnModel = new ServiceParameterTableColumnModel();

        serviceParameterTable = new JTable(serviceParameterModel, columnModel);
        serviceParameterTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
        serviceParameterTable.setColumnSelectionAllowed(false);
        serviceParameterTable.setGridColor(Color.LIGHT_GRAY);
        serviceParameterTable.setPreferredScrollableViewportSize(new Dimension(600, 80));
        serviceParameterTable.updateUI();
        serviceParameterTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        serviceParameterTable.getSelectionModel().addListSelectionListener(this);

        serviceParameterTable.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    // Point p = e.getPoint();
                    // int row = serviceParameterTable.rowAtPoint(p);
                    // int column = serviceParameterTable.columnAtPoint(p); //
                    // This is the view column!
                    // System.out.println("DOUBLE CLICK: "+row+", "+column);
                    System.out.println("[TABLE POS   : " + ((JTable) e.getSource()).getSelectedRow());
                    AbstractServiceParameter param = serviceParameterModel
                            .getAbstractServiceParameter(((JTable) e.getSource()).getSelectedRow());
                    if (AbstractDatatypeKB.getInstance().getAbstractDatatypeKBData().containsKey(param.getUri())) {
                        System.out.println("[ServiceDetailPanel] CHANGE selected AbstractDatatype");
                        AbstractDatatype atype = AbstractDatatypeKB.getInstance().getAbstractDatatypeKBData()
                                .get(param.getUri());
                        RuntimeModel.getInstance().setSelectedDatatype(atype);
                        RuntimeModel.getInstance().setRuntimeAndNotify(RuntimeModel.PARAMETER_SELECTED);
                    } else {
                        JOptionPane.showMessageDialog(null, "No type information for parameter in KB.",
                                "Parameter Failure", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        });

        serviceDescriptionField = new JTextPane();
        // serviceDescriptionField.setBorder(BorderFactory.createLineBorder(Color.GRAY));

        serviceNamespaceList = new JList<String>(new DefaultListModel<String>());
        serviceNamespaceList.setVisibleRowCount(5);
        serviceNamespaceList.setEnabled(false);

        serviceImportedFilesList = new JList<String>(new DefaultListModel<String>());
        serviceImportedFilesList.setVisibleRowCount(5);
        serviceImportedFilesList.setEnabled(false);
    }

    // Building ****************************************************************

    /**
     * Builds the panel. Initializes and configures components first, then
     * creates a FormLayout, configures the layout, creates a builder, sets a
     * border, and finally adds the components.
     */
    public void buildPanel() {
        this.setBorder(Borders.DIALOG_BORDER);

        FormLayout layout = new FormLayout("right:pref, 10px, left:0:grow, 10px, right:pref, 10px, fill:pref:grow",
                "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 6dlu, p, 3dlu, p");

        this.setLayout(layout);
        CellConstraints cc = new CellConstraints();

        this.add(DefaultComponentFactory.getInstance()
                .createSeparator(ResourceManager.getString("service.sep.info")), cc.xyw(1, 1, 7));
        this.add(new JLabel("ID"), cc.xy(1, 3));
        this.add(serviceIdField, cc.xyw(3, 3, 5));
        this.add(new JLabel("Name"), cc.xy(1, 5));
        this.add(serviceNameField, cc.xy(3, 5));
        this.add(new JLabel("OWL-S Version"), cc.xy(5, 5));
        this.add(serviceVersionField, cc.xy(7, 5));
        this.add(new JLabel("Filename"), cc.xy(1, 7));
        this.add(serviceFilenameField, cc.xyw(3, 7, 5));
        this.add(new JLabel("Basename"), cc.xy(1, 9));
        this.add(serviceBaseNameField, cc.xyw(3, 9, 5));

        this.add(DefaultComponentFactory.getInstance()
                .createSeparator(ResourceManager.getString("service.sep.interface")), cc.xyw(1, 11, 7));

        JTabbedPane tabs = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT);
        tabs.add("Parameter", new JScrollPane(serviceParameterTable));
        tabs.add("Description", new JScrollPane(serviceDescriptionField));
        tabs.add("Namespace", new JScrollPane(serviceNamespaceList));
        tabs.add("Imports", new JScrollPane(serviceImportedFilesList));

        this.add(tabs, cc.xyw(1, 13, 7));
    }

    // private JPanel createNamespacePanel() {
    // PanelBuilder builder = new PanelBuilder(new
    // FormLayout("pref, 10px, pref:grow"));
    // CellConstraints cc = new CellConstraints();
    //
    // //builder.setDefaultDialogBorder();
    // for(int i=1; i<=3; i++) {
    // int pos=(2*i)-1;
    // String name = "NAME"+String.valueOf(i);
    // builder.appendRow("pref");
    // builder.add(new JTextField(name+"key", 5) , cc.xy( 1, pos));
    // builder.add(new JTextField(name+"val",25) , cc.xy( 3, pos));
    // builder.appendRow("2dlu");
    // }
    //
    // return builder.getPanel();
    // }

    // Updating ****************************************************************

    /**
     * Observer
     */
    public void update(Observable observable, Object object) {
        if (object != null) {
            String objString = object.toString();
            System.out.println("[u] update ServiceDetailPanel: " + objString);
        }

        System.out.println(
                "[u] update ServiceDetailPanel, Runtime: " + RuntimeModel.getInstance().getStatus("RUNTIME"));

        if (RuntimeModel.getInstance().getStatus("RUNTIME").equals(RuntimeModel.SERVICE_MODEL_CHANGED)
                || RuntimeModel.getInstance().getStatus("RUNTIME").equals(RuntimeModel.SINGLE_SERVICE_SELECTED)) {
            if (RuntimeModel.getInstance().getSelectedService() != null) {
                this.updateServiceDetailPanel();
            } else {
                this.serviceParameterModel.removeAllParameter();
                this.clearPanel();
            }
            this.serviceParameterModel.fireTableDataChanged();
            this.serviceParameterTable.revalidate();
            this.serviceParameterTable.updateUI();
        }
    }

    public void clearPanel() {
        Component[] sdpComponents = this.getComponents();
        for (int i = 0; i < sdpComponents.length; i++) {
            if (sdpComponents[i].getClass().getName().equals("javax.swing.JTextField")
                    || sdpComponents[i].getClass().getName().equals("javax.swing.JTextPane")) {
                ((JTextField) sdpComponents[i]).setText("");
                ((JTextField) sdpComponents[i]).setEnabled(false);
            }
        }

        // serviceFilenameField.setText("");
        // serviceVersionField.setText("");
        // serviceIdField.setText("");
        // serviceNameField.setText("");
        // serviceBaseNameField.setText("");

        ((ServiceParameterTableModel) serviceParameterTable.getModel()).removeAllParameter();
        serviceParameterTable.revalidate();
        serviceParameterTable.updateUI();

        serviceDescriptionField.setText("");
        serviceDescriptionField.setEnabled(false);

        ((DefaultListModel<String>) serviceNamespaceList.getModel()).removeAllElements();
        serviceNamespaceList.revalidate();

        ((DefaultListModel<String>) serviceImportedFilesList.getModel()).removeAllElements();
        serviceImportedFilesList.revalidate();

        this.updateUI();
    }

    public void updateServiceDetailPanel() {
        AbstractService aservice = RuntimeModel.getInstance().getSelectedService();

        Component[] sdpComponents = this.getComponents();
        for (int i = 0; i < sdpComponents.length; i++) {
            if (sdpComponents[i].getClass().getName().equals("javax.swing.JTextField")) {
                ((JTextField) sdpComponents[i]).setEnabled(true);
            }
        }

        this.serviceParameterModel.reinitParameter(aservice.getAllInputParameter(),
                aservice.getAllOutputParameter());

        serviceFilenameField.setText(aservice.getFilename());
        serviceVersionField.setText(aservice.getVersion());
        serviceIdField.setText(aservice.getID());
        serviceNameField.setText(aservice.getName());
        serviceBaseNameField.setText(aservice.getBase());

        serviceDescriptionField.setEnabled(true);
        serviceDescriptionField.setText(aservice.getDescription());

        final DefaultListModel<String> model_1 = new DefaultListModel<String>();
        final DefaultListModel<String> model_2 = new DefaultListModel<String>();

        for (Iterator<String> it = aservice.getNamespaceEntries().values().iterator(); it.hasNext();) {
            model_1.addElement(it.next().toString());
        }
        serviceNamespaceList.setModel(model_1);
        if (serviceNamespaceList.isShowing()) {
            serviceNamespaceList.revalidate();
        }

        for (Iterator<String> it = aservice.getImportedOWLFiles().iterator(); it.hasNext();) {
            model_2.addElement(it.next().toString());
        }
        serviceImportedFilesList.setModel(model_2);
        if (serviceImportedFilesList.isShowing()) {
            serviceImportedFilesList.revalidate();
        }

        // DYN SUBPANEL FR NS
        counter++;
        System.out.println("PANEL UPDATE " + counter);
    }
}