// Copyright (C) 2009 The Android Open Source Project
//
// 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.gwtexpui.user.client;

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;

/**
 * Widget to display within a {@link ViewSite}.
 *<p>
 * Implementations must override <code>protected void onLoad()</code> and
 * arrange for {@link #display()} to be invoked once the DOM within the view is
 * consistent for presentation to the user. Typically this means that the
 * subclass can start RPCs within <code>onLoad()</code> and then invoke
 * <code>display()</code> from within the AsyncCallback's
 * <code>onSuccess(Object)</code> method.
 */
public abstract class View extends Composite {
  ViewSite<? extends View> site;

  @Override
  protected void onUnload() {
    site = null;
    super.onUnload();
  }

  /** true if this is the current view of its parent view site */
  public final boolean isCurrentView() {
    Widget p = getParent();
    while (p != null) {
      if (p instanceof ViewSite<?>) {
        return ((ViewSite<?>) p).getView() == this;
      }
      p = p.getParent();
    }
    return false;
  }

  /** Replace the current view in the parent ViewSite with this view. */
  public final void display() {
    if (site != null) {
      site.swap(this);
    }
  }
}
