/*
@VaadinApache2LicenseForJavaFiles@
 */
package com.vaadin.terminal.gwt.client;

import java.util.Collection;

import com.vaadin.terminal.gwt.client.communication.ClientRpc;
import com.vaadin.terminal.gwt.client.communication.SharedState;

/**
 * Interface implemented by all client side classes that can be communicate with
 * the server. Classes implementing this interface are initialized by the
 * framework when needed and have the ability to communicate with the server.
 * 
 * @author Vaadin Ltd
 * @version @VERSION@
 * @since 7.0.0
 */
public interface Connector {
    /**
     * TODO
     * 
     * @param uidl
     * @param client
     */
    public void updateFromUIDL(UIDL uidl, ApplicationConnection client);

    /**
     * Gets the current shared state of the connector.
     * 
     * @return state
     */
    public SharedState getState();

    /**
     * Sets a new state for the connector.
     * 
     * @param state
     *            The new state
     * 
     */
    public void setState(SharedState state);

    /**
     * Returns the id for this connector. This must always be what has been set
     * in {@link #doInit(String, ApplicationConnection)} and must never change.
     * 
     * @return The id for the connector.
     */
    public String getId();

    /**
     * Gets ApplicationConnection instance that created this connector.
     * 
     * @return The ApplicationConnection as set by
     *         {@link #doInit(String, ApplicationConnection)}
     */
    public ApplicationConnection getConnection();

    /**
     * Tests whether the component is enabled or not. A user can not interact
     * with disabled components. Disabled components are rendered in a style
     * that indicates the status, usually in gray color. Children of a disabled
     * component are also disabled.
     * 
     * @return true if the component is enabled, false otherwise
     */
    // public boolean isEnabled();

    /**
     * 
     * Called once by the framework to initialize the connector.
     * 
     * Note that the shared state is not yet available at this point.
     */
    public void doInit(String connectorId, ApplicationConnection connection);

    /**
     * For internal use by the framework: returns the registered RPC
     * implementations for an RPC interface identifier.
     * 
     * TODO interface identifier type or format may change
     * 
     * @param rpcInterfaceId
     *            RPC interface identifier: fully qualified interface type name
     * @return RPC interface implementations registered for an RPC interface,
     *         not null
     */
    public <T extends ClientRpc> Collection<T> getRpcImplementations(
            String rpcInterfaceId);

}

@@ -973,24 +973,188 @@
 %0A     * 
-%0A     */
+@deprecated This should be removed. Framework should update what is%0A     *             returned by getState() instead of setting a new state object.%0A     */%0A    @Deprecated
 %0A    pub
@@ -1736,31 +1736,31 @@
 ether the co
-mponent
+nnector
  is enabled 
@@ -1771,107 +1771,103 @@
 ot. 
-A user can not interact%0A     * with disabled components. Disabled components are rendered in a styl
+Disabled connectors will%0A     * ignore all attempts at communications. Received messages will b
 e%0A  
@@ -1875,80 +1875,74 @@
   * 
-that in
 di
+s
 ca
-tes the status, usually in gray color. Children of a dis
+rded. This method must check that the connector is en
 abled
+ in
 %0A   
@@ -1951,33 +1951,87 @@
 * co
-mponent are also disabled
+ntext, that is if it's parent is disabled, this method must return%0A     * false
 .%0A  
@@ -2069,15 +2069,15 @@
 e co
-mponent
+nnector
  is 
@@ -2116,11 +2116,8 @@
 %0A   
- //
  pub
@@ -2299,16 +2299,53 @@
 is point
+ nor any%0A     * hierarchy information
 .%0A     *

Update documentation and add isEnabled as it is mandatory at least on server side.