Java tutorial
/*! * 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 ); }-*/; }