/* 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 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.activiti.explorer.ui.profile; import org.activiti.engine.IdentityService; import org.activiti.engine.ProcessEngines; import org.activiti.engine.identity.User; import org.activiti.explorer.ExplorerApp; import org.activiti.explorer.I18nManager; import org.activiti.explorer.Messages; import org.activiti.explorer.identity.LoggedInUser; import org.activiti.explorer.ui.custom.PopupWindow; import org.activiti.explorer.ui.mainlayout.ExplorerLayout; import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; import com.vaadin.event.ShortcutAction; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.GridLayout; import com.vaadin.ui.Label; import com.vaadin.ui.PasswordField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.Reindeer; /** * @author Joram Barrez */ public class ChangePasswordPopupWindow extends PopupWindow { private static final long serialVersionUID = 1L; protected IdentityService identityService; protected LoggedInUser currentUser; protected I18nManager i18nManager; protected VerticalLayout layout; protected GridLayout inputGrid; protected PasswordField passwordField1; protected PasswordField passwordField2; protected Label errorLabel; public ChangePasswordPopupWindow() { this.identityService = ProcessEngines.getDefaultProcessEngine().getIdentityService(); this.currentUser = ExplorerApp.get().getLoggedInUser(); this.i18nManager = ExplorerApp.get().getI18nManager(); setCaption(i18nManager.getMessage(Messages.PASSWORD_CHANGE)); setModal(true); center(); addStyleName(Reindeer.WINDOW_LIGHT); setWidth(350, UNITS_PIXELS); setHeight(205, UNITS_PIXELS); initLayout(); initPasswordFields(); initChangePasswordButton(); initEnterKeyListener(); } protected void initLayout() { layout = new VerticalLayout(); layout.setMargin(true); layout.setSpacing(true); setContent(layout); } protected void initPasswordFields() { inputGrid = new GridLayout(2, 2); inputGrid.setSpacing(true); layout.addComponent(inputGrid); layout.setComponentAlignment(inputGrid, Alignment.MIDDLE_CENTER); Label newPasswordLabel = new Label(i18nManager.getMessage(Messages.PROFILE_NEW_PASSWORD)); inputGrid.addComponent(newPasswordLabel); passwordField1 = new PasswordField(); passwordField1.setWidth(150, UNITS_PIXELS); inputGrid.addComponent(passwordField1); passwordField1.focus(); Label confirmPasswordLabel = new Label(i18nManager.getMessage(Messages.PROFILE_CONFIRM_PASSWORD)); inputGrid.addComponent(confirmPasswordLabel); passwordField2 = new PasswordField(); passwordField2.setWidth(150, UNITS_PIXELS); inputGrid.addComponent(passwordField2); } protected void initChangePasswordButton() { errorLabel = new Label(" ", Label.CONTENT_XHTML); errorLabel.addStyleName(Reindeer.LABEL_SMALL); errorLabel.addStyleName(ExplorerLayout.STYLE_LABEL_RED); layout.addComponent(errorLabel); Button changePasswordButton = new Button(i18nManager.getMessage(Messages.PASSWORD_CHANGE)); layout.addComponent(changePasswordButton); layout.setComponentAlignment(changePasswordButton, Alignment.MIDDLE_CENTER); changePasswordButton.addListener(new ClickListener() { public void buttonClick(ClickEvent event) { handlePasswordChange(); } }); } protected void initEnterKeyListener() { addActionHandler(new Handler() { public void handleAction(Action action, Object sender, Object target) { handlePasswordChange(); } public Action[] getActions(Object target, Object sender) { return new Action[] {new ShortcutAction("enter", ShortcutAction.KeyCode.ENTER, null)}; } }); } protected void handlePasswordChange() { if (passwordField1.getValue() == null || "".equals(passwordField1.getValue().toString()) || passwordField2.getValue() == null || "".equals(passwordField2.getValue().toString())) { errorLabel.setValue(i18nManager.getMessage(Messages.PASSWORD_CHANGE_INPUT_REQUIRED)); } else if (!passwordField1.getValue().equals(passwordField2.getValue())){ errorLabel.setValue(i18nManager.getMessage(Messages.PASSWORD_CHANGE_INPUT_MATCH)); } else { String password = passwordField1.getValue().toString(); // Change data User user = identityService.createUserQuery().userId(currentUser.getId()).singleResult(); user.setPassword(password); identityService.saveUser(user); // Refresh logged in user session data ExplorerApp.get().setUser(ExplorerApp.get().getLoginHandler().authenticate( user.getId(), user.getPassword())); // Close popup close(); // Show notification ExplorerApp.get().getNotificationManager().showInformationNotification(Messages.PASSWORD_CHANGED_NOTIFICATION); } } }