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

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

/***
* 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 static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Put;
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.DvdDao;
import br.com.caelum.vraptor.mydvds.dao.UserDao;
import br.com.caelum.vraptor.mydvds.interceptor.UserInfo;
import br.com.caelum.vraptor.mydvds.model.Dvd;
import br.com.caelum.vraptor.mydvds.model.DvdRental;
import br.com.caelum.vraptor.mydvds.model.User;
import br.com.caelum.vraptor.validator.Validations;

/**
* The resource <code>DvdController</code> handles all Dvd operations,
* such as adding new Dvds, listing all Dvds, and so on.
*
* This is a RESTful Resource, so we will explain how to use REST on
* VRaptor 3 here.
* POST /dvds -> adds a dvd
*
* GET /dvds/{id} -> shows the dvd of given id
*
*/
@Resource
public class DvdRentalsController {

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

  /**
   * 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 DvdRentalsController(DvdDao dao, UserDao userDao, UserInfo userInfo, Result result, Validator validator) {
    this.dao = dao;
    this.userDao = userDao;
    this.result = result;
        this.validator = validator;
        this.userInfo = userInfo;
  }


    /**
     * Accepts HTTP PUT requests.
     * URL:  /users/login/dvds/id (for example, /users/john/dvds/3 adds the dvd with id 3 to the john's collection)
     * View: redirects to user's home
     *
     * You can use more than one variable on URI. Since the browsers don't support PUT method
     * you have to pass an additional parameter: _method=PUT for calling this method.
     *
     * This method adds a dvd to a user's collection.
     */
    @Path("/users/{user.login}/dvds/{dvd.id}")
    @Put
  public void addToMyList(final User user, final Dvd dvd) {
      final User sessionUser = refreshUser();
      validator.checking(new Validations() {{
        that(user.getLogin(), is(sessionUser.getLogin()),"user", "you_cant_add_to_others_list");
        that(sessionUser.getDvds(), not(hasItem(dvd)), "dvd", "you_already_have_this_dvd");
    }});

    validator.onErrorUsePageOf(UsersController.class).home();

    dao.add(new DvdRental(user, dvd));

    result.redirectTo(UsersController.class).home();
  }

    /**
   * Refreshes user data from database.
   */
    private User refreshUser() {
        User user = userInfo.getUser();
    userDao.refresh(user);
        return user;
    }

}
TOP

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

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.