/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/velocity/trunk/tool/src/java/org/sakaiproject/cheftool/menu/MenuImpl.java $ * $Id: MenuImpl.java 110974 2012-08-01 23:15:56Z steve.swinsburg@gmail.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.cheftool.menu; import java.util.List; import java.util.Vector; import org.sakaiproject.cheftool.RunData; import org.sakaiproject.cheftool.VelocityPortlet; import org.sakaiproject.cheftool.api.Menu; import org.sakaiproject.cheftool.api.MenuItem; /** * <p> * Menu is an ordered list of MenuItems. * </p> */ public class MenuImpl implements Menu { /** The menu's title. */ protected String m_title = null; /** The menu's icon. */ protected String m_icon = null; /** The menu's enabled flag. */ protected boolean m_enabled = true; /** The MenuItems, in order. */ protected List m_items = new Vector(); /** The form name string for the entry. */ protected String m_form = null; /** The base url for any action taken after clicking on the menu. */ protected String m_linkBaseUrl = null; /** The base url for any resources (images, etc.) required by the menu. */ protected String m_resourceBaseUrl = null; /** The menu's flag for whether to display disabled entries */ protected boolean m_showDisabled = false; // CHEF 1.x support public final static String CONTEXT_ACTION = "action"; public final static String CONTEXT_MENU = "menu"; public final static String STATE_MENU = "menu"; public MenuImpl(VelocityPortlet p, RunData r, String action) { super(); } // CHEF 1.x support /** * Construct a menu (good for sub-menus). */ public MenuImpl(String title, String icon, boolean enabled) { m_title = title; m_icon = icon; m_enabled = enabled; } // Menu /** * Construct a menu (good for sub-menus). */ public MenuImpl(String title, String icon, boolean enabled, String form) { m_title = title; m_icon = icon; m_enabled = enabled; m_form = form; } // Menu /** * Construct a menu (good for a menu bar). */ public MenuImpl() { } // Menu /** * Add a menu item to the bar. * * @param entry * The menu item to add. * @return the item. */ public MenuItem add(MenuItem item) { m_items.add(item); return item; } // add /** * Clear the menu of all items. */ public void clear() { m_items.clear(); } // clear /** * Does this item act as a container for other items? * * @return true if this MenuItem is a container for other items, false if not. */ public boolean getIsContainer() { return true; } // getIsContainer /** * Is this item a divider ? * * @return true if this MenuItem is a divider, false if not. */ public boolean getIsDivider() { return false; } // getIsDivider /** * Access the display title for the item. * * @return The display title for the item. */ public String getTitle() { return ((m_title == null) ? "" : m_title); } // getTitle /** * Access the icon name for the item (or null if no icon). * * @return The icon name for the item (or null if no icon). */ public String getIcon() { return m_icon; } // getIcon /** * Access the enabled flag for the item. * * @return True if the item is enabled, false if not. */ public boolean getIsEnabled() { return m_enabled; } // getIsEnabled /** * Access the action string for this item; what to do when the user clicks. Note: if getIsMenu(), there will not be an action string (will return ""). * * @return The action string for this item. */ public String getAction() { return ""; } // getAction /** * Access the full URL string for this item; what to do when the user clicks. Note: this if defined overrides getAction() which should be "". Note: if getIsMenu(), there will not be a URL string (will return ""). * * @return The full URL string for this item. */ public String getUrl() { return ""; } // getUrl /** * Access the form name whose values will be used when this item is selected. * * @return The form name whose values will be used when this item is selected. */ public String getForm() { return m_form; } // getForm /** * Access the sub-items of the item. Note: if !isContainer(), there will be no sub-items (will return EmptyIterator). * * @return The sub-items of the item. */ public List getItems() { return m_items; } // getItems /** * Count the sub-items of the item. Note: if !isContainer(), the count is 0. * * @return The count of sub-items of the item. */ public int size() { return m_items.size(); } // size /** * Check if there are any sub-items. Note: if !isContainer(), this is empty. * * @return true of there are no sub-items, false if there are. */ public boolean isEmpty() { return m_items.isEmpty(); } // isEmpty /** * Access one sub-items of the item. Note: if !isContainer(), there will be no sub-items (will return null). * * @param index * The index position (0 based) for the sub-item to get. * @return The sub-item of the item. */ public MenuItem getItem(int index) { try { return (MenuItem) m_items.get(index); } catch (Exception e) { return null; } } // getItems /** * Access the checked status of this item. Possible values: * * @see MenuItem * @return The the checked status of this item. */ public int getChecked() { return CHECKED_NA; } // getChecked /** * Access the is-field (not a button) flag. * * @return True if the item is a field, false if not. */ public boolean getIsField() { return false; } // getIsField /** * Adjust by removing any dividers at the start or end. */ public void adjustDividers() { // trim leading dividers while ((m_items.size() > 0) && (m_items.get(0) instanceof MenuDivider)) { m_items.remove(0); } // trim trailing dividers while ((m_items.size() > 0) && (m_items.get(m_items.size() - 1) instanceof MenuDivider)) { m_items.remove(m_items.size() - 1); } } // adjustDividers /** * Set whether disabled items in this menu should be shown. * * @param value * True to show disabled items, False otherwise. * @return This, for convenience. */ public Menu setShowdisabled(boolean value) { m_showDisabled = value; return this; } // setShowdisabled /** * Access whether disabled items in this menu should be shown. * * @return Current setting for show-disabled status (true to show disabled items, false to NOT show disabled items). */ public boolean getShowdisabled() { return m_showDisabled; } // getShowdisabled @Override public String getAccessibilityLabel() { //not currently used in this class return null; } } // class Menu