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

Java tutorial

Introduction

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

Source

/*
 * ExportWSDLFrame.java
 *
 * Created on 1. Februar 2007, 17:45
 *
 * 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.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.debug.FormDebugPanel;
import com.jgoodies.forms.debug.FormDebugUtils;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.Sizes;
import com.jgoodies.looks.LookUtils;

import de.dfki.dmas.owls2wsdl.config.OWLS2WSDLSettings;
import de.dfki.dmas.owls2wsdl.core.AbstractDatatypeMapper;
import de.dfki.dmas.owls2wsdl.core.AbstractService;
import de.dfki.dmas.owls2wsdl.core.AbstractServiceCollection;
import de.dfki.dmas.owls2wsdl.core.AbstractServiceMapper;
import de.dfki.dmas.owls2wsdl.core.Project;
import de.dfki.dmas.owls2wsdl.core.WSDLOWLSExport;
import de.dfki.dmas.owls2wsdl.gui.models.ServiceListModel;

//import javax.swing.JComboBox;

/**
 * Exports service information as WSDL.
 * 
 * @author Oliver Fourman
 */
public class ExportWSDLFrame extends JDialog implements ActionListener {

    /**
     * 
     */
    private static final long serialVersionUID = -2563015816987398097L;

    private WSDLOWLSExport exportThread;

    private JPanel contentPane;
    private JPanel exportPanel;

    private JList<AbstractService> translatableServiceList;
    private JList<AbstractService> nonTranslatableServiceList;
    // private JCheckBox buildRelativePathCheckBox;
    private JCheckBox generateWSDLCheckBox;
    private JCheckBox generateOWLSCheckBox;

    private File exportDirectory;

    private JTextField urlField;
    private JTextArea exportLog;

    private String translatableCount;
    private String nontranslatableCount;
    private JLabel countInformation = new JLabel();

    private static final String SET_EXPORT_PATH = "set export directory";
    private static final String CHECK_STARTBUTTON = "enable startbutton";
    private static final String START_EXPORT = "exports services in translatable service list";
    private static final String DISPOSE_WINDOW = "cancel and dispose window";

    private JButton startExportButton;

