/*
* Copyright (C) 2012 The Android Open Source Project
*
* 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 com.motorola.studio.android.generatemenucode.model;
import java.util.ArrayList;
import java.util.List;
/**
* Represents the <menu> element from menu.xml
*/
public class MenuNode extends AbstractMenuNode
{
private final List<MenuItemNode> menuItems = new ArrayList<MenuItemNode>();
private final List<GroupNode> groups = new ArrayList<GroupNode>();
/**
* Adds {@link MenuItemNode} into menuItems list
* or adds {@link GroupNode} into groups list.
* @param node
*/
public void add(AbstractMenuNode node)
{
if (node instanceof MenuItemNode)
{
MenuItemNode menuItemNode = (MenuItemNode) node;
menuItems.add(menuItemNode);
}
else if (node instanceof GroupNode)
{
GroupNode groupNode = (GroupNode) node;
groups.add(groupNode);
}
}
/**
* Navigates into menu items and groups to deeply collect all menu items available in this root menu node
* @return list of {@link MenuItemNode}
*/
public List<MenuItemNode> getAllMenuItems()
{
//adding direct menu items
List<MenuItemNode> menuItemNodes = new ArrayList<MenuItemNode>();
menuItemNodes.addAll(menuItems);
//adding inner menu items from internal menu items
for (MenuItemNode node : menuItems)
{
if (node.getSubMenu() != null)
{
//has submenu => add all items inside submenu
menuItemNodes.addAll(node.getSubMenu().getAllMenuItems());
}
}
//adding inner menu items from groups
for (GroupNode group : groups)
{
for (MenuItemNode node : group.getMenuItems())
{
menuItemNodes.add(node);
if (node.getSubMenu() != null)
{
//has submenu => add all items inside submenu
menuItemNodes.addAll(node.getSubMenu().getAllMenuItems());
}
}
}
return menuItemNodes;
}
}