001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.netui.script.common;
020:
021: /**
022: * The IDataAccessProvider interface is implemented by objects
023: * that need to provide their children with data and wish
024: * to make it available to them with the <code>container</code>
025: * binding context. Expression evaluation will process
026: * all <code>container</code> context references against this interface;
027: * several read-only properties are exposed:
028: * <table cellpadding="2" cellspacing="0" border="1">
029: * <tr><th>Method</th><th>NetUI Data Binding Expression</th><th>Required</th></tr>
030: * <tr><td>getCurrentIndex()</td><td><code>container.index</code></td><td>Yes</td></tr>
031: * <tr><td>getCurrentItem()</td><td><code>container.item</code></td><td>Yes</td></tr>
032: * <tr><td>getCurrentMetadata()</td><td><code>container.metadata</code></td><td>No</td></tr>
033: * <tr><td>getDataSource()</td><td><code>container.dataSource</code></td><td>Yes</td></tr>
034: * <tr><td>getProviderParent()</td><td><code>container.container</code></td><td>Yes</td></tr>
035: * </table>
036: * <p/>
037: * In cases where a IDataAccessProvider contains another IDataAccessProvider, the
038: * grandparent IDataAccessProvider may be referenced with the binding expression
039: * <code>container.container</code>. For example, the item, with the property firstName,
040: * may be accessed with the expression <code>container.container.item.firstName</code>.
041: * </p>
042: * <p/>
043: * The general use of the IDataAccessProvider is as an interface that is implemented
044: * by repeating databound tags that iterate over a data set and render each item
045: * in that data set. The item and iteration index are exposed through this
046: * interface and can be bound to by tags inside of the repeating tag
047: * that implements the IDataAccessProvider interface. This binding expression
048: * should start with <code>container</code> and reference one of the properties above.
049: * </p>
050: */
051: public interface IDataAccessProvider {
052:
053: /**
054: * Get the current index in this iteration. This should be a
055: * zero based integer that increments after each iteration.
056: *
057: * @return the current index of iteration or 0
058: */
059: public int getCurrentIndex();
060:
061: /**
062: * Get the current data item in this IDataAccessProvider.
063: *
064: * @return the current data item or <code>null</code>
065: */
066: public Object getCurrentItem();
067:
068: /**
069: * Get the expression that references the data item to which the
070: * IDataAccessProvider is bound.
071: *
072: * @return the expression referencing the data source or <code>null</code> if no
073: * dataSource is set
074: */
075: public String getDataSource();
076:
077: /**
078: * Get a metadata object for the current item. This interface
079: * is optional, and implementations of this interface are
080: * provided by the IDataAccessProvider interface. See these
081: * implementations for information about their support for
082: * current item metadata.
083: *
084: * @return the current metadata or <code>null</code> if no metadata can be
085: * found or metadata is not supported by a IDataAccessProvider implementation
086: */
087: public Object getCurrentMetadata();
088:
089: /**
090: * Get the parent IDataAccessProvider of a DataAccessProvider. A DataAccessProvider
091: * implementation may be able to nest DataAccessProviders. In this case,
092: * it can be useful to be able to also nest access to data from parent
093: * providers. Implementations of this interface are left with having
094: * to discover and export parents. The return value from this call
095: * on an implementing Object can be <code>null</code>.
096: *
097: * @return the parent DataAccessProvider or <code>null</code> if this method
098: * is not supported or the parent can not be found.
099: */
100: public IDataAccessProvider getProviderParent();
101: }
|