Package org.activiti.explorer.ui.management.identity

Source Code of org.activiti.explorer.ui.management.identity.NewUserPopupWindow

/* 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.management.identity;

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.ui.custom.PopupWindow;

import com.vaadin.data.Validator;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.data.validator.StringLengthValidator;
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.Form;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.Reindeer;


/**
* Popup window to create a new user.
*
* @author Joram Barrez
*/
public class NewUserPopupWindow extends PopupWindow {
 
  private static final long serialVersionUID = 1L;
  protected IdentityService identityService;
  protected I18nManager i18nManager;
  protected Form form;
 
  public NewUserPopupWindow() {
    this.identityService = ProcessEngines.getDefaultProcessEngine().getIdentityService();
    this.i18nManager = ExplorerApp.get().getI18nManager();
   
    setCaption(i18nManager.getMessage(Messages.USER_CREATE));
    setModal(true);
    center();
    setResizable(false);
    setWidth(275, UNITS_PIXELS);
    setHeight(300, UNITS_PIXELS);
    addStyleName(Reindeer.WINDOW_LIGHT);
   
    initEnterKeyListener();
    initForm();
  }
 
  protected void initEnterKeyListener() {
    addActionHandler(new Handler() {
      public void handleAction(Action action, Object sender, Object target) {
        handleFormSubmit();
      }
      public Action[] getActions(Object target, Object sender) {
        return new Action[] {new ShortcutAction("enter", ShortcutAction.KeyCode.ENTER, null)};
      }
    });
  }
 
  protected void initForm() {
    form = new Form();
    form.setValidationVisibleOnCommit(true);
    form.setImmediate(true);
    addComponent(form);
   
    initInputFields();
    initCreateButton();
  }

  protected void initInputFields() {
    // Input fields
    form.addField("id", new TextField(i18nManager.getMessage(Messages.USER_ID)));
   
    // Set id field to required
    form.getField("id").setRequired(true);
    form.getField("id").setRequiredError(i18nManager.getMessage(Messages.USER_ID_REQUIRED));
    form.getField("id").focus();
   
    // Set id field to be unique
    form.getField("id").addValidator(new Validator() {
      public void validate(Object value) throws InvalidValueException {
        if (!isValid(value)) {
          throw new InvalidValueException(i18nManager.getMessage(Messages.USER_ID_UNIQUE));
        }
      }
      public boolean isValid(Object value) {
        if (value != null) {
          return identityService.createUserQuery().userId(value.toString()).singleResult() == null;
        }
        return false;
      }
    });
   
    // Password is required
    form.addField("password", new PasswordField(i18nManager.getMessage(Messages.USER_PASSWORD)));
    form.getField("password").setRequired(true);
    form.getField("password").setRequiredError(i18nManager.getMessage(Messages.USER_PASSWORD_REQUIRED));
   
    // Password must be at least 5 characters
    StringLengthValidator passwordLengthValidator = new StringLengthValidator(i18nManager.getMessage(Messages.USER_PASSWORD_MIN_LENGTH, 5), 5, -1, false);
    form.getField("password").addValidator(passwordLengthValidator);
   
    form.addField("firstName", new TextField(i18nManager.getMessage(Messages.USER_FIRSTNAME)));
    form.addField("lastName", new TextField(i18nManager.getMessage(Messages.USER_LASTNAME)));
    form.addField("email", new TextField(i18nManager.getMessage(Messages.USER_EMAIL)));
  }
 
  protected void initCreateButton() {
    HorizontalLayout buttonLayout = new HorizontalLayout();
    buttonLayout.setWidth(100, UNITS_PERCENTAGE);
    form.getFooter().setWidth(100, UNITS_PERCENTAGE);
    form.getFooter().addComponent(buttonLayout);
   
    Button createButton = new Button(i18nManager.getMessage(Messages.USER_CREATE));
    buttonLayout.addComponent(createButton);
    buttonLayout.setComponentAlignment(createButton, Alignment.BOTTOM_RIGHT);
   
    createButton.addListener(new ClickListener() {
      public void buttonClick(ClickEvent event) {
        handleFormSubmit();
      }
    });
  }
 
  protected void handleFormSubmit() {
    try {
      // create user
      form.commit(); // will throw exception in case validation is false
      User user = createUser();
     
      // close popup and navigate to fresh user
      close();
      ExplorerApp.get().getViewManager().showUserPage(user.getId());
     
      // Update user cache
      ExplorerApp.get().getUserCache().notifyUserDataChanged(user.getId());
     
    } catch (InvalidValueException e) {
      // Do nothing: the Form component will render the errormsgs automatically
      setHeight(340, UNITS_PIXELS);
    }
  }
 
  protected User createUser() {
    User user = identityService.newUser(form.getField("id").getValue().toString());
    user.setPassword(form.getField("password").getValue().toString());
    if (form.getField("firstName").getValue() != null) {
      user.setFirstName(form.getField("firstName").getValue().toString());
    }
    if (form.getField("lastName").getValue() != null) {
      user.setLastName(form.getField("lastName").getValue().toString());
    }
    if (form.getField("email").getValue() != null) {
      user.setEmail(form.getField("email").getValue().toString());
    }
    identityService.saveUser(user);
    return user;
  }

}
TOP

Related Classes of org.activiti.explorer.ui.management.identity.NewUserPopupWindow

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.