/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* 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
*******************************************************************************/
package org.ebayopensource.turmeric.policy.adminui.client.presenter;
import java.util.HashMap;
import java.util.Map;
import org.ebayopensource.turmeric.policy.adminui.client.Container;
import org.ebayopensource.turmeric.policy.adminui.client.Controller;
import org.ebayopensource.turmeric.policy.adminui.client.SupportedService;
import org.ebayopensource.turmeric.policy.adminui.client.event.LogoutEvent;
import org.ebayopensource.turmeric.policy.adminui.client.model.HistoryToken;
import org.ebayopensource.turmeric.policy.adminui.client.model.PolicyAdminUIService;
import org.ebayopensource.turmeric.policy.adminui.client.model.UserAction;
import org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.PolicyController;
import org.ebayopensource.turmeric.policy.adminui.client.shared.AppUser;
import org.ebayopensource.turmeric.policy.adminui.client.view.PolicyContainer;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.HasWidgets;
/**
* This presenter contains top level menu of the application.
* (1) Monitoring Console
* (2) Policy Admin
*
* @author nuy
*
*/
public class MenuController implements Presenter, Controller {
/** The Constant PRESENTER_ID. */
public final static String PRESENTER_ID = "Menu";
/** The event bus. */
protected HandlerManager eventBus;
/** The view. */
protected MenuControllerDisplay view;
/** The root container. */
protected HasWidgets rootContainer;
/** The added. */
protected boolean added;
/** The presenters. */
protected Map<String, Presenter> presenters = new HashMap<String, Presenter>();
/** The action map. */
protected Map<UserAction, Presenter> actionMap = new HashMap<UserAction, Presenter>();
/** The service map. */
protected Map<SupportedService, PolicyAdminUIService> serviceMap;
/**
* The Interface MenuControllerDisplay.
*/
public interface MenuControllerDisplay extends Container {
HasClickHandlers getLogoutComponent();
void setUserName(String name);
}
/**
* Instantiates a new menu controller.
*
* @param eventBus
* the event bus
* @param rootContainer
* the root container
* @param view
* the view
* @param serviceMap
* the service map
*/
public MenuController(HandlerManager eventBus, HasWidgets rootContainer, MenuControllerDisplay view, Map<SupportedService, PolicyAdminUIService> serviceMap) {
this.eventBus = eventBus;
this.view = view;
this.serviceMap = serviceMap;
this.rootContainer = rootContainer;
initPresenters();
bind();
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.policy.adminui.client.presenter.Presenter#go(com.google.gwt.user.client.ui.HasWidgets, org.ebayopensource.turmeric.policy.adminui.client.model.HistoryToken)
*/
public void go(HasWidgets container, HistoryToken token) {
//only add ourselves to the root window the first time we are activated
if (!added) {
added =true;
rootContainer.add(this.view.asWidget());
this.view.setUserName((AppUser.getUser()==null?"":AppUser.getUser().getUsername()));
}
//try my sub presenters
String id = token.getPresenterId();
//Window.alert("MenuController: presenter id = "+id);
if (id != null && !PRESENTER_ID.equals(id)){
selectPresenter(token);
}else{
HistoryToken tok = HistoryToken.newHistoryToken(PolicyController.PRESENTER_ID, null);
History.newItem(tok.toString());
selectPresenter(tok);
}
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.policy.adminui.client.presenter.Presenter#getId()
*/
public String getId() {
return PRESENTER_ID;
}
/**
* Bind.
*/
public void bind() {
//listen for logout
this.view.getLogoutComponent().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
eventBus.fireEvent(new LogoutEvent());
}
});
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.policy.adminui.client.Controller#addPresenter(java.lang.String, org.ebayopensource.turmeric.policy.adminui.client.presenter.Presenter)
*/
public void addPresenter(String id, Presenter p) {
presenters.put(id, p);
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.policy.adminui.client.Controller#getPresenter(java.lang.String)
*/
public Presenter getPresenter(String id) {
return presenters.get(id);
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.policy.adminui.client.Controller#selectPresenter(org.ebayopensource.turmeric.policy.adminui.client.model.HistoryToken)
*/
public void selectPresenter(HistoryToken token) {
String presenterId = token != null ? token.getPresenterId() : null;
Presenter presenter = presenters.get(presenterId);
if (presenter != null) {
//Pass in this view so that all presenter/view pairs are children
//of the MenuController's view (get constant header/footer wrapping)
presenter.go(view, token);
}
}
/**
* Inits the presenters.
*/
public void initPresenters() {
Presenter pp = new PolicyController(eventBus, new PolicyContainer(), this.serviceMap);
addPresenter(pp.getId(), pp);
actionMap.put(UserAction.POLICY_MAIN, pp);
}
}