Package org.sample.booking.controllers

Source Code of org.sample.booking.controllers.Hotels

/*
* Copyright 2013 eXo Platform SAS
*
* 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.sample.booking.controllers;

import juzu.Action;
import juzu.Mapped;
import juzu.Path;
import juzu.PropertyType;
import juzu.Resource;
import juzu.Response;
import juzu.Route;
import juzu.View;
import juzu.plugin.ajax.Ajax;
import juzu.plugin.validation.ValidationError;
import juzu.request.RequestContext;
import juzu.request.RequestLifeCycle;

import org.sample.booking.Flash;
import org.sample.booking.models.Booking;
import org.sample.booking.models.Hotel;
import org.sample.booking.models.User;
import org.sample.booking.models.Violation;

import javax.inject.Inject;
import javax.validation.ConstraintViolation;
import javax.validation.Valid;

import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;

/** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
public class Hotels implements RequestLifeCycle// extends Application
{

/*
   @Before
   static void checkUser() {
       if(connected() == null) {
           flash.error("Please log in first");
           Application.index();
       }
   }

   // ~~~
*/

  @Inject
  Login login;

  @Inject
  Flash flash;
 
  @Inject
  Violation violation;

  @Inject
  @Path("hotels/index.gtmpl")
  org.sample.booking.templates.hotels.index index;

  @Inject
  @Path("hotels/list.gtmpl")
  org.sample.booking.templates.hotels.list list;

  @Inject
  @Path("hotels/book.gtmpl")
  org.sample.booking.templates.hotels.book book;

  @Inject
  @Path("hotels/show.gtmpl")
  org.sample.booking.templates.hotels.show show;

  @Inject
  @Path("hotels/confirmBooking.gtmpl")
  org.sample.booking.templates.hotels.confirmBooking confirmBooking;

  public Response.Content index() {
    String username = login.getUserName();
    List<Booking> bookings = Booking.findByUser(username);
    return index.with().bookings(bookings).ok();
  }

  @Ajax
  @Resource
  @Route("/hotels")
  public Response.Content list(String search, String size, String page) {
    int _size = size != null ? Integer.parseInt(size) : 5;
    int _page = page != null ? Integer.parseInt(page) : 0;
    List<Hotel> hotels;
    Pattern pattern;
    if (search != null && search.trim().length() > 0) {
      pattern = Pattern.compile(".*" + Pattern.quote(search.trim()) + ".*", Pattern.CASE_INSENSITIVE);
    }
    else {
      pattern = Pattern.compile(".*");
    }
    hotels = Hotel.find(pattern, pattern, _size, _page);
    return list.with().hotels(hotels).page(_page).ok();
  }

  @View
  @Route("/hotels/{id}")
  public Response.Content show(String id) {
    Hotel hotel = Hotel.findById(id);
    return show.with().hotel(hotel).ok();
  }

  @View
  @Route("/hotels/{id}/booking")
  public Response.Content book(String id, @Mapped Booking booking) {
    Hotel hotel = Hotel.findById(id);
    if (booking == null) {
      booking = new Booking();
    }
    return book.with().hotel(hotel).booking(booking).ok();
  }

  @Action
  @Route("/hotels/{id}/booking")
  public Response processConfirmBooking(String confirm, String id, String revise, @Mapped @Valid Booking booking) {
    Hotel hotel = Hotel.findById(id);
    User user = User.find(login.getUserName(), null);
    booking.hotel = hotel;
    booking.user = user;

//      validation.valid(booking);

    // Errors or revise
    if (/*validation.hasErrors() || */revise != null) {
      return Hotels_.book(id, booking);
    }
    else if (confirm != null) {
      // Confirm
      booking.create();
      flash.setSuccess("Thank you, " + login.getUserName() + ", your confimation number for " + hotel.name
        + " is " + booking.id);
      return Application_.index();
    }
    else {
      // Display booking
      return Hotels_.confirmBooking(id, booking).with(PropertyType.REDIRECT_AFTER_ACTION, false);
    }
  }

  @View
  @Route("/hotels/{id}/confirm")
  public Response.Content confirmBooking(String id, @Mapped Booking booking) {
    Hotel hotel = Hotel.findById(id);
    return confirmBooking.with().total(0).hotel(hotel).booking(booking).ok();
  }

  @Action
  @Route("/bookings/{id}")
  public Response cancelBooking(String id) {
    Booking booking = Booking.find(id);
    booking.delete();
    flash.setSuccess("Booking cancelled for confirmation number " + id);
    return Application_.index();
  }

  @View
  @Route("/settings")
  public void settings() {
    throw new UnsupportedOperationException("todo settings.gtmpl");
  }
/*
   public static void saveSettings(String password, String verifyPassword) {
       User connected = connected();
       connected.password = password;
       validation.valid(connected);
       validation.required(verifyPassword);
       validation.equals(verifyPassword, password).message("Your password doesn't match");
       if(validation.hasErrors()) {
           render("@settings", connected, verifyPassword);
       }
       connected.save();
       flash.success("Password updated");
       index();
   }
*/

  @Override
  public void beginRequest(RequestContext context) {
  }

  @Override
  public void endRequest(RequestContext context) {
      Response response = context.getResponse();
      if (response instanceof ValidationError) {
        ValidationError error = (ValidationError)response;
        String id = context.getParameters().get("id").getValue();
       
        Iterator<ConstraintViolation<Object>> v = error.getViolations().iterator();
        Booking booking = (Booking)error.getViolations().iterator().next().getLeafBean();
        while (v.hasNext()) {
          ConstraintViolation<Object> c = v.next();
          Iterator<javax.validation.Path.Node> nodeIter = c.getPropertyPath().iterator();
          javax.validation.Path.Node node = null;
          while (nodeIter.hasNext()) {
            node = nodeIter.next();
          }
          violation.add(node.getName(), c.getMessage());
        }
        context.setResponse(Hotels_.book(id, booking));
      }
  }
}
TOP

Related Classes of org.sample.booking.controllers.Hotels

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.