You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mp...@apache.org on 2011/07/16 00:03:16 UTC

svn commit: r1147332 - in /incubator/rave/trunk/rave-portal/src/main: java/org/apache/rave/portal/service/ java/org/apache/rave/portal/service/impl/ java/org/apache/rave/portal/web/controller/ webapp/ webapp/WEB-INF/views/

Author: mpierce
Date: Fri Jul 15 22:03:15 2011
New Revision: 1147332

URL: http://svn.apache.org/viewvc?rev=1147332&view=rev
Log:
(Rave-89) Moving account creation out of the NewAccountController and into a service, NewAccountService.  Moved newaccount.jsp under WEB-INF/views in anticipation of future, better use of Spring validation features.  Also added exception catching in case of failed account creation (ie using an already taken user name).


Added:
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/NewAccountService.java
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultNewAccountService.java
    incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/newaccount.jsp
Removed:
    incubator/rave/trunk/rave-portal/src/main/webapp/newaccount.jsp
Modified:
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java

Added: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/NewAccountService.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/NewAccountService.java?rev=1147332&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/NewAccountService.java (added)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/NewAccountService.java Fri Jul 15 22:03:15 2011
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.rave.portal.service;
+
+public interface NewAccountService {
+
+	 /**
+	  * Creates a new account using several other Rave services.
+	  * @param userName is the user name of the new account.
+	  * @param password is the account's password.
+	  */
+	 public void createNewAccount(String userName, String password) throws Exception;
+}
\ No newline at end of file

Added: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultNewAccountService.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultNewAccountService.java?rev=1147332&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultNewAccountService.java (added)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultNewAccountService.java Fri Jul 15 22:03:15 2011
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.rave.portal.service.impl;
+
+import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.service.PageService;
+import org.apache.rave.portal.service.PageLayoutService;
+import org.apache.rave.portal.service.RegionService;
+import org.apache.rave.portal.service.NewAccountService;
+import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.PageLayout;
+import org.apache.rave.portal.model.Region;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Service
+public class DefaultNewAccountService implements NewAccountService {
+
+	 protected final Logger logger=LoggerFactory.getLogger(getClass());
+
+    private final UserService userService;
+	 private final PageService pageService;
+	 private final PageLayoutService pageLayoutService;
+	 private final RegionService regionService;
+
+    @Autowired
+    public DefaultNewAccountService(UserService userService, PageService pageService, PageLayoutService pageLayoutService, RegionService regionService) {
+        this.userService = userService;
+	 	  this.pageService = pageService;
+	 	  this.pageLayoutService = pageLayoutService;
+	 	  this.regionService = regionService;
+    }
+
+	 @Override
+	 public void createNewAccount(String userName, String password) throws Exception {
+		  User user=new User();
+		  user.setUsername(userName);
+		  user.setPassword(password);
+		  
+		  user.setExpired(false);
+		  user.setLocked(false);
+		  user.setEnabled(true);
+		  userService.registerNewUser(user);
+		  
+		  //Return the newly registered user
+		  User registeredUser=userService.getUserByUsername(user.getUsername());
+		  
+		  //Create a PageLayout object.  We will default to 
+		  //the two-column layout
+		  PageLayout pageLayout=pageLayoutService.getPageLayoutByCode("columns_2");
+		  
+		  //Create regions
+		  List<Region> regions=new ArrayList<Region>();
+		  Region region1=new Region();
+		  Region region2=new Region();
+		  regions.add(region1);
+		  regions.add(region2);
+		  
+		  //Create a Page object and register it.
+		  Page page=new Page();
+		  page.setName("main");
+		  page.setOwner(registeredUser);
+		  page.setPageLayout(pageLayout);
+		  page.setRenderSequence(1L);
+		  page.setRegions(regions);
+		  pageService.registerNewPage(page);
+		  
+	 }
+	 
+}
\ No newline at end of file

Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java?rev=1147332&r1=1147331&r2=1147332&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java Fri Jul 15 22:03:15 2011
@@ -19,80 +19,62 @@
 
 package org.apache.rave.portal.web.controller;
 
-import org.apache.rave.portal.service.UserService;
-import org.apache.rave.portal.service.PageService;
-import org.apache.rave.portal.service.PageLayoutService;
-import org.apache.rave.portal.service.RegionService;
+import org.apache.rave.portal.service.NewAccountService;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
-import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.Page;
-import org.apache.rave.portal.model.PageLayout;
-import org.apache.rave.portal.model.Region;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ModelAttribute;
+
 import java.util.List;
 import java.util.ArrayList;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
 @Controller
