pl.otros.logview.gui.actions.StartSocketListener.java Source code

Java tutorial

Introduction

Here is the source code for pl.otros.logview.gui.actions.StartSocketListener.java

Source

/*
 * Copyright 2012 Krzysztof Otrebski
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package pl.otros.logview.gui.actions;

import net.miginfocom.swing.MigLayout;
import org.apache.commons.configuration.BaseConfiguration;
import pl.otros.logview.BufferingLogDataCollectorProxy;
import pl.otros.logview.gui.*;
import pl.otros.logview.gui.table.TableColumns;
import pl.otros.logview.importer.LogImporter;
import pl.otros.logview.pluginable.AllPluginables;
import pl.otros.logview.reader.SocketLogReader;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.Collection;

public class StartSocketListener extends OtrosAction {

    private Collection<SocketLogReader> logReaders = null;
    private BufferingLogDataCollectorProxy logDataCollector;

    private LogViewPanelWrapper logViewPanelWrapper;

    public StartSocketListener(OtrosApplication otrosApplication, Collection<SocketLogReader> logReaders) {
        super(otrosApplication);
        this.logReaders = logReaders;
        putValue(Action.NAME, "Start socket listener");
        putValue(Action.SHORT_DESCRIPTION, "Start socket listener on port.");
        putValue(Action.LONG_DESCRIPTION, "Start socket listener on port.");
        putValue(SMALL_ICON, Icons.PLUGIN_PLUS);

    }

    @Override
    public void actionPerformed(ActionEvent arg0) {

        LogImporterAndPort chooseLogImporter = chooseLogImporter();
        if (chooseLogImporter == null) {
            return;
        }

        StatusObserver observer = getOtrosApplication().getStatusObserver();
        if (logViewPanelWrapper == null) {
            logViewPanelWrapper = new LogViewPanelWrapper("Socket", null, TableColumns.values(),
                    getOtrosApplication());

            logViewPanelWrapper.goToLiveMode();
            BaseConfiguration configuration = new BaseConfiguration();
            configuration.addProperty(ConfKeys.TAILING_PANEL_PLAY, true);
            configuration.addProperty(ConfKeys.TAILING_PANEL_FOLLOW, true);
            logDataCollector = new BufferingLogDataCollectorProxy(logViewPanelWrapper.getDataTableModel(), 4000,
                    configuration);
        }

        getOtrosApplication().addClosableTab("Socket listener", "Socket listener", Icons.PLUGIN_CONNECT,
                logViewPanelWrapper, true);

        SocketLogReader logReader = null;
        if (logReader == null || logReader.isClosed()) {
            logReader = new SocketLogReader(chooseLogImporter.logImporter, logDataCollector, observer,
                    chooseLogImporter.port);

            try {
                logReader.start();
                logReaders.add(logReader);
                observer.updateStatus(String.format("Socket opened on port %d with %s.", chooseLogImporter.port,
                        chooseLogImporter.logImporter));
            } catch (Exception e) {
                e.printStackTrace();
                observer.updateStatus("Failed to open listener " + e.getMessage(), StatusObserver.LEVEL_ERROR);
            }
        }
    }

    private LogImporterAndPort chooseLogImporter() {
        Collection<LogImporter> elements = AllPluginables.getInstance().getLogImportersContainer().getElements();
        LogImporter[] importers = elements.toArray(new LogImporter[0]);
        String[] names = new String[elements.size()];
        for (int i = 0; i < names.length; i++) {
            names[i] = importers[i].getName();
        }

        JComboBox box = new JComboBox(names);
        SpinnerNumberModel numberModel = new SpinnerNumberModel(50505, 1025, 65000, 1);
        JSpinner jSpinner = new JSpinner(numberModel);
        MigLayout migLayout = new MigLayout();
        JPanel panel = new JPanel(migLayout);
        panel.add(new JLabel("Select log importer"));
        panel.add(box, "wrap");
        panel.add(new JLabel("Select port"));
        panel.add(jSpinner, "span");

        if (logReaders.size() > 0) {
            panel.add(new JLabel("Opened sockets"), "wrap, growx");
            JTable jTable = new JTable(logReaders.size(), 2);
            jTable.getTableHeader().getColumnModel().getColumn(0).setHeaderValue("Log importer");
            jTable.getTableHeader().getColumnModel().getColumn(1).setHeaderValue("Port");
            int row = 0;
            for (SocketLogReader socketLogReader : logReaders) {
                jTable.setValueAt(socketLogReader.getLogImporter().getName(), row, 0);
                jTable.setValueAt(Integer.toString(socketLogReader.getPort()), row, 1);
                row++;
            }
            JScrollPane jScrollPane = new JScrollPane(jTable);
            panel.add(jScrollPane, "wrap, span");
        }
        int showConfirmDialog = JOptionPane.showConfirmDialog(null, panel, "Choose log importer and port",
                JOptionPane.OK_CANCEL_OPTION);
        if (showConfirmDialog != JOptionPane.OK_OPTION) {
            return null;
        }

        return new LogImporterAndPort(importers[box.getSelectedIndex()], numberModel.getNumber().intValue());
    }

    public static class LogImporterAndPort {

        private int port;
        private LogImporter logImporter;

        public LogImporterAndPort(LogImporter logImporter, int port) {
            this.logImporter = logImporter;
            this.port = port;
        }

        public int getPort() {
            return port;
        }

        public LogImporter getLogImporter() {
            return logImporter;
        }

    }

}