Package com.dci.intellij.dbn.common.ui

Source Code of com.dci.intellij.dbn.common.ui.AutoCommitLabel$Colors

package com.dci.intellij.dbn.common.ui;

import com.dci.intellij.dbn.common.event.EventManager;
import com.dci.intellij.dbn.common.thread.ConditionalLaterInvocator;
import com.dci.intellij.dbn.connection.ConnectionHandler;
import com.dci.intellij.dbn.connection.ConnectionStatusListener;
import com.dci.intellij.dbn.connection.VirtualConnectionHandler;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;

import javax.swing.JLabel;
import java.awt.Color;

public class AutoCommitLabel extends JLabel implements ConnectionStatusListener, Disposable {
    private interface Colors {
        DBNColor DISCONNECTED = new DBNColor(new Color(0x454545), new Color(0x808080));
        DBNColor AUTO_COMMIT_ON = new DBNColor(new Color(0xFF0000), new Color(0xBC3F3C));
        DBNColor AUTO_COMMIT_OFF = new DBNColor(new Color(0x009600), new Color(0x629755));
    }
    private Project project;
    private ConnectionHandler connectionHandler;
    private boolean subscribed = false;

    public AutoCommitLabel() {
        super("");
        setFont(GUIUtil.BOLD_FONT);
    }

    public void setConnectionHandler(ConnectionHandler connectionHandler) {
        if (connectionHandler == null || connectionHandler instanceof VirtualConnectionHandler) {
            this.connectionHandler = null;
        } else {
            this.connectionHandler = connectionHandler;
            if (!subscribed) {
                subscribed = true;
                project = connectionHandler.getProject();
                EventManager.subscribe(project, ConnectionStatusListener.TOPIC, this);
            }
        }
        update();
    }

    private void update() {
        new ConditionalLaterInvocator() {
            @Override
            public void execute() {
                if (connectionHandler != null) {
                    setVisible(true);
                    boolean disconnected = !connectionHandler.isConnected();
                    boolean autoCommit = connectionHandler.isAutoCommit();
                    setText(disconnected ? "Not connected to database" : autoCommit ? "Auto-Commit ON" : "Auto-Commit OFF");
                    setForeground(disconnected ?
                            Colors.DISCONNECTED : autoCommit ?
                            Colors.AUTO_COMMIT_ON :
                            Colors.AUTO_COMMIT_OFF);
                    setToolTipText(
                            disconnected ? "The connection to database has been closed. No editing possible" :
                                    autoCommit ?
                                            "Auto-Commit is enabled for connection \"" + connectionHandler + "\". Data changes will be automatically committed to the database." :
                                            "Auto-Commit is disabled for connection \"" + connectionHandler + "\". Data changes will need to be manually committed to the database.");
                } else {
                    setVisible(false);
                }
            }
        }.start();
    }

    @Override
    public void statusChanged(String connectionId) {
        if (connectionHandler != null && connectionHandler.getId().equals(connectionId)) {
            update();
        }
    }

    @Override
    public void dispose() {
        EventManager.unsubscribe(this);
    }


}
TOP

Related Classes of com.dci.intellij.dbn.common.ui.AutoCommitLabel$Colors

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.