/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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.apache.myfaces.trinidad.model;

/**
 * A MenuModel objects represents the menu structure of a page or application.
 * The menu model should know how to go from the current viewId to a focus rowKey.
 * <p>
 * MenuModel extends TreeModel and adds a single method,
 * getFocusRowKey(), which returns the rowKey of the focus page for the current view id.
 * <p>
 * Work on modeling menus continues and it is very possible that this class
 * will change in a future release.
 *
 */
public abstract class MenuModel extends TreeModel
{
  /**
   * Gets the focus rowKey for the current viewId.
   * If there is no item
   * in focus, getFocusRowKey should return null.
   * </p>
   * <p>The value returned from calling {@link #getRowKey} should remain the
   * same before and after calling getFocusRowKey().
   * Meaning initialPath and currPath should
   * always be equal in the following example
   * <pre><code>
   *   Object initialPath = model.getRowKey();
   *   Object focusPath   = model.getFocusRowKey();
   *   Object currPath    = model.getRowKey();
   * </code></pre>
   * </p>
   * @return the focus rowKey for the current viewId
   */
  public abstract Object getFocusRowKey();
}
