Package org.vaadin.addons.lazyquerycontainer

Source Code of org.vaadin.addons.lazyquerycontainer.QueryItemStatusColumnGenerator

/**
* Copyright 2010 Tommi S.E. Laukkanen
*
* 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 org.vaadin.addons.lazyquerycontainer;

import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.Property.ValueChangeNotifier;
import com.vaadin.server.ClassResource;
import com.vaadin.server.Resource;
import com.vaadin.ui.Component;
import com.vaadin.ui.Image;
import com.vaadin.ui.Table;
import com.vaadin.ui.Table.ColumnGenerator;

import java.io.Serializable;

/**
* Helper class for Vaadin tables to generate status column.
*
* @author Tommi S.E. Laukkanen
*/
public final class QueryItemStatusColumnGenerator implements ColumnGenerator, ValueChangeListener, Serializable {
    /**
     * Serial version UID of this class.
     */
    private static final long serialVersionUID = 1L;
    /**
     * Icon resource for none state.
     */
    private Resource noneIconResource;
    /**
     * Icon resource for added state.
     */
    private Resource addedIconResource;
    /**
     * Icon resource for modified state.
     */
    private Resource modifiedIconResource;
    /**
     * Icon resource for removed state.
     */
    private Resource removedIconResource;
    /**
     * The status icon Vaadin component.
     */
    private Image statusIcon;

    /**
     * Construct which sets the application instance.
     */
    public QueryItemStatusColumnGenerator() {
    }

    /**
     * Generates cell component.
     *
     * @param source   The table this cell is generated for.
     * @param itemId   ID of the item this cell is presenting property of.
     * @param columnId ID of the column this cell is located at.
     * @return Component used to render this cell.
     */
    public Component generateCell(final Table source, final Object itemId, final Object columnId) {
        Property statusProperty = source.getItem(itemId).getItemProperty(columnId);

        noneIconResource = new ClassResource(QueryItemStatusColumnGenerator.class, "images/textfield.png");
        addedIconResource = new ClassResource(QueryItemStatusColumnGenerator.class, "images/textfield_add.png");
        modifiedIconResource = new ClassResource(QueryItemStatusColumnGenerator.class, "images/textfield_rename.png");
        removedIconResource = new ClassResource(QueryItemStatusColumnGenerator.class, "images/textfield_delete.png");

        statusIcon = new Image(null, noneIconResource);
        statusIcon.setHeight("16px");

        if (statusProperty instanceof ValueChangeNotifier) {
            ValueChangeNotifier notifier = (ValueChangeNotifier) statusProperty;
            notifier.addValueChangeListener(this);
        }

        refreshImage(statusProperty);

        return statusIcon;
    }

    /**
     * Event handler for ValueChangeEvent.
     *
     * @param event The event to be handled.
     */
    public void valueChange(final ValueChangeEvent event) {
        refreshImage(event.getProperty());
        statusIcon.markAsDirty();
    }

    /**
     * Refreshes the status Icon according to the property value.
     *
     * @param statusProperty The property according to which status is updated.
     */
    private void refreshImage(final Property statusProperty) {
        if (statusProperty.getValue() == null) {
            statusIcon.setSource(noneIconResource);
            return;
        }
        QueryItemStatus status = (QueryItemStatus) statusProperty.getValue();
        if (status == QueryItemStatus.None) {
            statusIcon.setSource(noneIconResource);
        }
        if (status == QueryItemStatus.Modified) {
            statusIcon.setSource(modifiedIconResource);
        }
        if (status == QueryItemStatus.Added) {
            statusIcon.setSource(addedIconResource);
        }
        if (status == QueryItemStatus.Removed) {
            statusIcon.setSource(removedIconResource);
        }
    }

}
TOP

Related Classes of org.vaadin.addons.lazyquerycontainer.QueryItemStatusColumnGenerator

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.