Java tutorial
/* * Copyright 2012 Stormpath, Inc. and contributors. * * 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 com.stormpath.tooter.controller; import com.stormpath.sdk.account.Account; import com.stormpath.sdk.directory.Directory; import com.stormpath.sdk.group.Group; import com.stormpath.tooter.model.User; import com.stormpath.tooter.model.dao.CustomerDao; import com.stormpath.tooter.model.sdk.StormpathService; import com.stormpath.tooter.validator.SignUpValidator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.support.SessionStatus; import java.util.HashMap; import java.util.Map; /** * @author Elder Crisostomo */ @Controller @RequestMapping("/signUp") @Transactional(propagation = Propagation.REQUIRES_NEW) public class SignUpController { @Autowired CustomerDao customerDao; SignUpValidator singUpValidator; @Autowired StormpathService stormpath; @Value("${stormpath.sdk.administrator.rest.url}") private String administratorGroupURL; @Value("${stormpath.sdk.premium.rest.url}") private String premiumGroupURL; public SignUpController() { } @Autowired public SignUpController(SignUpValidator signUpValidator) { this.singUpValidator = signUpValidator; } @RequestMapping(method = RequestMethod.POST) public String processSubmit(@ModelAttribute("customer") User user, ModelMap model, BindingResult result, SessionStatus status) { singUpValidator.validate(user, result); Map<String, String> groupMap = null; try { if (result.hasErrors()) { model.addAttribute("ADMINISTRATOR_URL", administratorGroupURL); model.addAttribute("PREMIUM_URL", premiumGroupURL); setGroupsToModel(groupMap, model); return "signUp"; } String userName = user.getFirstName().toLowerCase() + user.getLastName().toLowerCase(); // For account creation, we should get an instance of Account from the DataStore, // set the account properties and create it in the proper directory. Account account = stormpath.getDataStore().instantiate(Account.class); account.setEmail(user.getEmail()); account.setGivenName(user.getFirstName()); account.setSurname(user.getLastName()); account.setPassword(user.getPassword()); account.setUsername(userName); // Saving the account to the Directory where the Tooter application belongs. Directory directory = stormpath.getDirectory(); directory.createAccount(account); if (user.getGroupUrl() != null && !user.getGroupUrl().isEmpty()) { account.addGroup(stormpath.getDataStore().getResource(user.getGroupUrl(), Group.class)); } user.setUserName(userName); customerDao.saveCustomer(user); status.setComplete(); } catch (RuntimeException re) { model.addAttribute("ADMINISTRATOR_URL", administratorGroupURL); model.addAttribute("PREMIUM_URL", premiumGroupURL); setGroupsToModel(groupMap, model); result.addError(new ObjectError("password", re.getMessage())); re.printStackTrace(); return "signUp"; } catch (Exception e) { e.printStackTrace(); } //form success return "redirect:/login/message?loginMsg=registered"; } @RequestMapping(method = RequestMethod.GET) public String initForm(ModelMap model) { User cust = new User(); Map<String, String> groupMap = null; setGroupsToModel(groupMap, model); model.addAttribute("customer", cust); model.addAttribute("ADMINISTRATOR_URL", administratorGroupURL); model.addAttribute("PREMIUM_URL", premiumGroupURL); //return form view return "signUp"; } private void setGroupsToModel(Map<String, String> groupMap, ModelMap model) { groupMap = new HashMap<String, String>(); for (Group group : stormpath.getDirectory().getGroups()) { groupMap.put(group.getHref(), group.getName()); } model.addAttribute("groupMap", groupMap); } }