/*
 * Copyright 2007 the original author or authors.
 *
 * 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.codehaus.groovy.binding;

/**
 * @author <a href="mailto:shemnon@yahoo.com">Danno Ferrin</a>
 * @version $Revision$
 * @since Groovy 1.1
 */
public interface BindingUpdatable {

    /**
     * Causes automatic updating of bound values to be turned on.
     * This is idempotent between calls to unbind and rebind; i.e. multiple calls
     * to bind will have only the effect of the first call.
     */
    void bind();

    /**
     * Causes automatic updating of bound values to be turned off.
     * This is idempotent between calls to bind and rebind; i.e. multiple calls
     * to unbind will have only the effect of the first call. 
     */
    void unbind();

    /**
     * Causes the current bindings to be reset.
     * If the binding is not bound, it is a no-op.
     * If the binding is bound, it will be turned off, then turned on against current values.
     */
    void rebind();

    /**
     * Causes the values to be propigated from the source to the target
     */
    void update();

    /**
     * If supported, Causes the values to be propigated from the target to the source,
     * If not supported, an exception may be thrown 
     */
    void reverseUpdate();
}
