/**
*
*/
package org.appfuse.webapp.client.application;
import java.util.ArrayList;
import java.util.List;
import org.appfuse.webapp.client.application.base.place.EntitySearchPlace;
import org.appfuse.webapp.client.application.utils.menu.MenuItem;
import org.appfuse.webapp.client.proxies.RoleProxy;
import org.appfuse.webapp.client.proxies.UserProxy;
import org.appfuse.webapp.client.ui.home.HomePlace;
import org.appfuse.webapp.client.ui.login.LoginPlace;
import org.appfuse.webapp.client.ui.logout.LogoutPlace;
import org.appfuse.webapp.client.ui.reloadOptions.ReloadOptionsPlace;
import org.appfuse.webapp.client.ui.upload.FileUploadPlace;
import org.appfuse.webapp.client.ui.users.active.ActiveUsersPlace;
import org.appfuse.webapp.client.ui.users.editProfile.EditProfilePlace;
import com.google.gwt.core.client.GWT;
/**
* @author ivangsa
*
*/
public class ApplicationMenu {
private static final ApplicationResources i18n = GWT.create(ApplicationResources.class);
private final MenuItem rootMenu = new MenuItem(null);
private final MenuItem adminMenu = new MenuItem(i18n.menu_admin(), RoleProxy.ROLE_ADMIN);
private List<MenuItem> allMenuItems;
{
rootMenu.add(new MenuItem(i18n.home_title(), new HomePlace(), RoleProxy.ROLE_USER, RoleProxy.ROLE_ADMIN));
rootMenu.add(new MenuItem(i18n.menu_user(), new EditProfilePlace(), RoleProxy.ROLE_USER, RoleProxy.ROLE_ADMIN));
rootMenu.add(adminMenu);
adminMenu.add(new MenuItem(i18n.menu_admin_users(), new EntitySearchPlace(UserProxy.class), RoleProxy.ROLE_ADMIN));
adminMenu.add(new MenuItem(i18n.home_activeUsers(), new ActiveUsersPlace(), RoleProxy.ROLE_ADMIN));
adminMenu.add(new MenuItem(i18n.menu_admin_reload(), new ReloadOptionsPlace(), RoleProxy.ROLE_ADMIN));
adminMenu.add(new MenuItem(i18n.menu_selectFile(), new FileUploadPlace(), RoleProxy.ROLE_ADMIN));
rootMenu.add(new MenuItem(i18n.login_title(), new LoginPlace(), RoleProxy.ANONYMOUS));
rootMenu.add(new MenuItem(i18n.user_logout(), new LogoutPlace(), RoleProxy.AUTHENTICATED));
}
public MenuItem getRootMenu() {
return rootMenu;
}
public List<MenuItem> asList() {
if (allMenuItems == null) {
allMenuItems = new ArrayList<MenuItem>();
appendChildrenToList(allMenuItems, rootMenu);
}
return allMenuItems;
}
protected void appendChildrenToList(final List<MenuItem> menuItems, final MenuItem menuItem) {
for (final MenuItem childItem : menuItem) {
menuItems.add(childItem);
appendChildrenToList(menuItems, childItem);
}
}
}