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

org.bidib.wizard.mvc.console.view.ConsoleView Maven / Gradle / Ivy

There is a newer version: 2.0.0-M1
Show newest version
package org.bidib.wizard.mvc.console.view;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;

import org.bidib.wizard.common.locale.Resources;
import org.bidib.wizard.mvc.common.view.DockKeys;
import org.bidib.wizard.mvc.common.view.panel.ColorPane;
import org.bidib.wizard.mvc.console.model.ConsoleModel;
import org.bidib.wizard.mvc.console.model.ConsoleModel.ConsoleLine;
import org.bidib.wizard.mvc.main.view.menu.BasicPopupMenu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.vlsolutions.swing.docking.DockKey;
import com.vlsolutions.swing.docking.Dockable;

public class ConsoleView implements Dockable {

    private static final Logger LOGGER = LoggerFactory.getLogger(ConsoleView.class);

    private final JPanel contentPanel;

    private final ColorPane coloredTextPane = new ColorPane();

    private final ConsoleModel consoleModel;

    private final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");

    public ConsoleView() {
        DockKeys.DOCKKEY_CONSOLE_VIEW.setName(Resources.getString(getClass(), "title"));
        DockKeys.DOCKKEY_CONSOLE_VIEW.setFloatEnabled(true);
        DockKeys.DOCKKEY_CONSOLE_VIEW.setAutoHideEnabled(false);

        LOGGER.info("Create new ConsoleView");
        contentPanel = new JPanel();
        contentPanel.setLayout(new BorderLayout());

        coloredTextPane.setEditable(false);

        JScrollPane scrollPane = new JScrollPane(coloredTextPane);
        contentPanel.add(scrollPane);

        consoleModel = ConsoleModel.getConsoleModel();

        consoleModel.addPropertyChangeListener(ConsoleModel.PROPERTY_CONSOLE_CONTENT, new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                LOGGER.info("Property was changed: {}", evt);
                if (evt instanceof IndexedPropertyChangeEvent) {
                    IndexedPropertyChangeEvent ipce = (IndexedPropertyChangeEvent) evt;

                    ConsoleLine newLine = (ConsoleLine) ipce.getNewValue();

                    if (newLine != null) {
                        String now = dateFormat.format(new Date());
                        coloredTextPane.append(newLine.getColor(), now + " - " + newLine.getMessage() + "\n");
                    }
                }
            }
        });

        consoleModel
            .addPropertyChangeListener(ConsoleModel.PROPERTY_CONSOLE_CONTENT_SIZE, new PropertyChangeListener() {
                @Override
                public void propertyChange(PropertyChangeEvent evt) {
                    LOGGER.info("Property was changed: {}", evt);

                    if (evt.getNewValue() != null) {
                        Integer value = (Integer) evt.getNewValue();
                        if (value == 0) {
                            // clear the console
                            coloredTextPane.clear();
                        }
                    }
                }
            });

        JPopupMenu popupMenu = new BasicPopupMenu();
        JMenuItem clearConsole = new JMenuItem(Resources.getString(getClass(), "clear_console"));
        clearConsole.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                fireClearConsole();
            }
        });
        popupMenu.add(clearConsole);
        coloredTextPane.setComponentPopupMenu(popupMenu);
    }

    @Override
    public Component getComponent() {
        return contentPanel;
    }

    @Override
    public DockKey getDockKey() {
        return DockKeys.DOCKKEY_CONSOLE_VIEW;
    }

    public void close() {
    }

    private void fireClearConsole() {
        LOGGER.info("clear the console.");

        consoleModel.clear();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy