| /* |
| * 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.web.bindery.requestfactory.shared; |
| |
| /** |
| * The base interface for RequestFactory service endpoints. Implementations of |
| * this interface are provided by the RequestFactory plumbing and this interface |
| * may be extended in the future. |
| * |
| * @see com.google.web.bindery.requestfactory.shared.testing.FakeRequestContext |
| */ |
| public interface RequestContext { |
| /** |
| * Joins another RequestContext to this RequestContext. |
| * |
| * <pre> |
| * SomeContext ctx = myFactory.someContext(); |
| * // Perform operations on ctx |
| * OtherContext other = ctx.append(myFactory.otherContext()); |
| * // Perform operations on both other and ctx |
| * ctx.fire() // or other.fire() are equivalent |
| * </pre> |
| * |
| * @param other a freshly-constructed RequestContext whose state should be |
| * bound to this RequestContext |
| * @return {@code other} |
| * @throws IllegalStateException if any methods have been called on |
| * {@code other} or if {@code other} was constructed by a different |
| * RequestFactory instance |
| */ |
| <T extends RequestContext> T append(T other); |
| |
| /** |
| * Returns a new mutable proxy that this request can carry to the server, |
| * perhaps to be persisted. If the object is successfully persisted, a PERSIST |
| * event will be posted including the EntityProxyId of this proxy. |
| * |
| * @param clazz a Class object of type T |
| * @return an {@link BaseProxy} instance of type T |
| */ |
| <T extends BaseProxy> T create(Class<T> clazz); |
| |
| /** |
| * Returns a mutable version of the proxy, whose mutations will accumulate in |
| * this context. Proxies reached via getters on this mutable proxy will also |
| * be mutable. |
| * |
| * @param object an instance of type T |
| * @return an {@link EntityProxy} or {@link ValueProxy} instance of type T |
| */ |
| <T extends BaseProxy> T edit(T object); |
| |
| /** |
| * Return a request to find a fresh instance of the referenced proxy. |
| * |
| * @param proxyId an {@link EntityProxyId} instance of type P |
| * @return a {@link Request} object |
| */ |
| <P extends EntityProxy> Request<P> find(EntityProxyId<P> proxyId); |
| |
| /** |
| * Send the accumulated changes and method invocations associated with the |
| * RequestContext. |
| * <p> |
| * If {@link Request#to(Receiver)} has not been called, this method will |
| * install a default receiver that will throw a RuntimeException if there is a |
| * server failure. |
| */ |
| void fire(); |
| |
| /** |
| * For receiving errors or validation failures only. |
| * |
| * @param receiver a {@link Receiver} instance |
| * @throws IllegalArgumentException if <code>receiver</code> is |
| * <code>null</code> |
| */ |
| void fire(Receiver<Void> receiver); |
| |
| /** |
| * Returns the {@link RequestFactory} that created the RequestContext. |
| */ |
| RequestFactory getRequestFactory(); |
| |
| /** |
| * Returns true if any changes have been made to proxies mutable under this |
| * context. Note that vacuous changes — e.g. foo.setName(foo.getName() |
| * — will not trip the changed flag. Similarly, "unmaking" a change will |
| * clear the isChanged flag |
| * |
| * <pre> |
| * String name = bar.getName(); |
| * bar.setName("something else"); |
| * assertTrue(context.isChanged()); |
| * bar.setName(name); |
| * assertFalse(context.isChanged()); |
| * </pre> |
| * |
| * @return {@code true} if any changes have been made |
| */ |
| boolean isChanged(); |
| } |