@Override
 public void execute() {
   clearLocalCache();
   session = VeggieDinner.getSession();
   if (session == null || session.getUser() == null) return;
   me = VeggieDinner.getUser(session.getUser());
   if (me == null) {
     VeggieDinner.requestNewUser(session.getUser(), populateLocalCache);
     return;
   }
   boolean hasAll = true;
   myGroupDTOs.addAll(VeggieDinner.getGroups(me.getGroups()).values());
   myEventDTOs.addAll(VeggieDinner.getEvents(me.getSchedule()).values());
   myEventDTOs.addAll(VeggieDinner.getEvents(getEventsFromGroups(myGroupDTOs)).values());
   myCohosts.addAll(VeggieDinner.getUsers(getHostsFromGroups(myGroupDTOs)).values());
   if (!myGroupDTOs.containsAll(me.getGroups())) {
     VeggieDinner.requestNewGroup(me.getGroups(), populateLocalCache);
     return;
   }
   if (!myEventDTOs.containsAll(me.getSchedule())
       || !myEventDTOs.containsAll(getEventsFromGroups(myGroupDTOs))) {
     HashSet<Key<EventDTO>> events = getEventsFromGroups(myGroupDTOs);
     events.addAll(me.getSchedule());
     VeggieDinner.requestNewEvent(events, populateLocalCache);
     return;
   }
   if (!myCohosts.containsAll(getHostsFromGroups(myGroupDTOs))) {
     VeggieDinner.requestNewUser(getHostsFromGroups(myGroupDTOs), populateLocalCache);
     return;
   }
   DeferredCommand.addCommand(updateMyStuff);
 }
 @Override
 public void execute() {
   HashMap<Key<GroupDTO>, GroupDTO> invites = VeggieDinner.getGroups(me.getGroups());
   myInvites = new MenuBar(true);
   myStuff.addItem("My Invites", myInvites);
   for (GroupDTO g : invites.values()) {
     final GroupDTO finalGroup = g;
     String hostsString = "Me";
     for (UserDTO u : VeggieDinner.getUsers(g.getHosts()).values())
       if (!u.getKey().equals(me.getKey())) hostsString += ", " + u.getUserName();
     myInvites.addItem(
         hostsString,
         new Command() {
           @Override
           public void execute() {
             VeggieDinner.showGroup(finalGroup.getKey());
           }
         });
   }
 }
        @Override
        public void execute() {
          if (me.getSchedule().size() == 0) return;
          MenuBar mySchedule = new MenuBar(true);
          myStuff.addItem("My Schedule", mySchedule);
          for (Key<EventDTO> e : me.getSchedule()) {
            final EventDTO eDTO = VeggieDinner.getEvent(e);
            mySchedule.addItem(
                dateFormat.format(eDTO.getScheduled()) + eDTO.getTheme(),
                new Command() {

                  @Override
                  public void execute() {
                    VeggieDinner.showEvent(eDTO.getKey());
                  }
                });
          }
        }
 @Override
 public void execute() {
   final GroupDTO g = VeggieDinner.getGroup(me.getSelectedGroup());
   myStuff.addItem(
       "My Group",
       new Command() {
         @Override
         public void execute() {
           VeggieDinner.showGroup(g.getKey());
         }
       });
   Collection<Key<EventDTO>> events = g.getEvents();
   if (events.size() == 1) {
     final Key<EventDTO> e = g.getEvent(0);
     myStuff.addItem(
         "My Event",
         new Command() {
           @Override
           public void execute() {
             VeggieDinner.showEvent(e);
           }
         });
   } else if (events.size() > 1) {
     MenuBar myEvents = new MenuBar(true);
     myStuff.addItem("My Events", myEvents);
     for (int i = 0; i < events.size(); i++) {
       final Key<EventDTO> e = g.getEvent(i);
       // TODO add the schedule to the group and populate the date
       // here as well
       myEvents.addItem(
           "Event #" + e.getId(),
           new Command() {
             @Override
             public void execute() {
               VeggieDinner.showEvent(e);
             }
           });
     }
   }
 }
  public VeggieMenuBar() {
    // make the menu bar update to change events from the bus
    VeggieDinner.getInstance().addCacheUpdatedEventHandler(this);
    config = VeggieDinner.getConfig();
    service = VeggieDinner.getService();
    mainMenu = new MenuBar();
    mainMenu.setAutoOpen(true);
    upcomingEvents = new MenuBar(true);
    upcomingEventsItem = new MenuItem("Upcoming Events", upcomingEvents);
    mainMenu.addItem(upcomingEventsItem);
    upcomingEventsItem.setVisible(false);
    allEvents = new MenuBar(true);
    allEventsItem = new MenuItem("All Events", allEvents);
    mainMenu.addItem(allEventsItem);
    allEventsItem.setVisible(false);
    myStuff = new MenuBar(true);
    myStuffItem = new MenuItem("My Stuff", myStuff);
    mainMenu.addItem(myStuffItem);
    myStuffItem.setVisible(false);
    help = new MenuBar(true);

    MenuItemSeparator sep = new MenuItemSeparator();
    mainMenu.addSeparator(sep);
    // sep.setWidth("30%");

    mainMenu.addItem("Help", help);
    MenuItem deityContact = new MenuItem("Contact a deity", true, (Command) null);
    deityContact.setHTML("<a href=\"mailto:[email protected]\">Contact a deity</a>");
    help.addItem(deityContact);
    MenuItem listContact = new MenuItem("Contact the panlist", true, (Command) null);
    listContact.setHTML("<a href=\"[email protected]\">Contact the panlist</a>");
    help.addItem(listContact);
    help.addItem(
        "FAQ and Etiquette",
        new Command() {
          @Override
          public void execute() {
            VeggieDinner.showFaqEtiquette();
          }
        });
    login =
        new MenuItem(
            "login",
            new Command() {
              @Override
              public void execute() {
                VeggieDinner.showLoginForm();
              }
            });
    mainMenu.addItem(login);
    logout =
        new MenuItem(
            "logout",
            new Command() {

              @Override
              public void execute() {
                VeggieDinner.logout();
              }
            });
    mainMenu.addItem(logout);

    signup =
        new MenuItem(
            "sign-up",
            new Command() {
              @Override
              public void execute() {
                VeggieDinner.showUserForm(null);
              }
            });
    mainMenu.addItem(signup);

    searchEvents =
        new MenuItem(
            "Search Events",
            new Command() {
              @Override
              public void execute() {
                // TODO Auto-generated method stub

              }
            });
    searchEventsByDateRange =
        new MenuItem(
            "Select Date Range",
            new Command() {
              @Override
              public void execute() {
                // TODO Auto-generated method stub

              }
            });
    initWidget(mainMenu);
  }