    private static final Dimension PREFERRED_SIZE = LookUtils.IS_LOW_RESOLUTION ? new Dimension(500, 640)
            : new Dimension(500, 980);

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals(SET_EXPORT_PATH)) {
            try {
                doBrowse();
                checkStartExportButton();
            } catch (java.io.IOException ioExc) {
                System.err.println("IOException: " + ioExc.getMessage());
            } catch (java.lang.Exception exc) {
                System.err.println("Exception: " + exc.getMessage());
                exc.printStackTrace();
            }
        } else if (e.getActionCommand().equals(START_EXPORT)) {
            if (this.exportDirectory.exists()) {
                try {
                    doExport();
                } catch (java.io.FileNotFoundException fnfe) {
                    System.err.println("[e] FileNotFoundException: " + fnfe.getMessage());
                } catch (java.io.IOException ioe) {
                    System.err.println("[e] IOException: " + ioe.getMessage());
                }
            } else {
                JOptionPane.showMessageDialog(this,
                        "Export path " + this.exportDirectory.getAbsolutePath()
                                + " does not exists.\nNo WSDL files created.",
                        "Export WSDL Error", JOptionPane.ERROR_MESSAGE);
            }
        } else if (e.getActionCommand().equals(CHECK_STARTBUTTON)) {
            this.checkStartExportButton();
        } else if (e.getActionCommand().equals(DISPOSE_WINDOW)) {
            this.dispose();
        } else {
            System.out.println("???");
        }
    }

    /** Creates a new instance of ExportWSDLFrame */
    public ExportWSDLFrame() {
        System.out.println("[C] ExportWSDLFrame");

        urlField = new JTextField(10);
        urlField.setEditable(false);

        if (OWLS2WSDLSettings.getInstance().containsKey("EXPORT_PATH")) {
            this.exportDirectory = new File(OWLS2WSDLSettings.getInstance().getProperty("EXPORT_PATH"));
            this.urlField.setText(this.exportDirectory.getAbsolutePath()); // getCanonicalPath());
        }

        this.setTitle("OWLS2WSDL :: Export WSDL and OWL-S");
        this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        this.setPreferredSize(PREFERRED_SIZE);

        this.contentPane = new JPanel(new BorderLayout());
        this.setContentPane(this.contentPane);
        this.contentPane.setBorder(
                Borders.createEmptyBorder(Sizes.pixel(10), Sizes.pixel(10), Sizes.pixel(10), Sizes.pixel(10)));

        translatableServiceList = new JList<AbstractService>(new ServiceListModel());
        translatableServiceList.setVisibleRowCount(7);
        translatableServiceList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        nonTranslatableServiceList = new JList<AbstractService>(new ServiceListModel());
        nonTranslatableServiceList.setVisibleRowCount(7);
        nonTranslatableServiceList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        // buildRelativePathCheckBox = new JCheckBox("use relative paths");
        generateWSDLCheckBox = new JCheckBox("WSDL");
        generateWSDLCheckBox.setActionCommand(CHECK_STARTBUTTON);
        generateWSDLCheckBox.addActionListener(this);
        generateOWLSCheckBox = new JCheckBox("reconstruct OWL-S from internal metamodel");
        generateOWLSCheckBox.setActionCommand(CHECK_STARTBUTTON);
        generateOWLSCheckBox.addActionListener(this);

        translatableCount = "0";
        nontranslatableCount = "0";

        exportLog = new JTextArea("", 6, 20);

        exportPanel = buildExportSubPanel(false);
        JPanel commandPanel = buildCommandSubPanel();

        this.add(exportPanel, BorderLayout.CENTER);
        this.add(commandPanel, BorderLayout.SOUTH);
        this.pack();
        this.locateOnScreen(this);

        this.exportThread = new WSDLOWLSExport(this);
    }

    private JPanel buildExportSubPanel(boolean debugmode) {
        FormLayout layout = new FormLayout("left:10dlu, fill:pref:grow, 10px, fill:pref");

        DefaultFormBuilder builder = null;
        if (debugmode)
            builder = new DefaultFormBuilder(layout, new FormDebugPanel());
        else
            builder = new DefaultFormBuilder(layout);

        builder.setDefaultDialogBorder();
        builder.setLeadingColumnOffset(1);

        builder.appendSeparator("Translatable Services");
        JScrollPane scrollPane_1 = new JScrollPane(translatableServiceList);
        scrollPane_1.setPreferredSize(translatableServiceList.getPreferredScrollableViewportSize());
        builder.append(scrollPane_1, 3);

        builder.appendSeparator("Non-Translatable Services");
        JScrollPane scrollPane_2 = new JScrollPane(nonTranslatableServiceList);
        scrollPane_2.setPreferredSize(nonTranslatableServiceList.getPreferredScrollableViewportSize());
        builder.append(scrollPane_2, 3);

        builder.appendSeparator("Export Settings");
        JPanel checkPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        // checkPanel.setBackground(Color.blue);
        checkPanel.add(generateWSDLCheckBox);
        checkPanel.add(generateOWLSCheckBox);
        // checkPanel.add(buildRelativePathCheckBox);
        builder.append(checkPanel, 3);
        builder.nextLine();

        JButton browseButton = new JButton("Path...");
        browseButton.setActionCommand(SET_EXPORT_PATH);
        browseButton.addActionListener(this);

        builder.append(urlField, 1);
        builder.append(browseButton, 1);

        // builder.appendGlueColumn();

        builder.appendSeparator("Export Log");

        JScrollPane scrollPane_3 = new JScrollPane(exportLog);
        // scrollPane_3.setPreferredSize(exportLog.getPreferredScrollableViewportSize());
        builder.append(scrollPane_3, 3);

        layout.setRowSpec(17, new com.jgoodies.forms.layout.RowSpec("fill:pref:grow"));

        // builder.append("Export Status #: ", new JLabel("n"), true);

        if (debugmode)
            FormDebugUtils.dumpAll(builder.getPanel());

        return builder.getPanel();
    }

    private JPanel buildCommandSubPanel() {
        JPanel cmdPanel = new JPanel();

        startExportButton = new JButton("Start Export...");
        startExportButton.setActionCommand(START_EXPORT);
        startExportButton.addActionListener(this);
        startExportButton.setEnabled(false);

        JButton closeButton = new JButton("Close");
        closeButton.setActionCommand(DISPOSE_WINDOW);
        closeButton.addActionListener(this);

        cmdPanel.add(startExportButton);
        cmdPanel.add(closeButton);
        return cmdPanel;
    }

    public void update(Vector<AbstractService> selectedServicesList) {
        this.exportThread.setSelectedServices(selectedServicesList);

        this.translatableServiceList.removeAll();
        this.nonTranslatableServiceList.removeAll();

        for (Iterator<AbstractService> it = selectedServicesList.iterator(); it.hasNext();) {
            AbstractService aService = it.next();
            if (aService.istranslatable()) {
                ((ServiceListModel) this.translatableServiceList.getModel()).addAbstractService(aService);
            } else {
                ((ServiceListModel) this.nonTranslatableServiceList.getModel()).addAbstractService(aService);
            }
        }

        this.translatableServiceList.revalidate();
        this.translatableServiceList.updateUI();
        this.nonTranslatableServiceList.revalidate();
        this.nonTranslatableServiceList.updateUI();

        this.translatableCount = Integer
                .toString(((ServiceListModel) this.translatableServiceList.getModel()).getSize());
        this.nontranslatableCount = Integer
                .toString(((ServiceListModel) this.nonTranslatableServiceList.getModel()).getSize());

        this.countInformation.setText(
                "Translatable: " + this.translatableCount + " Non-Translatable: " + this.nontranslatableCount);

        // for(int i=0; i<exportPanel.getComponentCount(); i++) {
        // System.out.println("COMP: "+exportPanel.getComponent(i).toString());
        // }
    }

    private void checkStartExportButton() {
        System.out.println("Translatable services: " + this.translatableServiceList.getModel().getSize());
        if (this.translatableServiceList.getModel().getSize() > 0 && this.exportDirectory.isDirectory()
                && (this.generateWSDLCheckBox.isSelected() || this.generateOWLSCheckBox.isSelected())) {
            this.startExportButton.setEnabled(true);
        } else {
            this.startExportButton.setEnabled(false);
        }
    }

    public static void main(String[] args) {
        ExportWSDLFrame ef = new ExportWSDLFrame();
        ef.setVisible(true);
        ef.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        try {
            AbstractDatatypeMapper.getInstance()
                    .loadAbstractDatatypeKB(new File("d:\\tmp\\KB\\KB_Student-MAP.xml"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        File f = new File("d:\\tmp\\serviceCollection1.xml");
        AbstractServiceCollection collection = AbstractServiceMapper.getInstance().loadAbstractServiceCollection(f);

        ef.update(collection.getServiceCollection()); // dummy to load at least
        // OWLS2WSDL settings
    }

    /**
     * Locates the given component on the screen's center.
     */
    protected void locateOnScreen(Component component) {
        Dimension paneSize = component.getSize();
        Dimension screenSize = component.getToolkit().getScreenSize();
        component.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2);
    }

    private void doExport() throws java.io.IOException, java.io.FileNotFoundException {
        assert RuntimeModel.getInstance().getProject() != null;
        Project p = RuntimeModel.getInstance().getProject();
        this.exportThread.setProject(p);
        if (this.generateWSDLCheckBox.isSelected()) {
            this.exportThread.setWSDLExport(true);
        }
        if (this.generateOWLSCheckBox.isSelected()) {
            this.exportThread.setOWLSExport(true);
        }
        new Thread(this.exportThread).start();
    }

    public void appendLogMsg(String msg) {
        this.exportLog.append(msg);
        this.exportLog.revalidate();
        this.exportLog.updateUI();
    }

    private void doBrowse() throws java.io.IOException {
        JFileChooser fc = new JFileChooser();
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        fc.setMultiSelectionEnabled(false);
        fc.setFileFilter(new FileFilter() {
            public boolean accept(File f) {
                return f.isDirectory();
            }

            public String getDescription() {
                return "directory";
            }
        });

        if (OWLS2WSDLSettings.getInstance().containsKey("EXPORT_PATH")) {
            fc.setCurrentDirectory(new File(OWLS2WSDLSettings.getInstance().getProperty("EXPORT_PATH")));
        }

        // In response to a button click:
        int returnVal = fc.showOpenDialog(null);

        if (returnVal != JFileChooser.APPROVE_OPTION)
            return;

        File selectedDirectory = fc.getSelectedFile();

        if (!selectedDirectory.exists()) {
            JOptionPane.showMessageDialog(null, selectedDirectory.getAbsolutePath() + "does not exist!", "Error",
                    JOptionPane.ERROR_MESSAGE);
        } else {
            try {
                // this.urlField.setText(file.toURL().toExternalForm());
                this.urlField.setText(selectedDirectory.getCanonicalPath());
                System.out.println("EXPORT_PATH: " + selectedDirectory.getAbsolutePath());
                OWLS2WSDLSettings.getInstance().setProperty("EXPORT_PATH", selectedDirectory.getAbsolutePath());
                // OWLS2WSDLSettings.getInstance().savePropertyFile();
            } catch (MalformedURLException e) {
                JOptionPane.showMessageDialog(null,
                        "Not a valid file path " + this.exportDirectory.getAbsolutePath() + "\n" + e, "Error",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    }
}