org.semanticsoft.vaadinaddons.boundsinfo.client.ui.VBoundsinfoVerticalLayout.java Source code

Java tutorial

Introduction

Here is the source code for org.semanticsoft.vaadinaddons.boundsinfo.client.ui.VBoundsinfoVerticalLayout.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Rushan R. Gilmullin and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Rushan R. Gilmullin - initial API and implementation
 *******************************************************************************/

package org.semanticsoft.vaadinaddons.boundsinfo.client.ui;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.Paintable;
import com.vaadin.client.RenderSpace;
import com.vaadin.client.UIDL;
import com.vaadin.client.ValueMap;
import com.vaadin.client.ui.VVerticalLayout;

/**
 * Client side widget which communicates with the server. Messages from the
 * server are shown as HTML and mouse clicks are sent to the server.
 */
public class VBoundsinfoVerticalLayout extends VVerticalLayout implements Paintable {

    /** Set the CSS class name to allow styling. */
    public static final String CLASSNAME = "v-boundsinfoverticallayout";

    public static final String CLICK_EVENT_IDENTIFIER = "click";

    public static final String VARIABLES = "_variables_";
    public static final String ENABLE_BOUNDS_UPDATE = "enable_bounds_update";

    /** The client side widget identifier */
    protected String paintableId;

    private BoundsUpdateManager updateManager;

    private Map<String, String> variables = new HashMap<String, String>();
    private Boolean enableBoundsUpdate = false;

    /** Reference to the server connection object. */
    // protected ApplicationConnection client;

    /**
     * The constructor should first call super() to initialize the component and
     * then handle any initialization relevant to Vaadin.
     */
    public VBoundsinfoVerticalLayout() {
        // This method call of the Paintable interface sets the component
        // style name in DOM tree
        // setStyleName(CLASSNAME);
    }

    /**
     * Called whenever an update is received from the server
     */
    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
        super.updateFromUIDL(uidl, client);

        // This call should be made first.
        // It handles sizes, captions, tooltips, etc. automatically.
        if (client.updateComponent(this, uidl, true)) {
            // If client.updateComponent returns true there has been no changes
            // and we
            // do not need to update anything.
            return;
        }

        // Save reference to server connection object to be able to send
        // user interaction later
        this.client = client;

        // Save the client side identifier (paintable id) for the widget
        paintableId = uidl.getId();

        if (uidl.hasAttribute(VARIABLES)) {
            ValueMap vmap = uidl.getMapAttribute(VARIABLES);
            Set<String> indexes = vmap.getKeySet();
            for (String index : indexes) {
                variables.put(index, vmap.getString(index));
            }
        }

        this.enableBoundsUpdate = uidl.getBooleanAttribute(ENABLE_BOUNDS_UPDATE);
        if (this.enableBoundsUpdate)
            updateManager = new BoundsUpdateManager(this, paintableId, client);
    }

    @Override
    public RenderSpace getAllocatedSpace(Widget child) {
        if (updateManager != null)
            updateManager.update();
        return super.getAllocatedSpace(child);
    }

    public String getVariableValue(String varName) {
        return this.variables.get(varName);
    }

    public void setVariableValue(String varName, String varValue) {
        this.variables.put(varName, varValue);
    }
}