blob: 95163d6a5056eed0f34cf338d82d0699e99cd40a [file] [log] [blame]
/*
* $Id$
*
* Copyright 1999-2004 The Apache Software Foundation.
*
* 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.apache.struts.webapp.tiles.portal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* A catalog of available tiles for a portal.
* Tiles denote a local URL or a Tile definition name.
* To check : should be possible to put ComponentDefinition class also.
*
*/
public class PortalCatalog
{
/** List of available Tiles */
protected List tiles = new ArrayList();
/** List of Tiles labels */
protected List tileLabels = new ArrayList();
/**
* Set list of tiles.
* Labels come from tiles names
* @param list list of tiles
*/
public void setTiles( List list)
{
setTiles(list, list);
}
/**
* add list to list of available Tiles
* Labels come from tiles names
* @param list list of tiles
*/
public void addTiles( List list)
{
addTiles( list, list);
}
/**
* Set list of available Tiles.
* Previous list is disguarded.
* @param list list of tiles
* @param labels corresponding labels. List size must be the same as list.
* If labels is null, use list of tiles.
* @throws ArrayIndexOutOfBoundsException if list and labels aren't the same size.
*/
public void setTiles( List list, List labels)
throws ArrayIndexOutOfBoundsException
{
// If no labels, use list keys
if( labels == null )
labels = list;
// Check sizes
if( list.size() != labels.size() )
{// error
System.out.println( "Error : list and labels size must be the same." );
throw new java.lang.ArrayIndexOutOfBoundsException( "List of tiles and list of labels must be of the same size" );
}
this.tiles = list;
tileLabels = labels;
}
/**
* add list and labels to list of available Tiles.
* If labels is null, use keys list as labels.
* @list list of choice keys to add
* @param labels corresponding labels. List size must be the same as list.
* If labels is null, use list of tiles.
* @throws ArrayIndexOutOfBoundsException if list and labels aren't the same size.
*/
public void addTiles( List list, List labels)
throws ArrayIndexOutOfBoundsException
{
// If no labels, use list keys
if( labels == null )
labels = list;
// Check sizes
if(tiles== null)
{
setTiles(list, labels);
return;
}
if( list.size() != labels.size() )
{// error
System.out.println( "Error : list and labels size must be the same." );
throw new java.lang.ArrayIndexOutOfBoundsException( "List of tiles and list of labels must be of the same size" );
}
tiles.addAll(list);
tileLabels.addAll(labels);
}
/**
* Get list of available Tiles
*/
public List getTiles( )
{
return tiles;
}
/**
* Get list of labels for Tiles
*/
public List getTilesLabels( )
{
return tileLabels;
}
/**
* Get label for specified Tile, identified by its key.
* @param key Tile key
*/
public String getTileLabel( Object key )
{
int index = tiles.indexOf( key );
if(index==-1)
return null;
return (String)tileLabels.get(index);
}
/**
* Get list of labels for Tile keys
* @param keys List of keys to search for labels.
*/
public List getTileLabels( List Keys )
{
List listLabels = new ArrayList();
Iterator i = Keys.iterator();
while(i.hasNext())
{
Object key = i.next();
listLabels.add( getTileLabel(key) );
} // end loop
return listLabels;
}
/**
* Get Tiles corresponding to keys.
* Keys are the one returned by the setting page. Keys are usually issue
* from values returned by getTiles().
* If a key isn't recognize, it is disguarded from the returned list.
* If a key correspond to a special key, appropriate 'definition' is created.
* Returned list contains tiles URL, definition name and definitions suitable
* as attribute of <tiles:insert >.
*
* @keys array of keys to add to list.
*/
public List getTiles( String keys[] )
{
List list = new ArrayList();
// add keys to list
for(int i=0;i<keys.length;i++)
{
String key = keys[i];
if( key.indexOf( '@' )>0 )
{ // special key
}
if( tiles.contains( key ) )
{ // ok, add it
list.add( key );
}
} // end loop
return list;
}
/**
* Set labels for tiles Tiles.
*/
protected void setTileLabels( List list)
{
this.tileLabels = list;
}
/**
* add list to list of tiles Tiles
*/
protected void addTileLabels( List list)
{
if(tileLabels== null)
{
setTileLabels(list);
return;
}
tileLabels.addAll(list);
}
}