org.opennms.features.dashboard.client.portlet.BasicPortlet.java Source code

Java tutorial

Introduction

Here is the source code for org.opennms.features.dashboard.client.portlet.BasicPortlet.java

Source

/*******************************************************************************
 * This file is part of OpenNMS(R).
 *
 * Copyright (C) 2010-2011 The OpenNMS Group, Inc.
 * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
 *
 * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
 *
 * OpenNMS(R) is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published
 * by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 *
 * OpenNMS(R) is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OpenNMS(R).  If not, see:
 *      http://www.gnu.org/licenses/
 *
 * For more information contact:
 *     OpenNMS(R) Licensing <license@opennms.org>
 *     http://www.opennms.org/
 *     http://www.opennms.com/
 *******************************************************************************/

package org.opennms.features.dashboard.client.portlet;

import org.opennms.features.dashboard.client.dnd.ResizeDragController;

import com.allen_sauer.gwt.dnd.client.DragController;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.SimplePanel;

/**
 * author: Tharindu Munasinghe (tharindumunasinghe@gmail.com)
 * org.opennms.features.dashboard
 */
public abstract class BasicPortlet extends FocusPanel implements IBasicPortlet {
    //    protected WidgetResource imageResource = WidgetResource.WIDGETRESOURCE;

    // protected WidgetCssResource cssResource =
    // imageResource.widgetsCssResource();

    public static final int DIRECTION_EAST = 0x0001;

    public static final int DIRECTION_NORTH = 0x0002;

    public static final int DIRECTION_SOUTH = 0x0004;

    public static final int DIRECTION_WEST = 0x0008;

    public static final DirectionConstant EAST = new DirectionConstant(DIRECTION_EAST, "e");

    public static final DirectionConstant NORTH = new DirectionConstant(DIRECTION_NORTH, "n");

    public static final DirectionConstant NORTH_EAST = new DirectionConstant(DIRECTION_NORTH | DIRECTION_EAST,
            "ne");

    public static final DirectionConstant NORTH_WEST = new DirectionConstant(DIRECTION_NORTH | DIRECTION_WEST,
            "nw");

    public static final DirectionConstant SOUTH = new DirectionConstant(DIRECTION_SOUTH, "s");

    public static final DirectionConstant SOUTH_EAST = new DirectionConstant(DIRECTION_SOUTH | DIRECTION_EAST,
            "se");

    public static final DirectionConstant SOUTH_WEST = new DirectionConstant(DIRECTION_SOUTH | DIRECTION_WEST,
            "sw");

    public static final DirectionConstant WEST = new DirectionConstant(DIRECTION_WEST, "w");

    private static final int BORDER_THICKNESS = 2;

    protected static final int TITLE_HEIGHT = 22;

    protected static final int BUTTON_PANEL_HEIGHT = 23;

    private static BasicPortlet focusedPortlet;

    /**
     * Main layout panel of the portlet
     */
    private Grid mainPanel;

    /**
     * Panel which contains the title & the body panel
     */

    private Widget eastWidget;

    private boolean initialLoad = false;

    private Widget southWidget;

    private Panel cornerWidget;

    private Grid containerPanel;

    protected FocusPanel titlePanel;

    protected SimplePanel contentpanel;

    protected ClickHandler closeHandler;

    private DragController moveDragController;

    private ResizeDragController resizeDragController;

    private int contentHeight;

    private int contentWidth;

