All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fcrepo.client.console.management.ManagementConsole Maven / Gradle / Ivy

There is a newer version: 3.8.1
Show newest version
/* The contents of this file are subject to the license and copyright terms
 * detailed in the license directory at the root of the source tree (also
 * available online at http://fedora-commons.org/license/).
 */

package org.fcrepo.client.console.management;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.xml.rpc.ServiceException;

import org.fcrepo.client.Administrator;
import org.fcrepo.client.console.Console;
import org.fcrepo.client.console.ConsoleCommand;
import org.fcrepo.client.console.ConsoleSendButtonListener;
import org.fcrepo.client.console.ServiceConsoleCommandFactory;
import org.fcrepo.client.mtom.APIMStubFactory;

/**
 * @author Chris Wilper
 * @version $Id$
 */
public class ManagementConsole
        extends JInternalFrame
        implements Console {

    private static final long serialVersionUID = 1L;

    private final Administrator m_mainFrame;

    private final JTextArea m_outputArea;

    private final JTextField m_hostTextField;

    private final JTextField m_portTextField;

    private final JTextField m_contextTextField;

    private boolean m_isBusy;

    public ManagementConsole(Administrator mainFrame) {
        super("Management Console", true, //resizable
              true, //closable
              true, //maximizable
              true);//iconifiable
        m_mainFrame = mainFrame;
        m_outputArea = new JTextArea();
        m_outputArea.setFont(new Font("Serif", Font.PLAIN, 16));
        m_outputArea.setEditable(false);

        JScrollPane outputScrollPane = new JScrollPane(m_outputArea);
        outputScrollPane
                .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        outputScrollPane.setPreferredSize(new Dimension(250, 250));
        outputScrollPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 0));

        JPanel controlPanel = new JPanel();
        controlPanel.setLayout(new BorderLayout());
        JPanel hostPortPanel = new JPanel();

        hostPortPanel.setLayout(new BorderLayout());
        JPanel hostPanel = new JPanel();
        hostPanel.setLayout(new BorderLayout());
        hostPanel.add(new JLabel("Host : "), BorderLayout.WEST);
        m_hostTextField = new JTextField(Administrator.getHost(), 13);
        hostPanel.add(m_hostTextField, BorderLayout.EAST);

        JPanel portPanel = new JPanel();
        portPanel.setLayout(new BorderLayout());
        portPanel.add(new JLabel("  Port : "), BorderLayout.WEST);
        m_portTextField =
                new JTextField(new Integer(Administrator.getPort()).toString(),
                               4);
        portPanel.add(m_portTextField, BorderLayout.EAST);

        JPanel contextPanel = new JPanel();
        contextPanel.setLayout(new BorderLayout());
        contextPanel.add(new JLabel("  Context : "), BorderLayout.WEST);
        m_contextTextField =
                new JTextField(Administrator.getAppServContext(), 10);
        contextPanel.add(m_contextTextField, BorderLayout.EAST);

        hostPortPanel.add(hostPanel, BorderLayout.WEST);
        hostPortPanel.add(contextPanel, BorderLayout.CENTER);
        hostPortPanel.add(portPanel, BorderLayout.EAST);

        JPanel commandPanel = new JPanel();
        commandPanel.setLayout(new BorderLayout());
        commandPanel.add(new JLabel("  Command : "), BorderLayout.WEST);
        ConsoleCommand[] commands = null;
        try {
            commands =
                    ServiceConsoleCommandFactory
                            .getConsoleCommands(Class.forName("org.fcrepo.server.management.FedoraAPIM"),
                                                null);
        } catch (ClassNotFoundException cnfe) {
            System.out
                    .println("Could not find server management interface, FedoraAPIM.");
            System.exit(0);
        }

        JComboBox commandComboBox = new JComboBox(commands);
        commandComboBox.setSelectedIndex(0);
        commandPanel.add(commandComboBox);
        JButton sendButton = new JButton(" Send.. ");
        sendButton
                .addActionListener(new ConsoleSendButtonListener(commandComboBox
                                                                         .getModel(),
                                                                 m_mainFrame,
                                                                 this));

        commandPanel.add(sendButton, BorderLayout.EAST);

        controlPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        controlPanel.add(hostPortPanel, BorderLayout.WEST);
        controlPanel.add(commandPanel);

        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(controlPanel, BorderLayout.NORTH);
        getContentPane().add(outputScrollPane);

        ImageIcon hostIcon =
                new ImageIcon(ClassLoader.getSystemResource("images/client/standard/development/Host16.gif"));
        setFrameIcon(hostIcon);

        pack();
        int w = getSize().width;
        int h = getSize().height;
        if (w > Administrator.getDesktop().getWidth() - 10) {
            w = Administrator.getDesktop().getWidth() - 10;
        }
        if (h > Administrator.getDesktop().getHeight() - 10) {
            h = Administrator.getDesktop().getHeight() - 10;
        }
        setSize(w, h);
        m_isBusy = false;
    }

    @Override
    public void setBusy(boolean b) {
        m_isBusy = b;
        if (b) {
            getContentPane().setCursor(new Cursor(Cursor.WAIT_CURSOR));
        } else {
            getContentPane().setCursor(null);
        }
    }

    @Override
    public boolean isBusy() {
        return m_isBusy;
    }

    @Override
    public Object getInvocationTarget(ConsoleCommand cmd)
            throws InvocationTargetException {
        try {
            return APIMStubFactory.getStub(Administrator.getProtocol(),
                                           m_hostTextField.getText(),
                                           Integer.parseInt(m_portTextField
                                                   .getText()),
                                           Administrator.getUser(),
                                           Administrator.getPass());
        } catch (NumberFormatException nfe) {
            throw new InvocationTargetException(nfe, "Badly formed port");
        } catch (MalformedURLException murle) {
            throw new InvocationTargetException(murle, "Badly formed URL");
        } catch (ServiceException se) {
            throw new InvocationTargetException(se);
        }
    }

    @Override
    public void print(String output) {
        m_outputArea.append(output);
    }

    @Override
    public void clear() {
        m_outputArea.setText("");
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy