Package br.com.caelum.vraptor.mydvds.controller

Source Code of br.com.caelum.vraptor.mydvds.controller.UsersController

/***
* Copyright (c) 2009 Caelum - www.caelum.com.br/opensource
* All rights reserved.
*
* 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 br.com.caelum.vraptor.mydvds.controller;

import java.util.ArrayList;
import java.util.List;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.mydvds.dao.UserDao;
import br.com.caelum.vraptor.mydvds.interceptor.Public;
import br.com.caelum.vraptor.mydvds.interceptor.UserInfo;
import br.com.caelum.vraptor.mydvds.model.DvdType;
import br.com.caelum.vraptor.mydvds.model.User;
import br.com.caelum.vraptor.validator.Validations;

/**
* The resource <code>UsersController</code> handles all user operations,
* such as adding new users, listing all users, and so on.
*/
@Resource
public class UsersController {

    private final Validator validator;
    private final Result result;
    private final UserInfo userInfo;
  private final UserDao dao;

  /**
   * Receives dependencies through the constructor.
   * @param factory dao factory.
   * @param userInfo info on the logged user.
   * @param result VRaptor result handler.
   * @param validator VRaptor validator.
   */
  public UsersController(UserDao dao, UserInfo userInfo, Result result, Validator validator) {
    this.dao = dao;
    this.result = result;
    this.validator = validator;
        this.userInfo = userInfo;
  }

  /**
   * Accepts HTTP GET requests.
   * URL:  /home
   * View: /WEB-INF/jsp/user/home.jsp
   *
   * Shows user's home page containing his Dvd collection.
   */
  @Path("/")
  @Get
  public void home() {
      dao.refresh(userInfo.getUser());
      result.include("dvdTypes", DvdType.values());
  }

  /**
     * Accepts HTTP GET requests.
     * URL:  /users (only GET requests for this URL)
     * View: /WEB-INF/jsp/user/list.jsp
     *
     * Lists all users.
     */
  @Path("/users")
  @Get
  public void list() {
        List<User> users = new ArrayList<User>();
        // search by hand example
        List<User> usersFromDatabase = this.dao.listAll();
        for (User user : usersFromDatabase) {
            User newUser = new User();
            newUser.setLogin(user.getLogin());
            newUser.setName(user.getName());
            users.add(newUser);
        }

        result.include("users", users);
    }

  /**
   * Accepts HTTP POST requests.
   * URL:   /users
   * View: /WEB-INF/jsp/user/add.jsp
   *
   * The "user" parameter will be populated with the request parameters, for example:
   *
   * POST  /user
   * user.name=Nico
   * user.login=555555
   *
   * automatically populates the name and login parameters on the user object with values Nico and 555555.
   *
   * Adds new users to the database.
   */
  @Path("/users")
  @Post
  @Public
  public void add(final User user) {
//    validator.validate(user); // will add all validation errors from Hibernate Validator
      validator.checking(new Validations() {{
        // checks if there is already an user with the specified login
        boolean loginDoesNotExist = !dao.containsUserWithLogin(user.getLogin());
        that(loginDoesNotExist, "login", "login_already_exists");

        that(user.getLogin().matches("[a-z0-9_]+"), "login", "invalid_login");
    }});

    // redirects to the index page if any validation errors occur.
    validator.onErrorUsePageOf(HomeController.class).login();
    this.dao.add(user);

    // you can add objects to result even in redirects. Added objects will
    // survive one more request when redirecting.
    result.include("notice", "User " + user.getName() + " successfully added");
    result.redirectTo(HomeController.class).login();
  }

  /**
   * Accepts HTTP GET requests.
   * URL:  /users/{login} (for example, /users/john shows information
   * of the user with login john)
   * View: /WEB-INF/jsp/user/view.jsp
   *
   * Shows information on the specified user.
   * @param user
   */
  @Path("/users/{user.login}")
  @Get
  public void view(User user) {
      result.include("user", dao.find(user.getLogin()));
  }

}
TOP

Related Classes of br.com.caelum.vraptor.mydvds.controller.UsersController

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.