package com.mgreau.gae.booking; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.datastore.Text; import com.google.appengine.api.search.Document; import com.google.appengine.api.search.ListRequest; import com.google.appengine.api.search.ListResponse; @SuppressWarnings("serial") public class Booking_devfest_cloudendpointsServlet extends HttpServlet { static Logger LOG = Logger.getLogger("logCE"); private static final String HOTELS = "datas/hotels_devfest.csv"; private static final String APP_NAME = "Cloud Booking"; private static final String BASE_URL = "https://cloud-booking.appspot.com/img/"; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().println("Hello, world"); InputStream in = this.getClass().getClassLoader() .getResourceAsStream(HOTELS); initDatas(resp.getWriter(), in); } /** * Add datas (hotels, bookings), if datastore is empty. */ private void initDatas(PrintWriter w, InputStream in) { HotelEndpoint he = new HotelEndpoint(); DashboardEndpoint dash = new DashboardEndpoint(); w.println("...Check datas......"); int datas = dash.getDashboard().getNbHotels(); if (datas == 0) { //clean index removeIndex(); // create hotels w.println("...Adding hotels......"); Scanner lineScan = new Scanner(in); while (lineScan.hasNextLine()) { Scanner s = new Scanner(lineScan.nextLine()); s.useDelimiter(";"); while (s.hasNext()) { Hotel h1 = new Hotel(); h1.setCountry(s.next()); h1.setState(s.next()); h1.setCity(s.next()); h1.setHotelName(s.next()); h1.setAddress(s.next()); h1.setZip(s.next()); int stars = new Random().nextInt(5); h1.setNumberOfStars(stars); if (stars > 0) h1.setPrice(new Long(new Random().nextInt((40 * stars)) + "")); else h1.setPrice(new Long(new Random().nextInt(35) + "")); h1.setImage(new Text(BASE_URL + "hotel" + new Random().nextInt(29) + ".jpg")); he.insertHotel(h1); } } } else { w.println("...Hotels already added (" + datas + " hotels)......"); w.println("...City list (" + dash.getDashboard().getCityList() + " )......"); w.println("...Country list (" + dash.getDashboard().getCountryList() + " )......"); } } /** * Clean Index before insert tests datas */ private void removeIndex() { try { while (true) { List<String> docIds = new ArrayList<String>(); // Return a set of document IDs. ListRequest request = ListRequest.newBuilder().build(); ListResponse<Document> response = HotelEndpoint.INDEX .listDocuments(request); if (response.getResults().isEmpty()) { break; } for (Document doc : response) { docIds.add(doc.getId()); } HotelEndpoint.INDEX.remove(docIds); } } catch (RuntimeException e) { LOG.log(Level.SEVERE, "Failed to remove documents", e); } } }