com.google.gwt.requestfactory.shared.EntityProxyChange.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.requestfactory.shared.EntityProxyChange.java

Source

/*
 * Copyright 2010 Google Inc.
 *
 * 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.google.gwt.requestfactory.shared;

import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;

/**
 * Abstract base class for an event announcing changes to an
 * {@link EntityProxy}.
 * <p>
 * Note that this event includes an unpopulated copy of the changed proxy
 * &mdash; all properties are undefined except it's id. That is, the event
 * includes only enough information for receivers to issue requests to get
 * themselves fresh copies of the proxy.
 * <p>
 * TODO: use ProxyId rather than an empty proxy
 *
 * <p><span style='color:red'>RequestFactory has moved to
 * <code>com.google.web.bindery.requestfactory</code>.  This package will be
 * removed in a future version of GWT.</span></p>
 *
 * @param <P> the type of the proxy
 */
@Deprecated
public class EntityProxyChange<P extends EntityProxy> extends GwtEvent<EntityProxyChange.Handler<P>> {

    /**
     * Implemented by methods that handle EntityProxyChange events.
     *
     * @param <P> the proxy type
     *
     * <p><span style='color:red'>RequestFactory has moved to
     * <code>com.google.web.bindery.requestfactory</code>.  This package will be
     * removed in a future version of GWT.</span></p>
     */
    @Deprecated
    public interface Handler<P extends EntityProxy> extends EventHandler {
        /**
         * Called when an {@link EntityProxyChange} event is fired.
         *
         * @param event an {@link EntityProxyChange} instance
         */
        void onProxyChange(EntityProxyChange<P> event);
    }

    private static final Type<EntityProxyChange.Handler<?>> TYPE = new Type<EntityProxyChange.Handler<?>>();

    /**
     * Register a handler for a EntityProxyChange events for a particular proxy
     * class.
     *
     * @param eventBus the {@link EventBus}
     * @param proxyType a Class instance of type P
     * @param handler an {@link EntityProxyChange.Handler} instance of type P
     * @return an {@link EntityProxy} instance
     */
    public static <P extends EntityProxy> HandlerRegistration registerForProxyType(EventBus eventBus,
            Class<P> proxyType, EntityProxyChange.Handler<P> handler) {
        return eventBus.addHandlerToSource(TYPE, proxyType, handler);
    }

    private P proxy;

    private WriteOperation writeOperation;

    /**
     * Constructs an EntityProxyChange object.
     *
     * @param proxy an {@link EntityProxy} instance of type P
     * @param writeOperation a {@link WriteOperation} instance
     */
    public EntityProxyChange(P proxy, WriteOperation writeOperation) {
        this.proxy = proxy;
        this.writeOperation = writeOperation;
    }

    /**
     * Returns the type associated with this instance.
     *
     * @return an instance of {@link GwtEvent.Type} of type Handler&lt;P&gt
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public GwtEvent.Type<Handler<P>> getAssociatedType() {
        /*
         * The instance knows its handler is of type P, but the TYPE field itself
         * does not, so we have to do an unsafe cast here.
         */

        return (Type) TYPE;
    }

    /**
     * Returns an unpopulated copy of the changed proxy &mdash; all properties are
     * undefined except its id.
     *
     * @return an instance of {@link EntityProxyId}&lt;P&gt;
     */
    @SuppressWarnings("unchecked")
    public EntityProxyId<P> getProxyId() {
        return (EntityProxyId<P>) proxy.stableId();
    }

    /**
     * Returns the {@link WriteOperation} associated with this instance.
     *
     * @return a {@link WriteOperation} instance
     */
    public WriteOperation getWriteOperation() {
        return writeOperation;
    }

    @Override
    protected void dispatch(Handler<P> handler) {
        handler.onProxyChange(this);
    }
}