/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.geofence.gui.client.controller;
import com.extjs.gxt.ui.client.mvc.AppEvent;
import com.extjs.gxt.ui.client.mvc.Controller;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.google.gwt.user.client.rpc.AsyncCallback;
import org.geoserver.geofence.gui.client.GeofenceEvents;
import org.geoserver.geofence.gui.client.i18n.I18nProvider;
import org.geoserver.geofence.gui.client.model.GSUserModel;
import org.geoserver.geofence.gui.client.service.GsUsersManagerRemoteServiceAsync;
import org.geoserver.geofence.gui.client.service.ProfilesManagerRemoteServiceAsync;
import org.geoserver.geofence.gui.client.view.UsersView;
import org.geoserver.geofence.gui.client.widget.UserGridWidget;
import org.geoserver.geofence.gui.client.widget.tab.GsUsersTabItem;
import org.geoserver.geofence.gui.client.widget.tab.TabWidget;
// TODO: Auto-generated Javadoc
/**
* The Class UsersController.
*/
public class UsersController extends Controller
{
/** The Constant USERS_TAB_ITEM_ID. */
private static final String USERS_TAB_ITEM_ID = "UsersTabItem";
/** The gs manager service remote. */
private GsUsersManagerRemoteServiceAsync gsManagerServiceRemote =
GsUsersManagerRemoteServiceAsync.Util.getInstance();
/** The profiles manager service remote. */
private ProfilesManagerRemoteServiceAsync profilesManagerServiceRemote =
ProfilesManagerRemoteServiceAsync.Util.getInstance();
/** The tab widget. */
private TabWidget tabWidget;
/** The users view. */
private UsersView usersView;
/**
* Instantiates a new users controller.
*/
public UsersController()
{
registerEventTypes(
GeofenceEvents.INIT_MAPS_UI_MODULE,
GeofenceEvents.CREATE_NEW_USER,
GeofenceEvents.SAVE_USER,
GeofenceEvents.UPDATE_USER,
GeofenceEvents.DELETE_USER,
GeofenceEvents.ATTACH_BOTTOM_TAB_WIDGETS);
}
/*
* (non-Javadoc)
*
* @see com.extjs.gxt.ui.client.mvc.Controller#initialize()
*/
@Override
protected void initialize()
{
this.usersView = new UsersView(this);
initWidget();
}
/**
* Inits the widget.
*/
private void initWidget()
{
}
/*
* (non-Javadoc)
*
* @see com.extjs.gxt.ui.client.mvc.Controller#handleEvent(com.extjs.gxt.ui.client
* .mvc.AppEvent)
*/
@Override
public void handleEvent(AppEvent event)
{
if (event.getType() == GeofenceEvents.ATTACH_BOTTOM_TAB_WIDGETS)
{
onAttachTabWidgets(event);
}
if ((event.getType() == GeofenceEvents.UPDATE_USER) ||
(event.getType() == GeofenceEvents.SAVE_USER))
{
onSaveUser(event);
}
if (event.getType() == GeofenceEvents.DELETE_USER)
{
onDeleteUser(event);
}
forwardToView(usersView, event);
}
/**
* On attach tab widgets.
*
* @param event
* the event
*/
private void onAttachTabWidgets(AppEvent event)
{
if (tabWidget == null)
{
tabWidget = (TabWidget) event.getData();
TabItem usersTabItem = new GsUsersTabItem(USERS_TAB_ITEM_ID, gsManagerServiceRemote,
profilesManagerServiceRemote);
tabWidget.add(usersTabItem);
}
}
/**
* On update profile.
*
* @param event
* the event
*/
private void onSaveUser(AppEvent event)
{
if (tabWidget != null)
{
GsUsersTabItem usersTabItem = (GsUsersTabItem) tabWidget.getItemByItemId(USERS_TAB_ITEM_ID);
final UserGridWidget usersInfoWidget = usersTabItem.getUserManagementWidget().getUsersInfo();
final Grid<GSUserModel> grid = usersInfoWidget.getGrid();
if ((grid != null) && (grid.getStore() != null) && (event.getData() != null) && (event.getData() instanceof GSUserModel))
{
GSUserModel user = event.getData();
gsManagerServiceRemote.saveGsUser(user, new AsyncCallback<Void>()
{
public void onFailure(Throwable caught)
{
Dispatcher.forwardEvent(GeofenceEvents.SEND_ERROR_MESSAGE,
new String[]
{
"User Service",
"Error occurred while saving the new user!"
});
}
public void onSuccess(Void result)
{
grid.getStore().getLoader().load();
grid.repaint();
Dispatcher.forwardEvent(
GeofenceEvents.BIND_MEMBER_DISTRIBUTION_NODES, result);
Dispatcher.forwardEvent(GeofenceEvents.SEND_INFO_MESSAGE,
new String[] { /* TODO: I18nProvider.getMessages().ruleServiceName()*/"User Service",
/* TODO: I18nProvider.getMessages().ruleFetchSuccessMessage() */ "User saved successfully!" });
}
});
}
}
}
/**
* On delete profile.
*
* @param event
* the event
*/
private void onDeleteUser(AppEvent event)
{
if (tabWidget != null)
{
GsUsersTabItem usersTabItem = (GsUsersTabItem) tabWidget.getItemByItemId(USERS_TAB_ITEM_ID);
final UserGridWidget usersInfoWidget = usersTabItem.getUserManagementWidget().getUsersInfo();
final Grid<GSUserModel> grid = usersInfoWidget.getGrid();
if ((grid != null) && (grid.getStore() != null) && (event.getData() != null) && (event.getData() instanceof GSUserModel))
{
GSUserModel user = event.getData();
gsManagerServiceRemote.deleteGsUser(user, new AsyncCallback<Void>()
{
public void onFailure(Throwable caught)
{
Dispatcher.forwardEvent(GeofenceEvents.SEND_ERROR_MESSAGE,
new String[]
{
"User Service",
"Error occurred while deleting the selected user."
});
}
public void onSuccess(Void result)
{
// grid.getStore().sort(BeanKeyValue.USER_NAME.getValue(),SortDir.ASC);//<<-- ric mod 20100215
grid.getStore().getLoader().load();
grid.repaint();
Dispatcher.forwardEvent(
GeofenceEvents.BIND_MEMBER_DISTRIBUTION_NODES, result);
Dispatcher.forwardEvent(GeofenceEvents.SEND_INFO_MESSAGE,
new String[] { /* TODO: I18nProvider.getMessages().ruleServiceName()*/"User Service",
/* TODO: I18nProvider.getMessages().ruleFetchSuccessMessage() */ "User removed successfully!" });
}
});
}
}
}
/**
* Forward to tab widget.
*
* @param event
* the event
*/
@SuppressWarnings("unused")
private void forwardToTabWidget(AppEvent event)
{
this.tabWidget.fireEvent(event.getType(), event);
}
}