    public BasicPortlet() {
        mainPanel = new Grid(3, 3);
        mainPanel.getCellFormatter().setWidth(0, 0, BORDER_THICKNESS + "px");
        mainPanel.getCellFormatter().setHeight(0, 0, BORDER_THICKNESS + "px");
        mainPanel.getCellFormatter().setWidth(2, 2, BORDER_THICKNESS + "px");
        mainPanel.getCellFormatter().setHeight(2, 2, BORDER_THICKNESS + "px");
        mainPanel.setCellSpacing(0);
        mainPanel.setCellPadding(0);
        this.add(mainPanel);

        this.addStyleName("popup-WindowPanel");
        mainPanel.addStyleName("borderPanel");

        DOM.setStyleAttribute(this.getElement(), "zIndex", "20000");
        DOM.setStyleAttribute(this.getElement(), "borderColor", "#C3D9FF");
        DOM.setStyleAttribute(this.getElement(), "border", "none");
        DOM.setStyleAttribute(this.getElement(), "background", "none");
        DOM.setStyleAttribute(this.getElement(), "padding", "0px");
        DOM.setStyleAttribute(this.getElement(), "outline", "0 none");

        containerPanel = new Grid(2, 1);
        containerPanel.setSize("100%", "100%");
        containerPanel.setCellSpacing(0);
        containerPanel.setCellPadding(0);
        mainPanel.setWidget(1, 1, containerPanel);

        titlePanel = new FocusPanel();
        containerPanel.setWidget(0, 0, titlePanel);
        CellFormatter cellFormatter = containerPanel.getCellFormatter();
        cellFormatter.setHeight(0, 0, TITLE_HEIGHT + "px");
        titlePanel.setStyleName("popup-WindowPanel-title");
        //        titlePanel.setSize("100%", TITLE_HEIGHT + "px");
        titlePanel.setWidth("100%");

        contentpanel = new SimplePanel();
        contentpanel.setSize("100%", "100%");
        containerPanel.setWidget(1, 0, contentpanel);

        setupCell(0, 0, NORTH_WEST);
        setupCell(0, 1, NORTH);
        setupCell(0, 2, NORTH_EAST);

        setupCell(1, 0, WEST);
        eastWidget = setupCell(1, 2, EAST);
        eastWidget.setSize(BORDER_THICKNESS + "px", "100%");

        setupCell(2, 0, SOUTH_WEST);
        southWidget = setupCell(2, 1, SOUTH);
        southWidget.setSize("100%", BORDER_THICKNESS + "px");

        cornerWidget = setupCell(2, 2, SOUTH_EAST);
        DOM.setStyleAttribute(cornerWidget.getElement(), "position", "absolute");

        Image corner = new Image(GWT.getHostPageBaseURL() + "images/resize_corner.png");
        cornerWidget.add(corner);
        DOM.setStyleAttribute(corner.getElement(), "position", "absolute");
        DOM.setStyleAttribute(corner.getElement(), "right", "2px");
        DOM.setStyleAttribute(corner.getElement(), "bottom", "4px");

        closeHandler = new ClickHandler() {

            public void onClick(ClickEvent arg0) {
                try {
                    BasicPortlet.this.setVisible(false);
                    BasicPortlet.this.removeFromParent();
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
        };

        titlePanel.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent arg0) {
                selectItem();
            }
        });
    }

    private Panel setupCell(int row, int col, DirectionConstant direction) {
        final FocusPanel widget = new FocusPanel();
        widget.setPixelSize(BORDER_THICKNESS, BORDER_THICKNESS);
        mainPanel.setWidget(row, col, widget);
        return widget;
    }

    @Override
    public void makeResizable(ResizeDragController resizeDragController) {
        if (this.resizeDragController == null) {
            this.resizeDragController = resizeDragController;
        }
        makeNotResizable();
        addResizeHandle(eastWidget, EAST);
        addResizeHandle(southWidget, SOUTH);
        addResizeHandle(cornerWidget, SOUTH_EAST);
    }

    @Override
    public void makeDraggable(DragController moveDragController) {
        if (this.moveDragController == null) {
            this.moveDragController = moveDragController;
        }
        makeNotDraggable();
        moveDragController.makeDraggable(this, titlePanel);
    }

    @Override
    public void makeNotResizable() {
        removeResizeHandle(eastWidget, EAST);
        removeResizeHandle(southWidget, SOUTH);
        removeResizeHandle(cornerWidget, SOUTH_EAST);
    }

    private void addResizeHandle(Widget w, DirectionConstant direction) {
        resizeDragController.makeDraggable(w, direction);
        w.addStyleName("Resize-" + direction.directionLetters);
    }

    private void removeResizeHandle(Widget w, DirectionConstant direction) {
        if (resizeDragController != null) {
            try {
                resizeDragController.makeNotDraggable(w);
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        w.removeStyleName("Resize-" + direction.directionLetters);
    }

    @Override
    public void makeNotDraggable() {
        if (moveDragController != null) {
            try {
                moveDragController.makeNotDraggable(this);
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    }

    @Override
    protected void onLoad() {
        super.onLoad();
        if (!initialLoad && mainPanel.getOffsetHeight() != 0) {
            initialLoad = true;
            setContentSize(mainPanel.getOffsetWidth(), mainPanel.getOffsetHeight());
        }
    }

    @Override
    public void setContentSize(int width, int height) {
        if (width != contentWidth) {
            contentWidth = width;
        }
        if (height != contentHeight) {
            contentHeight = height;
        }
        mainPanel.setPixelSize(contentWidth, contentHeight);
    }

    public void selectItem() {
        if (focusedPortlet != this) {
            if (focusedPortlet != null) {
                focusedPortlet.removeStyleName("demo-gridview-widget-focus");
                focusedPortlet.setStyleName("demo-gridview-widget");
            }
            focusedPortlet = this;
            focusedPortlet.removeStyleName("demo-gridview-widget");
            focusedPortlet.setStyleName("demo-gridview-widget-focus");
        }
    }

    @Override
    public void setHeight(String height) {
        mainPanel.setHeight(height);
    }

    @Override
    public void setWidth(String width) {
        mainPanel.setWidth(width);
    }

    @Override
    public void setPixelSize(int width, int height) {
        mainPanel.setPixelSize(width, height);
    }

    @Override
    public void setSize(String width, String height) {
        mainPanel.setSize(width, height);
    }

    @Override
    public void clearPortletContent() {
        contentpanel.clear();
    }

    @Override
    public void addPortletContent(Widget w) {
        contentpanel.add(w);
    }

    @Override
    public Widget asWidget() {
        return this;
    }

    @Override
    public void removeFromParent() {
        super.removeFromParent();
    }

    @Override
    public int getContentHeight() {
        return contentHeight;
    }

    @Override
    public int getContentWidth() {
        return contentWidth;
    }

    @Override
    public void selectPortlet() {
    }
}