/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2016 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.mantle.client.admin;
import org.pentaho.gwt.widgets.client.dialogs.IDialogCallback;
import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox;
import org.pentaho.gwt.widgets.client.utils.string.StringUtils;
import org.pentaho.mantle.client.messages.Messages;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.DomEvent;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.NodeList;
import com.google.gwt.xml.client.XMLParser;
import org.pentaho.mantle.client.ui.custom.HorizontalScrollWrapper;
public class UserRolesAdminPanelController extends UserRolesAdminPanel implements ISysAdminPanel,
UpdatePasswordController {
private String delimiter = "\t";
private static UserRolesAdminPanelController instance = new UserRolesAdminPanelController();
private boolean usingPentahoSecurity;
public static UserRolesAdminPanelController getInstance() {
return instance;
}
public UserRolesAdminPanelController() {
super();
usersListBox.addChangeHandler( new UsersListChangeListener() );
rolesListBox.addChangeHandler( new RolesListChangeListener() );
systemRolesListBox.addChangeHandler( new SystemRolesListChangeListener() );
addRoleButton.addClickHandler( new AddRoleListener() );
removeRoleButton.addClickHandler( new RemoveRoleListener() );
addAllRolesButton.addClickHandler( new AddAllRolesListener() );
removeAllRolesButton.addClickHandler( new RemoveAllRolesListener() );
addUserButton.addClickHandler( new AddUserListener() );
removeUserButton.addClickHandler( new RemoveUserListener() );
addAllUsersButton.addClickHandler( new AddAllUsersListener() );
removeAllUsersButton.addClickHandler( new RemoveAllUsersListener() );
newUserButton.addClickHandler( new NewUserListener() );
deleteUserButton.addClickHandler( new DeleteUserListener() );
newRoleButton.addClickHandler( new NewRoleListener() );
deleteRoleButton.addClickHandler( new DeleteRoleListener() );
editPasswordButton.addClickHandler( new EditPasswordListener() );
activate();
}
public void saveUser( final String name, final String password ) {
String serviceUrl = GWT.getHostPageBaseURL() + "api/userroledao/createUser";
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
try {
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "Content-Type", "application/json" );
String json = "{\"userName\": \"" + encodeUri( name ) + "\", \"password\": \"" + encodeUri( password ) + "\"}";
executableTypesRequestBuilder.sendRequest( json, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
initializeAvailableUsers( name );
initializeRoles( rolesListBox.getValue( rolesListBox.getSelectedIndex() ), "api/userroledao/roles",
rolesListBox );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
public void saveRole( final String name ) {
String serviceUrl = GWT.getHostPageBaseURL() + "api/userroledao/createRole?roleName=" + encodeUri( name );
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
try {
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
initializeRoles( name, "api/userroledao/roles", rolesListBox );
initializeAvailableUsers( usersListBox.getValue( usersListBox.getSelectedIndex() ) );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
public void deleteRoles() {
StringBuilder selectedRoles = new StringBuilder();
for ( int i = 0; i < rolesListBox.getItemCount(); i++ ) {
if ( rolesListBox.isItemSelected( i ) ) {
selectedRoles.append( encodeUri( rolesListBox.getValue( i ) + delimiter ) );
}
}
String serviceUrl = GWT.getHostPageBaseURL() + "api/userroledao/deleteRoles?roleNames=" + selectedRoles.toString();
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
try {
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
checkForError( Messages.getString( "Error" ), response );
availableMembersListBox.clear();
selectedMembersListBox.clear();
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( availableMembersListBox ) );
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( selectedMembersListBox ) );
initializeRoles( null, "api/userroledao/roles", rolesListBox );
initializeAvailableUsers( usersListBox.getValue( usersListBox.getSelectedIndex() ) );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
private void checkForError( String title, Response response ) {
if ( response != null && response.getText() != null && response.getText().length() > 0 ) {
MessageDialogBox messageBox =
new MessageDialogBox( title, response.getText(), false, false, true, Messages.getString( "close" ) );
messageBox.center();
}
}
private void displayErrorInMessageBox( String title, String message ) {
MessageDialogBox messageBox =
new MessageDialogBox( title, message, false, false, true, Messages.getString( "close" ) );
messageBox.center();
}
public void deleteUsers() {
StringBuilder selectedUsers = new StringBuilder();
for ( int i = 0; i < usersListBox.getItemCount(); i++ ) {
if ( usersListBox.isItemSelected( i ) ) {
selectedUsers.append( encodeUri( usersListBox.getValue( i ) + delimiter ) );
}
}
String serviceUrl = GWT.getHostPageBaseURL() + "api/userroledao/deleteUsers?userNames=" + selectedUsers.toString();
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
try {
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
checkForError( Messages.getString( "Error" ), response );
userPasswordTextBox.setText( "" );
availableRolesListBox.clear();
selectedRolesListBox.clear();
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( availableMembersListBox ) );
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( selectedMembersListBox ) );
editPasswordButton.setEnabled( false );
initializeAvailableUsers( null );
initializeRoles( rolesListBox.getValue( rolesListBox.getSelectedIndex() ), "api/userroledao/roles",
rolesListBox );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
public void updatePassword( String newPassword ) {
String userName = usersListBox.getValue( usersListBox.getSelectedIndex() );
String serviceUrl = GWT.getHostPageBaseURL() + "api/userroledao/updatePassword";
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
try {
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "Content-Type", "application/json" );
String json =
"{\"userName\": \"" + encodeUri( userName ) + "\", \"password\": \"" + encodeUri( newPassword ) + "\"}";
executableTypesRequestBuilder.sendRequest( json, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
private boolean hasMultiselection( ListBox listBox ) {
ArrayList<Integer> selectedIndices = new ArrayList<Integer>();
for ( int i = 0; i < listBox.getItemCount(); i++ ) {
if ( listBox.isItemSelected( i ) ) {
selectedIndices.add( i );
}
}
return selectedIndices.size() > 1;
}
// -- Remote Calls.
private void initializeRoles( final String defaultValue, String serviceUrl, final ListBox listBox ) {
initializeList( "roles", defaultValue, serviceUrl, listBox );
}
private void initializeAvailableUsers( final String defaultValue ) {
initializeList( "users", defaultValue, "api/userroledao/users", usersListBox );
}
private void initializeList( final String type, final String defaultValue, String serviceUrl, final ListBox listBox ) {
final String url = GWT.getHostPageBaseURL() + serviceUrl;
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.GET, url );
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "accept", "application/xml" );
try {
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
listBox.clear();
NativeEvent event = com.google.gwt.dom.client.Document.get().createChangeEvent();
for ( String role : getSortedItems( type, response ) ) {
listBox.addItem( role );
if ( !StringUtils.isEmpty( defaultValue ) ) {
if ( role.equals( defaultValue ) ) {
listBox.setSelectedIndex( listBox.getItemCount() - 1 );
DomEvent.fireNativeEvent( event, listBox );
}
}
}
if ( listBox.getSelectedIndex() == -1 && listBox.getItemCount() > 0 ) {
listBox.setSelectedIndex( 0 );
DomEvent.fireNativeEvent( event, listBox );
}
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( listBox ) );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
private List<String> getSortedItems( String type, Response response ) {
String txt = response.getText();
Document doc = XMLParser.parse( txt );
NodeList items = doc.getElementsByTagName( type );
final List<String> itemsSorted = new ArrayList<String>();
for ( int i = 0; i < items.getLength(); i++ ) {
itemsSorted.add( items.item( i ).getFirstChild().getNodeValue() );
}
Collections.sort( itemsSorted );
return itemsSorted;
}
private void getRolesForUser( String user ) {
final String url = GWT.getHostPageBaseURL() + "api/userroledao/userRoles?userName=" + encodeUri( user );
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.GET, url );
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "accept", "application/xml" );
try {
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
selectedRolesListBox.clear();
for ( String role : getSortedItems( "roles", response ) ) {
selectedRolesListBox.addItem( role );
}
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( selectedRolesListBox ) );
Timer t = new Timer() {
public void run() {
if ( rolesListBox.getItemCount() > 0 ) {
cancel();
// availableRolesListBox = rolesListBox - selectedRolesListBox
availableRolesListBox.clear();
for ( int i = 0; i < rolesListBox.getItemCount(); i++ ) {
String role = rolesListBox.getValue( i );
boolean isSelected = false;
for ( int j = 0; j < selectedRolesListBox.getItemCount(); j++ ) {
if ( selectedRolesListBox.getValue( j ).equals( role ) ) {
isSelected = true;
}
}
if ( !isSelected ) {
availableRolesListBox.addItem( role );
}
}
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( availableRolesListBox ) );
}
}
};
t.scheduleRepeating( 100 );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
private void getUsersInRole( String role ) {
final String url = GWT.getHostPageBaseURL() + "api/userroledao/roleMembers?roleName=" + encodeUri( role );
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.GET, url );
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "accept", "application/xml" );
try {
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
selectedMembersListBox.clear();
for ( String user : getSortedItems( "users", response ) ) {
selectedMembersListBox.addItem( user );
}
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( selectedMembersListBox ) );
Timer t = new Timer() {
public void run() {
if ( usersListBox.getItemCount() > 0 ) {
cancel();
// availableMembersListBox = usersListBox - selectedMembersListBox
availableMembersListBox.clear();
for ( int i = 0; i < usersListBox.getItemCount(); i++ ) {
String user = usersListBox.getValue( i );
boolean isSelected = false;
for ( int j = 0; j < selectedMembersListBox.getItemCount(); j++ ) {
if ( selectedMembersListBox.getValue( j ).equals( user ) ) {
isSelected = true;
}
}
if ( !isSelected ) {
availableMembersListBox.addItem( user );
}
}
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( availableMembersListBox ) );
}
}
};
t.scheduleRepeating( 100 );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
private void initializeActionBaseSecurityElements() {
final String url = GWT.getHostPageBaseURL() + "api/userroledao/logicalRoleMap";
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.GET, url );
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "accept", "application/json" );
try {
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
}
public void onResponseReceived( Request request, Response response ) {
String roleMappings = response.getText();
rolesPermissionsPanel.initializeActionBaseSecurityElements( roleMappings );
systemRolesPermissionsPanel.initializeActionBaseSecurityElements( roleMappings );
}
} );
} catch ( RequestException e ) {
// ignored
}
}
private void processLDAPOrJDBCmode() {
final String url = GWT.getHostPageBaseURL() + "api/system/authentication-provider";
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.GET, url );
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "accept", "application/json" );
try {
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
}
public void onResponseReceived( Request request, Response response ) {
String resText = response.getText();
usingPentahoSecurity = resText.contains( "\"jackrabbit\"" ) || resText.contains( "\"super\"" );
userRolePermissions( usingPentahoSecurity );
}
} );
} catch ( RequestException e ) {
userRolePermissions( false );
}
}
private void userRolePermissions( boolean visible ) {
usersLabelPanel.setVisible( visible );
usersPanel.setVisible( visible );
newRoleButton.setVisible( visible );
deleteRoleButton.setVisible( visible );
mainTabPanel.getTab( 0 ).setVisible( visible );
if ( visible ) {
mainTabPanel.selectTab( 0 );
} else {
mainTabPanel.selectTab( 1 );
}
}
private void modifyUserRoles( final String userName, String serviceUrl ) {
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
try {
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
checkForError( Messages.getString( "Error" ), response );
getRolesForUser( userName );
initializeRoles( rolesListBox.getValue( rolesListBox.getSelectedIndex() ), "api/userroledao/roles",
rolesListBox );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
private void modifyRoleUsers( final String roleName, String serviceUrl ) {
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
try {
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
displayErrorInMessageBox( Messages.getString( "Error" ), exception.getLocalizedMessage() );
}
public void onResponseReceived( Request request, Response response ) {
checkForError( Messages.getString( "Error" ), response );
getUsersInRole( roleName );
initializeAvailableUsers( usersListBox.getValue( usersListBox.getSelectedIndex() ) );
}
} );
} catch ( RequestException e ) {
displayErrorInMessageBox( Messages.getString( "Error" ), e.getLocalizedMessage() );
}
}
// -- ISysAdminPanel implementation.
public void activate() {
processLDAPOrJDBCmode();
initializeActionBaseSecurityElements();
initializeAvailableUsers( null );
final String url = GWT.getHostPageBaseURL() + "api/system/authentication-provider";
RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.GET, url );
executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
executableTypesRequestBuilder.setHeader( "accept", "application/json" );
try {
executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
public void onError( Request request, Throwable exception ) {
}
public void onResponseReceived( Request request, Response response ) {
boolean usingPentahoSecurity = response.getText().contains( "jackrabbit" );
if ( !usingPentahoSecurity ) {
initializeRoles( null, "api/userrolelist/roles?addExtraRoles=false", rolesListBox );
} else {
initializeRoles( null, "api/userroledao/roles", rolesListBox );
}
initializeRoles( null, "api/userrolelist/extraRoles", systemRolesListBox );
}
} );
} catch ( RequestException e ) {
// ignored
}
}
public String getId() {
return "userRolesAdminPanel";
}
public void passivate( final AsyncCallback<Boolean> callback ) {
if ( usingPentahoSecurity ) {
mainTabPanel.selectTab( 0 );
} else {
mainTabPanel.selectTab( 1 );
}
callback.onSuccess( true );
}
// -- Event Listeners.
class UsersListChangeListener implements ChangeHandler {
public void onChange( ChangeEvent evt ) {
if ( hasMultiselection( usersListBox ) ) {
userPasswordTextBox.setText( "" );
editPasswordButton.setEnabled( false );
availableRolesListBox.clear();
selectedRolesListBox.clear();
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( availableRolesListBox ) );
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( selectedRolesListBox ) );
} else {
String user = usersListBox.getValue( usersListBox.getSelectedIndex() );
if ( !StringUtils.isEmpty( user ) ) {
getRolesForUser( user );
userPasswordTextBox.setText( "fakepassword" );
editPasswordButton.setEnabled( true );
}
}
}
}
class RolesListChangeListener implements ChangeHandler {
public void onChange( ChangeEvent evt ) {
if ( hasMultiselection( rolesListBox ) ) {
availableMembersListBox.clear();
selectedMembersListBox.clear();
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( availableRolesListBox ) );
updateHelperDiv( HorizontalScrollWrapper.getListBoxWrapperUIId( selectedRolesListBox ) );
} else {
String role = rolesListBox.getValue( rolesListBox.getSelectedIndex() );
if ( !StringUtils.isEmpty( role ) ) {
getUsersInRole( role );
}
}
rolesPermissionsPanel.setSelectedPermissions();
}
}
class SystemRolesListChangeListener implements ChangeHandler {
public void onChange( ChangeEvent evt ) {
systemRolesPermissionsPanel.setSelectedPermissions();
}
}
class AddRoleListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String userName = usersListBox.getValue( usersListBox.getSelectedIndex() );
StringBuilder roleNames = new StringBuilder();
for ( int i = 0; i < availableRolesListBox.getItemCount(); i++ ) {
if ( availableRolesListBox.isItemSelected( i ) ) {
roleNames.append( encodeUri( availableRolesListBox.getValue( i ) + delimiter ) );
}
}
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/assignRoleToUser?userName=" + encodeUri( userName )
+ "&roleNames=" + roleNames.toString();
modifyUserRoles( userName, serviceUrl );
}
}
class RemoveRoleListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String userName = usersListBox.getValue( usersListBox.getSelectedIndex() );
StringBuilder roleNames = new StringBuilder();
for ( int i = 0; i < selectedRolesListBox.getItemCount(); i++ ) {
if ( selectedRolesListBox.isItemSelected( i ) ) {
roleNames.append( encodeUri( selectedRolesListBox.getValue( i ) + delimiter ) );
}
}
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/removeRoleFromUser?userName=" + encodeUri( userName )
+ "&roleNames=" + roleNames.toString();
modifyUserRoles( userName, serviceUrl );
}
}
class AddAllRolesListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String userName = usersListBox.getValue( usersListBox.getSelectedIndex() );
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/assignAllRolesToUser?userName=" + encodeUri( userName );
modifyUserRoles( userName, serviceUrl );
}
}
class RemoveAllRolesListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String userName = usersListBox.getValue( usersListBox.getSelectedIndex() );
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/removeAllRolesFromUser?userName=" + encodeUri( userName );
modifyUserRoles( userName, serviceUrl );
}
}
class AddUserListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String roleName = rolesListBox.getValue( rolesListBox.getSelectedIndex() );
StringBuilder userNames = new StringBuilder();
for ( int i = 0; i < availableMembersListBox.getItemCount(); i++ ) {
if ( availableMembersListBox.isItemSelected( i ) ) {
userNames.append( encodeUri( availableMembersListBox.getValue( i ) + delimiter ) );
}
}
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/assignUserToRole?userNames=" + userNames.toString()
+ "&roleName=" + encodeUri( roleName );
modifyRoleUsers( roleName, serviceUrl );
}
}
class RemoveUserListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String roleName = rolesListBox.getValue( rolesListBox.getSelectedIndex() );
StringBuilder userNames = new StringBuilder();
for ( int i = 0; i < selectedMembersListBox.getItemCount(); i++ ) {
if ( selectedMembersListBox.isItemSelected( i ) ) {
userNames.append( encodeUri( selectedMembersListBox.getValue( i ) + delimiter ) );
}
}
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/removeUserFromRole?userNames=" + userNames.toString()
+ "&roleName=" + encodeUri( roleName );
modifyRoleUsers( roleName, serviceUrl );
}
}
class AddAllUsersListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String roleName = rolesListBox.getValue( rolesListBox.getSelectedIndex() );
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/assignAllUsersToRole?roleName=" + encodeUri( roleName );
modifyRoleUsers( roleName, serviceUrl );
}
}
class RemoveAllUsersListener implements ClickHandler {
public void onClick( ClickEvent event ) {
String roleName = rolesListBox.getValue( rolesListBox.getSelectedIndex() );
String serviceUrl =
GWT.getHostPageBaseURL() + "api/userroledao/removeAllUsersFromRole?roleName=" + encodeUri( roleName );
modifyRoleUsers( roleName, serviceUrl );
}
}
class NewRoleListener implements ClickHandler {
public void onClick( ClickEvent event ) {
RoleDialog roleDialog = new RoleDialog( UserRolesAdminPanelController.this );
roleDialog.show();
}
}
class DeleteRoleListener implements ClickHandler {
public void onClick( ClickEvent event ) {
if ( rolesListBox.getSelectedIndex() != -1 ) {
MessageDialogBox warning =
new MessageDialogBox( Messages.getString( "deleteRoleTitle" ), Messages.getString( "deleteRoleMessage" ),
false, false, true, Messages.getString( "yesDelete" ), null, Messages.getString( "no" ) );
warning.setCallback( new IDialogCallback() {
@Override
public void okPressed() {
deleteRoles();
}
@Override
public void cancelPressed() {
}
} );
warning.center();
}
}
}
class NewUserListener implements ClickHandler {
public void onClick( ClickEvent event ) {
UserDialog userDialog = new UserDialog( UserRolesAdminPanelController.this );
userDialog.show();
}
}
class DeleteUserListener implements ClickHandler {
public void onClick( ClickEvent event ) {
if ( usersListBox.getSelectedIndex() != -1 ) {
MessageDialogBox warning =
new MessageDialogBox( Messages.getString( "deleteUserTitle" ), Messages.getString( "deleteUserMessage" ),
false, false, true, Messages.getString( "yesDelete" ), null, Messages.getString( "no" ) );
warning.setCallback( new IDialogCallback() {
@Override
public void okPressed() {
deleteUsers();
}
@Override
public void cancelPressed() {
}
} );
warning.center();
}
}
}
class EditPasswordListener implements ClickHandler {
public void onClick( ClickEvent event ) {
ChangePasswordDialog changePasswordDialog = new ChangePasswordDialog( UserRolesAdminPanelController.this );
changePasswordDialog.show();
}
}
private final native String encodeUri( String URI )
/*-{
return encodeURIComponent(URI);
}-*/;
/**
* Update helper div width if listbox is updated
*/
private static native void updateHelperDiv( String id ) /*-{
$wnd.updateHelperDiv( id );
}-*/;
}