cedric 01/12/27 09:37:46 Added: contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal UserPortalSettingsAction.java UserPortalAction.java UserMenuSettingsAction.java UserMenuAction.java PortalSettingsForm.java PortalSettings.java PortalChoices.java MenuSettingsForm.java MenuSettings.java Log: New examples directories associated classes Revision Changes Path 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/UserPortalSettingsAction.java Index: UserPortalSettingsAction.java =================================================================== /* */ package org.apache.struts.example.tiles.portal; import org.apache.struts.tiles.*; import org.apache.struts.tiles.actions.TilesAction; import java.io.IOException; import java.util.Locale; import java.util.Vector; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionServlet; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * Implementation of <strong>Action</strong> that populates an instance of * <code>SubscriptionForm</code> from the currently specified subscription. * * This action is used as controller for portal settings editor. * It does folowing : * <ul> * <li>Load or create user portal settings</li> * <li>Read web form, and set user portal setting accordingly</li> * <li>Prepare portal editor needed attributes</li> * <li></li> * </ul> * * @author Cedric Dumoulin * @version $Revision: 1.1 $ $Date: 2001/12/27 17:37:46 $ */ public final class UserPortalSettingsAction extends TilesAction { // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an <code>ActionForward</code> instance describing where and how * control should be forwarded, or <code>null</code> if the response has * already been completed. * * @param servlet The ActionServlet making this request * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ public ActionForward perform( ComponentContext context, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //System.out.println("Enter action UserPortalSettingsAction"); HttpSession session = request.getSession(); PortalSettingsForm prefsForm = (PortalSettingsForm)form; // Get user portal settings from user context PortalSettings settings = UserPortalAction.getSettings( context, session ); PortalChoices choices = UserPortalAction.getPortalChoices( context, getServlet().getServletContext() ); if( prefsForm.isSubmitted() ) { // read arrays //System.out.println("form submitted"); // Set settings cols according to user choice for( int i=0;i<prefsForm.getNumCol(); i++) { settings.setListAt( i, choices.checkKeys( prefsForm.getNewCol(i)) ); } // end loop //System.out.println( "settings : " +settings.toString() ); prefsForm.reset(); //return null; // (mapping.findForward("viewPortal")); } // Set lists values to be shown for( int i=0;i<settings.getNumCols(); i++ ) { prefsForm.addCol(settings.getListAt(i) ); prefsForm.addColLabels(choices.getChoiceLabelsForKeys( settings.getListAt(i)) ); } // end loop prefsForm.setChoices(choices.getChoices() ); prefsForm.setChoiceLabels(choices.getChoiceLabels() ); //System.out.println("Exit action UserPortalSettingsAction"); return null; //(mapping.findForward("editPortal")); } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/UserPortalAction.java Index: UserPortalAction.java =================================================================== /* */ package org.apache.struts.example.tiles.portal; import org.apache.struts.tiles.*; import org.apache.struts.tiles.actions.TilesAction; import java.io.IOException; import java.util.Locale; //import java.util.Vector; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletContext; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionServlet; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * This controller load user portal settings and put them in tile context. * If portal settings are not defined for user, defined them based on tiles * attributes used as default. * * @author Cedric Dumoulin * @version $Revision: 1.1 $ $Date: 2001/12/27 17:37:46 $ */ public final class UserPortalAction extends TilesAction { /** Name used to store settings in session context */ public static String DEFAULT_CONTEXT_ID = "portal.USER_PORTAL_SETTINGS"; /** Tile parameter name */ public static String PARAM_NUMCOLS = "numCols"; /** Tile parameter name */ public static String PARAM_LIST = "list"; /** Tile parameter name */ public static String PARAM_LIST_LABELS = "listLabels"; /** Tile parameter name */ public static String PARAM_ID = "userContextId"; /** Tile parameter name */ public static String PORTAL_CHOICES_ID = "tiles.portal.PortalChoices"; // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an <code>ActionForward</code> instance describing where and how * control should be forwarded, or <code>null</code> if the response has * already been completed. * * @param servlet The ActionServlet making this request * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ public ActionForward perform( ComponentContext context, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //System.out.println("Enter action UserPortalAction"); // Get current session. HttpSession session = request.getSession(); // Get user portal list from user context PortalSettings settings = getSettings( context, session ); // Set parameters for tiles context.putAttribute( "numCols", Integer.toString(settings.getNumCols()) ); for( int i=0; i<settings.getNumCols(); i++ ) context.putAttribute( "list"+i, settings.getListAt(i) ); //System.out.println( "settings=" + settings ); //System.out.println("Exit action UserPortalAction"); return null; //(mapping.findForward("success")); } /** * Retrieve user setting from session. * If settings are not found, initialized them. */ public static PortalSettings getSettings( ComponentContext context, HttpSession session ) { // Retrieve user context id used to store settings String userSettingsId = (String)context.getAttribute( PARAM_ID ); if( userSettingsId == null ) userSettingsId = DEFAULT_CONTEXT_ID; // Get user portal list from user context PortalSettings settings = (PortalSettings)session.getAttribute( userSettingsId ); if( settings == null ) { // List doesn't exist, create it and initialize it from Tiles parameters settings = new PortalSettings(); settings.setNumCols( (String)context.getAttribute( PARAM_NUMCOLS ) ); for( int i=0; i<settings.getNumCols(); i++ ) { List col = (List)context.getAttribute( ((String)PARAM_LIST+i) ); //List labels = (List)context.getAttribute( ((String)PARAM_LIST_LABELS+i) ); settings.setListAt( i, col ); } // end loop // Save user settings in session session.setAttribute( userSettingsId, settings); } // end if return settings; } /** * Retrieve portal choices object. * Create it from default values if needed. */ static public PortalChoices getPortalChoices( ComponentContext context, ServletContext servletContext) { PortalChoices choices = (PortalChoices)servletContext.getAttribute( PORTAL_CHOICES_ID ); if( choices == null ) { // Initialize choices choices = new PortalChoices(); int numCols = Integer.parseInt( (String)context.getAttribute( PARAM_NUMCOLS ) ); for( int i=0; i<numCols; i++ ) { List col = (List)context.getAttribute( ((String)PARAM_LIST+i) ); List labels = (List)context.getAttribute( ((String)PARAM_LIST_LABELS+i) ); choices.addChoices( col, labels ); } // end loop servletContext.setAttribute( PORTAL_CHOICES_ID, choices ); } // end if return choices; } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/UserMenuSettingsAction.java Index: UserMenuSettingsAction.java =================================================================== package org.apache.struts.example.tiles.portal; import org.apache.struts.action.Action; import org.apache.struts.tiles.*; import org.apache.struts.tiles.actions.TilesAction; import org.apache.struts.tiles.beans.MenuItem; import java.io.IOException; import java.util.List; import java.util.Iterator; import java.util.ArrayList; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionServlet; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * Tiles controller as Struts Action. * This controller take a list of lists of MenuItems, and arrange them * to be shown by appropriate jsp view. * Create and set following attribute in Tile context : * <ul> * <li>names : list of names to display</li> * <li>returnedValues : list of corresponding key, or values to return</li> * <li>selecteds : list of boolean indicating whether or not a name is selected</li> * </ul> * Tiles input attributes : * <ul> * <li>title : menu title</li> * <li>items : Menu entries used as default when user settings is created</li> * <li>defaultChoice : Menus or menu entries porposed as choice to user</li> * <li>storeUnderName : Store user settings under provided name in session context [optional]</li> * <li></li> * </ul> * Tiles output attributes : * <ul> * <li>choiceItems : List of menu items proposed as a choice</li> * <li>userItems : List of user actual menu items</li> * </ul> * */ public class UserMenuSettingsAction extends TilesAction { /** debug flag */ public static boolean debug = false; /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an <code>ActionForward</code> instance describing where and how * control should be forwarded, or <code>null</code> if the response has * already been completed. * * @param servlet The ActionServlet making this request * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ public ActionForward perform( ComponentContext context, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if(debug) System.out.println("Enter action UserMenuSettingsAction"); HttpSession session = request.getSession(); MenuSettingsForm actionForm = (MenuSettingsForm)form; // Load user menu settings and available list of choices MenuSettings settings = UserMenuAction.loadUserSettings( context, session ); List choices = UserMenuAction.loadMenuChoices( context, request, getServlet().getServletContext() ); // Check if form is submitted // If true, read, check and store new values submitted by user. if( actionForm.isSubmitted() ) { // read arrays if(debug) System.out.println("form submitted"); settings.reset(); settings.addItems( checkSelected(actionForm.getSelected(), choices) ); if(debug) System.out.println( "settings : " +settings.toString() ); actionForm.reset(); //return null; // (mapping.findForward("viewPortal")); } // end if // Prepare data for view tile context.putAttribute( "userItems", settings.getItems() ); context.putAttribute( "choiceItems", choices ); if(debug) System.out.println("Exit action UserMenuSettingsAction"); return null; //(mapping.findForward("editPortal")); } /** * Check selected items, and return apppropriate list of items. * For each item in selected list, check if it exist in available choice. * Also check for double. * @param selectedKey Key of selected items (generally, link url) * @param choices List of avalaible items choice to compare against. */ static protected List checkSelected( String[] selectedKey, List choices ) { List selectedList = java.util.Arrays.asList( selectedKey ); List result = new ArrayList(selectedList.size()); //////////////// Iterator iter = selectedList.iterator(); while( iter.hasNext() ) { MenuItem item = getItemByKey( iter.next(), choices); if( item != null ) result.add(item ); } // end loop return result; } /** * Get item by its key in list of choices * @param key Key of selected items (generally, link url) * @param choices List of avalaible items choice to compare against. * @return corresponding item or null if not found. */ static protected MenuItem getItemByKey( Object key, List choices ) { Iterator iter = choices.iterator(); while( iter.hasNext() ) { MenuItem item = (MenuItem)iter.next(); if( item.getLink().equals( key) ) return item; } // end loop return null; } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/UserMenuAction.java Index: UserMenuAction.java =================================================================== /* */ package org.apache.struts.example.tiles.portal; import org.apache.struts.tiles.*; import org.apache.struts.tiles.actions.TilesAction; import org.apache.struts.tiles.Controller; import org.apache.struts.tiles.beans.MenuItem; import org.apache.struts.tiles.DefinitionsUtil; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.ArrayList; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletContext; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionServlet; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * This controller load user menu settings and put them in tile context. * If menu settings are not defined for user, defined them based on tiles * attributes used as default. * * This implementation extends Struts Action, and also define Tiles Controller. * This allows to use it as well as a controller type or a controller url. If used * as controller type, Struts Action functionality are not availables. * * Tiles input attributes : * <ul> * <li>title : menu title</li> * <li>items : Menu entries used as default when user settings is created</li> * <li>defaultChoice : Menus or menu entries porposed as choice to user</li> * <li>storeUnderName : Store user settings under provided name in session context [optional]</li> * <li></li> * </ul> * Tiles output attributes : * <ul> * <li>title : menu title</li> * <li>items : Menu items to display</li> * <li></li> * </ul> * * @author Cedric Dumoulin * @version $Revision: 1.1 $ $Date: 2001/12/27 17:37:46 $ */ public final class UserMenuAction extends TilesAction implements Controller { /** debug flag */ public static boolean debug = false; /** Tile attribute name. Value of this tile's attribute is the name used to store settings in user context */ public static String STORE_UNDER_ATTRIBUTE = "storeUnderName"; /** Default name used to store settings in session context */ public static String DEFAULT_STORE_UNDER_NAME = "menu.DEFAULT_STORE_UNDER_NAME"; /** Name under which item choices are stored in application context */ public static final String CHOICES_ITEMS_NAME = "menu.AvailableItems"; /** Tile attribute name. List of menu or items used as choices */ public static final String CHOICES_ITEMS_ATTRIBUTE = "defaultChoice"; /** Tile attribute name. User items are stored under this name in tile's context */ public static String USER_ITEMS_ATTRIBUTE = "items"; /** * Struts' action perform(). * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an <code>ActionForward</code> instance describing where and how * control should be forwarded, or <code>null</code> if the response has * already been completed. * * @param servlet The ActionServlet making this request * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ public ActionForward perform( ComponentContext context, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { perform( context, request, response, getServlet().getServletContext() ); return null; //(mapping.findForward("success")); } /** * Method associated to a tile and called immediately before tile is included. * @param tileContext Current tile context. * @param request Current request * @param response Current response * @param servletContext Current servlet context */ public void perform(ComponentContext context, HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) throws ServletException, IOException { if(debug) System.out.println("Enter action UserMenuAction"); // Get current session. HttpSession session = request.getSession(); // Load user settings from user context MenuSettings settings = loadUserSettings( context, session ); // Set parameters for rendering page context.putAttribute( USER_ITEMS_ATTRIBUTE, settings.getItems() ); if(debug) { System.out.println( "settings=" + settings ); System.out.println("Exit action UserMenuAction"); } } /** * Load user setting. * This implementation load setting from user context. * If settings are not found, initialized them from default items defined * in Tile's context. * If settings are not found, initialized them. */ public static MenuSettings loadUserSettings( ComponentContext context, HttpSession session ) throws ServletException { // Retrieve attribute name used to store settings. String userSettingsName = (String)context.getAttribute( STORE_UNDER_ATTRIBUTE ); if( userSettingsName == null ) userSettingsName = DEFAULT_STORE_UNDER_NAME; // Get user list from user context MenuSettings settings = (MenuSettings)session.getAttribute( userSettingsName ); // If settings don't exist, create and initialize them // Initialization is done from context attribute denoted by ITEMS if( settings == null ) { // List doesn't exist, create it and initialize it from Tiles parameters settings = new MenuSettings(); try { settings.addItems( (List)context.getAttribute( USER_ITEMS_ATTRIBUTE ) ); } catch( ClassCastException ex ) { throw new ServletException( "Can't initialize user menu : default items must be a list of items" ); } // Save user settings in session session.setAttribute( userSettingsName, settings); } // end if return settings; } /** * Load list of menu entries available as choices to user. * Look in servlet context, or create it from list of object provided * as Tiles attribute. * Create it from default values if needed. */ static public List loadMenuChoices( ComponentContext context, HttpServletRequest request, ServletContext servletContext) throws ServletException { // Get list of choices from context List choices = (List)servletContext.getAttribute( CHOICES_ITEMS_NAME ); // If not found, initialize it from provided default menu if( choices == null ) { Object dflt = context.getAttribute( CHOICES_ITEMS_ATTRIBUTE ); if( dflt == null ) throw new ServletException( "Can't find default menu item choices under name '" + CHOICES_ITEMS_ATTRIBUTE + "'" ); choices = new ArrayList(); extractItems(choices, dflt, request, servletContext); if( choices.size() == 0 ) throw new ServletException( "Can't initialize menu items choices" ); // save it for future use servletContext.setAttribute( CHOICES_ITEMS_NAME, choices ); } // end if return choices; } /** * Extract menu items from passed object. Items are stored in parameter 'result'. * This method allows to create a list of menu entries from existing menus. * Check object type class : * <li> * <ul>MenuItems : add it</ul> * <ul>ComponentDefinition : get attribute items, or list if not found. * Call ExtractItems with resulting attribute. * </ul> * <ul>List : iterate on list, and call ExtractItems for each element. * </li> * @param result result list (should be initialized) * @param object object to add (MenuItems, Definition, ...) * @param request current request * @param servletContext current servlet context. */ static private void extractItems( List result, Object object, HttpServletRequest request, ServletContext servletContext) { if(debug) System.out.println( "Extract menu item from '" + object + "'" ); if( object instanceof String ) { // definition name try { ComponentDefinition def = DefinitionsUtil.getDefinition( (String)object, request, servletContext ); extractItems( result, def, request, servletContext ); } catch( Exception ex ) { // silently fail } } else if( object instanceof List ) { List list = (List)object; Iterator iter = list.iterator(); while( iter.hasNext() ) { extractItems( result, iter.next(), request, servletContext ); } // end loop } else if( object instanceof ComponentDefinition ) { ComponentDefinition definition = (ComponentDefinition)object; Object attribute = definition.getAttribute( "items" ); if( attribute == null ) attribute = definition.getAttribute( "list" ); if( attribute == null ) { return; } extractItems( result, attribute, request, servletContext ); } else if( object instanceof MenuItem ) { result.add( object ); } } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/PortalSettingsForm.java Index: PortalSettingsForm.java =================================================================== /* */ package org.apache.struts.example.tiles.portal; import java.util.List; import java.util.ArrayList; import org.apache.struts.action.ActionForm; /** * Action form used to read data from web page form. */ public final class PortalSettingsForm extends ActionForm { /** Validate value */ protected String validate; /** empty list used by reset */ protected String[] empty = {}; /** list of "remaining" choices */ protected String[] remaining = empty; /** list of user columns */ protected List columns = new ArrayList(); /** list of user columns labels */ protected List columnLabels = new ArrayList(); /** list of columns selected by user */ protected List newCols = new ArrayList(); /** Choice list */ protected List choice; /** Choice list labels */ protected List choiceLabels; /** Is initialized ? */ protected boolean initialized = false; /** * Set col */ public void setCol( int index, List col ) { columns.set( index, col); } /** * Add col */ public void addCol( List col ) { columns.add( col); } /** * Get col Labels */ public List getColLabels(int index) { return (List)columnLabels.get(index); } /** * Set col Labels */ public void setColLabels( int index, List col ) { columnLabels.set( index, col); } /** * Add col Labels */ public void addColLabels( List col ) { columnLabels.add( col); } /** * Get col */ public List getCol(int index) { return (List)columns.get(index); } /** * Set col Labels */ public void setNewCol( int index, String list[] ) { // ensure capacity while( index>=newCols.size())newCols.add(null); newCols.set( index, list); } /** * Get col */ public String[] getNewCol(int index) { if(newCols==null || index>=newCols.size()) return null; return (String[])newCols.get(index); } /** * Get number of columns */ public int getNumCol() { return newCols.size(); } /** * Set list1 */ public void setL1( String array[] ) { setNewCol(1, array); } /** * Set list1 */ public String[] getL1() { return getNewCol(1); } /** * Set list1 */ public void setL0( String array[] ) { setNewCol(0, array); } /** * Set list1 */ public String[] getL0() { return getNewCol(0); } /** * Set list1 */ public void setRemaining( String array[] ) { remaining = array; } /** * Set list1 */ public String[] getRemaining() { return remaining; } /** * Set list1 */ public void setChoices( List list ) { choice = list; } /** * Set list1 */ public void setChoiceLabels( List list ) { choiceLabels = list; } /** * Set list1 */ public List getChoices() { return choice; } /** * Set list1 */ public List getChoiceLabels() { return choiceLabels; } /** * Is this form submitted ? */ public boolean isSubmitted() { return validate != null; } /** * Is this form submitted ? */ public void setValidate( String value) { this.validate = value; } /** * Reset properties */ public void reset() { remaining = empty; validate = null; columns.clear(); columnLabels.clear(); newCols.clear(); } /** * Initialized flag */ public boolean isInitialized() { return initialized; } /** * Initialized flag */ public void setInitialized( boolean isInitialized) { initialized = isInitialized; } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/PortalSettings.java Index: PortalSettings.java =================================================================== package org.apache.struts.example.tiles.portal; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import java.util.HashMap; /** * Objects of this class hold portal settings for one user. */ public class PortalSettings { /** Number of columms*/ protected int numCols; /** List of lists (one per column) */ protected List lists = new ArrayList(); /** * Get number of columns. */ public int getNumCols() { return numCols; } /** * Set number of columns */ public void setNumCols( String numCols ) { setNumCols( Integer.parseInt(numCols) ); } /** * Set number of columns. * Ensure capacity for internal list. */ public void setNumCols( int numCols ) { this.numCols = numCols; } /** * Get list at specified index */ public List getListAt( int index ) { return (List)lists.get(index); } /** * Add a list without checking */ public void addList( List list ) { lists.add( list); } /** * Set list at specified index. Previous list is disguarded. * Add empty list if necessary. * Indexes go from 0 to numCols-1 * @param index index of the list to add. * @param list list to set. */ public void setListAt( int index, List list ) { // First, ensure capacity while( index>lists.size() ) lists.add(new ArrayList()); lists.add( index, list); } /** * Reset settings */ public void reset() { numCols = 0; lists.clear(); } public String toString() { return "colCount=" + numCols + " , lists=" + lists; } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/PortalChoices.java Index: PortalChoices.java =================================================================== package org.apache.struts.example.tiles.portal; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import java.util.HashMap; /** * Instances of this classe hold available Tiles for a portal page. * * @author Cedric Dumoulin */ public class PortalChoices { /** Choices Tiles */ protected List choices = new ArrayList(); /** Choices Tiles labels */ protected List choiceLabels = new ArrayList(); /** * Set list of choices. * Labels come from tiles names * @param list list of tiles */ public void setChoices( List list) { setChoices(list, list); } /** * add list to list of choices Tiles * Labels come from tiles names * @param list list of tiles */ public void addChoices( List list) { addChoices( list, list); } /** * Set list of choices 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 setChoices( 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 choices and list of labels must be of the same size" ); } this.choices = list; choiceLabels = labels; } /** * add list and labels to list of choices 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 addChoices( List list, List labels) throws ArrayIndexOutOfBoundsException { // If no labels, use list keys if( labels == null ) labels = list; // Check sizes if(choices== null) { setChoices(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 choices and list of labels must be of the same size" ); } choices.addAll(list); choiceLabels.addAll(labels); } /** * Get list of choices Tiles */ public List getChoices( ) { return choices; } /** * Get list of labels for Tiles */ public List getChoiceLabels( ) { return choiceLabels; } /** * Get label for specified Tile, identified by its key. * @param key Tile key */ public String getChoiceLabel( Object key ) { int index = choices.indexOf( key ); if(index==-1) return null; return (String)choiceLabels.get(index); } /** * Get list of labels for Tile keys passes as parameters * @param choiceKeys List of keys to search for labels. */ public List getChoiceLabelsForKeys( List choiceKeys ) { List listLabels = new ArrayList(); Iterator i = choiceKeys.iterator(); while(i.hasNext()) { Object key = i.next(); listLabels.add( getChoiceLabel(key) ); } // end loop return listLabels; } /** * Check keys passed in parameters, and add it in returned list if available * in choices. * If a key denote a special key, create appropriate 'definition'. * @keys array of keys to add to list. */ public List checkKeys( 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( choices.contains( key ) ) { // ok, add it list.add( key ); } } // end loop return list; } /** * Set labels for choices Tiles. */ protected void setChoiceLabels( List list) { this.choiceLabels = list; } /** * add list to list of choices Tiles */ protected void addChoiceLabels( List list) { if(choiceLabels== null) { setChoiceLabels(list); return; } choiceLabels.addAll(list); } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/MenuSettingsForm.java Index: MenuSettingsForm.java =================================================================== /* */ package org.apache.struts.example.tiles.portal; import java.util.List; import java.util.ArrayList; import org.apache.struts.action.ActionForm; /** * Action form used to read data from web page form. */ public final class MenuSettingsForm extends ActionForm { /** Validate value */ protected String validate; /** empty list used by reset */ protected String[] empty = {}; /** list of items selected by user */ protected String[] selected; /** * Set selected items */ public void setSelected( String array[] ) { selected = array; } /** * Get selected items */ public String[] getSelected() { return selected; } /** * Get selected items */ public String[] getSelectedChoices() { return empty; } /** * Is this form submitted ? */ public boolean isSubmitted() { return validate != null; } /** * Is this form submitted ? */ public void setValidate( String value) { this.validate = value; } /** * Reset properties */ public void reset() { selected = empty; validate = null; } } 1.1 jakarta-struts/contrib/tiles/src/tutorial/org/apache/struts/example/tiles/portal/MenuSettings.java Index: MenuSettings.java =================================================================== package org.apache.struts.example.tiles.portal; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import java.util.HashMap; /** * Objects of this class hold menu settings for one user. */ public class MenuSettings { /** List of items */ protected List items = new ArrayList(); /** * Get list of items */ public List getItems( ) { return items; } /** * Add an item to the list */ public void addItem( Object item ) { items.add( item ); } /** * Add all items to the list. */ public void addItems( List list ) { items.addAll( list ); } /** * Reset settings */ public void reset() { items.clear(); } public String toString() { return "items=" + items; } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>