-@RequestMapping(value = { "/newaccount/*", "/newaccount" })
+//@RequestMapping(value = { "/newaccount/*", "/newaccount" })
 public class NewAccountController {
 
-    private final UserService userService;
-	 private final PageService pageService;
-	 private final PageLayoutService pageLayoutService;
-	 private final RegionService regionService;
-	 
-    @Autowired
-    public NewAccountController(UserService userService, PageService pageService, PageLayoutService pageLayoutService, RegionService regionService) {
-        this.userService = userService;
-		  this.pageService = pageService;
-		  this.pageLayoutService = pageLayoutService;
-		  this.regionService = regionService;
-    }
+	 protected final Logger logger=LoggerFactory.getLogger(getClass());
 
-    @RequestMapping(method = RequestMethod.POST)
-	 //Needs to be specified by action.
-	 //TODO: have a more elegant way of adding a user
-	 public String create(Model model, @RequestParam String userName, @RequestParam String password) {	  
-	 //Create a new user object and register it.
-		  User user=new User();
-		  user.setUsername(userName);
-		  user.setPassword(password);
-		  user.setExpired(false);
-		  user.setLocked(false);
-		  user.setEnabled(true);
-		  userService.registerNewUser(user);
-		  
-		  //Return the newly registered user
-		  User registeredUser=userService.getUserByUsername(userName);
-		  
-		  //Create a PageLayout object.  We will default to 
-		  //the two-column layout
-		  PageLayout pageLayout=pageLayoutService.getPageLayoutByCode("columns_2");
-
-		  //Create regions
-		  List<Region> regions=new ArrayList<Region>();
-		  Region region1=new Region();
-		  Region region2=new Region();
-		  regions.add(region1);
-		  regions.add(region2);
-
-		  //Create a Page object and register it.
-		  Page page=new Page();
-		  page.setName("main");
-		  page.setOwner(registeredUser);
-		  page.setPageLayout(pageLayout);
-		  page.setRenderSequence(1L);
-								 page.setRegions(regions);
-		  pageService.registerNewPage(page);
+	 private final NewAccountService newAccountService;
 
-        return "redirect:/";
+    @Autowired
+    public NewAccountController(NewAccountService newAccountService) {
+		  this.newAccountService=newAccountService;
     }
 
+    @RequestMapping(value ="/newaccount.jsp", method = RequestMethod.GET)
+	 public String setUpForm(ModelMap model) {
+		  logger.debug("Initializing form");
+		  //TODO this should use view keys like other pages.
+		  return "newaccount";
+	 }
+
+    @RequestMapping(value = { "/newaccount/*","/newaccount"}, method = RequestMethod.POST)
+	 public String create(Model model,@RequestParam String userName, @RequestParam String password, @RequestParam String passwordConfirm) {	  
+			logger.debug("Creating a new user account");
+
+			 try {
+			    //TODO need to validate input, Spring-style
+				 newAccountService.createNewAccount(userName,password);
+				 return "redirect:/";
+			 }
+											 
+			  //TODO need to handle more specific exceptions
+			  catch (Exception ex) {
+				  logger.error("Account creation failed: "+ex.getMessage());
+				  //TODO: change this to a viewname
+				  return "newaccount";
+			  }
+	 
+		 }
 }
\ No newline at end of file

Added: incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/newaccount.jsp
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/newaccount.jsp?rev=1147332&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/newaccount.jsp (added)
+++ incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/newaccount.jsp Fri Jul 15 22:03:15 2011
@@ -0,0 +1,55 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you 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.
+  --%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+<%@ taglib tagdir="/WEB-INF/tags" prefix="rave"%>
+  
+<rave:rave_generic_page pageTitle="New Account Application - Rave">
+<div id="content">
+    <h1>Rave Account Application</h1>
+    <form id="newAccountForm" name="newAccountForm" action="newaccount" method="POST">
+        <fieldset>
+            <p>All fields are required</p>
+            <p>
+                <label for="userNameField">Username:</label>
+                <input id="userNameField" type="text" name="userName" required="required" autofocus="autofocus"/>
+            </p>
+            <p>
+                <label for="passwordField">Password:</label>
+                <input id="passwordField" type="password" name="password" required="required"/>
+            </p>
+            <p>
+                <label for="passwordConfirmField">Confirm Password:</label>
+                <input id="passwordConfirmField" type="password" name="passwordConfirm" required="required"/>
+            </p>
+        </fieldset>
+        <fieldset>
+             <input type="submit" value="Create Account" />
+        </fieldset>
+    </form>
+</div>
+<script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js"></script>
+<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.8.1/jquery.validate.min.js"></script>
+<script src="<spring:url value="/script/rave.js"/>"></script>
+<script src="<spring:url value="/script/rave_forms.js"/>"></script>
+
+<script>$(document).ready(rave.forms.validateNewAccountForm());</script>
+</rave:rave_generic_page>
+  
\ No newline at end of file