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

com.alibaba.druid.support.jconsole.DruidPanel Maven / Gradle / Ivy

There is a newer version: 1.2.23
Show newest version
/*
 * Copyright 1999-2011 Alibaba Group Holding Ltd.
 *
 * 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 com.alibaba.druid.support.jconsole;

import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;

import javax.management.MBeanServerConnection;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;

import com.alibaba.druid.support.jconsole.model.DruidTableModel;
import com.alibaba.druid.support.jconsole.util.TableDataProcessor;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.sun.tools.jconsole.JConsoleContext;

/**
 * druid面板的抽象类 在类在实现的时候,通过url地址获取数据,解析此数据,然后显示在界面中
 * 
 * @author yunnysunny
 */
public abstract class DruidPanel extends JPanel {

    private static final long   serialVersionUID    = 1L;

    /** 默认面板刷新的间隔时间 */
    protected static final long DEFAULT_ACTIVE_TIME = 5 * 60 * 1000;
    /** 版权信息字符串 */
    private static final String COPYRIGHT_STRING    = "powered by yunnysunny";

    /** 滚动条面板 */
    protected JScrollPane       scrollPane;
    /** 表格模板 */
    protected DruidTableModel   tableModel;
    /** 表格 */
    protected JTable            table;
    /** 版权面板 */
    protected JPanel            copyrightPanel;
    /** json请求的地址 */
    protected String            url;

    /** 界面刷新的间隔时间,单位为毫秒. */
    protected long              activeTime;
    /** 上次刷新的时间 */
    protected long              lastRefreshTime;
    /** 与界面管理的MBeanServerConnection对象 */
    protected MBeanServerConnection conn;
    private final static Log    LOG                 = LogFactory.getLog(DruidPanel.class);

    /**
     * 根据传入的刷新时间间隔来初始化.
     * 
     * @param activeTime 刷新时间间隔
     */
    protected DruidPanel(long activeTime){
        this.activeTime = activeTime;
    }

    /**
     * 初始化刷新时间间隔为默认值
     */
    protected DruidPanel(){
        activeTime = DEFAULT_ACTIVE_TIME;
    }

    

    /**
     * 调用完service之后,各个子类对于解析后的数据的具体处理
     * 
     * @param data 解析后的数据
     */
    protected abstract void tableDataProcess(ArrayList> data);

    /**
     * 如果是第一次调用,则生成表格对象;否则根据当前时间来和上次刷新时间的间隔,
     * 是否大于对象初始化时设定的时间间隔来判断是否刷新表格数据。
     * 
     * @param url service的地址
     * @param conn MBeanServerConnection对象
     * @throws Exception
     */
    protected void addOrRefreshTable(String url) throws Exception {
        if (url != null) {
            boolean needRefresh = false;
            long timeNow = new Date().getTime();
            if (scrollPane == null) {
                table = new JTable();

                scrollPane = new JScrollPane();
                scrollPane.setAutoscrolls(true);
                scrollPane.setBorder((TitledBorder) BorderFactory.createTitledBorder("数据区"));

                setLayout(null);
                scrollPane.setBounds(10, 10, getWidth() - 20, getHeight() - 80);

                this.add(scrollPane);

                copyrightPanel = new JPanel();
                copyrightPanel.setBorder((TitledBorder) BorderFactory.createTitledBorder("版权区"));
                JLabel authorInfo = new JLabel(COPYRIGHT_STRING);
                copyrightPanel.add(authorInfo);

                this.add(copyrightPanel);
                copyrightPanel.setBounds(10, getHeight() - 60, getWidth() - 20, 60);

                needRefresh = true;
                lastRefreshTime = timeNow;
                this.addComponentListener(new ComponentListener() {

                    @Override
                    public void componentShown(ComponentEvent arg0) {

                    }

                    @Override
                    public void componentResized(ComponentEvent arg0) {
                        scrollPane.setBounds(10, 10, getWidth() - 20, getHeight() - 80);
                        copyrightPanel.setBounds(10, getHeight() - 60, getWidth() - 20, 60);
                    }

                    @Override
                    public void componentMoved(ComponentEvent arg0) {

                    }

                    @Override
                    public void componentHidden(ComponentEvent arg0) {

                    }
                });
            } else {
                if (lastRefreshTime + activeTime < timeNow) {
                    needRefresh = true;
                    lastRefreshTime = timeNow;
                }
            }
            if (needRefresh) {
                LOG.debug("refresh" + timeNow);
                ArrayList> data = TableDataProcessor.parseData(TableDataProcessor.getData(url,
                                                                                                                        conn));
                if (data != null) {
                    tableDataProcess(data);
                }
            }

        } else {
            // url不存在
            LOG.warn("url不存在");
        }
    }

    protected Object doInBackground(JConsoleContext context) throws Exception {
        doInBackground(context.getMBeanServerConnection());

        return null;
    }

    protected void doInBackground(MBeanServerConnection conn) {
        if (conn == null) {
            LOG.warn("MBeanServerConnection is null");
            return;
        }
        try {
            this.conn = conn;
            addOrRefreshTable(url);
        } catch (Exception e) {
            LOG.warn("", e);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy