diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/ImageServlet.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/ImageServlet.java index 9836dec..2983ada 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/ImageServlet.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/ImageServlet.java @@ -28,128 +28,128 @@ @SuppressWarnings("serial") public class ImageServlet extends HttpServlet { - private static final Logger log = Logger.getLogger(ImageServlet.class.getName()); - - @Override - public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { - - String requestUrl = req.getRequestURL().toString(); - - try { - // image request pattern: .../image/[imageKeyId]/[size].jpg - - String imageSizeString = ParserHelper.getStringAfter("/", req.getPathInfo(), ParserHelper.MODE_LAST_LAST); - if (imageSizeString.contains(".png")) { - imageSizeString = ParserHelper.getStringBefore(".png", imageSizeString); - } else if (imageSizeString.contains(".jpg")) { - imageSizeString = ParserHelper.getStringBefore(".jpg", imageSizeString); - } else { - throw new Exception("Unknown file type requested"); - } - - String imageKeyIdParam = ParserHelper.getStringBefore("/" + imageSizeString, req.getPathInfo(), ParserHelper.MODE_LAST_LAST); - imageKeyIdParam = ParserHelper.getStringAfter("/", imageKeyIdParam, ParserHelper.MODE_LAST_LAST); - long imageKeyId = Long.parseLong(imageKeyIdParam); - - if (imageKeyId < 0) { - throw new Exception("Image key ID is invalid"); - } - - ImageQuery imageQuery = new ImageQuery(); - ImageEntry image = imageQuery.getImageByKeyId(imageKeyId); - - if (image.getImageType() == null || image.getImage() == null) { - // image = EntryManager.fetchImageFromUrl(image.getUrl()); - throw new Exception("Image data unavailable"); - } - - resp.setContentType(image.getImageType()); - resp.getOutputStream().write(ImageHelper.resizeImage(image.getImage(), imageSizeString)); - } catch (Exception e) { - resp.sendRedirect("/static/images/not_found.jpg"); - } - } - - @Override - public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { - ApiResponse responseObject = new ApiResponse(); - String response = ""; - - try { - ServletFileUpload upload = new ServletFileUpload(); - res.setContentType("text/plain"); - - FileItemIterator iterator = upload.getItemIterator(req); - - ImageEntry image = new ImageEntry(); - - while (iterator.hasNext()) { - FileItemStream item = iterator.next(); - InputStream stream = item.openStream(); - - if (item.isFormField()) { - String key = item.getFieldName(); - String value = Streams.asString(stream); - log.info("Form field: " + key + ", value = " + value); - - if (key.equals("parentKeyId")) { - image.setParentKeyId(Long.parseLong(value)); - } else if (key.equals("type")) { - image.setType(Byte.parseByte(value)); - } - } else { - log.info("File: " + item.getFieldName() + ", key = " + item.getName()); - - String contentType = item.getContentType(); - - image.setImageType(contentType); - image.setImage(ByteStreams.toByteArray(stream)); - } - } - - if (image.getParentKeyId() > 0) { - - Key imageKey = ImageHelper.saveEntry(image); - image.setKey(imageKey); - - // add the new image key id to the parent business or queue - if (image.getType() == ImageEntry.TYPE_LOGO) { - BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(image.getParentKeyId()); - if (businessEntry != null) { - businessEntry.setLogoImageKeyId(image.getKey().getId()); - } else { - throw new Exception("Can't find parent business with Id: " + image.getParentKeyId()); - } - BusinessHelper.saveEntry(businessEntry); - } else { - QueueEntry queueEntry = QueueHelper.getEntryByKeyId(image.getParentKeyId()); - if (queueEntry != null) { - queueEntry.setPhotoImageKeyId(image.getKey().getId()); - } else { - throw new Exception("Can't find parent queue with Id: " + image.getParentKeyId()); - } - QueueHelper.saveEntry(queueEntry); - } - - // remove the image data to use the same object as response - image.setImage(null); - - responseObject.setContent(image); - response = responseObject.toJSON(); - } else { - throw new Exception("Invalid parentKeyId specified"); - } - } catch (Exception e) { - responseObject.setException(e); - response = responseObject.toJSON(); - e.printStackTrace(); - } - - res.setContentType("application/json"); - res.addHeader("Access-Control-Allow-Origin", "*"); + private static final Logger log = Logger.getLogger(ImageServlet.class.getName()); + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { + + String requestUrl = req.getRequestURL().toString(); + + try { + // image request pattern: .../image/[imageKeyId]/[size].jpg + + String imageSizeString = ParserHelper.getStringAfter("/", req.getPathInfo(), ParserHelper.MODE_LAST_LAST); + if (imageSizeString.contains(".png")) { + imageSizeString = ParserHelper.getStringBefore(".png", imageSizeString); + } else if (imageSizeString.contains(".jpg")) { + imageSizeString = ParserHelper.getStringBefore(".jpg", imageSizeString); + } else { + throw new Exception("Unknown file type requested"); + } + + String imageKeyIdParam = ParserHelper.getStringBefore("/" + imageSizeString, req.getPathInfo(), ParserHelper.MODE_LAST_LAST); + imageKeyIdParam = ParserHelper.getStringAfter("/", imageKeyIdParam, ParserHelper.MODE_LAST_LAST); + long imageKeyId = Long.parseLong(imageKeyIdParam); + + if (imageKeyId < 0) { + throw new Exception("Image key ID is invalid"); + } + + ImageQuery imageQuery = new ImageQuery(); + ImageEntry image = imageQuery.getImageByKeyId(imageKeyId); + + if (image.getImageType() == null || image.getImage() == null) { + // image = EntryManager.fetchImageFromUrl(image.getUrl()); + throw new Exception("Image data unavailable"); + } + + resp.setContentType(image.getImageType()); + resp.getOutputStream().write(ImageHelper.resizeImage(image.getImage(), imageSizeString)); + } catch (Exception e) { + resp.sendRedirect("/static/images/not_found.jpg"); + } + } + + @Override + public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + ApiResponse responseObject = new ApiResponse(); + String response = ""; + + try { + ServletFileUpload upload = new ServletFileUpload(); + res.setContentType("text/plain"); + + FileItemIterator iterator = upload.getItemIterator(req); + + ImageEntry image = new ImageEntry(); + + while (iterator.hasNext()) { + FileItemStream item = iterator.next(); + InputStream stream = item.openStream(); + + if (item.isFormField()) { + String key = item.getFieldName(); + String value = Streams.asString(stream); + log.info("Form field: " + key + ", value = " + value); + + if (key.equals("parentKeyId")) { + image.setParentKeyId(Long.parseLong(value)); + } else if (key.equals("type")) { + image.setType(Byte.parseByte(value)); + } + } else { + log.info("File: " + item.getFieldName() + ", key = " + item.getName()); + + String contentType = item.getContentType(); + + image.setImageType(contentType); + image.setImage(ByteStreams.toByteArray(stream)); + } + } + + if (image.getParentKeyId() > 0) { + + Key imageKey = ImageHelper.saveEntry(image); + image.setKey(imageKey); + + // add the new image key id to the parent business or queue + if (image.getType() == ImageEntry.TYPE_LOGO) { + BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(image.getParentKeyId()); + if (businessEntry != null) { + businessEntry.setLogoImageKeyId(image.getKey().getId()); + } else { + throw new Exception("Can't find parent business with Id: " + image.getParentKeyId()); + } + BusinessHelper.saveEntry(businessEntry); + } else { + QueueEntry queueEntry = QueueHelper.getEntryByKeyId(image.getParentKeyId()); + if (queueEntry != null) { + queueEntry.setPhotoImageKeyId(image.getKey().getId()); + } else { + throw new Exception("Can't find parent queue with Id: " + image.getParentKeyId()); + } + QueueHelper.saveEntry(queueEntry); + } + + // remove the image data to use the same object as response + image.setImage(null); + + responseObject.setContent(image); + response = responseObject.toJSON(); + } else { + throw new Exception("Invalid parentKeyId specified"); + } + } catch (Exception e) { + responseObject.setException(e); + response = responseObject.toJSON(); + e.printStackTrace(); + } + + res.setContentType("application/json"); + res.addHeader("Access-Control-Allow-Origin", "*"); res.getWriter().write(response); res.getWriter().flush(); res.getWriter().close(); - } + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/MergeHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/MergeHelper.java index 3abd0c4..2889525 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/MergeHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/MergeHelper.java @@ -4,36 +4,36 @@ public class MergeHelper { - public static String mergeStrings(String existingValue, String newValue) { - if (!ParserHelper.containsAnyValue(existingValue)) { - return newValue; - } else { - return existingValue; - } - } - - public static List mergeListsOfString(List existingList, List newList) { - if (existingList == null || existingList.size() == 0) { - return newList; - } - for (String newString: newList) { - if (!existingList.contains(newString)) { - existingList.add(newString); - } - } - return existingList; - } - - public static List mergeListsOfLong(List existingList, List newList) { - if (existingList == null || existingList.size() == 0) { - return newList; - } - for (long newValue: newList) { - if (!existingList.contains(newValue)) { - existingList.add(newValue); - } - } - return existingList; - } - + public static String mergeStrings(String existingValue, String newValue) { + if (!ParserHelper.containsAnyValue(existingValue)) { + return newValue; + } else { + return existingValue; + } + } + + public static List mergeListsOfString(List existingList, List newList) { + if (existingList == null || existingList.size() == 0) { + return newList; + } + for (String newString : newList) { + if (!existingList.contains(newString)) { + existingList.add(newString); + } + } + return existingList; + } + + public static List mergeListsOfLong(List existingList, List newList) { + if (existingList == null || existingList.size() == 0) { + return newList; + } + for (long newValue : newList) { + if (!existingList.contains(newValue)) { + existingList.add(newValue); + } + } + return existingList; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/ParserHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/ParserHelper.java index 2d059bb..86c8379 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/ParserHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/ParserHelper.java @@ -12,216 +12,216 @@ public class ParserHelper { - public static final int MODE_FIRST_FIRST = 0; - public static final int MODE_FIRST_LAST = 1; - public static final int MODE_LAST_FIRST = 2; - public static final int MODE_LAST_LAST = 3; - - public static final int TOLERANCE_NONE = 0; - public static final int TOLERANCE_LOW = 1; - public static final int TOLERANCE_MEDIUM = 2; - public static final int TOLERANCE_HIGH = 3; - - public static String getStringBetween(String startIdentifier, String endIdentifier, String sourceString) throws Exception { - return getStringBetween(startIdentifier, endIdentifier, sourceString, MODE_FIRST_FIRST); - } - - public static String getStringBetween(String startIdentifier, String endIdentifier, String sourceString, int mode) throws Exception { - String result = sourceString; - - int startIndex; - int endIndex; - - switch (mode) { - case MODE_FIRST_FIRST: { - startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); - sourceString = sourceString.substring(startIndex); - endIndex = sourceString.indexOf(endIdentifier); - break; - } - case MODE_FIRST_LAST: { - startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); - sourceString = sourceString.substring(startIndex); - endIndex = sourceString.lastIndexOf(endIdentifier); - break; - } - case MODE_LAST_FIRST: { - startIndex = sourceString.lastIndexOf(startIdentifier) + startIdentifier.length(); - sourceString = sourceString.substring(startIndex); - endIndex = sourceString.indexOf(endIdentifier); - break; - } - case MODE_LAST_LAST: { - startIndex = sourceString.lastIndexOf(startIdentifier) + startIdentifier.length(); - sourceString = sourceString.substring(startIndex); - endIndex = sourceString.lastIndexOf(endIdentifier); - break; - } - default: { - startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); - sourceString = sourceString.substring(startIndex); - endIndex = sourceString.indexOf(endIdentifier); - break; - } - } - - result = sourceString.substring(0, endIndex); - - return result; - } - - public static String getStringAfter(String startIdentifier, String sourceString) throws Exception { - return getStringAfter(startIdentifier, sourceString, MODE_FIRST_FIRST); - } - - public static String getStringAfter(String startIdentifier, String sourceString, int mode) throws Exception { - String result = sourceString; - - int startIndex; - int endIndex; - - if (mode == MODE_FIRST_FIRST || mode == MODE_FIRST_LAST) { - startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); - } else { - startIndex = sourceString.lastIndexOf(startIdentifier) + startIdentifier.length(); - } - - result = sourceString.substring(startIndex); - - return result; - } - - public static String getStringBefore(String startIdentifier, String sourceString) throws Exception { - return getStringBefore(startIdentifier, sourceString, MODE_FIRST_FIRST); - } - - public static String getStringBefore(String startIdentifier, String sourceString, int mode) throws Exception { - String result = sourceString; - - int startIndex; - int endIndex; - - if (mode == MODE_FIRST_FIRST || mode == MODE_FIRST_LAST) { - startIndex = sourceString.indexOf(startIdentifier); - } else { - startIndex = sourceString.lastIndexOf(startIdentifier); - } - - result = sourceString.substring(0, startIndex); - - return result; - } - - public static String getStringInTag(String tagName, String sourceString) throws Exception { - String result = sourceString; - - String startIdentifier = "<" + tagName + " "; - String endIdentifier = ""; - - if (sourceString.contains(startIdentifier) && sourceString.contains(endIdentifier)) { - result = getStringBetween(startIdentifier, endIdentifier, result, MODE_FIRST_FIRST); - result = getStringAfter(">", result); - } - - return result; - } - - public static String getPageSource(String requestUrl) throws Exception { - //URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService(); - //HTTPResponse response = fetchService.fetch(new URL(requestUrl)); - - URL url = new URL(requestUrl); - BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); - StringBuilder sb = new StringBuilder(); - String line; - - while ((line = reader.readLine()) != null) { - sb.append(line); - } - reader.close(); - - return sb.toString(); - } - - public static boolean isSameString(String value1, String value2, int tolerance) { - value1 = value1.toLowerCase().trim(); - value2 = value2.toLowerCase().trim(); - - if (tolerance > TOLERANCE_NONE) { - value1 = removeSeperatorsFromString(value1); - value2 = removeSeperatorsFromString(value2); - } - - return value1.equals(value2); - } - - public static boolean containsAnyValue(String value) { - if (value != null && value.length() > 0) { - return true; - } else { - return false; - } - } - - public static String removeSeperatorsFromString(String value) { - value = value.replace(" ", ""); - value = value.replace("_", ""); - value = value.replace("-", ""); - value = value.replace(".", ""); - return value; - } - - public static String removeRegexInString(String sourceString, String regexString) { - return replaceRegexInString(sourceString, "", regexString); - } - - public static String replaceRegexInString(String sourceString, String replace, String regexString) { - String result = sourceString; - try { - String foundPart = null; - Pattern regex = Pattern.compile(regexString); - Matcher regexMatcher = regex.matcher(sourceString); - if (regexMatcher.find()) { - foundPart = regexMatcher.group(); - } - result = sourceString.replace(foundPart, replace); - } catch (Exception ex) { - // Syntax error in the regular expression - } - return result; - } - - public static int countOccurrencesInString(String search, String source) { - int lastIndex = 0; - int count = 0; - - while (lastIndex != -1){ - lastIndex = source.indexOf(search, lastIndex); - if (lastIndex != -1){ - count ++; - lastIndex+=search.length(); - } - } - - return count; - } - - public static boolean containsSpecialCharacters(String source) { - if (source.contains("<") || source.contains(">")) { - return true; - } - return false; - } - - public static boolean isValidUrl(String urlString) { - if (!urlString.startsWith("http")) { - return false; - } - try { - URL url = new URL(urlString); - return true; - } catch (Exception e) { - return false; - } - } + public static final int MODE_FIRST_FIRST = 0; + public static final int MODE_FIRST_LAST = 1; + public static final int MODE_LAST_FIRST = 2; + public static final int MODE_LAST_LAST = 3; + + public static final int TOLERANCE_NONE = 0; + public static final int TOLERANCE_LOW = 1; + public static final int TOLERANCE_MEDIUM = 2; + public static final int TOLERANCE_HIGH = 3; + + public static String getStringBetween(String startIdentifier, String endIdentifier, String sourceString) throws Exception { + return getStringBetween(startIdentifier, endIdentifier, sourceString, MODE_FIRST_FIRST); + } + + public static String getStringBetween(String startIdentifier, String endIdentifier, String sourceString, int mode) throws Exception { + String result = sourceString; + + int startIndex; + int endIndex; + + switch (mode) { + case MODE_FIRST_FIRST: { + startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); + sourceString = sourceString.substring(startIndex); + endIndex = sourceString.indexOf(endIdentifier); + break; + } + case MODE_FIRST_LAST: { + startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); + sourceString = sourceString.substring(startIndex); + endIndex = sourceString.lastIndexOf(endIdentifier); + break; + } + case MODE_LAST_FIRST: { + startIndex = sourceString.lastIndexOf(startIdentifier) + startIdentifier.length(); + sourceString = sourceString.substring(startIndex); + endIndex = sourceString.indexOf(endIdentifier); + break; + } + case MODE_LAST_LAST: { + startIndex = sourceString.lastIndexOf(startIdentifier) + startIdentifier.length(); + sourceString = sourceString.substring(startIndex); + endIndex = sourceString.lastIndexOf(endIdentifier); + break; + } + default: { + startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); + sourceString = sourceString.substring(startIndex); + endIndex = sourceString.indexOf(endIdentifier); + break; + } + } + + result = sourceString.substring(0, endIndex); + + return result; + } + + public static String getStringAfter(String startIdentifier, String sourceString) throws Exception { + return getStringAfter(startIdentifier, sourceString, MODE_FIRST_FIRST); + } + + public static String getStringAfter(String startIdentifier, String sourceString, int mode) throws Exception { + String result = sourceString; + + int startIndex; + int endIndex; + + if (mode == MODE_FIRST_FIRST || mode == MODE_FIRST_LAST) { + startIndex = sourceString.indexOf(startIdentifier) + startIdentifier.length(); + } else { + startIndex = sourceString.lastIndexOf(startIdentifier) + startIdentifier.length(); + } + + result = sourceString.substring(startIndex); + + return result; + } + + public static String getStringBefore(String startIdentifier, String sourceString) throws Exception { + return getStringBefore(startIdentifier, sourceString, MODE_FIRST_FIRST); + } + + public static String getStringBefore(String startIdentifier, String sourceString, int mode) throws Exception { + String result = sourceString; + + int startIndex; + int endIndex; + + if (mode == MODE_FIRST_FIRST || mode == MODE_FIRST_LAST) { + startIndex = sourceString.indexOf(startIdentifier); + } else { + startIndex = sourceString.lastIndexOf(startIdentifier); + } + + result = sourceString.substring(0, startIndex); + + return result; + } + + public static String getStringInTag(String tagName, String sourceString) throws Exception { + String result = sourceString; + + String startIdentifier = "<" + tagName + " "; + String endIdentifier = ""; + + if (sourceString.contains(startIdentifier) && sourceString.contains(endIdentifier)) { + result = getStringBetween(startIdentifier, endIdentifier, result, MODE_FIRST_FIRST); + result = getStringAfter(">", result); + } + + return result; + } + + public static String getPageSource(String requestUrl) throws Exception { + //URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService(); + //HTTPResponse response = fetchService.fetch(new URL(requestUrl)); + + URL url = new URL(requestUrl); + BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); + StringBuilder sb = new StringBuilder(); + String line; + + while ((line = reader.readLine()) != null) { + sb.append(line); + } + reader.close(); + + return sb.toString(); + } + + public static boolean isSameString(String value1, String value2, int tolerance) { + value1 = value1.toLowerCase().trim(); + value2 = value2.toLowerCase().trim(); + + if (tolerance > TOLERANCE_NONE) { + value1 = removeSeperatorsFromString(value1); + value2 = removeSeperatorsFromString(value2); + } + + return value1.equals(value2); + } + + public static boolean containsAnyValue(String value) { + if (value != null && value.length() > 0) { + return true; + } else { + return false; + } + } + + public static String removeSeperatorsFromString(String value) { + value = value.replace(" ", ""); + value = value.replace("_", ""); + value = value.replace("-", ""); + value = value.replace(".", ""); + return value; + } + + public static String removeRegexInString(String sourceString, String regexString) { + return replaceRegexInString(sourceString, "", regexString); + } + + public static String replaceRegexInString(String sourceString, String replace, String regexString) { + String result = sourceString; + try { + String foundPart = null; + Pattern regex = Pattern.compile(regexString); + Matcher regexMatcher = regex.matcher(sourceString); + if (regexMatcher.find()) { + foundPart = regexMatcher.group(); + } + result = sourceString.replace(foundPart, replace); + } catch (Exception ex) { + // Syntax error in the regular expression + } + return result; + } + + public static int countOccurrencesInString(String search, String source) { + int lastIndex = 0; + int count = 0; + + while (lastIndex != -1) { + lastIndex = source.indexOf(search, lastIndex); + if (lastIndex != -1) { + count++; + lastIndex += search.length(); + } + } + + return count; + } + + public static boolean containsSpecialCharacters(String source) { + if (source.contains("<") || source.contains(">")) { + return true; + } + return false; + } + + public static boolean isValidUrl(String urlString) { + if (!urlString.startsWith("http")) { + return false; + } + try { + URL url = new URL(urlString); + return true; + } catch (Exception e) { + return false; + } + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/RequestFilter.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/RequestFilter.java index 881adc9..895d592 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/RequestFilter.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/RequestFilter.java @@ -31,115 +31,117 @@ public class RequestFilter implements Filter { * to its real destination. We can use it to filter requests. */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) - throws IOException, ServletException { - + throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) request; String uri = req.getRequestURI(); String path = uri.substring(req.getContextPath().length()); - + if (path.startsWith("/static") || path.startsWith("/_ah") || path.startsWith("/intelliq")) { - // preserve special routes - filterChain.doFilter(request, response); + // preserve special routes + filterChain.doFilter(request, response); } else { - // forward request to matching servlet - RequestDispatcher rd = request.getRequestDispatcher("/intelliq" + path); - rd.forward(request, response); + // forward request to matching servlet + RequestDispatcher rd = request.getRequestDispatcher("/intelliq" + path); + rd.forward(request, response); } } - + // method that can be used to forward a request to a given path public static void forwardRequest(ServletContext context, HttpServletRequest req, HttpServletResponse resp, String requestPath) { - RequestDispatcher rd = context.getRequestDispatcher(requestPath); - HttpServletRequest wrapped = new HttpServletRequestWrapper(req) { - public String getServletPath() { return ""; } - }; - try { - rd.forward(wrapped, resp); - } catch (Exception e) { - e.printStackTrace(); - } - } - + RequestDispatcher rd = context.getRequestDispatcher(requestPath); + HttpServletRequest wrapped = new HttpServletRequestWrapper(req) { + public String getServletPath() { + return ""; + } + }; + try { + rd.forward(wrapped, resp); + } catch (Exception e) { + e.printStackTrace(); + } + } + // creates a map that contains all available header fields - public static Map getHeaderInfo(HttpServletRequest req) { - Map map = new HashMap(); - Enumeration headerNames = req.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String key = (String) headerNames.nextElement(); - String value = req.getHeader(key); - map.put(key, value); - } - map.put("RemoteHost", req.getRemoteHost()); - return map; + public static Map getHeaderInfo(HttpServletRequest req) { + Map map = new HashMap(); + Enumeration headerNames = req.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String key = (String) headerNames.nextElement(); + String value = req.getHeader(key); + map.put(key, value); + } + map.put("RemoteHost", req.getRemoteHost()); + return map; } - + // reads a cookie from a given requests public static String getCookieValue(HttpServletRequest req, String name) { - String value = null; + String value = null; Cookie cookie; Cookie[] allCookies = req.getCookies(); if (allCookies != null) { - for (int i = 0; i < allCookies.length; i++) { - cookie = allCookies[i]; - if (cookie.getName().equals(name)) { - value = cookie.getValue(); - } - } + for (int i = 0; i < allCookies.length; i++) { + cookie = allCookies[i]; + if (cookie.getName().equals(name)) { + value = cookie.getValue(); + } + } } - return value; + return value; } - + // creates a url containing all request parameters public static String getFullUrlFromRequest(HttpServletRequest req) { - StringBuilder builder = new StringBuilder(); - builder.append(req.getRequestURL().toString() + "?"); - - Iterator entries = req.getParameterMap().entrySet().iterator(); - while (entries.hasNext()) { - Entry thisEntry = (Entry) entries.next(); - String key = (String) thisEntry.getKey(); - String value = ((String[]) thisEntry.getValue())[0]; - builder.append(key + "=" + value + "&"); - } - - String url = builder.toString(); - url = url.substring(0, url.length() - 1); - return url; + StringBuilder builder = new StringBuilder(); + builder.append(req.getRequestURL().toString() + "?"); + + Iterator entries = req.getParameterMap().entrySet().iterator(); + while (entries.hasNext()) { + Entry thisEntry = (Entry) entries.next(); + String key = (String) thisEntry.getKey(); + String value = ((String[]) thisEntry.getValue())[0]; + builder.append(key + "=" + value + "&"); + } + + String url = builder.toString(); + url = url.substring(0, url.length() - 1); + return url; } - + // gets the (lowercase) country code if present public static String getRequestCountryCode(HttpServletRequest req) { - String countryCode = req.getHeader("X-AppEngine-Country"); - if (countryCode != null) { - countryCode = countryCode.toLowerCase(); - } else { - countryCode = "us"; // serve English as default - } - return countryCode; + String countryCode = req.getHeader("X-AppEngine-Country"); + if (countryCode != null) { + countryCode = countryCode.toLowerCase(); + } else { + countryCode = "us"; // serve English as default + } + return countryCode; } - + // tries to detect the language of the request origin public static String getRequestLanguageCode(HttpServletRequest req) { - // check if request url already contains a known locale - String requestUrl = req.getRequestURL().toString(); - if (requestUrl.contains("/de/")) { - return "de"; - } else if (requestUrl.contains("/en/")) { - return "en"; - } - - // if no locale is specified, use country code - String countryCode = getRequestCountryCode(req); - - // German speaking - if (countryCode.equals("de") || countryCode.equals("au") || countryCode.equals("ch") || countryCode.equals("lu")) { - return "de"; - } - - // for everyone else English will do - return "en"; + // check if request url already contains a known locale + String requestUrl = req.getRequestURL().toString(); + if (requestUrl.contains("/de/")) { + return "de"; + } else if (requestUrl.contains("/en/")) { + return "en"; + } + + // if no locale is specified, use country code + String countryCode = getRequestCountryCode(req); + + // German speaking + if (countryCode.equals("de") || countryCode.equals("au") || countryCode.equals("ch") || countryCode.equals("lu")) { + return "de"; + } + + // for everyone else English will do + return "en"; } - + public FilterConfig getFilterConfig() { return filterConfig; } @@ -148,6 +150,7 @@ public void init(FilterConfig filterConfig) { this.filterConfig = filterConfig; } - public void destroy() {} - + public void destroy() { + } + } \ No newline at end of file diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiRequest.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiRequest.java index aa1ff8a..a1f4a25 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiRequest.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiRequest.java @@ -11,156 +11,156 @@ import com.intelliq.appengine.datastore.entries.UserEntry; public class ApiRequest { - - private static final Logger log = Logger.getLogger(ApiRequest.class.getName()); - - HttpServletRequest request; - UserEntry user; - boolean triedToParseToken = false; - boolean triedToGetUserFromToken = false; - - public ApiRequest (HttpServletRequest req) { - request = req; - } - - public UserEntry getUserFromToken() throws Exception { - triedToGetUserFromToken = true; - UserEntry parsedUser = parseUserFromToken(); - user = getUserFromToken(parsedUser); - return user; - } - - public UserEntry getUserFromToken(UserEntry parsedUser) throws Exception { - UserEntry existingUser = null; - if (parsedUser.getGoogleUserId() != null && existingUser == null) { - existingUser = UserHelper.getUserByGoogleUserId(parsedUser.getGoogleUserId()); - } - if (parsedUser.getFacebookUserId() != null && existingUser == null) { - existingUser = UserHelper.getUserByFacebookUserId(parsedUser.getGoogleUserId()); - } - if (existingUser == null) { - throw new Exception("No registered user found"); - } - return existingUser; - } - - public UserEntry parseUserFromToken() throws Exception { - triedToParseToken = true; - - // check for a Google login - String googleIdToken = getGoogleIdToken(); - if (ParserHelper.containsAnyValue(googleIdToken)) { - Payload payload = Authenticator.validateGoogleIdToken(googleIdToken); - UserEntry googleUser = new UserEntry().parseFromGooglePayload(payload); - return googleUser; - } - - // check for a Facebook login - String facebookIdToken = getFacebookIdToken(); - if (ParserHelper.containsAnyValue(facebookIdToken)) { - // TODO: Facebook token processing - throw new Exception("Facebook login not yet supported"); - } - - throw new Exception("No token specified"); - } - - public String getGoogleIdToken() { - return request.getParameter("googleIdToken"); - } - - public String getFacebookIdToken() { - return request.getParameter("facebookIdToken"); - } - - /** - * Parameter helper - */ - public String getParameter(String key) { - return getParameter(key, null); - } - - public String getParameter(String key, String defaultValue) { - String value = request.getParameter(key); - if (value == null || value.length() < 1) { - value = defaultValue; - } - return value; - } - - public long getParameterAsLong(String key, long defaultValue) { - try { - return Long.parseLong(request.getParameter(key)); - } catch (Exception ex) { - return defaultValue; - } - } - - public int getParameterAsInt(String key, int defaultValue) { - try { - return Integer.parseInt(request.getParameter(key)); - } catch (Exception ex) { - return defaultValue; - } - } - - public boolean getParameterAsBoolean(String key, boolean defaultValue) { - try { - return request.getParameter(key).equals("true"); - } catch (Exception ex) { - return defaultValue; - } - } - - public float getParameterAsFloat(String key, float defaultValue) { - try { - return Float.parseFloat(request.getParameter(key)); - } catch (Exception ex) { - return defaultValue; - } - } - - public String getHost() { - return request.getHeader("Host"); - } - - public String getCity() { - return request.getHeader("X-AppEngine-City"); - } - - public String getCountry() { - return request.getHeader("X-AppEngine-Country"); - } - - public String getRequestIP() { - return request.getHeader("X-Forwarded-For"); - } - - public HttpServletRequest getRequest() { - return request; - } - - public void setRequest(HttpServletRequest request) { - this.request = request; - } - - public UserEntry getUser() { - if (!triedToGetUserFromToken) { - try { - user = getUserFromToken(); - } catch (Exception ex) { - log.warning("Unable to get user from token: " + ex.getMessage()); - } - } - return user; - } - - public void setUser(UserEntry user) { - this.user = user; - } - - public String getUrl() { - return request.getRequestURL().toString(); - } - + + private static final Logger log = Logger.getLogger(ApiRequest.class.getName()); + + HttpServletRequest request; + UserEntry user; + boolean triedToParseToken = false; + boolean triedToGetUserFromToken = false; + + public ApiRequest(HttpServletRequest req) { + request = req; + } + + public UserEntry getUserFromToken() throws Exception { + triedToGetUserFromToken = true; + UserEntry parsedUser = parseUserFromToken(); + user = getUserFromToken(parsedUser); + return user; + } + + public UserEntry getUserFromToken(UserEntry parsedUser) throws Exception { + UserEntry existingUser = null; + if (parsedUser.getGoogleUserId() != null && existingUser == null) { + existingUser = UserHelper.getUserByGoogleUserId(parsedUser.getGoogleUserId()); + } + if (parsedUser.getFacebookUserId() != null && existingUser == null) { + existingUser = UserHelper.getUserByFacebookUserId(parsedUser.getGoogleUserId()); + } + if (existingUser == null) { + throw new Exception("No registered user found"); + } + return existingUser; + } + + public UserEntry parseUserFromToken() throws Exception { + triedToParseToken = true; + + // check for a Google login + String googleIdToken = getGoogleIdToken(); + if (ParserHelper.containsAnyValue(googleIdToken)) { + Payload payload = Authenticator.validateGoogleIdToken(googleIdToken); + UserEntry googleUser = new UserEntry().parseFromGooglePayload(payload); + return googleUser; + } + + // check for a Facebook login + String facebookIdToken = getFacebookIdToken(); + if (ParserHelper.containsAnyValue(facebookIdToken)) { + // TODO: Facebook token processing + throw new Exception("Facebook login not yet supported"); + } + + throw new Exception("No token specified"); + } + + public String getGoogleIdToken() { + return request.getParameter("googleIdToken"); + } + + public String getFacebookIdToken() { + return request.getParameter("facebookIdToken"); + } + + /** + * Parameter helper + */ + public String getParameter(String key) { + return getParameter(key, null); + } + + public String getParameter(String key, String defaultValue) { + String value = request.getParameter(key); + if (value == null || value.length() < 1) { + value = defaultValue; + } + return value; + } + + public long getParameterAsLong(String key, long defaultValue) { + try { + return Long.parseLong(request.getParameter(key)); + } catch (Exception ex) { + return defaultValue; + } + } + + public int getParameterAsInt(String key, int defaultValue) { + try { + return Integer.parseInt(request.getParameter(key)); + } catch (Exception ex) { + return defaultValue; + } + } + + public boolean getParameterAsBoolean(String key, boolean defaultValue) { + try { + return request.getParameter(key).equals("true"); + } catch (Exception ex) { + return defaultValue; + } + } + + public float getParameterAsFloat(String key, float defaultValue) { + try { + return Float.parseFloat(request.getParameter(key)); + } catch (Exception ex) { + return defaultValue; + } + } + + public String getHost() { + return request.getHeader("Host"); + } + + public String getCity() { + return request.getHeader("X-AppEngine-City"); + } + + public String getCountry() { + return request.getHeader("X-AppEngine-Country"); + } + + public String getRequestIP() { + return request.getHeader("X-Forwarded-For"); + } + + public HttpServletRequest getRequest() { + return request; + } + + public void setRequest(HttpServletRequest request) { + this.request = request; + } + + public UserEntry getUser() { + if (!triedToGetUserFromToken) { + try { + user = getUserFromToken(); + } catch (Exception ex) { + log.warning("Unable to get user from token: " + ex.getMessage()); + } + } + return user; + } + + public void setUser(UserEntry user) { + this.user = user; + } + + public String getUrl() { + return request.getRequestURL().toString(); + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiResponse.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiResponse.java index 7ab506b..c2242b8 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiResponse.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiResponse.java @@ -6,59 +6,59 @@ public class ApiResponse { - int statusCode = HttpServletResponse.SC_OK; - String statusMessage = "OK"; - Object content; - - public String toJSON() { - String json = "{}"; - try { - Gson gson = new Gson(); - json = gson.toJson(this); - } catch (Exception ex) { - - } - return json; - } - - public void setException(Exception exception) { - if (exception != null) { - if (exception.getMessage() != null) { - statusMessage = exception.getMessage(); - } else { - statusMessage = exception.toString(); - } - } else { - statusMessage = "Unknown internal server error"; - } - if (statusCode == HttpServletResponse.SC_OK) { - statusCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR; - } - } + int statusCode = HttpServletResponse.SC_OK; + String statusMessage = "OK"; + Object content; - public int getStatusCode() { - return statusCode; - } + public String toJSON() { + String json = "{}"; + try { + Gson gson = new Gson(); + json = gson.toJson(this); + } catch (Exception ex) { - public void setStatusCode(int statusCode) { - this.statusCode = statusCode; - } + } + return json; + } - public String getStatusMessage() { - return statusMessage; - } + public void setException(Exception exception) { + if (exception != null) { + if (exception.getMessage() != null) { + statusMessage = exception.getMessage(); + } else { + statusMessage = exception.toString(); + } + } else { + statusMessage = "Unknown internal server error"; + } + if (statusCode == HttpServletResponse.SC_OK) { + statusCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR; + } + } - public void setStatusMessage(String statusMessage) { - this.statusMessage = statusMessage; - } + public int getStatusCode() { + return statusCode; + } + + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + public String getStatusMessage() { + return statusMessage; + } + + public void setStatusMessage(String statusMessage) { + this.statusMessage = statusMessage; + } + + public Object getContent() { + return content; + } + + public void setContent(Object content) { + this.content = content; + } - public Object getContent() { - return content; - } - public void setContent(Object content) { - this.content = content; - } - - } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiServlet.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiServlet.java index 004cfea..01c2707 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiServlet.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/ApiServlet.java @@ -21,151 +21,151 @@ @SuppressWarnings("serial") public class ApiServlet extends HttpServlet { - private static final Logger log = Logger.getLogger(ApiServlet.class.getName()); - - private Cache cache; - - @Override - public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { - - ApiRequest apiRequest = new ApiRequest(req); - String requestUrl = apiRequest.getUrl(); - - String response = null; - ApiResponse apiResponse = new ApiResponse(); - - try { - Endpoint endpoint = EndpointManager.getEndpointForRequest(apiRequest); - if (endpoint == null) { - throw new Exception("Unknown endpoint called"); - } - - if (shouldUseCache(req)) { - response = getCachedResponse(req); - } - - if (response == null) { - // no cached response available - apiResponse = endpoint.processRequest(apiRequest); - response = apiResponse.toJSON(); - addResponseToCache(req, response); - } else { - log.severe("Response loaded from cache"); - } - } catch (Exception e) { - apiResponse.setException(e); - response = apiResponse.toJSON(); - e.printStackTrace(); - } - - resp.setContentType("application/json; charset=UTF-8"); - resp.addHeader("Access-Control-Allow-Origin", "*"); - resp.getWriter().write(response); - resp.getWriter().flush(); - resp.getWriter().close(); - } - - public void doGetOld(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { - - ApiRequest apiRequest = new ApiRequest(req); - String requestUrl = req.getRequestURL().toString(); - - String response = null; - ApiResponse responseObject = new ApiResponse(); - - try { - if (shouldUseCache(req)) { - response = getCachedResponse(req); - } - - if (response == null) { - // no cached response available - if (requestUrl.contains("/test/")) { - responseObject = processTestRequest(req); - } else if (requestUrl.contains("/header/")) { - responseObject = processHeaderRequest(req); - } else { - RequestFilter.forwardRequest(getServletContext(), req, resp, "/intelliq/"); - return; - } - response = responseObject.toJSON(); - addResponseToCache(req, response); - } else { - log.severe("Response loaded from cache"); - } - } catch (Exception e) { - responseObject.setException(e); - response = responseObject.toJSON(); - e.printStackTrace(); - } - - resp.setContentType("application/json; charset=UTF-8"); - resp.addHeader("Access-Control-Allow-Origin", "*"); - resp.getWriter().write(response); - resp.getWriter().flush(); - resp.getWriter().close(); - } - - public boolean shouldUseCache(HttpServletRequest req) { - cache = getCache(); - String invalidateCacheParam = req.getParameter("invalidateCache"); - boolean invalidateCache = invalidateCacheParam != null && invalidateCacheParam.equals("true"); - - if (!invalidateCache && !req.getRequestURL().toString().contains("/header/")) { - //TODO: return true - return false; - } else { - return false; - } - } - - public Cache getCache() { - Cache newCache = null; - try { - CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory(); - Map properties = new HashMap<>(); - properties.put(GCacheFactory.EXPIRATION_DELTA, 30); // cache for 30 seconds - newCache = cacheFactory.createCache(properties); - } catch (Exception ex) { - log.warning("Unable to create cache"); - } - return newCache; - } - - public String getCachedResponse(HttpServletRequest req) { - String response = null; - try { - String cacheKey = RequestFilter.getFullUrlFromRequest(req); - response = (String) cache.get(cacheKey); - } catch (Exception ex) { - - } - return response; - } - - public void addResponseToCache(HttpServletRequest req, String response) { - try { - String cacheKey = RequestFilter.getFullUrlFromRequest(req); - cache.put(cacheKey, response); - } catch (Exception ex) { - - } - } - - public ApiResponse processHeaderRequest(HttpServletRequest req) throws Exception { - ApiResponse responseObject = new ApiResponse(); - responseObject.setContent(RequestFilter.getHeaderInfo(req)); - return responseObject; - } - - public ApiResponse processTestRequest(HttpServletRequest req) throws Exception { - ApiResponse responseObject = new ApiResponse(); - - String idToken = req.getParameter("googleIdToken"); - Object result = Authenticator.validateGoogleIdToken(idToken); - - responseObject.setContent(result); - return responseObject; - } + private static final Logger log = Logger.getLogger(ApiServlet.class.getName()); + + private Cache cache; + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { + + ApiRequest apiRequest = new ApiRequest(req); + String requestUrl = apiRequest.getUrl(); + + String response = null; + ApiResponse apiResponse = new ApiResponse(); + + try { + Endpoint endpoint = EndpointManager.getEndpointForRequest(apiRequest); + if (endpoint == null) { + throw new Exception("Unknown endpoint called"); + } + + if (shouldUseCache(req)) { + response = getCachedResponse(req); + } + + if (response == null) { + // no cached response available + apiResponse = endpoint.processRequest(apiRequest); + response = apiResponse.toJSON(); + addResponseToCache(req, response); + } else { + log.severe("Response loaded from cache"); + } + } catch (Exception e) { + apiResponse.setException(e); + response = apiResponse.toJSON(); + e.printStackTrace(); + } + + resp.setContentType("application/json; charset=UTF-8"); + resp.addHeader("Access-Control-Allow-Origin", "*"); + resp.getWriter().write(response); + resp.getWriter().flush(); + resp.getWriter().close(); + } + + public void doGetOld(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { + + ApiRequest apiRequest = new ApiRequest(req); + String requestUrl = req.getRequestURL().toString(); + + String response = null; + ApiResponse responseObject = new ApiResponse(); + + try { + if (shouldUseCache(req)) { + response = getCachedResponse(req); + } + + if (response == null) { + // no cached response available + if (requestUrl.contains("/test/")) { + responseObject = processTestRequest(req); + } else if (requestUrl.contains("/header/")) { + responseObject = processHeaderRequest(req); + } else { + RequestFilter.forwardRequest(getServletContext(), req, resp, "/intelliq/"); + return; + } + response = responseObject.toJSON(); + addResponseToCache(req, response); + } else { + log.severe("Response loaded from cache"); + } + } catch (Exception e) { + responseObject.setException(e); + response = responseObject.toJSON(); + e.printStackTrace(); + } + + resp.setContentType("application/json; charset=UTF-8"); + resp.addHeader("Access-Control-Allow-Origin", "*"); + resp.getWriter().write(response); + resp.getWriter().flush(); + resp.getWriter().close(); + } + + public boolean shouldUseCache(HttpServletRequest req) { + cache = getCache(); + String invalidateCacheParam = req.getParameter("invalidateCache"); + boolean invalidateCache = invalidateCacheParam != null && invalidateCacheParam.equals("true"); + + if (!invalidateCache && !req.getRequestURL().toString().contains("/header/")) { + //TODO: return true + return false; + } else { + return false; + } + } + + public Cache getCache() { + Cache newCache = null; + try { + CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory(); + Map properties = new HashMap<>(); + properties.put(GCacheFactory.EXPIRATION_DELTA, 30); // cache for 30 seconds + newCache = cacheFactory.createCache(properties); + } catch (Exception ex) { + log.warning("Unable to create cache"); + } + return newCache; + } + + public String getCachedResponse(HttpServletRequest req) { + String response = null; + try { + String cacheKey = RequestFilter.getFullUrlFromRequest(req); + response = (String) cache.get(cacheKey); + } catch (Exception ex) { + + } + return response; + } + + public void addResponseToCache(HttpServletRequest req, String response) { + try { + String cacheKey = RequestFilter.getFullUrlFromRequest(req); + cache.put(cacheKey, response); + } catch (Exception ex) { + + } + } + + public ApiResponse processHeaderRequest(HttpServletRequest req) throws Exception { + ApiResponse responseObject = new ApiResponse(); + responseObject.setContent(RequestFilter.getHeaderInfo(req)); + return responseObject; + } + + public ApiResponse processTestRequest(HttpServletRequest req) throws Exception { + ApiResponse responseObject = new ApiResponse(); + + String idToken = req.getParameter("googleIdToken"); + Object result = Authenticator.validateGoogleIdToken(idToken); + + responseObject.setContent(result); + return responseObject; + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/Authenticator.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/Authenticator.java index 6a24922..f8b56ec 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/Authenticator.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/Authenticator.java @@ -12,69 +12,69 @@ public final class Authenticator { - private static final Logger log = Logger.getLogger(Authenticator.class.getName()); - - public static final String CLIENT_ID_APP_ENGINE = "1008259459239-ic0lmsu9hhl6i929pav41u8smjbbc86s.apps.googleusercontent.com"; - public static final String CLIENT_ID_ANDROID = "1008259459239-hlmd8qnm626idv1b9b2p4bd8pfjdtndp.apps.googleusercontent.com"; - public static final String CLIENT_ID_ANDROID_DEBUG = "1008259459239-hj2tlbdbvk3qo8ar56dqf24s3atck2br.apps.googleusercontent.com"; - public static final String CLIENT_ID_IOS = ""; - public static final String CLIENT_ID_WEB = "1008259459239-t1huos5n6bhkin3is2jlqgkjv9h7mheh.apps.googleusercontent.com"; - - public static final String ISSUER_GOOGLE = "https://accounts.google.com"; - public static final String ISSUER_GOOGLE_LEGACY = "accounts.google.com"; - - private static final Set allowedClients = buildAllowedClients(); - private static final Set allowedIssuers = buildAllowedIssuers(); - - private static final GsonFactory jsonFactory = new GsonFactory(); - - private Authenticator() { - } - - public static Payload validateGoogleIdToken(String idTokenString) throws GeneralSecurityException, Exception { - GoogleIdToken idToken = GoogleIdToken.parse(jsonFactory, idTokenString); - if (idToken != null) { - Payload payload = idToken.getPayload(); - - // validate timestamps - long timestampNow = (new Date()).getTime(); - long timestampIssued = payload.getIssuedAtTimeSeconds() * 1000; - long timestampExpired = payload.getExpirationTimeSeconds() * 1000; - if (timestampIssued > timestampNow || timestampExpired < timestampNow) { - throw new GeneralSecurityException("Token expired"); - } - - // validate issuer - if (!allowedIssuers.contains(payload.getIssuer())) { - throw new GeneralSecurityException("Invalid token, issuer not allowed: " + payload.getIssuer()); - } - - // validate client - if (!allowedClients.contains(payload.getAuthorizedParty())) { - throw new GeneralSecurityException("Invalid token, client not allowed: " + payload.getAuthorizedParty()); - } - - return payload; - } else { - throw new GeneralSecurityException("No valid Google ID Token specified"); - } - } - - private static Set buildAllowedClients() { - Set allowedClients = new HashSet<>(); - allowedClients.add(CLIENT_ID_APP_ENGINE); - allowedClients.add(CLIENT_ID_ANDROID); - allowedClients.add(CLIENT_ID_ANDROID_DEBUG); - allowedClients.add(CLIENT_ID_IOS); - allowedClients.add(CLIENT_ID_WEB); - return allowedClients; - } - - private static Set buildAllowedIssuers() { - Set allowedIssuers = new HashSet<>(); - allowedIssuers.add(ISSUER_GOOGLE); - allowedIssuers.add(ISSUER_GOOGLE_LEGACY); - return allowedIssuers; - } - + private static final Logger log = Logger.getLogger(Authenticator.class.getName()); + + public static final String CLIENT_ID_APP_ENGINE = "1008259459239-ic0lmsu9hhl6i929pav41u8smjbbc86s.apps.googleusercontent.com"; + public static final String CLIENT_ID_ANDROID = "1008259459239-hlmd8qnm626idv1b9b2p4bd8pfjdtndp.apps.googleusercontent.com"; + public static final String CLIENT_ID_ANDROID_DEBUG = "1008259459239-hj2tlbdbvk3qo8ar56dqf24s3atck2br.apps.googleusercontent.com"; + public static final String CLIENT_ID_IOS = ""; + public static final String CLIENT_ID_WEB = "1008259459239-t1huos5n6bhkin3is2jlqgkjv9h7mheh.apps.googleusercontent.com"; + + public static final String ISSUER_GOOGLE = "https://accounts.google.com"; + public static final String ISSUER_GOOGLE_LEGACY = "accounts.google.com"; + + private static final Set allowedClients = buildAllowedClients(); + private static final Set allowedIssuers = buildAllowedIssuers(); + + private static final GsonFactory jsonFactory = new GsonFactory(); + + private Authenticator() { + } + + public static Payload validateGoogleIdToken(String idTokenString) throws GeneralSecurityException, Exception { + GoogleIdToken idToken = GoogleIdToken.parse(jsonFactory, idTokenString); + if (idToken != null) { + Payload payload = idToken.getPayload(); + + // validate timestamps + long timestampNow = (new Date()).getTime(); + long timestampIssued = payload.getIssuedAtTimeSeconds() * 1000; + long timestampExpired = payload.getExpirationTimeSeconds() * 1000; + if (timestampIssued > timestampNow || timestampExpired < timestampNow) { + throw new GeneralSecurityException("Token expired"); + } + + // validate issuer + if (!allowedIssuers.contains(payload.getIssuer())) { + throw new GeneralSecurityException("Invalid token, issuer not allowed: " + payload.getIssuer()); + } + + // validate client + if (!allowedClients.contains(payload.getAuthorizedParty())) { + throw new GeneralSecurityException("Invalid token, client not allowed: " + payload.getAuthorizedParty()); + } + + return payload; + } else { + throw new GeneralSecurityException("No valid Google ID Token specified"); + } + } + + private static Set buildAllowedClients() { + Set allowedClients = new HashSet<>(); + allowedClients.add(CLIENT_ID_APP_ENGINE); + allowedClients.add(CLIENT_ID_ANDROID); + allowedClients.add(CLIENT_ID_ANDROID_DEBUG); + allowedClients.add(CLIENT_ID_IOS); + allowedClients.add(CLIENT_ID_WEB); + return allowedClients; + } + + private static Set buildAllowedIssuers() { + Set allowedIssuers = new HashSet<>(); + allowedIssuers.add(ISSUER_GOOGLE); + allowedIssuers.add(ISSUER_GOOGLE_LEGACY); + return allowedIssuers; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/PermissionSet.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/PermissionSet.java index c1a4619..e0f32cb 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/PermissionSet.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/PermissionSet.java @@ -7,37 +7,37 @@ public class PermissionSet { - public static final byte REQUIRE_ANY = 0; - public static final byte REQUIRE_ALL = 1; - - private List permissions; - private byte mode; - - public PermissionSet() { - super(); - this.permissions = new ArrayList(); - this.mode = REQUIRE_ANY; - } - - public PermissionSet(List permissions, byte mode) { - super(); - this.permissions = permissions; - this.mode = mode; - } - - public List getPermissions() { - return permissions; - } - - public void setPermissions(List permissions) { - this.permissions = permissions; - } - - public byte getMode() { - return mode; - } - - public void setMode(byte mode) { - this.mode = mode; - } + public static final byte REQUIRE_ANY = 0; + public static final byte REQUIRE_ALL = 1; + + private List permissions; + private byte mode; + + public PermissionSet() { + super(); + this.permissions = new ArrayList(); + this.mode = REQUIRE_ANY; + } + + public PermissionSet(List permissions, byte mode) { + super(); + this.permissions = permissions; + this.mode = mode; + } + + public List getPermissions() { + return permissions; + } + + public void setPermissions(List permissions) { + this.permissions = permissions; + } + + public byte getMode() { + return mode; + } + + public void setMode(byte mode) { + this.mode = mode; + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/Endpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/Endpoint.java index d9e111d..3981308 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/Endpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/Endpoint.java @@ -16,143 +16,143 @@ /** * Abstract endpoint that every API endpoint needs to extend. - * Contains all basic methods and some that may need to be overwritten. + * Contains all basic methods and some that may need to be overwritten. */ public abstract class Endpoint { - private static final Logger log = Logger.getLogger(Endpoint.class.getName()); - - /** - * Used for assigning requests to endpoints - */ - public String getEndpointPath() { - return EndpointManager.ENDPOINT_API; - } - - /** - * Checks if the requested URL can be handled by an endpoint - */ - public boolean shouldHandleRequest(ApiRequest request) { - if (request.getUrl().contains(getEndpointPath())) { - return true; - } - return false; - } - - /** - * Main method for actually handling an request. Avoid overwriting this, - * use @generateRequestResponse() instead - */ - public ApiResponse processRequest(ApiRequest request) { - ApiResponse response = new ApiResponse(); - - try { - checkParameters(request); - } catch (Exception ex) { - log.warning("Malformed request: " + ex.getMessage()); - response.setStatusCode(HttpServletResponse.SC_BAD_REQUEST); - response.setException(ex); - return response; - } - - try { - authorizeRequest(request); - } catch (Exception ex) { - log.warning("Request blocked: " + ex.getMessage()); - response.setStatusCode(HttpServletResponse.SC_FORBIDDEN); - response.setException(ex); - return response; - } - - try { - response = generateRequestResponse(request); - } catch (Exception ex) { - log.warning("Unable to handle request: " + ex.getMessage()); - ex.printStackTrace(); - response.setStatusCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.setException(ex); - return response; - } - - return response; - } - - /** - * Checks if the request initiator is authorized to call the endpoint - */ - private void authorizeRequest(ApiRequest request) throws Exception { - // optional: authorize all request on the dev server - if (request.getHost().contains(EndpointManager.HOST_LOCAL_DEV_SERVER)) { - //return - } - - // check if the requested endpoint requires an authenticated user - if (!requiresAuthorization(request)) { - return; - } - - // get the user that initiated the request - UserEntry user; - try { - user = request.getUserFromToken(); - } catch (Exception ex) { - throw new Exception("Request requires an authorized user: " + ex.getMessage()); - } - - // check if the user has the required permissions - PermissionSet permissionSet = getRequiredPermissions(request); - for (int i = 0; i < permissionSet.getPermissions().size(); i++) { - if (user.hasPermission(permissionSet.getPermissions().get(i))) { - if (permissionSet.getMode() == PermissionSet.REQUIRE_ANY) { - break; - } - } else { - if (permissionSet.getMode() == PermissionSet.REQUIRE_ALL || i == permissionSet.getPermissions().size() - 1) { - throw new Exception("User has not the required permission to perform this request"); - } - } - } - } - - /** - * Overwrite if the endpoint requires an authorized user - */ - public boolean requiresAuthorization(ApiRequest request) { - return false; - } - - /** - * Overwrite if the endpoint requires some mandatory parameters to be set. - * An exception will be thrown if one of the parameters is not set - */ - public List getRequiredParameters(ApiRequest request) { - return new ArrayList(); - } - - /** - * Checks if all parameters specified in @getRequiredParameters() are set - */ - private void checkParameters(ApiRequest request) throws Exception { - for (String parameter : getRequiredParameters(request)) { - if (!ParserHelper.containsAnyValue(request.getRequest().getParameter(parameter))) { - throw new Exception("Required parameter missing: " + parameter); - } - } - } - - /** - * Overwrite if the endpoint requires the authorized user to have - * some special permission granted (e.g. for editing a business) - */ - public PermissionSet getRequiredPermissions(ApiRequest request) { - return new PermissionSet(); - } - - /** - * Overwrite this to do the endpoint specific work and return some @ApiResponse object - */ - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - throw new Exception("Endpoint not implemenetd"); - } - + private static final Logger log = Logger.getLogger(Endpoint.class.getName()); + + /** + * Used for assigning requests to endpoints + */ + public String getEndpointPath() { + return EndpointManager.ENDPOINT_API; + } + + /** + * Checks if the requested URL can be handled by an endpoint + */ + public boolean shouldHandleRequest(ApiRequest request) { + if (request.getUrl().contains(getEndpointPath())) { + return true; + } + return false; + } + + /** + * Main method for actually handling an request. Avoid overwriting this, + * use @generateRequestResponse() instead + */ + public ApiResponse processRequest(ApiRequest request) { + ApiResponse response = new ApiResponse(); + + try { + checkParameters(request); + } catch (Exception ex) { + log.warning("Malformed request: " + ex.getMessage()); + response.setStatusCode(HttpServletResponse.SC_BAD_REQUEST); + response.setException(ex); + return response; + } + + try { + authorizeRequest(request); + } catch (Exception ex) { + log.warning("Request blocked: " + ex.getMessage()); + response.setStatusCode(HttpServletResponse.SC_FORBIDDEN); + response.setException(ex); + return response; + } + + try { + response = generateRequestResponse(request); + } catch (Exception ex) { + log.warning("Unable to handle request: " + ex.getMessage()); + ex.printStackTrace(); + response.setStatusCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.setException(ex); + return response; + } + + return response; + } + + /** + * Checks if the request initiator is authorized to call the endpoint + */ + private void authorizeRequest(ApiRequest request) throws Exception { + // optional: authorize all request on the dev server + if (request.getHost().contains(EndpointManager.HOST_LOCAL_DEV_SERVER)) { + //return + } + + // check if the requested endpoint requires an authenticated user + if (!requiresAuthorization(request)) { + return; + } + + // get the user that initiated the request + UserEntry user; + try { + user = request.getUserFromToken(); + } catch (Exception ex) { + throw new Exception("Request requires an authorized user: " + ex.getMessage()); + } + + // check if the user has the required permissions + PermissionSet permissionSet = getRequiredPermissions(request); + for (int i = 0; i < permissionSet.getPermissions().size(); i++) { + if (user.hasPermission(permissionSet.getPermissions().get(i))) { + if (permissionSet.getMode() == PermissionSet.REQUIRE_ANY) { + break; + } + } else { + if (permissionSet.getMode() == PermissionSet.REQUIRE_ALL || i == permissionSet.getPermissions().size() - 1) { + throw new Exception("User has not the required permission to perform this request"); + } + } + } + } + + /** + * Overwrite if the endpoint requires an authorized user + */ + public boolean requiresAuthorization(ApiRequest request) { + return false; + } + + /** + * Overwrite if the endpoint requires some mandatory parameters to be set. + * An exception will be thrown if one of the parameters is not set + */ + public List getRequiredParameters(ApiRequest request) { + return new ArrayList(); + } + + /** + * Checks if all parameters specified in @getRequiredParameters() are set + */ + private void checkParameters(ApiRequest request) throws Exception { + for (String parameter : getRequiredParameters(request)) { + if (!ParserHelper.containsAnyValue(request.getRequest().getParameter(parameter))) { + throw new Exception("Required parameter missing: " + parameter); + } + } + } + + /** + * Overwrite if the endpoint requires the authorized user to have + * some special permission granted (e.g. for editing a business) + */ + public PermissionSet getRequiredPermissions(ApiRequest request) { + return new PermissionSet(); + } + + /** + * Overwrite this to do the endpoint specific work and return some @ApiResponse object + */ + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + throw new Exception("Endpoint not implemenetd"); + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/EndpointManager.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/EndpointManager.java index 80ab1b5..92e79ff 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/EndpointManager.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/EndpointManager.java @@ -11,9 +11,9 @@ public final class EndpointManager { - public static final int API_VERSION = 1; - - public static final String DEFAULT_HOST = "http://intelliq.me/"; + public static final int API_VERSION = 1; + + public static final String DEFAULT_HOST = "http://intelliq.me/"; public static final String VERSIONED_HOST = "http://" + API_VERSION + "-dot-intelliq-me.appspot.com/"; public static final String HOST = DEFAULT_HOST; public static final String HOST_LOCAL_DEV_SERVER = "localhost:8888"; @@ -54,36 +54,36 @@ public final class EndpointManager { public static final String ENDPOINT_USER_SIGNIN = ENDPOINT_USER + "signin/"; public static final String ENDPOINT_USER_SET_LOCATION = ENDPOINT_USER + "set/location/"; public static final String ENDPOINT_USER_SET_STATUS = ENDPOINT_USER + "set/status/"; - + // Images public static final String ENDPOINT_IMAGE = "image/"; - + public static final List endpoints = getAvailableEndpoints(); - + private EndpointManager() { - + } - + private static List getAvailableEndpoints() { - List endpoints = new ArrayList(); - endpoints.add(new QueueEndpoint()); - endpoints.add(new QueueItemEndpoint()); - endpoints.add(new BusinessEndpoint()); - endpoints.add(new UserEndpoint()); - return endpoints; + List endpoints = new ArrayList(); + endpoints.add(new QueueEndpoint()); + endpoints.add(new QueueItemEndpoint()); + endpoints.add(new BusinessEndpoint()); + endpoints.add(new UserEndpoint()); + return endpoints; } - + public static Endpoint getEndpointForRequest(ApiRequest request) { - return getEndpointForRequest(request, endpoints); + return getEndpointForRequest(request, endpoints); } - + public static Endpoint getEndpointForRequest(ApiRequest request, List availableEndpoints) { - for (Endpoint endpoint : availableEndpoints) { - if (endpoint.shouldHandleRequest(request)) { - return endpoint; - } - } - return null; + for (Endpoint endpoint : availableEndpoints) { + if (endpoint.shouldHandleRequest(request)) { + return endpoint; + } + } + return null; } - + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/AddBusinessEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/AddBusinessEndpoint.java index ed4d4ef..bb9a9a2 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/AddBusinessEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/AddBusinessEndpoint.java @@ -23,82 +23,84 @@ import com.intelliq.appengine.datastore.entries.QueueEntry; import com.intelliq.appengine.datastore.entries.QueueItemEntry; import com.intelliq.appengine.datastore.entries.UserEntry; +import com.intelliq.appengine.logging.BusinessLogging; public class AddBusinessEndpoint extends Endpoint { - public static final long MAXIMUM_BUSINESS_CREATIONS = 10; - private static final Logger log = Logger.getLogger(AddBusinessEndpoint.class.getName()); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_BUSINESS_ADD; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("name"); - parameters.add("mail"); - return parameters; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - // prevent spam - UserEntry user = request.getUser(); - long businessesCreated = user.getStats().getBusinessesCreated(); - if (businessesCreated >= MAXIMUM_BUSINESS_CREATIONS) { - log.warning("Prevented business creation from user: " + user.getKey().getId()); - response.setStatusCode(HttpServletResponse.SC_FORBIDDEN); - response.setException(new Exception("Spam prevention: You may not create any more businesses. Please contact us if you want to increase your quota.")); - return response; - } - - String name = request.getParameter("name"); - String mail = request.getParameter("mail"); - boolean addQueue = request.getParameterAsBoolean("addQueue", false); - - // create the business - BusinessEntry businessEntry = new BusinessEntry(); - businessEntry.setName(name); - businessEntry.setMail(mail); - Key businessKey = BusinessHelper.saveEntry(businessEntry); - businessEntry.setKey(businessKey); - - // update user stats - user.getStats().setBusinessesCreated(businessesCreated+ 1); - UserHelper.saveEntry(user); - - // add permission for business - PermissionHelper.grantPermission(user, businessEntry, PermissionEntry.PERMISSION_OWN); - - if (addQueue) { - // create a default queue - QueueEntry queueEntry = new QueueEntry(businessKey.getId()); - queueEntry.parseFromRequest(request); - - Key queueKey = QueueHelper.saveEntry(queueEntry); - queueEntry.setKey(queueKey); - - // add permission for queue - PermissionHelper.grantPermission(request.getUser(), queueEntry, PermissionEntry.PERMISSION_OWN); - - // add the new queue to the business in order to return both as one response - ArrayList queues = new ArrayList(); - queues.add(queueEntry); - businessEntry.setQueues(queues); - } - - response.setContent(businessEntry); - return response; - } - + public static final long MAXIMUM_BUSINESS_CREATIONS = 10; + private static final Logger log = Logger.getLogger(AddBusinessEndpoint.class.getName()); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_BUSINESS_ADD; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("name"); + parameters.add("mail"); + return parameters; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + // prevent spam + UserEntry user = request.getUser(); + long businessesCreated = user.getStats().getBusinessesCreated(); + if (businessesCreated >= MAXIMUM_BUSINESS_CREATIONS) { + log.warning("Prevented business creation from user: " + user.getKey().getId()); + response.setStatusCode(HttpServletResponse.SC_FORBIDDEN); + response.setException(new Exception("Spam prevention: You may not create any more businesses. Please contact us if you want to increase your quota.")); + return response; + } + + String name = request.getParameter("name"); + String mail = request.getParameter("mail"); + boolean addQueue = request.getParameterAsBoolean("addQueue", false); + + // create the business + BusinessEntry businessEntry = new BusinessEntry(); + businessEntry.setName(name); + businessEntry.setMail(mail); + Key businessKey = BusinessHelper.saveEntry(businessEntry); + businessEntry.setKey(businessKey); + + // update user stats + user.getStats().setBusinessesCreated(businessesCreated + 1); + UserHelper.saveEntry(user); + + // add permission for business + PermissionHelper.grantPermission(user, businessEntry, PermissionEntry.PERMISSION_OWN); + + if (addQueue) { + // create a default queue + QueueEntry queueEntry = new QueueEntry(businessKey.getId()); + queueEntry.parseFromRequest(request); + + Key queueKey = QueueHelper.saveEntry(queueEntry); + queueEntry.setKey(queueKey); + + // add permission for queue + PermissionHelper.grantPermission(request.getUser(), queueEntry, PermissionEntry.PERMISSION_OWN); + + // add the new queue to the business in order to return both as one response + ArrayList queues = new ArrayList(); + queues.add(queueEntry); + businessEntry.setQueues(queues); + } + + response.setContent(businessEntry); + BusinessLogging.logCreation(businessEntry, user); + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/BusinessEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/BusinessEndpoint.java index 01597fb..513bb53 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/BusinessEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/BusinessEndpoint.java @@ -10,30 +10,30 @@ public class BusinessEndpoint extends Endpoint { - public static final List endpoints = getAvailableEndpoints(); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_BUSINESS; - } - - @Override - public ApiResponse processRequest(ApiRequest request) { - Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); - if (endpoint != null) { - return endpoint.processRequest(request); - } else { - return super.processRequest(request); - } - } - - private static List getAvailableEndpoints() { - List endpoints = new ArrayList(); - endpoints.add(new GetBusinessEndpoint()); - endpoints.add(new AddBusinessEndpoint()); - endpoints.add(new EditBusinessEndpoint()); - endpoints.add(new FromBusinessEndpoint()); - return endpoints; + public static final List endpoints = getAvailableEndpoints(); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_BUSINESS; + } + + @Override + public ApiResponse processRequest(ApiRequest request) { + Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); + if (endpoint != null) { + return endpoint.processRequest(request); + } else { + return super.processRequest(request); + } } - + + private static List getAvailableEndpoints() { + List endpoints = new ArrayList(); + endpoints.add(new GetBusinessEndpoint()); + endpoints.add(new AddBusinessEndpoint()); + endpoints.add(new EditBusinessEndpoint()); + endpoints.add(new FromBusinessEndpoint()); + return endpoints; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/EditBusinessEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/EditBusinessEndpoint.java index e5374e4..433c3d3 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/EditBusinessEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/EditBusinessEndpoint.java @@ -24,61 +24,64 @@ import com.intelliq.appengine.datastore.entries.QueueEntry; import com.intelliq.appengine.datastore.entries.QueueItemEntry; import com.intelliq.appengine.datastore.entries.UserEntry; +import com.intelliq.appengine.logging.BusinessLogging; public class EditBusinessEndpoint extends Endpoint { - public static final long MAXIMUM_BUSINESS_CREATIONS = 10; - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_BUSINESS_EDIT; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("businessKeyId"); - parameters.add("name"); - parameters.add("mail"); - return parameters; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("businessKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - - return permissionSet; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - long businessKeyId = request.getParameterAsLong("businessKeyId", -1); - - try { - BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(businessKeyId); - businessEntry.parseFromRequest(request); - BusinessHelper.saveEntry(businessEntry); - - //TODO: add action - - response.setContent(businessEntry); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested business")); - } - return response; - } - + public static final long MAXIMUM_BUSINESS_CREATIONS = 10; + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_BUSINESS_EDIT; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("businessKeyId"); + parameters.add("name"); + parameters.add("mail"); + return parameters; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("businessKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + + return permissionSet; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + long businessKeyId = request.getParameterAsLong("businessKeyId", -1); + + try { + UserEntry user = request.getUser(); + BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(businessKeyId); + businessEntry.parseFromRequest(request); + BusinessHelper.saveEntry(businessEntry); + + //TODO: add action + + response.setContent(businessEntry); + BusinessLogging.logEdit(businessEntry, user); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested business")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/FromBusinessEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/FromBusinessEndpoint.java index afe43b3..7dd307c 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/FromBusinessEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/FromBusinessEndpoint.java @@ -24,31 +24,31 @@ public class FromBusinessEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_BUSINESS_FROM; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("userKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long userKeyId = request.getParameterAsLong("userKeyId", -1); - try { - List businesses = BusinessHelper.getBusinessesByUserKeyId(userKeyId, PermissionEntry.PERMISSION_VIEW); - response.setContent(businesses); - } catch (NucleusObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find businesses")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_BUSINESS_FROM; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("userKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long userKeyId = request.getParameterAsLong("userKeyId", -1); + try { + List businesses = BusinessHelper.getBusinessesByUserKeyId(userKeyId, PermissionEntry.PERMISSION_VIEW); + response.setContent(businesses); + } catch (NucleusObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find businesses")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/GetBusinessEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/GetBusinessEndpoint.java index 457edca..bac5119 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/GetBusinessEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/business/GetBusinessEndpoint.java @@ -23,40 +23,40 @@ public class GetBusinessEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_BUSINESS_GET; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("businessKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long businessKeyId = request.getParameterAsLong("businessKeyId", -1); - boolean includeQueues = request.getParameterAsBoolean("includeQueues", true); - - try { - BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(businessKeyId); - if (includeQueues) { - businessEntry.setQueues(QueueHelper.getQueuesByBusiness(businessKeyId)); - for (QueueEntry queue : businessEntry.getQueues()) { - queue.setWaitingPeople(QueueHelper.getNumberOfItemsInQueue(queue.getKey().getId(), QueueItemEntry.STATUS_WAITING)); - } - } - - response.setContent(businessEntry); - } catch (NucleusObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested business")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_BUSINESS_GET; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("businessKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long businessKeyId = request.getParameterAsLong("businessKeyId", -1); + boolean includeQueues = request.getParameterAsBoolean("includeQueues", true); + + try { + BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(businessKeyId); + if (includeQueues) { + businessEntry.setQueues(QueueHelper.getQueuesByBusiness(businessKeyId)); + for (QueueEntry queue : businessEntry.getQueues()) { + queue.setWaitingPeople(QueueHelper.getNumberOfItemsInQueue(queue.getKey().getId(), QueueItemEntry.STATUS_WAITING)); + } + } + + response.setContent(businessEntry); + } catch (NucleusObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested business")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/AddQueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/AddQueueEndpoint.java index 5a66f20..d82989e 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/AddQueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/AddQueueEndpoint.java @@ -18,77 +18,79 @@ import com.intelliq.appengine.datastore.entries.PermissionEntry; import com.intelliq.appengine.datastore.entries.QueueEntry; import com.intelliq.appengine.datastore.entries.UserEntry; +import com.intelliq.appengine.logging.QueueLogging; public class AddQueueEndpoint extends Endpoint { - public static final long MAXIMUM_QUEUE_CREATIONS = 25; - private static final Logger log = Logger.getLogger(AddQueueEndpoint.class.getName()); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ADD; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - - // only business owners can add queues - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("businessKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - - return permissionSet; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("businessKeyId"); - parameters.add("latitude"); - parameters.add("longitude"); - parameters.add("name"); - parameters.add("averageWaitingTime"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - // prevent spam - UserEntry user = request.getUser(); - long queuesCreated = user.getStats().getQueuesCreated(); - if (queuesCreated >= MAXIMUM_QUEUE_CREATIONS) { - log.warning("Prevented queue creation from user: " + user.getKey().getId()); - response.setStatusCode(HttpServletResponse.SC_FORBIDDEN); - response.setException(new Exception("Spam prevention: You may not create any more queues. Please contact us if you want to increase your quota.")); - return response; - } - - // save queue - long businessKeyId = request.getParameterAsLong("businessKeyId", -1); - QueueEntry queueEntry = new QueueEntry(businessKeyId); - queueEntry.parseFromRequest(request); - Key entryKey = QueueHelper.saveEntry(queueEntry); - queueEntry.setKey(entryKey); - - // update user stats - user.getStats().setQueuesCreated(queuesCreated + 1); - UserHelper.saveEntry(user); - - // add permission for queue - PermissionHelper.grantPermission(user, queueEntry, PermissionEntry.PERMISSION_OWN); - - response.setContent(queueEntry); - return response; - } - + public static final long MAXIMUM_QUEUE_CREATIONS = 25; + private static final Logger log = Logger.getLogger(AddQueueEndpoint.class.getName()); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ADD; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + + // only business owners can add queues + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("businessKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + + return permissionSet; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("businessKeyId"); + parameters.add("latitude"); + parameters.add("longitude"); + parameters.add("name"); + parameters.add("averageWaitingTime"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + // prevent spam + UserEntry user = request.getUser(); + long queuesCreated = user.getStats().getQueuesCreated(); + if (queuesCreated >= MAXIMUM_QUEUE_CREATIONS) { + log.warning("Prevented queue creation from user: " + user.getKey().getId()); + response.setStatusCode(HttpServletResponse.SC_FORBIDDEN); + response.setException(new Exception("Spam prevention: You may not create any more queues. Please contact us if you want to increase your quota.")); + return response; + } + + // save queue + long businessKeyId = request.getParameterAsLong("businessKeyId", -1); + QueueEntry queueEntry = new QueueEntry(businessKeyId); + queueEntry.parseFromRequest(request); + Key entryKey = QueueHelper.saveEntry(queueEntry); + queueEntry.setKey(entryKey); + + // update user stats + user.getStats().setQueuesCreated(queuesCreated + 1); + UserHelper.saveEntry(user); + + // add permission for queue + PermissionHelper.grantPermission(user, queueEntry, PermissionEntry.PERMISSION_OWN); + + response.setContent(queueEntry); + QueueLogging.logCreation(queueEntry, user); + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/ClearQueueItemsEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/ClearQueueItemsEndpoint.java index 1aaa8ff..2a728fe 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/ClearQueueItemsEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/ClearQueueItemsEndpoint.java @@ -17,66 +17,66 @@ public class ClearQueueItemsEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_CLEAR; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(queueKeyId); - - permissionSet.getPermissions().add(permissionEntry); - return permissionSet; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - byte status = (byte) request.getParameterAsInt("status", QueueItemEntry.STATUS_ALL); - boolean clearWaiting = request.getParameterAsBoolean("clearWaiting", true); - boolean clearCalled = request.getParameterAsBoolean("clearCalled", true); - - if (status == QueueItemEntry.STATUS_ALL) { - if (clearWaiting && clearCalled) { - QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_ALL); - } else { - if (clearWaiting) { - QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_WAITING); - } - if (clearCalled) { - QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_CALLED); - } - QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_CANCELED); - QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_DONE); - } - } else { - QueueHelper.deleteItemsInQueue(queueKeyId, status); - } - - List entries = QueueHelper.getItemsInQueue(queueKeyId, 0, 100); - response.setContent(entries); - return response; - } - - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_CLEAR; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(queueKeyId); + + permissionSet.getPermissions().add(permissionEntry); + return permissionSet; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + byte status = (byte) request.getParameterAsInt("status", QueueItemEntry.STATUS_ALL); + boolean clearWaiting = request.getParameterAsBoolean("clearWaiting", true); + boolean clearCalled = request.getParameterAsBoolean("clearCalled", true); + + if (status == QueueItemEntry.STATUS_ALL) { + if (clearWaiting && clearCalled) { + QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_ALL); + } else { + if (clearWaiting) { + QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_WAITING); + } + if (clearCalled) { + QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_CALLED); + } + QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_CANCELED); + QueueHelper.deleteItemsInQueue(queueKeyId, QueueItemEntry.STATUS_DONE); + } + } else { + QueueHelper.deleteItemsInQueue(queueKeyId, status); + } + + List entries = QueueHelper.getItemsInQueue(queueKeyId, 0, 100); + response.setContent(entries); + return response; + } + + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/EditQueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/EditQueueEndpoint.java index 8b6e612..f842ed1 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/EditQueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/EditQueueEndpoint.java @@ -20,67 +20,70 @@ import com.intelliq.appengine.datastore.entries.PermissionEntry; import com.intelliq.appengine.datastore.entries.QueueEntry; import com.intelliq.appengine.datastore.entries.UserEntry; +import com.intelliq.appengine.logging.QueueLogging; public class EditQueueEndpoint extends Endpoint { - public static final long MAXIMUM_QUEUE_CREATIONS = 25; - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_EDIT; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - - // business editors can also edit queues - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("businessKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - - // queue editors can also edit queues - permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - - return permissionSet; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - - try { - QueueEntry queueEntry = QueueHelper.getEntryByKeyId(queueKeyId); - queueEntry.parseFromRequest(request); - QueueHelper.saveEntry(queueEntry); - - //TODO: add action - - response.setContent(queueEntry); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue")); - } - - return response; - } - + public static final long MAXIMUM_QUEUE_CREATIONS = 25; + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_EDIT; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + + // business editors can also edit queues + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("businessKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + + // queue editors can also edit queues + permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + + return permissionSet; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + + try { + UserEntry user = request.getUser(); + QueueEntry queueEntry = QueueHelper.getEntryByKeyId(queueKeyId); + queueEntry.parseFromRequest(request); + QueueHelper.saveEntry(queueEntry); + + //TODO: add action + + response.setContent(queueEntry); + QueueLogging.logEdit(queueEntry, user); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue")); + } + + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetItemsInQueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetItemsInQueueEndpoint.java index 459c89d..8f58f93 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetItemsInQueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetItemsInQueueEndpoint.java @@ -16,34 +16,34 @@ public class GetItemsInQueueEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ITEMS; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - int offset = request.getParameterAsInt("offset", 0); - int count = request.getParameterAsInt("count", 100); - - try { - List entries = QueueHelper.getItemsInQueue(queueKeyId, offset, count); - response.setContent(entries); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ITEMS; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + int offset = request.getParameterAsInt("offset", 0); + int count = request.getParameterAsInt("count", 100); + + try { + List entries = QueueHelper.getItemsInQueue(queueKeyId, offset, count); + response.setContent(entries); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNearbyQueuesEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNearbyQueuesEndpoint.java index 1674e98..94ccaac 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNearbyQueuesEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNearbyQueuesEndpoint.java @@ -16,55 +16,55 @@ public class GetNearbyQueuesEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_NEARBY; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - - String postalCode = request.getParameter("postalCode"); - if (!ParserHelper.containsAnyValue(postalCode)) { - parameters.add("latitude"); - parameters.add("longitude"); - } - - return parameters; - } + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_NEARBY; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + + String postalCode = request.getParameter("postalCode"); + if (!ParserHelper.containsAnyValue(postalCode)) { + parameters.add("latitude"); + parameters.add("longitude"); + } + + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + boolean includeBusinesses = request.getParameterAsBoolean("includeBusinesses", false); + String postalCode = request.getParameter("postalCode"); + List nearbyQueues = new ArrayList(); + + if (ParserHelper.containsAnyValue(postalCode)) { + // use postal code + nearbyQueues = QueueHelper.getQueuesByPostalCode(postalCode); + } else { + // use latitude & longitude + float latitude = request.getParameterAsFloat("latitude", -1); + float longitude = request.getParameterAsFloat("longitude", -1); + long distance = request.getParameterAsLong("distance", Location.DISTANCE_DEFAULT); + + nearbyQueues = QueueHelper.getQueuesByLocation(latitude, longitude, distance); + } + + // update queue number entries + for (int i = 0; i < nearbyQueues.size(); i++) { + nearbyQueues.get(i).setWaitingPeople(QueueHelper.getNumberOfItemsInQueue(nearbyQueues.get(i).getKey().getId(), QueueItemEntry.STATUS_WAITING)); + } + + if (includeBusinesses) { + response.setContent(QueueHelper.getBusinessesForQueues(nearbyQueues)); + } else { + response.setContent(nearbyQueues); + } + return response; + } - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - boolean includeBusinesses = request.getParameterAsBoolean("includeBusinesses", false); - String postalCode = request.getParameter("postalCode"); - List nearbyQueues = new ArrayList(); - - if (ParserHelper.containsAnyValue(postalCode)) { - // use postal code - nearbyQueues = QueueHelper.getQueuesByPostalCode(postalCode); - } else { - // use latitude & longitude - float latitude = request.getParameterAsFloat("latitude", -1); - float longitude = request.getParameterAsFloat("longitude", -1); - long distance = request.getParameterAsLong("distance", Location.DISTANCE_DEFAULT); - - nearbyQueues = QueueHelper.getQueuesByLocation(latitude, longitude, distance); - } - - // update queue number entries - for (int i = 0; i < nearbyQueues.size(); i++) { - nearbyQueues.get(i).setWaitingPeople(QueueHelper.getNumberOfItemsInQueue(nearbyQueues.get(i).getKey().getId(), QueueItemEntry.STATUS_WAITING)); - } - - if (includeBusinesses) { - response.setContent(QueueHelper.getBusinessesForQueues(nearbyQueues)); - } else { - response.setContent(nearbyQueues); - } - return response; - } - } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNumberOfItemsInQueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNumberOfItemsInQueueEndpoint.java index 74ee9d3..73c43db 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNumberOfItemsInQueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetNumberOfItemsInQueueEndpoint.java @@ -16,33 +16,33 @@ public class GetNumberOfItemsInQueueEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_COUNT; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - byte status = (byte) request.getParameterAsInt("status", QueueItemEntry.STATUS_ALL); - - try { - int number = QueueHelper.getNumberOfItemsInQueue(queueKeyId, status); - response.setContent(number); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_COUNT; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + byte status = (byte) request.getParameterAsInt("status", QueueItemEntry.STATUS_ALL); + + try { + int number = QueueHelper.getNumberOfItemsInQueue(queueKeyId, status); + response.setContent(number); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetQueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetQueueEndpoint.java index a8eab91..2bfa43b 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetQueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/GetQueueEndpoint.java @@ -17,39 +17,39 @@ public class GetQueueEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_GET; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - boolean includeBusinesses = request.getParameterAsBoolean("includeBusiness", false); - - try { - QueueEntry queueEntry = QueueHelper.getEntryByKeyId(queueKeyId); - queueEntry.setWaitingPeople(QueueHelper.getNumberOfItemsInQueue(queueKeyId, QueueItemEntry.STATUS_WAITING)); - - if (includeBusinesses) { - response.setContent(QueueHelper.getBusinessForQueue(queueEntry)); - } else { - response.setContent(queueEntry); - } - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_GET; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + boolean includeBusinesses = request.getParameterAsBoolean("includeBusiness", false); + + try { + QueueEntry queueEntry = QueueHelper.getEntryByKeyId(queueKeyId); + queueEntry.setWaitingPeople(QueueHelper.getNumberOfItemsInQueue(queueKeyId, QueueItemEntry.STATUS_WAITING)); + + if (includeBusinesses) { + response.setContent(QueueHelper.getBusinessForQueue(queueEntry)); + } else { + response.setContent(queueEntry); + } + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/MarkAllQueueItemsAsDoneEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/MarkAllQueueItemsAsDoneEndpoint.java index 2edf146..bc8aa5a 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/MarkAllQueueItemsAsDoneEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/MarkAllQueueItemsAsDoneEndpoint.java @@ -17,50 +17,50 @@ public class MarkAllQueueItemsAsDoneEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_DONE; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(queueKeyId); - - permissionSet.getPermissions().add(permissionEntry); - return permissionSet; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - - try { - QueueHelper.markAllQueueItemsAsDone(queueKeyId); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue")); - } - return response; - } - - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_DONE; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(queueKeyId); + + permissionSet.getPermissions().add(permissionEntry); + return permissionSet; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + + try { + QueueHelper.markAllQueueItemsAsDone(queueKeyId); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue")); + } + return response; + } + + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/PopulateQueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/PopulateQueueEndpoint.java index 6ddd528..8ce153a 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/PopulateQueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/PopulateQueueEndpoint.java @@ -17,52 +17,52 @@ public class PopulateQueueEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_POPULATE; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(queueKeyId); - - permissionSet.getPermissions().add(permissionEntry); - return permissionSet; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - int count = request.getParameterAsInt("count", 25); - - try { - QueueHelper.populateQueueWithSampleItems(queueKeyId, count); - response.setContent(count); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue")); - } - return response; - } - - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_POPULATE; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(queueKeyId); + + permissionSet.getPermissions().add(permissionEntry); + return permissionSet; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + int count = request.getParameterAsInt("count", 25); + + try { + QueueHelper.populateQueueWithSampleItems(queueKeyId, count); + response.setContent(count); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue")); + } + return response; + } + + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/QueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/QueueEndpoint.java index 4bdb792..bea6ef0 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/QueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queue/QueueEndpoint.java @@ -10,35 +10,35 @@ public class QueueEndpoint extends Endpoint { - public static final List endpoints = getAvailableEndpoints(); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE; - } - - @Override - public ApiResponse processRequest(ApiRequest request) { - Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); - if (endpoint != null) { - return endpoint.processRequest(request); - } else { - return super.processRequest(request); - } - } - - private static List getAvailableEndpoints() { - List endpoints = new ArrayList(); - endpoints.add(new GetQueueEndpoint()); - endpoints.add(new AddQueueEndpoint()); - endpoints.add(new EditQueueEndpoint()); - endpoints.add(new GetNearbyQueuesEndpoint()); - endpoints.add(new GetNumberOfItemsInQueueEndpoint()); - endpoints.add(new GetItemsInQueueEndpoint()); - endpoints.add(new MarkAllQueueItemsAsDoneEndpoint()); - endpoints.add(new PopulateQueueEndpoint()); - endpoints.add(new ClearQueueItemsEndpoint()); - return endpoints; + public static final List endpoints = getAvailableEndpoints(); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE; + } + + @Override + public ApiResponse processRequest(ApiRequest request) { + Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); + if (endpoint != null) { + return endpoint.processRequest(request); + } else { + return super.processRequest(request); + } } - + + private static List getAvailableEndpoints() { + List endpoints = new ArrayList(); + endpoints.add(new GetQueueEndpoint()); + endpoints.add(new AddQueueEndpoint()); + endpoints.add(new EditQueueEndpoint()); + endpoints.add(new GetNearbyQueuesEndpoint()); + endpoints.add(new GetNumberOfItemsInQueueEndpoint()); + endpoints.add(new GetItemsInQueueEndpoint()); + endpoints.add(new MarkAllQueueItemsAsDoneEndpoint()); + endpoints.add(new PopulateQueueEndpoint()); + endpoints.add(new ClearQueueItemsEndpoint()); + return endpoints; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/AddQueueItemEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/AddQueueItemEndpoint.java index 68459eb..f49220d 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/AddQueueItemEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/AddQueueItemEndpoint.java @@ -21,70 +21,70 @@ public class AddQueueItemEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ITEM_ADD; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - QueueEntry queueEntry = QueueHelper.getEntryByKeyId(request.getParameterAsLong("queueKeyId", -1)); - if (queueEntry != null && queueEntry.getRequiresSignIn()) { - return true; - } - return false; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - parameters.add("name"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - - // create queue item - QueueItemEntry queueItemEntry = new QueueItemEntry(queueKeyId); - queueItemEntry.parseFromRequest(request); - - // assign the queue item to the current user - UserEntry user = request.getUser(); - if (user != null) { - queueItemEntry.setUserKeyId(user.getKey().getId()); - } - - // make sure that user is not already in this queue - QueueItemEntry existingQueueItemEntry = QueueItemHelper.getQueueItemByUserKeyId(queueItemEntry.getUserKeyId(), queueItemEntry.getQueueKeyId()); - if (existingQueueItemEntry != null) { - // return the existing queue item - response.setContent(existingQueueItemEntry); - return response; - } - - // get next available ticket number - int lastTicketNumber = QueueHelper.getLastTicketNumberInQueue(queueKeyId); - queueItemEntry.setTicketNumber(lastTicketNumber + 1); - - Key entryKey = QueueItemHelper.saveEntry(queueItemEntry); - queueItemEntry.setKey(entryKey); - - if (user != null) { - // update user stats - user.getStats().setQueuesJoined(user.getStats().getQueuesJoined() + 1); - UserHelper.saveEntry(user); - - // add permission for queue item - PermissionHelper.grantPermission(user, queueItemEntry, PermissionEntry.PERMISSION_OWN); - } - - response.setContent(queueItemEntry); - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ITEM_ADD; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + QueueEntry queueEntry = QueueHelper.getEntryByKeyId(request.getParameterAsLong("queueKeyId", -1)); + if (queueEntry != null && queueEntry.getRequiresSignIn()) { + return true; + } + return false; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + parameters.add("name"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + + // create queue item + QueueItemEntry queueItemEntry = new QueueItemEntry(queueKeyId); + queueItemEntry.parseFromRequest(request); + + // assign the queue item to the current user + UserEntry user = request.getUser(); + if (user != null) { + queueItemEntry.setUserKeyId(user.getKey().getId()); + } + + // make sure that user is not already in this queue + QueueItemEntry existingQueueItemEntry = QueueItemHelper.getQueueItemByUserKeyId(queueItemEntry.getUserKeyId(), queueItemEntry.getQueueKeyId()); + if (existingQueueItemEntry != null) { + // return the existing queue item + response.setContent(existingQueueItemEntry); + return response; + } + + // get next available ticket number + int lastTicketNumber = QueueHelper.getLastTicketNumberInQueue(queueKeyId); + queueItemEntry.setTicketNumber(lastTicketNumber + 1); + + Key entryKey = QueueItemHelper.saveEntry(queueItemEntry); + queueItemEntry.setKey(entryKey); + + if (user != null) { + // update user stats + user.getStats().setQueuesJoined(user.getStats().getQueuesJoined() + 1); + UserHelper.saveEntry(user); + + // add permission for queue item + PermissionHelper.grantPermission(user, queueItemEntry, PermissionEntry.PERMISSION_OWN); + } + + response.setContent(queueItemEntry); + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/DeleteQueueItemEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/DeleteQueueItemEndpoint.java index 013edb5..4565fff 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/DeleteQueueItemEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/DeleteQueueItemEndpoint.java @@ -19,61 +19,61 @@ public class DeleteQueueItemEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ITEM_DELETE; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - QueueEntry queueEntry = QueueHelper.getEntryByKeyId(request.getParameterAsLong("queueKeyId", -1)); - if (queueEntry != null && queueEntry.getRequiresSignIn()) { - return true; - } - return false; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - parameters.add("queueItemKeyId"); - return parameters; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - - // user wants to delete his own ticket - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueItemKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - - // queue management wants to remove an item - permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - - return permissionSet; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueItemKeyId = request.getParameterAsLong("queueItemKeyId", -1); - - - try { - QueueItemHelper.deleteEntryByKeyId(queueItemKeyId); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue item")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ITEM_DELETE; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + QueueEntry queueEntry = QueueHelper.getEntryByKeyId(request.getParameterAsLong("queueKeyId", -1)); + if (queueEntry != null && queueEntry.getRequiresSignIn()) { + return true; + } + return false; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + parameters.add("queueItemKeyId"); + return parameters; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + + // user wants to delete his own ticket + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueItemKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + + // queue management wants to remove an item + permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + + return permissionSet; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueItemKeyId = request.getParameterAsLong("queueItemKeyId", -1); + + + try { + QueueItemHelper.deleteEntryByKeyId(queueItemKeyId); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue item")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetLastItemInQueueEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetLastItemInQueueEndpoint.java index d32b364..5d309d4 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetLastItemInQueueEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetLastItemInQueueEndpoint.java @@ -15,28 +15,28 @@ public class GetLastItemInQueueEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ITEM_LAST; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueKeyId = request.getParameterAsLong("queueKeyId", -1); - byte status = (byte) request.getParameterAsInt("status", QueueItemEntry.STATUS_ALL); - - QueueItemEntry lastQueueItemEntry = QueueHelper.getLastAssignedTicketInQueue(queueKeyId, status); - response.setContent(lastQueueItemEntry); - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ITEM_LAST; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueKeyId = request.getParameterAsLong("queueKeyId", -1); + byte status = (byte) request.getParameterAsInt("status", QueueItemEntry.STATUS_ALL); + + QueueItemEntry lastQueueItemEntry = QueueHelper.getLastAssignedTicketInQueue(queueKeyId, status); + response.setContent(lastQueueItemEntry); + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetQueueItemEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetQueueItemEndpoint.java index 92efb17..d9bf1ef 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetQueueItemEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetQueueItemEndpoint.java @@ -16,32 +16,32 @@ public class GetQueueItemEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ITEM_GET; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueItemKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueItemKeyId = request.getParameterAsLong("queueItemKeyId", -1); - - try { - QueueItemEntry queueItemEntry = QueueItemHelper.getEntryByKeyId(queueItemKeyId); - response.setContent(queueItemEntry); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue item")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ITEM_GET; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueItemKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueItemKeyId = request.getParameterAsLong("queueItemKeyId", -1); + + try { + QueueItemEntry queueItemEntry = QueueItemHelper.getEntryByKeyId(queueItemKeyId); + response.setContent(queueItemEntry); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue item")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/QueueItemEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/QueueItemEndpoint.java index a665df5..98d856e 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/QueueItemEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/QueueItemEndpoint.java @@ -11,31 +11,31 @@ public class QueueItemEndpoint extends Endpoint { - public static final List endpoints = getAvailableEndpoints(); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ITEM; - } - - @Override - public ApiResponse processRequest(ApiRequest request) { - Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); - if (endpoint != null) { - return endpoint.processRequest(request); - } else { - return super.processRequest(request); - } - } - - private static List getAvailableEndpoints() { - List endpoints = new ArrayList(); - endpoints.add(new GetQueueItemEndpoint()); - endpoints.add(new AddQueueItemEndpoint()); - endpoints.add(new GetLastItemInQueueEndpoint()); - endpoints.add(new SetQueueItemStatusEndpoint()); - endpoints.add(new DeleteQueueItemEndpoint()); - return endpoints; + public static final List endpoints = getAvailableEndpoints(); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ITEM; + } + + @Override + public ApiResponse processRequest(ApiRequest request) { + Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); + if (endpoint != null) { + return endpoint.processRequest(request); + } else { + return super.processRequest(request); + } } - + + private static List getAvailableEndpoints() { + List endpoints = new ArrayList(); + endpoints.add(new GetQueueItemEndpoint()); + endpoints.add(new AddQueueItemEndpoint()); + endpoints.add(new GetLastItemInQueueEndpoint()); + endpoints.add(new SetQueueItemStatusEndpoint()); + endpoints.add(new DeleteQueueItemEndpoint()); + return endpoints; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/SetQueueItemStatusEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/SetQueueItemStatusEndpoint.java index afda95d..989d859 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/SetQueueItemStatusEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/SetQueueItemStatusEndpoint.java @@ -21,78 +21,78 @@ public class SetQueueItemStatusEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_QUEUE_ITEM_STATUS; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("queueKeyId"); - parameters.add("queueItemKeyId"); - parameters.add("status"); - return parameters; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - QueueEntry queueEntry = QueueHelper.getEntryByKeyId(request.getParameterAsLong("queueKeyId", -1)); - if (queueEntry != null && queueEntry.getRequiresSignIn()) { - return true; - } - - // only queue management can call customers - byte status = (byte) request.getParameterAsInt("status", 0); - if (status == QueueItemEntry.STATUS_CALLED) { - return true; - } - - return false; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - PermissionEntry permissionEntry; - - byte status = (byte) request.getParameterAsInt("status", 0); - - // a user may cancel his own ticket or mark it as done - if (status == QueueItemEntry.STATUS_CANCELED || status == QueueItemEntry.STATUS_DONE) { - permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueItemKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - } - - permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); - permissionSet.getPermissions().add(permissionEntry); - - return permissionSet; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long queueItemKeyId = request.getParameterAsLong("queueItemKeyId", -1); - byte status = (byte) request.getParameterAsInt("status", 0); - - try { - QueueItemEntry queueItemEntry = QueueItemHelper.getEntryByKeyId(queueItemKeyId); - queueItemEntry.setStatus(status); - queueItemEntry.setLastStatusChangeTimestamp((new Date()).getTime()); - QueueItemHelper.saveEntry(queueItemEntry); - - response.setContent(queueItemEntry); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested queue item")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_QUEUE_ITEM_STATUS; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("queueKeyId"); + parameters.add("queueItemKeyId"); + parameters.add("status"); + return parameters; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + QueueEntry queueEntry = QueueHelper.getEntryByKeyId(request.getParameterAsLong("queueKeyId", -1)); + if (queueEntry != null && queueEntry.getRequiresSignIn()) { + return true; + } + + // only queue management can call customers + byte status = (byte) request.getParameterAsInt("status", 0); + if (status == QueueItemEntry.STATUS_CALLED) { + return true; + } + + return false; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + PermissionEntry permissionEntry; + + byte status = (byte) request.getParameterAsInt("status", 0); + + // a user may cancel his own ticket or mark it as done + if (status == QueueItemEntry.STATUS_CANCELED || status == QueueItemEntry.STATUS_DONE) { + permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueItemKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + } + + permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_EDIT); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); + permissionSet.getPermissions().add(permissionEntry); + + return permissionSet; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long queueItemKeyId = request.getParameterAsLong("queueItemKeyId", -1); + byte status = (byte) request.getParameterAsInt("status", 0); + + try { + QueueItemEntry queueItemEntry = QueueItemHelper.getEntryByKeyId(queueItemKeyId); + queueItemEntry.setStatus(status); + queueItemEntry.setLastStatusChangeTimestamp((new Date()).getTime()); + QueueItemHelper.saveEntry(queueItemEntry); + + response.setContent(queueItemEntry); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested queue item")); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/GetUserEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/GetUserEndpoint.java index f14f7ab..e371221 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/GetUserEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/GetUserEndpoint.java @@ -4,78 +4,75 @@ import java.util.List; import javax.jdo.JDOObjectNotFoundException; -import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; -import org.datanucleus.exceptions.NucleusObjectNotFoundException; - import com.intelliq.appengine.api.ApiRequest; import com.intelliq.appengine.api.ApiResponse; import com.intelliq.appengine.api.PermissionSet; import com.intelliq.appengine.api.endpoint.Endpoint; import com.intelliq.appengine.api.endpoint.EndpointManager; -import com.intelliq.appengine.datastore.QueueHelper; import com.intelliq.appengine.datastore.UserHelper; import com.intelliq.appengine.datastore.entries.PermissionEntry; import com.intelliq.appengine.datastore.entries.QueueEntry; -import com.intelliq.appengine.datastore.entries.QueueItemEntry; import com.intelliq.appengine.datastore.entries.UserEntry; +import com.intelliq.appengine.logging.SlackLog; public class GetUserEndpoint extends Endpoint { - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_USER_GET; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - - // user wants to get his own entry - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("userKeyId", -1)); - permissionEntry.setSubjectKind(UserEntry.class.getSimpleName()); - permissionSet.getPermissions().add(permissionEntry); - - // queue management want's to get user details - permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_VIEW); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); - permissionEntry.setSubjectKind(QueueEntry.class.getSimpleName()); - permissionSet.getPermissions().add(permissionEntry); - - return permissionSet; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("userKeyId"); - return parameters; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - long userKeyId = request.getParameterAsLong("userKeyId", -1); - - try { - UserEntry userEntry = UserHelper.getEntryByKeyId(userKeyId); - response.setContent(userEntry); - } catch (JDOObjectNotFoundException exception) { - response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); - response.setException(new Exception("Unable to find requested user")); - } - return response; - } - + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_USER_GET; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + + // user wants to get his own entry + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("userKeyId", -1)); + permissionEntry.setSubjectKind(UserEntry.class.getSimpleName()); + permissionSet.getPermissions().add(permissionEntry); + + // queue management want's to get user details + permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_VIEW); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("queueKeyId", -1)); + permissionEntry.setSubjectKind(QueueEntry.class.getSimpleName()); + permissionSet.getPermissions().add(permissionEntry); + + return permissionSet; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("userKeyId"); + return parameters; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + long userKeyId = request.getParameterAsLong("userKeyId", -1); + + try { + UserEntry userEntry = UserHelper.getEntryByKeyId(userKeyId); + response.setContent(userEntry); + } catch (JDOObjectNotFoundException exception) { + response.setStatusCode(HttpServletResponse.SC_NOT_FOUND); + response.setException(new Exception("Unable to find requested user")); + SlackLog.v(this, "User not found: " + userKeyId); + } + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SetUserLocationEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SetUserLocationEndpoint.java index 12a5725..cba28a7 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SetUserLocationEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SetUserLocationEndpoint.java @@ -20,59 +20,59 @@ public class SetUserLocationEndpoint extends Endpoint { - private static final Logger log = Logger.getLogger(SetUserLocationEndpoint.class.getSimpleName()); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_USER_SET_LOCATION; - } - - @Override - public boolean requiresAuthorization(ApiRequest request) { - return true; - } - - @Override - public List getRequiredParameters(ApiRequest request) { - List parameters = new ArrayList(); - parameters.add("latitude"); - parameters.add("longitude"); - parameters.add("userKeyId"); - return parameters; - } - - @Override - public PermissionSet getRequiredPermissions(ApiRequest request) { - PermissionSet permissionSet = new PermissionSet(); - - // user wants to update his own location - PermissionEntry permissionEntry = new PermissionEntry(); - permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); - permissionEntry.setSubjectKeyId(request.getParameterAsLong("userKeyId", -1)); - permissionEntry.setSubjectKind(UserEntry.class.getSimpleName()); - permissionSet.getPermissions().add(permissionEntry); - - return permissionSet; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - float latitude = request.getParameterAsFloat("latitude", -1); - float longitude = request.getParameterAsFloat("longitude", -1); - - // get the user that initiated the request - UserEntry user = request.getUser(); - - // update the location - user.setLatitude(latitude); - user.setLongitude(longitude); - user.setLastLocationUpdate((new Date()).getTime()); - UserHelper.saveEntry(user); - - log.info("User " + user.getName() + " location updated"); - response.setContent(user); - return response; - } - + private static final Logger log = Logger.getLogger(SetUserLocationEndpoint.class.getSimpleName()); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_USER_SET_LOCATION; + } + + @Override + public boolean requiresAuthorization(ApiRequest request) { + return true; + } + + @Override + public List getRequiredParameters(ApiRequest request) { + List parameters = new ArrayList(); + parameters.add("latitude"); + parameters.add("longitude"); + parameters.add("userKeyId"); + return parameters; + } + + @Override + public PermissionSet getRequiredPermissions(ApiRequest request) { + PermissionSet permissionSet = new PermissionSet(); + + // user wants to update his own location + PermissionEntry permissionEntry = new PermissionEntry(); + permissionEntry.setPermission(PermissionEntry.PERMISSION_OWN); + permissionEntry.setSubjectKeyId(request.getParameterAsLong("userKeyId", -1)); + permissionEntry.setSubjectKind(UserEntry.class.getSimpleName()); + permissionSet.getPermissions().add(permissionEntry); + + return permissionSet; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + float latitude = request.getParameterAsFloat("latitude", -1); + float longitude = request.getParameterAsFloat("longitude", -1); + + // get the user that initiated the request + UserEntry user = request.getUser(); + + // update the location + user.setLatitude(latitude); + user.setLongitude(longitude); + user.setLastLocationUpdate((new Date()).getTime()); + UserHelper.saveEntry(user); + + log.info("User " + user.getName() + " location updated"); + response.setContent(user); + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SignInUserEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SignInUserEndpoint.java index 1d508b9..70807e3 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SignInUserEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/SignInUserEndpoint.java @@ -1,6 +1,8 @@ package com.intelliq.appengine.api.endpoint.user; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.logging.Logger; import javax.servlet.http.HttpServletResponse; @@ -12,51 +14,56 @@ import com.intelliq.appengine.api.endpoint.EndpointManager; import com.intelliq.appengine.datastore.UserHelper; import com.intelliq.appengine.datastore.entries.UserEntry; +import com.intelliq.appengine.logging.SlackLog; +import com.intelliq.appengine.logging.UserLogging; + +import net.steppschuh.slackmessagebuilder.message.attachment.Attachment; +import net.steppschuh.slackmessagebuilder.message.attachment.AttachmentField; public class SignInUserEndpoint extends Endpoint { - private static final Logger log = Logger.getLogger(SignInUserEndpoint.class.getSimpleName()); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_USER_SIGNIN; - } - - @Override - public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { - ApiResponse response = new ApiResponse(); - - // get the user that initiated the request - UserEntry parsedUser = null; - try { - parsedUser = request.parseUserFromToken(); - } catch (Exception ex) { - response.setStatusCode(HttpServletResponse.SC_BAD_REQUEST); - response.setException(new Exception("Unable to parse user from token: " + ex.getMessage())); - return response; - } - - UserEntry existingUser = null; - try { - existingUser = request.getUserFromToken(parsedUser); - existingUser.getStats().setLastSignIn((new Date()).getTime()); - UserHelper.saveEntry(existingUser); - - log.info("User " + existingUser.getName() + " signed in"); - response.setContent(existingUser); - return response; - } catch (Exception ex) { - // user is not registered yet - } - - // add the user - Key userKey = UserHelper.saveEntry(parsedUser); - parsedUser.setKey(userKey); - - log.info("User " + parsedUser.getName() + " signed up"); - response.setContent(parsedUser); - return response; - } - + private static final Logger log = Logger.getLogger(SignInUserEndpoint.class.getSimpleName()); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_USER_SIGNIN; + } + + @Override + public ApiResponse generateRequestResponse(ApiRequest request) throws Exception { + ApiResponse response = new ApiResponse(); + + // get the user that initiated the request + UserEntry parsedUser = null; + try { + parsedUser = request.parseUserFromToken(); + } catch (Exception ex) { + response.setStatusCode(HttpServletResponse.SC_BAD_REQUEST); + response.setException(new Exception("Unable to parse user from token: " + ex.getMessage())); + return response; + } + + UserEntry existingUser = null; + try { + existingUser = request.getUserFromToken(parsedUser); + existingUser.getStats().setLastSignIn((new Date()).getTime()); + UserHelper.saveEntry(existingUser); + + //UserLogging.logSignIn(existingUser); + response.setContent(existingUser); + return response; + } catch (Exception ex) { + // user is not registered yet + } + + // add the user + Key userKey = UserHelper.saveEntry(parsedUser); + parsedUser.setKey(userKey); + + UserLogging.logSignUp(parsedUser); + response.setContent(parsedUser); + return response; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/UserEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/UserEndpoint.java index 5ccc8e3..e39ab77 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/UserEndpoint.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/user/UserEndpoint.java @@ -10,29 +10,29 @@ public class UserEndpoint extends Endpoint { - public static final List endpoints = getAvailableEndpoints(); - - @Override - public String getEndpointPath() { - return EndpointManager.ENDPOINT_USER; - } - - @Override - public ApiResponse processRequest(ApiRequest request) { - Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); - if (endpoint != null) { - return endpoint.processRequest(request); - } else { - return super.processRequest(request); - } - } - - private static List getAvailableEndpoints() { - List endpoints = new ArrayList(); - endpoints.add(new GetUserEndpoint()); - endpoints.add(new SignInUserEndpoint()); - endpoints.add(new SetUserLocationEndpoint()); - return endpoints; + public static final List endpoints = getAvailableEndpoints(); + + @Override + public String getEndpointPath() { + return EndpointManager.ENDPOINT_USER; + } + + @Override + public ApiResponse processRequest(ApiRequest request) { + Endpoint endpoint = EndpointManager.getEndpointForRequest(request, endpoints); + if (endpoint != null) { + return endpoint.processRequest(request); + } else { + return super.processRequest(request); + } } - + + private static List getAvailableEndpoints() { + List endpoints = new ArrayList(); + endpoints.add(new GetUserEndpoint()); + endpoints.add(new SignInUserEndpoint()); + endpoints.add(new SetUserLocationEndpoint()); + return endpoints; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/chron/ChronServlet.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/chron/ChronServlet.java index 8ad87c3..365a5df 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/chron/ChronServlet.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/chron/ChronServlet.java @@ -34,53 +34,53 @@ @SuppressWarnings("serial") public class ChronServlet extends HttpServlet { - - private static final Logger log = Logger.getLogger(ChronServlet.class.getName()); - @Override + private static final Logger log = Logger.getLogger(ChronServlet.class.getName()); + + @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { - - String requestUrl = req.getRequestURL().toString(); - - String response = ""; - Object responseObject = null; - - try { - if (requestUrl.contains("/clean/datastore/")) { - responseObject = processCleanDatastoreRequest(req); - } else { - throw new Exception("Unknown chron job"); - } - - if (responseObject != null) { - Gson gson = new Gson(); - response = gson.toJson(responseObject); - } else { - response = "{}"; - } - } catch (Exception e) { - if (e.getMessage() != null) { - response = e.getMessage(); - } else { - response = e.toString(); - } - e.printStackTrace(); - } - - resp.setContentType("application/json"); - resp.addHeader("Access-Control-Allow-Origin", "*"); + + String requestUrl = req.getRequestURL().toString(); + + String response = ""; + Object responseObject = null; + + try { + if (requestUrl.contains("/clean/datastore/")) { + responseObject = processCleanDatastoreRequest(req); + } else { + throw new Exception("Unknown chron job"); + } + + if (responseObject != null) { + Gson gson = new Gson(); + response = gson.toJson(responseObject); + } else { + response = "{}"; + } + } catch (Exception e) { + if (e.getMessage() != null) { + response = e.getMessage(); + } else { + response = e.toString(); + } + e.printStackTrace(); + } + + resp.setContentType("application/json"); + resp.addHeader("Access-Control-Allow-Origin", "*"); resp.getWriter().write(response); resp.getWriter().flush(); resp.getWriter().close(); } - - public Object processCleanDatastoreRequest(HttpServletRequest req) throws Exception { - log.info("Datastore cleaning invoked"); - - // TODO: implement datastore cleaning - - return null; - } + + public Object processCleanDatastoreRequest(HttpServletRequest req) throws Exception { + log.info("Datastore cleaning invoked"); + + // TODO: implement datastore cleaning + + return null; + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/BusinessHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/BusinessHelper.java index 9477dc5..1cea1dd 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/BusinessHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/BusinessHelper.java @@ -13,62 +13,62 @@ public class BusinessHelper { - private static final Logger log = Logger.getLogger(BusinessHelper.class.getName()); + private static final Logger log = Logger.getLogger(BusinessHelper.class.getName()); - public static Key saveEntry(BusinessEntry entry) throws Exception { - if (entry == null) { - throw new Exception("EntryItem is null"); - } + public static Key saveEntry(BusinessEntry entry) throws Exception { + if (entry == null) { + throw new Exception("EntryItem is null"); + } + + Key entryKey = null; + PersistenceManager pm = PMF.get().getPersistenceManager(); + try { + entryKey = pm.makePersistent(entry).getKey(); + } finally { + pm.close(); + } + return entryKey; + } + + public static List getBusinessesByUserKeyId(long userKeyId, int minimumPermission) { + List businessKeyIds = getBusinessKeyIdsByUserKeyId(userKeyId, minimumPermission); + List results = new ArrayList(); + for (Long businessKeyId : businessKeyIds) { + try { + BusinessEntry businessEntry = getEntryByKeyId(businessKeyId); + if (businessEntry == null) { + throw new Exception("Business is null"); + } + results.add(businessEntry); + } catch (Exception ex) { + log.warning("Unable to get business with key ID: " + businessKeyId + ": " + ex.getMessage()); + } + } + return results; + } + + public static List getBusinessKeyIdsByUserKeyId(long userKeyId, int minimumPermission) { + List permissions = PermissionHelper.getPermissions(userKeyId, BusinessEntry.class.getSimpleName()); + List businessKeyIds = new ArrayList<>(); + for (PermissionEntry permission : permissions) { + if (permission.getPermission() >= minimumPermission) { + businessKeyIds.add(permission.getSubjectKeyId()); + } + } + return businessKeyIds; + } + + public static BusinessEntry getEntryByKeyId(String idString) { + long id = Long.parseLong(idString); + return getEntryByKeyId(id); + } + + public static BusinessEntry getEntryByKeyId(long id) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Key key = KeyFactory.createKey(BusinessEntry.class.getSimpleName(), id); + BusinessEntry entry = pm.getObjectById(BusinessEntry.class, key); + pm.close(); + return entry; + } - Key entryKey = null; - PersistenceManager pm = PMF.get().getPersistenceManager(); - try { - entryKey = pm.makePersistent(entry).getKey(); - } finally { - pm.close(); - } - return entryKey; - } - - public static List getBusinessesByUserKeyId(long userKeyId, int minimumPermission) { - List businessKeyIds = getBusinessKeyIdsByUserKeyId(userKeyId, minimumPermission); - List results = new ArrayList(); - for (Long businessKeyId : businessKeyIds) { - try { - BusinessEntry businessEntry = getEntryByKeyId(businessKeyId); - if (businessEntry == null) { - throw new Exception("Business is null"); - } - results.add(businessEntry); - } catch (Exception ex) { - log.warning("Unable to get business with key ID: " + businessKeyId + ": " + ex.getMessage()); - } - } - return results; - } - - public static List getBusinessKeyIdsByUserKeyId(long userKeyId, int minimumPermission) { - List permissions = PermissionHelper.getPermissions(userKeyId, BusinessEntry.class.getSimpleName()); - List businessKeyIds = new ArrayList<>(); - for (PermissionEntry permission : permissions) { - if (permission.getPermission() >= minimumPermission) { - businessKeyIds.add(permission.getSubjectKeyId()); - } - } - return businessKeyIds; - } - - public static BusinessEntry getEntryByKeyId(String idString) { - long id = Long.parseLong(idString); - return getEntryByKeyId(id); - } - - public static BusinessEntry getEntryByKeyId(long id) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Key key = KeyFactory.createKey(BusinessEntry.class.getSimpleName(), id); - BusinessEntry entry = pm.getObjectById(BusinessEntry.class, key); - pm.close(); - return entry; - } - } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/EntryManager.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/EntryManager.java index c26a2f5..d7b2b6d 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/EntryManager.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/EntryManager.java @@ -5,8 +5,7 @@ public class EntryManager { - private static final Logger log = Logger.getLogger(EntryManager.class.getName()); - - - + private static final Logger log = Logger.getLogger(EntryManager.class.getName()); + + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/ImageHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/ImageHelper.java index 42bb1cb..fb09f71 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/ImageHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/ImageHelper.java @@ -18,84 +18,84 @@ public class ImageHelper { - private static final Logger log = Logger.getLogger(ImageHelper.class.getName()); - - public static Key saveEntry(ImageEntry entry) throws Exception { - if (entry == null) { - throw new Exception("EntryItem is null"); - } - - Key entryKey = null; - PersistenceManager pm = PMF.get().getPersistenceManager(); - try { - entryKey = pm.makePersistent(entry).getKey(); - } finally { - pm.close(); - } - return entryKey; - } - - public static ImageEntry fetchImageFromUrl(String url) throws Exception { - log.info("Fetching image from " + url); - - URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService(); - HTTPResponse fetchResponse = fetchService.fetch(new URL(url)); - - String fetchResponseContentType = null; - for (HTTPHeader header : fetchResponse.getHeaders()) { - if (header.getName().equalsIgnoreCase("content-type")) { - fetchResponseContentType = header.getValue(); - break; - } - } - - if (fetchResponseContentType != null) { - ImageEntry image = new ImageEntry(); - image.setImageType(fetchResponseContentType); - image.setImage(fetchResponse.getContent()); - return image; - } - - return null; - } - - public static byte[] resizeImage(byte[] originalImage, String sizeString) { - if (sizeString.equals(ImageEntry.SIZE_ORIGINAL)) { - return originalImage; - } else { - try { - int newWidth = Integer.parseInt(sizeString); - return resizeImage(originalImage, newWidth, false); - } catch (Exception e) { - return originalImage; - } - } - } - - public static byte[] resizeImage(byte[] originalImage, int newWidth) { - return resizeImage(originalImage, newWidth, false); - } - - public static byte[] resizeImage(byte[] originalImage, int newWidth, boolean scaleUp) { - try { - ImagesService imagesService = ImagesServiceFactory.getImagesService(); - - Image oldImage = ImagesServiceFactory.makeImage(originalImage); - - // avoid scaling up images - if (newWidth > oldImage.getWidth() && !scaleUp) { - return originalImage; - } - - // get new height to keep aspect ratio - int newHeight = Math.round((newWidth * oldImage.getHeight()) / oldImage.getWidth()); - - Transform resize = ImagesServiceFactory.makeResize(newWidth, newHeight); - Image newImage = imagesService.applyTransform(resize, oldImage); - return newImage.getImageData(); - } catch (Exception e) { - e.printStackTrace(); - return originalImage; - } - } + private static final Logger log = Logger.getLogger(ImageHelper.class.getName()); + + public static Key saveEntry(ImageEntry entry) throws Exception { + if (entry == null) { + throw new Exception("EntryItem is null"); + } + + Key entryKey = null; + PersistenceManager pm = PMF.get().getPersistenceManager(); + try { + entryKey = pm.makePersistent(entry).getKey(); + } finally { + pm.close(); + } + return entryKey; + } + + public static ImageEntry fetchImageFromUrl(String url) throws Exception { + log.info("Fetching image from " + url); + + URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService(); + HTTPResponse fetchResponse = fetchService.fetch(new URL(url)); + + String fetchResponseContentType = null; + for (HTTPHeader header : fetchResponse.getHeaders()) { + if (header.getName().equalsIgnoreCase("content-type")) { + fetchResponseContentType = header.getValue(); + break; + } + } + + if (fetchResponseContentType != null) { + ImageEntry image = new ImageEntry(); + image.setImageType(fetchResponseContentType); + image.setImage(fetchResponse.getContent()); + return image; + } + + return null; + } + + public static byte[] resizeImage(byte[] originalImage, String sizeString) { + if (sizeString.equals(ImageEntry.SIZE_ORIGINAL)) { + return originalImage; + } else { + try { + int newWidth = Integer.parseInt(sizeString); + return resizeImage(originalImage, newWidth, false); + } catch (Exception e) { + return originalImage; + } + } + } + + public static byte[] resizeImage(byte[] originalImage, int newWidth) { + return resizeImage(originalImage, newWidth, false); + } + + public static byte[] resizeImage(byte[] originalImage, int newWidth, boolean scaleUp) { + try { + ImagesService imagesService = ImagesServiceFactory.getImagesService(); + + Image oldImage = ImagesServiceFactory.makeImage(originalImage); + + // avoid scaling up images + if (newWidth > oldImage.getWidth() && !scaleUp) { + return originalImage; + } + + // get new height to keep aspect ratio + int newHeight = Math.round((newWidth * oldImage.getHeight()) / oldImage.getWidth()); + + Transform resize = ImagesServiceFactory.makeResize(newWidth, newHeight); + Image newImage = imagesService.applyTransform(resize, oldImage); + return newImage.getImageData(); + } catch (Exception e) { + e.printStackTrace(); + return originalImage; + } + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/Location.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/Location.java index b921ad5..89c74e6 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/Location.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/Location.java @@ -5,148 +5,148 @@ public class Location { - public static final int DISTANCE_ANY = -1; - public static final int DISTANCE_NARROW = 1000; - public static final int DISTANCE_DEFAULT = 3 * DISTANCE_NARROW; - public static final int DISTANCE_FAR = 3 * DISTANCE_DEFAULT; - - float latitude; - float longitude; - - String country; - String city; - String postalCode; - String street; - String number; - - public Location() { - latitude = -1; - longitude = -1; - } - - /* - * Methods for calculating the distance between two locations in meters - */ - public float getDistanceTo(Location destination) { - return getDistance(this, destination); - } - - public static float getDistance(Location source, Location destination) { - if (source.latitude == -1 || source.longitude == -1 || destination.latitude == -1 || destination.longitude == -1) { - return -1; - } else { - return getDistance(source.latitude, source.longitude, destination.latitude, destination.longitude); - } - } - - public static float getDistance(float lat1, float lng1, float lat2, float lng2) { - double earthRadius = 6371000; - double dLat = Math.toRadians(lat2 - lat1); - double dLng = Math.toRadians(lng2 - lng1); - double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2); - double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - float dist = (float) (earthRadius * c); - - return dist; - } - - public void parseFromRequest(ApiRequest req) { - String countryParam = req.getParameter("country"); - String cityParam = req.getParameter("city"); - String postalCodeParam = req.getParameter("postalCode"); - String streetParam = req.getParameter("street"); - String numberParam = req.getParameter("number"); - - String latitudeParam = req.getParameter("latitude"); - String longitudeParam = req.getParameter("longitude"); - - if (ParserHelper.containsAnyValue(countryParam)) { - setCountry(countryParam); - } - if (ParserHelper.containsAnyValue(cityParam)) { - setCity(cityParam); - } - if (ParserHelper.containsAnyValue(postalCodeParam)) { - setPostalCode(postalCodeParam); - } - if (ParserHelper.containsAnyValue(streetParam)) { - setStreet(streetParam); - } - if (ParserHelper.containsAnyValue(numberParam)) { - setNumber(numberParam); - } - if (ParserHelper.containsAnyValue(latitudeParam)) { - setLatitude(Float.parseFloat(latitudeParam)); - } - if (ParserHelper.containsAnyValue(longitudeParam)) { - setLongitude(Float.parseFloat(longitudeParam)); - } - } - - public boolean isValidLocation() { - if (latitude == -1 && longitude == -1) { - return false; - } - return true; - } - - /* - * getter & setter - */ - public float getLatitude() { - return latitude; - } - - public void setLatitude(float latitude) { - this.latitude = latitude; - } - - public float getLongitude() { - return longitude; - } - - public void setLongitude(float longitude) { - this.longitude = longitude; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getPostalCode() { - return postalCode; - } - - public void setPostalCode(String postalCode) { - this.postalCode = postalCode; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getNumber() { - return number; - } - - public void setNumber(String number) { - this.number = number; - } - + public static final int DISTANCE_ANY = -1; + public static final int DISTANCE_NARROW = 1000; + public static final int DISTANCE_DEFAULT = 3 * DISTANCE_NARROW; + public static final int DISTANCE_FAR = 3 * DISTANCE_DEFAULT; + + float latitude; + float longitude; + + String country; + String city; + String postalCode; + String street; + String number; + + public Location() { + latitude = -1; + longitude = -1; + } + + /* + * Methods for calculating the distance between two locations in meters + */ + public float getDistanceTo(Location destination) { + return getDistance(this, destination); + } + + public static float getDistance(Location source, Location destination) { + if (source.latitude == -1 || source.longitude == -1 || destination.latitude == -1 || destination.longitude == -1) { + return -1; + } else { + return getDistance(source.latitude, source.longitude, destination.latitude, destination.longitude); + } + } + + public static float getDistance(float lat1, float lng1, float lat2, float lng2) { + double earthRadius = 6371000; + double dLat = Math.toRadians(lat2 - lat1); + double dLng = Math.toRadians(lng2 - lng1); + double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + float dist = (float) (earthRadius * c); + + return dist; + } + + public void parseFromRequest(ApiRequest req) { + String countryParam = req.getParameter("country"); + String cityParam = req.getParameter("city"); + String postalCodeParam = req.getParameter("postalCode"); + String streetParam = req.getParameter("street"); + String numberParam = req.getParameter("number"); + + String latitudeParam = req.getParameter("latitude"); + String longitudeParam = req.getParameter("longitude"); + + if (ParserHelper.containsAnyValue(countryParam)) { + setCountry(countryParam); + } + if (ParserHelper.containsAnyValue(cityParam)) { + setCity(cityParam); + } + if (ParserHelper.containsAnyValue(postalCodeParam)) { + setPostalCode(postalCodeParam); + } + if (ParserHelper.containsAnyValue(streetParam)) { + setStreet(streetParam); + } + if (ParserHelper.containsAnyValue(numberParam)) { + setNumber(numberParam); + } + if (ParserHelper.containsAnyValue(latitudeParam)) { + setLatitude(Float.parseFloat(latitudeParam)); + } + if (ParserHelper.containsAnyValue(longitudeParam)) { + setLongitude(Float.parseFloat(longitudeParam)); + } + } + + public boolean isValidLocation() { + if (latitude == -1 && longitude == -1) { + return false; + } + return true; + } + + /* + * getter & setter + */ + public float getLatitude() { + return latitude; + } + + public void setLatitude(float latitude) { + this.latitude = latitude; + } + + public float getLongitude() { + return longitude; + } + + public void setLongitude(float longitude) { + this.longitude = longitude; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/MergeHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/MergeHelper.java index 639b48d..6f52861 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/MergeHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/MergeHelper.java @@ -7,36 +7,36 @@ public class MergeHelper { - public static String mergeStrings(String existingValue, String newValue) { - if (!ParserHelper.containsAnyValue(existingValue)) { - return newValue; - } else { - return existingValue; - } - } - - public static List mergeListsOfString(List existingList, List newList) { - if (existingList == null || existingList.size() == 0) { - return newList; - } - for (String newString: newList) { - if (!existingList.contains(newString)) { - existingList.add(newString); - } - } - return existingList; - } - - public static List mergeListsOfLong(List existingList, List newList) { - if (existingList == null || existingList.size() == 0) { - return newList; - } - for (long newValue: newList) { - if (!existingList.contains(newValue)) { - existingList.add(newValue); - } - } - return existingList; - } - + public static String mergeStrings(String existingValue, String newValue) { + if (!ParserHelper.containsAnyValue(existingValue)) { + return newValue; + } else { + return existingValue; + } + } + + public static List mergeListsOfString(List existingList, List newList) { + if (existingList == null || existingList.size() == 0) { + return newList; + } + for (String newString : newList) { + if (!existingList.contains(newString)) { + existingList.add(newString); + } + } + return existingList; + } + + public static List mergeListsOfLong(List existingList, List newList) { + if (existingList == null || existingList.size() == 0) { + return newList; + } + for (long newValue : newList) { + if (!existingList.contains(newValue)) { + existingList.add(newValue); + } + } + return existingList; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PMF.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PMF.java index d6c8748..9c6f81a 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PMF.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PMF.java @@ -4,10 +4,11 @@ import javax.jdo.PersistenceManagerFactory; public final class PMF { - + private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); - private PMF() {} + private PMF() { + } public static PersistenceManagerFactory get() { return pmfInstance; diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PermissionHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PermissionHelper.java index 4b75dfc..68b847b 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PermissionHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/PermissionHelper.java @@ -17,207 +17,207 @@ public class PermissionHelper { - private static final Logger log = Logger.getLogger(PermissionHelper.class.getSimpleName()); - - public static Key saveEntry(PermissionEntry entry) throws Exception { - if (entry == null) { - throw new Exception("PermissionEntry is null"); - } - - Key entryKey = null; - PersistenceManager pm = PMF.get().getPersistenceManager(); - try { - entryKey = pm.makePersistent(entry).getKey(); - } finally { - pm.close(); - } - return entryKey; - } - - public static boolean hasPermission(PermissionEntry permissionEntry) { - return hasPermission(permissionEntry.getUserKeyId(), permissionEntry.getSubjectKeyId(), permissionEntry.getSubjectKind(), permissionEntry.getPermission()); - } - - public static boolean hasPermission(long userKeyId, long subjectKeyId, String subjectKind, int permission) { - // check if this permission exists - if (getPermission(userKeyId, subjectKeyId, permission) != null) { - return true; - } - return false; - } - - public static PermissionEntry getPermission(long userKeyId, long subjectKeyId, int permission) { - try { - List permissionEntries = getPermissions(userKeyId, subjectKeyId); - for (PermissionEntry permissionEntry : permissionEntries) { - if (permissionEntry.matches(userKeyId, subjectKeyId, permission)) { - return permissionEntry; - } - } - return null; - } catch (Exception e) { - log.warning("Unable to get permission"); - e.printStackTrace(); - return null; - } - } - - public static boolean grantPermission(UserEntry user, BusinessEntry businessEntry, int permission) { - try { - return grantPermission(user.getKey().getId(), businessEntry.getKey().getId(), BusinessEntry.class.getSimpleName(), permission); - } catch (Exception ex) { - log.warning("Unable to grant permission: " + ex.getMessage()); - return false; - } - } - - public static boolean grantPermission(UserEntry user, QueueEntry queueEntry, int permission) { - try { - return grantPermission(user.getKey().getId(), queueEntry.getKey().getId(), QueueEntry.class.getSimpleName(), permission); - } catch (Exception ex) { - log.warning("Unable to grant permission: " + ex.getMessage()); - return false; - } - } - - public static boolean grantPermission(UserEntry user, QueueItemEntry queueItemEntry, int permission) { - try { - return grantPermission(user.getKey().getId(), queueItemEntry.getKey().getId(), QueueItemEntry.class.getSimpleName(), permission); - } catch (Exception ex) { - log.warning("Unable to grant permission: " + ex.getMessage()); - return false; - } - } - - public static boolean grantPermission(long userKeyId, long subjectKeyId, String subjectKind, int permission) { - try { - PermissionEntry entry = new PermissionEntry(userKeyId, subjectKeyId, subjectKind, permission); - saveEntry(entry); - log.info("New permission granted: " + userKeyId + " - " + subjectKeyId + " (" + subjectKind + "): " + permission); - return true; - } catch (Exception e) { - log.warning("Unable to grant permission: " + e.getMessage()); - e.printStackTrace(); - return false; - } - } - - public static boolean revokePermission(long userKeyId, long subjectKeyId, int permission) { - try { - PermissionEntry permissionEntry = getPermission(userKeyId, subjectKeyId, permission); - if (permissionEntry == null) { - throw new Exception("Permission does not exist"); - } - deleteEntryByKeyId(permissionEntry.getKey().getId()); - log.info("Permission revoked"); - return true; - } catch (Exception e) { - log.warning("Unable to revoke permission: " + e.getMessage()); - e.printStackTrace(); - return false; - } - } - - public static List getPermissions(long userKeyId, long subjectKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(PermissionEntry.class); - query.setFilter("userKeyId == value && subjectKeyId == value2"); - query.declareParameters("long value, long value2"); - query.setOrdering("permission descending"); - query.setRange(0, 100); - - List results = new ArrayList(); - try { - results = (List) query.execute(userKeyId, subjectKeyId); - log.info("PermissionQuery execution returned " + results.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - return results; - } - - public static List getPermissions(long userKeyId, String subjectKind) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(PermissionEntry.class); - query.setFilter("userKeyId == value && subjectKind == value2"); - query.declareParameters("long value, String value2"); - query.setOrdering("permission descending"); - query.setRange(0, 100); - - List results = new ArrayList(); - try { - results = (List) query.execute(userKeyId, subjectKind); - log.info("PermissionQuery execution returned " + results.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - return results; - } - - public static List getPermissionsByUserKeyId(long userKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(PermissionEntry.class); - query.setFilter("userKeyId == '" + userKeyId + "'"); - query.setOrdering("permission descending"); - query.setRange(0, 1000); - - List results = new ArrayList(); - try { - results = (List) query.execute(); - log.info("PermissionQuery execution returned " + results.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - return results; - } - - public static List getPermissionsBySubjectKeyId(long subjectKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(PermissionEntry.class); - query.setFilter("subjectKeyId == '" + subjectKeyId + "'"); - query.setOrdering("permission descending"); - query.setRange(0, 1000); - - List results = new ArrayList(); - try { - results = (List) query.execute(); - log.info("PermissionQuery execution returned " + results.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - return results; - } - - public static PermissionEntry getEntryByKeyId(String idString) { - long id = Long.parseLong(idString); - return getEntryByKeyId(id); - } - - public static PermissionEntry getEntryByKeyId(long id) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Key key = KeyFactory.createKey(PermissionEntry.class.getSimpleName(), id); - PermissionEntry entry = pm.getObjectById(PermissionEntry.class, key); - pm.close(); - return entry; - } - - public static void deleteEntryByKeyId(long id) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Key key = KeyFactory.createKey(PermissionEntry.class.getSimpleName(), id); - PermissionEntry entry = pm.getObjectById(PermissionEntry.class, key); - pm.deletePersistent(entry); - pm.close(); - } + private static final Logger log = Logger.getLogger(PermissionHelper.class.getSimpleName()); + + public static Key saveEntry(PermissionEntry entry) throws Exception { + if (entry == null) { + throw new Exception("PermissionEntry is null"); + } + + Key entryKey = null; + PersistenceManager pm = PMF.get().getPersistenceManager(); + try { + entryKey = pm.makePersistent(entry).getKey(); + } finally { + pm.close(); + } + return entryKey; + } + + public static boolean hasPermission(PermissionEntry permissionEntry) { + return hasPermission(permissionEntry.getUserKeyId(), permissionEntry.getSubjectKeyId(), permissionEntry.getSubjectKind(), permissionEntry.getPermission()); + } + + public static boolean hasPermission(long userKeyId, long subjectKeyId, String subjectKind, int permission) { + // check if this permission exists + if (getPermission(userKeyId, subjectKeyId, permission) != null) { + return true; + } + return false; + } + + public static PermissionEntry getPermission(long userKeyId, long subjectKeyId, int permission) { + try { + List permissionEntries = getPermissions(userKeyId, subjectKeyId); + for (PermissionEntry permissionEntry : permissionEntries) { + if (permissionEntry.matches(userKeyId, subjectKeyId, permission)) { + return permissionEntry; + } + } + return null; + } catch (Exception e) { + log.warning("Unable to get permission"); + e.printStackTrace(); + return null; + } + } + + public static boolean grantPermission(UserEntry user, BusinessEntry businessEntry, int permission) { + try { + return grantPermission(user.getKey().getId(), businessEntry.getKey().getId(), BusinessEntry.class.getSimpleName(), permission); + } catch (Exception ex) { + log.warning("Unable to grant permission: " + ex.getMessage()); + return false; + } + } + + public static boolean grantPermission(UserEntry user, QueueEntry queueEntry, int permission) { + try { + return grantPermission(user.getKey().getId(), queueEntry.getKey().getId(), QueueEntry.class.getSimpleName(), permission); + } catch (Exception ex) { + log.warning("Unable to grant permission: " + ex.getMessage()); + return false; + } + } + + public static boolean grantPermission(UserEntry user, QueueItemEntry queueItemEntry, int permission) { + try { + return grantPermission(user.getKey().getId(), queueItemEntry.getKey().getId(), QueueItemEntry.class.getSimpleName(), permission); + } catch (Exception ex) { + log.warning("Unable to grant permission: " + ex.getMessage()); + return false; + } + } + + public static boolean grantPermission(long userKeyId, long subjectKeyId, String subjectKind, int permission) { + try { + PermissionEntry entry = new PermissionEntry(userKeyId, subjectKeyId, subjectKind, permission); + saveEntry(entry); + log.info("New permission granted: " + userKeyId + " - " + subjectKeyId + " (" + subjectKind + "): " + permission); + return true; + } catch (Exception e) { + log.warning("Unable to grant permission: " + e.getMessage()); + e.printStackTrace(); + return false; + } + } + + public static boolean revokePermission(long userKeyId, long subjectKeyId, int permission) { + try { + PermissionEntry permissionEntry = getPermission(userKeyId, subjectKeyId, permission); + if (permissionEntry == null) { + throw new Exception("Permission does not exist"); + } + deleteEntryByKeyId(permissionEntry.getKey().getId()); + log.info("Permission revoked"); + return true; + } catch (Exception e) { + log.warning("Unable to revoke permission: " + e.getMessage()); + e.printStackTrace(); + return false; + } + } + + public static List getPermissions(long userKeyId, long subjectKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(PermissionEntry.class); + query.setFilter("userKeyId == value && subjectKeyId == value2"); + query.declareParameters("long value, long value2"); + query.setOrdering("permission descending"); + query.setRange(0, 100); + + List results = new ArrayList(); + try { + results = (List) query.execute(userKeyId, subjectKeyId); + log.info("PermissionQuery execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + return results; + } + + public static List getPermissions(long userKeyId, String subjectKind) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(PermissionEntry.class); + query.setFilter("userKeyId == value && subjectKind == value2"); + query.declareParameters("long value, String value2"); + query.setOrdering("permission descending"); + query.setRange(0, 100); + + List results = new ArrayList(); + try { + results = (List) query.execute(userKeyId, subjectKind); + log.info("PermissionQuery execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + return results; + } + + public static List getPermissionsByUserKeyId(long userKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(PermissionEntry.class); + query.setFilter("userKeyId == '" + userKeyId + "'"); + query.setOrdering("permission descending"); + query.setRange(0, 1000); + + List results = new ArrayList(); + try { + results = (List) query.execute(); + log.info("PermissionQuery execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + return results; + } + + public static List getPermissionsBySubjectKeyId(long subjectKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(PermissionEntry.class); + query.setFilter("subjectKeyId == '" + subjectKeyId + "'"); + query.setOrdering("permission descending"); + query.setRange(0, 1000); + + List results = new ArrayList(); + try { + results = (List) query.execute(); + log.info("PermissionQuery execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + return results; + } + + public static PermissionEntry getEntryByKeyId(String idString) { + long id = Long.parseLong(idString); + return getEntryByKeyId(id); + } + + public static PermissionEntry getEntryByKeyId(long id) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Key key = KeyFactory.createKey(PermissionEntry.class.getSimpleName(), id); + PermissionEntry entry = pm.getObjectById(PermissionEntry.class, key); + pm.close(); + return entry; + } + + public static void deleteEntryByKeyId(long id) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Key key = KeyFactory.createKey(PermissionEntry.class.getSimpleName(), id); + PermissionEntry entry = pm.getObjectById(PermissionEntry.class, key); + pm.deletePersistent(entry); + pm.close(); + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueHelper.java index 078f85f..c111fac 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueHelper.java @@ -17,443 +17,443 @@ public class QueueHelper { - private static final Logger log = Logger.getLogger(QueueHelper.class.getName()); - - public static Key saveEntry(QueueEntry entry) throws Exception { - if (entry == null) { - throw new Exception("EntryItem is null"); - } - - Key entryKey = null; - PersistenceManager pm = PMF.get().getPersistenceManager(); - try { - entryKey = pm.makePersistent(entry).getKey(); - } finally { - pm.close(); - } - return entryKey; - } - - /** - * Gets a list of QueueEntries that are in range of the given location - */ - public static List getQueuesByLocation(float latitude, float longitude, long distance) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - - float[] offsetLocation = QueueEntry.offsetLocationToRange(latitude, longitude, distance); - - float latitudeMin = offsetLocation[0]; - float longitudeMin = offsetLocation[1]; - float latitudeMax = offsetLocation[2]; - float longitudeMax = offsetLocation[3]; - - //log.severe("Latitude: " + latitude + " Min: " + latitudeMin + " Max: " + latitudeMax); - //log.severe("Longitude: " + longitude + " Min: " + longitudeMin + " Max: " + longitudeMax); - - // get queues that match the latitude range - Query latitudeQuery = pm.newQuery(QueueEntry.class); - latitudeQuery.setFilter("latitude < latitudeMax && latitude > latitudeMin"); - latitudeQuery.setOrdering("latitude ascending"); - latitudeQuery.declareParameters("float latitudeMin, float latitudeMax"); - - List latitudeResults = new ArrayList(); - try { - latitudeResults = (List) latitudeQuery.execute(latitudeMin, latitudeMax); - latitudeResults.size(); - for (QueueEntry entry : latitudeResults) { - log.info("Matching latitude items: " + entry.getName()); - } - log.info("Query execution returned " + latitudeResults.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - latitudeQuery.closeAll(); - } - - // get queues that match the longitude range - Query longitudeQuery = pm.newQuery(QueueEntry.class); - longitudeQuery.setFilter("longitude < longitudeMax && longitude > longitudeMin"); - longitudeQuery.setOrdering("longitude ascending"); - longitudeQuery.declareParameters("float longitudeMin, float longitudeMax"); - - List longitudeResults = new ArrayList(); - try { - longitudeResults = (List) longitudeQuery.execute(longitudeMin, longitudeMax); - longitudeResults.size(); - for (QueueEntry entry : longitudeResults) { - log.info("Matching longitude items: " + entry.getName()); - } - log.info("Query execution returned " + longitudeResults.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - longitudeQuery.closeAll(); - pm.close(); - } - - // merge latitude and longitude results into one list - List results = mergeQueueEntries(latitudeResults, longitudeResults); - return results; - } - - /** - * This method will get the parent business for each queue - * and group queues from the same business inside them - */ - public static ArrayList getBusinessesForQueues(List queueEntries) { - ArrayList results = new ArrayList(); - - // get all the business key IDs that are needed - List businessKeyIds = new ArrayList(); - for (QueueEntry queueEntry : queueEntries) { - if (!businessKeyIds.contains(queueEntry.getBusinessKeyId())) { - businessKeyIds.add(queueEntry.getBusinessKeyId()); - } - } - - // get all business entries for the needed key IDs - for (long businessKeyId : businessKeyIds) { - try { - BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(businessKeyId); - - // add all queues owned by this business - if (businessEntry != null) { - businessEntry.setQueues(filterQueuesByBusinessKeyId(queueEntries, businessKeyId)); - results.add(businessEntry); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - return results; - } - - /** - * This method will get the parent business for the given queue - */ - public static BusinessEntry getBusinessForQueue(QueueEntry queueEntry) { - BusinessEntry result = null; - - try { - BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(queueEntry.getBusinessKeyId()); - - // add the queue owned by this business - if (businessEntry != null) { - ArrayList queueEntries = new ArrayList(); - queueEntries.add(queueEntry); - businessEntry.setQueues(queueEntries); - result = businessEntry; - } - } catch (Exception ex) { - ex.printStackTrace(); - } - - return result; - } - - /** - * Returns only queues with a matching business key ID - * from a given list - */ - public static ArrayList filterQueuesByBusinessKeyId(List queueEntries, long businessKeyId) { - ArrayList results = new ArrayList(); - for (QueueEntry queueEntry : queueEntries) { - if (queueEntry.getBusinessKeyId() == businessKeyId) { - results.add(queueEntry); - } - } - return results; - } - - public static ArrayList getQueuesByPostalCode(String postalCode) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueEntry.class); - - query.setFilter("postalCode == value"); - query.declareParameters("String value"); - query.setRange(0, 1000); - - ArrayList results = new ArrayList(); - try { - List queryResults = (List) query.execute(postalCode); - for (QueueEntry entry : queryResults) { - results.add(entry); - } - //results = pm.detachCopy(queryResults); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - return results; - } - - public static int getLastTicketNumberInQueue(long queueKeyId) { - return getLastTicketNumberInQueue(queueKeyId, (byte) QueueItemEntry.STATUS_ALL); - } - - public static int getLastTicketNumberInQueue(long queueKeyId, byte status) { - QueueItemEntry lastQueueItemEntry = getLastAssignedTicketInQueue(queueKeyId, status); - if (lastQueueItemEntry != null) { - return lastQueueItemEntry.getTicketNumber(); - } - return -1; - } - - public static List getItemsInQueue(long queueKeyId, int startIndex, int count) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - - query.setFilter("queueKeyId == value"); - query.setOrdering("entryTimestamp descending"); - query.declareParameters("long value"); - query.setRange(startIndex, count); - - List results = new ArrayList(); - try { - results = (List) query.execute(queueKeyId); - results.size(); - for (QueueItemEntry entry : results) { - entry.getName(); - //log.info("Item found: " + entry.getName()); - } - //log.info("Query execution returned " + results.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - return results; - } - - public static ArrayList getQueuesByBusiness(long businessKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueEntry.class); - - query.setFilter("businessKeyId == value"); - query.declareParameters("long value"); - query.setRange(0, 1000); - - ArrayList results = new ArrayList(); - try { - List queryResults = (List) query.execute(businessKeyId); - for (QueueEntry entry : queryResults) { - results.add(entry); - } - //results = pm.detachCopy(queryResults); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - return results; - } - - public static void markAllQueueItemsAsDone(long queueKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - - query.setFilter("queueKeyId == value && status == value2"); - query.declareParameters("long value, long value2"); - query.setRange(0, 10000); - - try { - List queryResults = (List) query.execute(queueKeyId, QueueItemEntry.STATUS_CALLED); - for (QueueItemEntry entry : queryResults) { - entry.setStatus(QueueItemEntry.STATUS_DONE); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - } - - public static int getNumberOfItemsInQueue(long queueKeyId, byte status) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - - query.setFilter("queueKeyId == value && status == value2"); - query.declareParameters("long value, byte value2"); - query.setRange(0, 10000); - - int count = 0; - try { - List queryResults = (List) query.execute(queueKeyId, status); - count = queryResults.size(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - return count; - } - - public static QueueItemEntry getLastAssignedTicketInQueue(long queueKeyId, byte status) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - - if (status > QueueItemEntry.STATUS_ALL) { - query.setFilter("queueKeyId == value && status == value2"); - query.declareParameters("long value, byte value2"); - } else { - query.setFilter("queueKeyId == value"); - query.declareParameters("long value"); - } - query.setOrdering("entryTimestamp descending"); - query.setRange(0, 5); - - List results = new ArrayList(); - try { - if (status > -1) { - results = (List) query.execute(queueKeyId, status); - } else { - results = (List) query.execute(queueKeyId); - } - results.size(); - //log.info("Query execution returned " + results.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - // just in case some items have the same entry timestamp - // return the item with the highest ticket number - QueueItemEntry lastQueueItemEntry = null; - int highestTicketNumber = -1; - for (QueueItemEntry queueItemEntry : results) { - if (queueItemEntry.getTicketNumber() > highestTicketNumber) { - lastQueueItemEntry = queueItemEntry; - highestTicketNumber = lastQueueItemEntry.getTicketNumber(); - } - } - - return lastQueueItemEntry; - } - - public static QueueItemEntry getHighestTicketNumberInQueue(long queueKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - query.setFilter("queueKeyId == '" + queueKeyId + "'"); - query.setOrdering("ticketNumber descending"); - query.setRange(0, 1); - - List results = new ArrayList(); - try { - results = (List) query.execute(); - //log.info("ActorQuery execution returned " + results.size() + " item(s)"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - if (results.size() > 0) { - return results.get(0); - } else { - return null; - } - } - - public static void deleteItemsInQueue(long queueKeyId, byte status) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - - try { - if (status != QueueItemEntry.STATUS_ALL) { - query.setFilter("queueKeyId == value && status == value2"); - query.declareParameters("long value, byte value2"); - query.deletePersistentAll(queueKeyId, status); - } else { - query.setFilter("queueKeyId == value"); - query.declareParameters("long value"); - query.deletePersistentAll(queueKeyId); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - } - - public static void populateQueueWithSampleItems(long queueKeyId, int count) { - ArrayList dummyItems = new ArrayList(); - - for (int i = 0; i < count; i++) { - QueueItemEntry item = new QueueItemEntry(queueKeyId); - item.makeDummyItem(); - dummyItems.add(item); - } - - Collections.sort(dummyItems, new QueueItemEntry.EntryTimestampComparator()); - - String[] dummyNames = FakeData.getNames(count); - - int lastTicketNumber = -1; - for (int i = 0; i < count; i++) { - try { - if (lastTicketNumber < 0) { - lastTicketNumber = getLastTicketNumberInQueue(queueKeyId, QueueItemEntry.STATUS_ALL) + 1; - } - - lastTicketNumber += 1; - - QueueItemEntry item = dummyItems.get(i); - item.setTicketNumber(lastTicketNumber); - item.setName(dummyNames[i]); - QueueItemHelper.saveEntry(item); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - /** - * Returns a list of QueueEntries that are presenst in both given lists - */ - public static List mergeQueueEntries(List list1, List list2) { - List entries = new ArrayList(); - ArrayList keyIds = new ArrayList(); - - //log.severe("Merging lists with " + list1.size() + " and " + list2.size() + " items"); - - for (int i = 0; i < list1.size(); i++) { - keyIds.add(list1.get(i).getKey().getId()); - } - - for (int i = 0; i < list2.size(); i++) { - if (keyIds.contains(list2.get(i).getKey().getId())) { - entries.add(list2.get(i)); - } - } - - return entries; - } - - public static QueueEntry getEntryByKeyId(String idString) { - long id = Long.parseLong(idString); - return getEntryByKeyId(id); - } - - public static QueueEntry getEntryByKeyId(long id) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Key key = KeyFactory.createKey(QueueEntry.class.getSimpleName(), id); - QueueEntry entry = pm.getObjectById(QueueEntry.class, key); - pm.close(); - return entry; - } + private static final Logger log = Logger.getLogger(QueueHelper.class.getName()); + + public static Key saveEntry(QueueEntry entry) throws Exception { + if (entry == null) { + throw new Exception("EntryItem is null"); + } + + Key entryKey = null; + PersistenceManager pm = PMF.get().getPersistenceManager(); + try { + entryKey = pm.makePersistent(entry).getKey(); + } finally { + pm.close(); + } + return entryKey; + } + + /** + * Gets a list of QueueEntries that are in range of the given location + */ + public static List getQueuesByLocation(float latitude, float longitude, long distance) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + + float[] offsetLocation = QueueEntry.offsetLocationToRange(latitude, longitude, distance); + + float latitudeMin = offsetLocation[0]; + float longitudeMin = offsetLocation[1]; + float latitudeMax = offsetLocation[2]; + float longitudeMax = offsetLocation[3]; + + //log.severe("Latitude: " + latitude + " Min: " + latitudeMin + " Max: " + latitudeMax); + //log.severe("Longitude: " + longitude + " Min: " + longitudeMin + " Max: " + longitudeMax); + + // get queues that match the latitude range + Query latitudeQuery = pm.newQuery(QueueEntry.class); + latitudeQuery.setFilter("latitude < latitudeMax && latitude > latitudeMin"); + latitudeQuery.setOrdering("latitude ascending"); + latitudeQuery.declareParameters("float latitudeMin, float latitudeMax"); + + List latitudeResults = new ArrayList(); + try { + latitudeResults = (List) latitudeQuery.execute(latitudeMin, latitudeMax); + latitudeResults.size(); + for (QueueEntry entry : latitudeResults) { + log.info("Matching latitude items: " + entry.getName()); + } + log.info("Query execution returned " + latitudeResults.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + latitudeQuery.closeAll(); + } + + // get queues that match the longitude range + Query longitudeQuery = pm.newQuery(QueueEntry.class); + longitudeQuery.setFilter("longitude < longitudeMax && longitude > longitudeMin"); + longitudeQuery.setOrdering("longitude ascending"); + longitudeQuery.declareParameters("float longitudeMin, float longitudeMax"); + + List longitudeResults = new ArrayList(); + try { + longitudeResults = (List) longitudeQuery.execute(longitudeMin, longitudeMax); + longitudeResults.size(); + for (QueueEntry entry : longitudeResults) { + log.info("Matching longitude items: " + entry.getName()); + } + log.info("Query execution returned " + longitudeResults.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + longitudeQuery.closeAll(); + pm.close(); + } + + // merge latitude and longitude results into one list + List results = mergeQueueEntries(latitudeResults, longitudeResults); + return results; + } + + /** + * This method will get the parent business for each queue + * and group queues from the same business inside them + */ + public static ArrayList getBusinessesForQueues(List queueEntries) { + ArrayList results = new ArrayList(); + + // get all the business key IDs that are needed + List businessKeyIds = new ArrayList(); + for (QueueEntry queueEntry : queueEntries) { + if (!businessKeyIds.contains(queueEntry.getBusinessKeyId())) { + businessKeyIds.add(queueEntry.getBusinessKeyId()); + } + } + + // get all business entries for the needed key IDs + for (long businessKeyId : businessKeyIds) { + try { + BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(businessKeyId); + + // add all queues owned by this business + if (businessEntry != null) { + businessEntry.setQueues(filterQueuesByBusinessKeyId(queueEntries, businessKeyId)); + results.add(businessEntry); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + return results; + } + + /** + * This method will get the parent business for the given queue + */ + public static BusinessEntry getBusinessForQueue(QueueEntry queueEntry) { + BusinessEntry result = null; + + try { + BusinessEntry businessEntry = BusinessHelper.getEntryByKeyId(queueEntry.getBusinessKeyId()); + + // add the queue owned by this business + if (businessEntry != null) { + ArrayList queueEntries = new ArrayList(); + queueEntries.add(queueEntry); + businessEntry.setQueues(queueEntries); + result = businessEntry; + } + } catch (Exception ex) { + ex.printStackTrace(); + } + + return result; + } + + /** + * Returns only queues with a matching business key ID + * from a given list + */ + public static ArrayList filterQueuesByBusinessKeyId(List queueEntries, long businessKeyId) { + ArrayList results = new ArrayList(); + for (QueueEntry queueEntry : queueEntries) { + if (queueEntry.getBusinessKeyId() == businessKeyId) { + results.add(queueEntry); + } + } + return results; + } + + public static ArrayList getQueuesByPostalCode(String postalCode) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueEntry.class); + + query.setFilter("postalCode == value"); + query.declareParameters("String value"); + query.setRange(0, 1000); + + ArrayList results = new ArrayList(); + try { + List queryResults = (List) query.execute(postalCode); + for (QueueEntry entry : queryResults) { + results.add(entry); + } + //results = pm.detachCopy(queryResults); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + return results; + } + + public static int getLastTicketNumberInQueue(long queueKeyId) { + return getLastTicketNumberInQueue(queueKeyId, (byte) QueueItemEntry.STATUS_ALL); + } + + public static int getLastTicketNumberInQueue(long queueKeyId, byte status) { + QueueItemEntry lastQueueItemEntry = getLastAssignedTicketInQueue(queueKeyId, status); + if (lastQueueItemEntry != null) { + return lastQueueItemEntry.getTicketNumber(); + } + return -1; + } + + public static List getItemsInQueue(long queueKeyId, int startIndex, int count) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + + query.setFilter("queueKeyId == value"); + query.setOrdering("entryTimestamp descending"); + query.declareParameters("long value"); + query.setRange(startIndex, count); + + List results = new ArrayList(); + try { + results = (List) query.execute(queueKeyId); + results.size(); + for (QueueItemEntry entry : results) { + entry.getName(); + //log.info("Item found: " + entry.getName()); + } + //log.info("Query execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + return results; + } + + public static ArrayList getQueuesByBusiness(long businessKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueEntry.class); + + query.setFilter("businessKeyId == value"); + query.declareParameters("long value"); + query.setRange(0, 1000); + + ArrayList results = new ArrayList(); + try { + List queryResults = (List) query.execute(businessKeyId); + for (QueueEntry entry : queryResults) { + results.add(entry); + } + //results = pm.detachCopy(queryResults); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + return results; + } + + public static void markAllQueueItemsAsDone(long queueKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + + query.setFilter("queueKeyId == value && status == value2"); + query.declareParameters("long value, long value2"); + query.setRange(0, 10000); + + try { + List queryResults = (List) query.execute(queueKeyId, QueueItemEntry.STATUS_CALLED); + for (QueueItemEntry entry : queryResults) { + entry.setStatus(QueueItemEntry.STATUS_DONE); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + } + + public static int getNumberOfItemsInQueue(long queueKeyId, byte status) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + + query.setFilter("queueKeyId == value && status == value2"); + query.declareParameters("long value, byte value2"); + query.setRange(0, 10000); + + int count = 0; + try { + List queryResults = (List) query.execute(queueKeyId, status); + count = queryResults.size(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + return count; + } + + public static QueueItemEntry getLastAssignedTicketInQueue(long queueKeyId, byte status) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + + if (status > QueueItemEntry.STATUS_ALL) { + query.setFilter("queueKeyId == value && status == value2"); + query.declareParameters("long value, byte value2"); + } else { + query.setFilter("queueKeyId == value"); + query.declareParameters("long value"); + } + query.setOrdering("entryTimestamp descending"); + query.setRange(0, 5); + + List results = new ArrayList(); + try { + if (status > -1) { + results = (List) query.execute(queueKeyId, status); + } else { + results = (List) query.execute(queueKeyId); + } + results.size(); + //log.info("Query execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + // just in case some items have the same entry timestamp + // return the item with the highest ticket number + QueueItemEntry lastQueueItemEntry = null; + int highestTicketNumber = -1; + for (QueueItemEntry queueItemEntry : results) { + if (queueItemEntry.getTicketNumber() > highestTicketNumber) { + lastQueueItemEntry = queueItemEntry; + highestTicketNumber = lastQueueItemEntry.getTicketNumber(); + } + } + + return lastQueueItemEntry; + } + + public static QueueItemEntry getHighestTicketNumberInQueue(long queueKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + query.setFilter("queueKeyId == '" + queueKeyId + "'"); + query.setOrdering("ticketNumber descending"); + query.setRange(0, 1); + + List results = new ArrayList(); + try { + results = (List) query.execute(); + //log.info("ActorQuery execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + if (results.size() > 0) { + return results.get(0); + } else { + return null; + } + } + + public static void deleteItemsInQueue(long queueKeyId, byte status) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + + try { + if (status != QueueItemEntry.STATUS_ALL) { + query.setFilter("queueKeyId == value && status == value2"); + query.declareParameters("long value, byte value2"); + query.deletePersistentAll(queueKeyId, status); + } else { + query.setFilter("queueKeyId == value"); + query.declareParameters("long value"); + query.deletePersistentAll(queueKeyId); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + } + + public static void populateQueueWithSampleItems(long queueKeyId, int count) { + ArrayList dummyItems = new ArrayList(); + + for (int i = 0; i < count; i++) { + QueueItemEntry item = new QueueItemEntry(queueKeyId); + item.makeDummyItem(); + dummyItems.add(item); + } + + Collections.sort(dummyItems, new QueueItemEntry.EntryTimestampComparator()); + + String[] dummyNames = FakeData.getNames(count); + + int lastTicketNumber = -1; + for (int i = 0; i < count; i++) { + try { + if (lastTicketNumber < 0) { + lastTicketNumber = getLastTicketNumberInQueue(queueKeyId, QueueItemEntry.STATUS_ALL) + 1; + } + + lastTicketNumber += 1; + + QueueItemEntry item = dummyItems.get(i); + item.setTicketNumber(lastTicketNumber); + item.setName(dummyNames[i]); + QueueItemHelper.saveEntry(item); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * Returns a list of QueueEntries that are presenst in both given lists + */ + public static List mergeQueueEntries(List list1, List list2) { + List entries = new ArrayList(); + ArrayList keyIds = new ArrayList(); + + //log.severe("Merging lists with " + list1.size() + " and " + list2.size() + " items"); + + for (int i = 0; i < list1.size(); i++) { + keyIds.add(list1.get(i).getKey().getId()); + } + + for (int i = 0; i < list2.size(); i++) { + if (keyIds.contains(list2.get(i).getKey().getId())) { + entries.add(list2.get(i)); + } + } + + return entries; + } + + public static QueueEntry getEntryByKeyId(String idString) { + long id = Long.parseLong(idString); + return getEntryByKeyId(id); + } + + public static QueueEntry getEntryByKeyId(long id) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Key key = KeyFactory.createKey(QueueEntry.class.getSimpleName(), id); + QueueEntry entry = pm.getObjectById(QueueEntry.class, key); + pm.close(); + return entry; + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueItemHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueItemHelper.java index 810dc9e..efb6719 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueItemHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/QueueItemHelper.java @@ -14,96 +14,96 @@ public class QueueItemHelper { - private static final Logger log = Logger.getLogger(QueueItemHelper.class.getName()); - - public static Key saveEntry(QueueItemEntry entry) throws Exception { - if (entry == null) { - throw new Exception("EntryItem is null"); - } - - Key entryKey = null; - PersistenceManager pm = PMF.get().getPersistenceManager(); - try { - entryKey = pm.makePersistent(entry).getKey(); - } finally { - pm.close(); - } - return entryKey; - } - - public static QueueItemEntry getEntryByKeyId(String idString) { - long id = Long.parseLong(idString); - return getEntryByKeyId(id); - } - - public static QueueItemEntry getEntryByKeyId(long id) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Key key = KeyFactory.createKey(QueueItemEntry.class.getSimpleName(), id); - QueueItemEntry entry = pm.getObjectById(QueueItemEntry.class, key); - pm.close(); - return entry; - } - - public static void deleteEntryByKeyId(long id) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Key key = KeyFactory.createKey(QueueItemEntry.class.getSimpleName(), id); - QueueItemEntry entry = pm.getObjectById(QueueItemEntry.class, key); - pm.deletePersistent(entry); - pm.close(); - } - - public static List getQueueItemsByUserKeyId(long userKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - - query.setFilter("userKeyId == value"); - query.declareParameters("long value"); - query.setRange(0, 25); - - ArrayList results = new ArrayList(); - try { - List queryResults = (List) query.execute(userKeyId); - for (QueueItemEntry entry : queryResults) { - results.add(entry); - } - //results = pm.detachCopy(queryResults); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - return results; - } - - public static QueueItemEntry getQueueItemByUserKeyId(long userKeyId, long queueKeyId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(QueueItemEntry.class); - - query.setFilter("userKeyId == value && queueKeyId == value2"); - query.declareParameters("long value, long value2"); - query.setRange(0, 25); - - ArrayList results = new ArrayList(); - try { - List queryResults = (List) query.execute(userKeyId, queueKeyId); - for (QueueItemEntry entry : queryResults) { - results.add(entry); - } - //results = pm.detachCopy(queryResults); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - if (results.size() > 0) { - return results.get(0); - } else { - return null; - } - } + private static final Logger log = Logger.getLogger(QueueItemHelper.class.getName()); + + public static Key saveEntry(QueueItemEntry entry) throws Exception { + if (entry == null) { + throw new Exception("EntryItem is null"); + } + + Key entryKey = null; + PersistenceManager pm = PMF.get().getPersistenceManager(); + try { + entryKey = pm.makePersistent(entry).getKey(); + } finally { + pm.close(); + } + return entryKey; + } + + public static QueueItemEntry getEntryByKeyId(String idString) { + long id = Long.parseLong(idString); + return getEntryByKeyId(id); + } + + public static QueueItemEntry getEntryByKeyId(long id) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Key key = KeyFactory.createKey(QueueItemEntry.class.getSimpleName(), id); + QueueItemEntry entry = pm.getObjectById(QueueItemEntry.class, key); + pm.close(); + return entry; + } + + public static void deleteEntryByKeyId(long id) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Key key = KeyFactory.createKey(QueueItemEntry.class.getSimpleName(), id); + QueueItemEntry entry = pm.getObjectById(QueueItemEntry.class, key); + pm.deletePersistent(entry); + pm.close(); + } + + public static List getQueueItemsByUserKeyId(long userKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + + query.setFilter("userKeyId == value"); + query.declareParameters("long value"); + query.setRange(0, 25); + + ArrayList results = new ArrayList(); + try { + List queryResults = (List) query.execute(userKeyId); + for (QueueItemEntry entry : queryResults) { + results.add(entry); + } + //results = pm.detachCopy(queryResults); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + return results; + } + + public static QueueItemEntry getQueueItemByUserKeyId(long userKeyId, long queueKeyId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(QueueItemEntry.class); + + query.setFilter("userKeyId == value && queueKeyId == value2"); + query.declareParameters("long value, long value2"); + query.setRange(0, 25); + + ArrayList results = new ArrayList(); + try { + List queryResults = (List) query.execute(userKeyId, queueKeyId); + for (QueueItemEntry entry : queryResults) { + results.add(entry); + } + //results = pm.detachCopy(queryResults); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + if (results.size() > 0) { + return results.get(0); + } else { + return null; + } + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/UserHelper.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/UserHelper.java index 1dbc74c..448e15b 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/UserHelper.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/UserHelper.java @@ -18,101 +18,101 @@ public class UserHelper { - private static final Logger log = Logger.getLogger(UserHelper.class.getName()); - - public static Key saveEntry(UserEntry entry) throws Exception { - if (entry == null) { - throw new Exception("EntryItem is null"); - } - - Key entryKey = null; - PersistenceManager pm = PMF.get().getPersistenceManager(); - try { - entryKey = pm.makePersistent(entry).getKey(); - } finally { - pm.close(); - } - return entryKey; - } - - public static UserEntry getUserByGoogleUserId(String googleUserId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(UserEntry.class); - - query.setFilter("googleUserId == value"); - query.declareParameters("String value"); - query.setRange(0, 10); - - ArrayList results = new ArrayList(); - try { - List queryResults = (List) query.execute(googleUserId); - for (UserEntry entry : queryResults) { - // touch child entities - if (entry.getStats() != null) { - entry.getStats().getLastSignIn(); - } else { - entry.setStats(new UserStatsEntry()); - } - results.add(entry); - } - //results = pm.detachCopy(queryResults); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - if (results.size() > 0) { - return results.get(0); - } else { - return null; - } - } - - public static UserEntry getUserByFacebookUserId(String googleUserId) { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Query query = pm.newQuery(UserEntry.class); - - query.setFilter("facebookUserId == value"); - query.declareParameters("String value"); - query.setRange(0, 10); - - ArrayList results = new ArrayList(); - try { - List queryResults = (List) query.execute(googleUserId); - for (UserEntry entry : queryResults) { - // touch child entities - entry.getStats(); - results.add(entry); - } - //results = pm.detachCopy(queryResults); - } catch (Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - - if (results.size() > 0) { - return results.get(0); - } else { - return null; - } - } - - public static UserEntry getEntryByKeyId(String idString) { - long id = Long.parseLong(idString); - return getEntryByKeyId(id); - } - - public static UserEntry getEntryByKeyId(long id) throws NucleusObjectNotFoundException { - PersistenceManager pm = PMF.get().getPersistenceManager(); - Key key = KeyFactory.createKey(UserEntry.class.getSimpleName(), id); - UserEntry entry = pm.getObjectById(UserEntry.class, key); - // touch child entities - entry.getStats(); - pm.close(); - return entry; - } + private static final Logger log = Logger.getLogger(UserHelper.class.getName()); + + public static Key saveEntry(UserEntry entry) throws Exception { + if (entry == null) { + throw new Exception("EntryItem is null"); + } + + Key entryKey = null; + PersistenceManager pm = PMF.get().getPersistenceManager(); + try { + entryKey = pm.makePersistent(entry).getKey(); + } finally { + pm.close(); + } + return entryKey; + } + + public static UserEntry getUserByGoogleUserId(String googleUserId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(UserEntry.class); + + query.setFilter("googleUserId == value"); + query.declareParameters("String value"); + query.setRange(0, 10); + + ArrayList results = new ArrayList(); + try { + List queryResults = (List) query.execute(googleUserId); + for (UserEntry entry : queryResults) { + // touch child entities + if (entry.getStats() != null) { + entry.getStats().getLastSignIn(); + } else { + entry.setStats(new UserStatsEntry()); + } + results.add(entry); + } + //results = pm.detachCopy(queryResults); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + if (results.size() > 0) { + return results.get(0); + } else { + return null; + } + } + + public static UserEntry getUserByFacebookUserId(String googleUserId) { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Query query = pm.newQuery(UserEntry.class); + + query.setFilter("facebookUserId == value"); + query.declareParameters("String value"); + query.setRange(0, 10); + + ArrayList results = new ArrayList(); + try { + List queryResults = (List) query.execute(googleUserId); + for (UserEntry entry : queryResults) { + // touch child entities + entry.getStats(); + results.add(entry); + } + //results = pm.detachCopy(queryResults); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + + if (results.size() > 0) { + return results.get(0); + } else { + return null; + } + } + + public static UserEntry getEntryByKeyId(String idString) { + long id = Long.parseLong(idString); + return getEntryByKeyId(id); + } + + public static UserEntry getEntryByKeyId(long id) throws NucleusObjectNotFoundException { + PersistenceManager pm = PMF.get().getPersistenceManager(); + Key key = KeyFactory.createKey(UserEntry.class.getSimpleName(), id); + UserEntry entry = pm.getObjectById(UserEntry.class, key); + // touch child entities + entry.getStats(); + pm.close(); + return entry; + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/BusinessEntry.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/BusinessEntry.java index 972fb03..336ac00 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/BusinessEntry.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/BusinessEntry.java @@ -14,73 +14,73 @@ @PersistenceCapable(detachable = "true") public class BusinessEntry { - @PrimaryKey - @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) - Key key; - - @Persistent - String name; - - @Persistent - String mail; - - @Persistent - long logoImageKeyId; - - ArrayList queues; - - public BusinessEntry() { - logoImageKeyId = -1; - } - - public void parseFromRequest(ApiRequest req) { - name = req.getParameter("name", name); - mail = req.getParameter("mail", mail); - logoImageKeyId = req.getParameterAsLong("logoImageKeyId", logoImageKeyId); - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - - public Key generateKey() { - return KeyFactory.createKey(BusinessEntry.class.getSimpleName(), name); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getMail() { - return mail; - } - - public void setMail(String email) { - this.mail = email; - } - - public long getLogoImageKeyId() { - return logoImageKeyId; - } - - public void setLogoImageKeyId(long logoImageKeyId) { - this.logoImageKeyId = logoImageKeyId; - } - - public ArrayList getQueues() { - return queues; - } - - public void setQueues(ArrayList queues) { - this.queues = queues; - } - + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + Key key; + + @Persistent + String name; + + @Persistent + String mail; + + @Persistent + long logoImageKeyId; + + ArrayList queues; + + public BusinessEntry() { + logoImageKeyId = -1; + } + + public void parseFromRequest(ApiRequest req) { + name = req.getParameter("name", name); + mail = req.getParameter("mail", mail); + logoImageKeyId = req.getParameterAsLong("logoImageKeyId", logoImageKeyId); + } + + public Key getKey() { + return key; + } + + public void setKey(Key key) { + this.key = key; + } + + public Key generateKey() { + return KeyFactory.createKey(BusinessEntry.class.getSimpleName(), name); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMail() { + return mail; + } + + public void setMail(String email) { + this.mail = email; + } + + public long getLogoImageKeyId() { + return logoImageKeyId; + } + + public void setLogoImageKeyId(long logoImageKeyId) { + this.logoImageKeyId = logoImageKeyId; + } + + public ArrayList getQueues() { + return queues; + } + + public void setQueues(ArrayList queues) { + this.queues = queues; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/ImageEntry.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/ImageEntry.java index 9810973..47e31ce 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/ImageEntry.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/ImageEntry.java @@ -13,83 +13,83 @@ @PersistenceCapable(detachable = "true") public class ImageEntry { - public static final int TYPE_LOGO = 0; - public static final int TYPE_PHOTO = 1; + public static final int TYPE_LOGO = 0; + public static final int TYPE_PHOTO = 1; - public static final String SIZE_ORIGINAL = "original"; + public static final String SIZE_ORIGINAL = "original"; - @PrimaryKey - @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) - Key key; + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + Key key; - @Persistent - long parentKeyId; + @Persistent + long parentKeyId; - @Persistent - int type = TYPE_LOGO; - - @Persistent - @Extension(vendorName="datanucleus", key="gae.unindexed", value="true") + @Persistent + int type = TYPE_LOGO; + + @Persistent + @Extension(vendorName = "datanucleus", key = "gae.unindexed", value = "true") private String imageType; - - @Persistent - private Blob image; - - public ImageEntry() { - - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - - public Key generateKey() { - String keyName = String.valueOf(parentKeyId); - if (type == TYPE_LOGO) { - keyName += "_logo"; - } else if (type == TYPE_PHOTO) { - keyName += "_photo"; - } - return KeyFactory.createKey(ImageEntry.class.getSimpleName(), keyName); - } - - public int getType() { - return type; - } - - public void setType(int type) { - this.type = type; - } - - public long getParentKeyId() { - return parentKeyId; - } - - public void setParentKeyId(long parentKeyId) { - this.parentKeyId = parentKeyId; - } - - public String getImageType() { - return imageType; - } - - public void setImageType(String imageType) { - this.imageType = imageType; - } - - public byte[] getImage() { - if (image == null) { - return null; - } - return image.getBytes(); - } - - public void setImage(byte[] bytes) { - this.image = new Blob(bytes); - } + + @Persistent + private Blob image; + + public ImageEntry() { + + } + + public Key getKey() { + return key; + } + + public void setKey(Key key) { + this.key = key; + } + + public Key generateKey() { + String keyName = String.valueOf(parentKeyId); + if (type == TYPE_LOGO) { + keyName += "_logo"; + } else if (type == TYPE_PHOTO) { + keyName += "_photo"; + } + return KeyFactory.createKey(ImageEntry.class.getSimpleName(), keyName); + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public long getParentKeyId() { + return parentKeyId; + } + + public void setParentKeyId(long parentKeyId) { + this.parentKeyId = parentKeyId; + } + + public String getImageType() { + return imageType; + } + + public void setImageType(String imageType) { + this.imageType = imageType; + } + + public byte[] getImage() { + if (image == null) { + return null; + } + return image.getBytes(); + } + + public void setImage(byte[] bytes) { + this.image = new Blob(bytes); + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/PermissionEntry.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/PermissionEntry.java index 20ce822..f9a7144 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/PermissionEntry.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/PermissionEntry.java @@ -11,91 +11,91 @@ @PersistenceCapable(detachable = "true") public class PermissionEntry { - public static final int PERMISSION_NONE = -1; - public static final int PERMISSION_VIEW = 0; - public static final int PERMISSION_EDIT = 1; - public static final int PERMISSION_OWN = 2; - - @PrimaryKey - @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) - Key key; - - @Persistent - long userKeyId; - - @Persistent - long subjectKeyId; - - @Persistent - String subjectKind; - - @Persistent - int permission; - - public PermissionEntry() { - super(); - this.permission = PERMISSION_NONE; - } - - public PermissionEntry(long userKeyId, long subjectKeyId, String subjectKind, int permission) { - super(); - this.userKeyId = userKeyId; - this.subjectKeyId = subjectKeyId; - this.subjectKind = subjectKind; - this.permission = permission; - } - - public boolean matches(long userKeyId, long subjectKeyId, int permission) { - if (this.userKeyId != userKeyId || this.subjectKeyId != subjectKeyId) { - return false; - } - - // required permission level is higher than the granted one - if (this.permission < permission) { - return false; - } - - return true; - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - - public long getUserKeyId() { - return userKeyId; - } - - public void setUserKeyId(long userKeyId) { - this.userKeyId = userKeyId; - } - - public long getSubjectKeyId() { - return subjectKeyId; - } - - public void setSubjectKeyId(long subbjectKeyId) { - this.subjectKeyId = subbjectKeyId; - } - - public int getPermission() { - return permission; - } - - public void setPermission(int permission) { - this.permission = permission; - } - - public String getSubjectKind() { - return subjectKind; - } - - public void setSubjectKind(String subjectKind) { - this.subjectKind = subjectKind; - } - + public static final int PERMISSION_NONE = -1; + public static final int PERMISSION_VIEW = 0; + public static final int PERMISSION_EDIT = 1; + public static final int PERMISSION_OWN = 2; + + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + Key key; + + @Persistent + long userKeyId; + + @Persistent + long subjectKeyId; + + @Persistent + String subjectKind; + + @Persistent + int permission; + + public PermissionEntry() { + super(); + this.permission = PERMISSION_NONE; + } + + public PermissionEntry(long userKeyId, long subjectKeyId, String subjectKind, int permission) { + super(); + this.userKeyId = userKeyId; + this.subjectKeyId = subjectKeyId; + this.subjectKind = subjectKind; + this.permission = permission; + } + + public boolean matches(long userKeyId, long subjectKeyId, int permission) { + if (this.userKeyId != userKeyId || this.subjectKeyId != subjectKeyId) { + return false; + } + + // required permission level is higher than the granted one + if (this.permission < permission) { + return false; + } + + return true; + } + + public Key getKey() { + return key; + } + + public void setKey(Key key) { + this.key = key; + } + + public long getUserKeyId() { + return userKeyId; + } + + public void setUserKeyId(long userKeyId) { + this.userKeyId = userKeyId; + } + + public long getSubjectKeyId() { + return subjectKeyId; + } + + public void setSubjectKeyId(long subbjectKeyId) { + this.subjectKeyId = subbjectKeyId; + } + + public int getPermission() { + return permission; + } + + public void setPermission(int permission) { + this.permission = permission; + } + + public String getSubjectKind() { + return subjectKind; + } + + public void setSubjectKind(String subjectKind) { + this.subjectKind = subjectKind; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueEntry.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueEntry.java index 8a43064..1959d64 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueEntry.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueEntry.java @@ -17,255 +17,262 @@ @PersistenceCapable(detachable = "true") public class QueueEntry { - public static final byte VISIBILITY_PRIVATE = 0; - public static final byte VISIBILITY_PUBLIC = 1; - - @PrimaryKey - @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) - Key key; - - @Persistent - long businessKeyId; - - @Persistent - String name; - - @Persistent - String description; - - @Persistent - byte visibility; - - @Persistent - long photoImageKeyId; - - @Persistent - long averageWaitingTime; - - @Persistent - boolean requiresSignIn; - - int waitingPeople; - - /** - * Location - */ - @Persistent float latitude; - @Persistent float longitude; - - @Persistent String country; - @Persistent String city; - @Persistent String postalCode; - @Persistent String street; - @Persistent String number; - - public QueueEntry(long businessKeyId) { - this.businessKeyId = businessKeyId; - visibility = VISIBILITY_PUBLIC; - photoImageKeyId = -1; - waitingPeople = -1; - latitude = -1; - longitude = -1; - requiresSignIn = false; - averageWaitingTime = TimeUnit.MINUTES.toMillis(5); - } - - public void parseFromRequest(ApiRequest req) { - businessKeyId = req.getParameterAsLong("businessKeyId", businessKeyId); - name = req.getParameter("name", name); - description = req.getParameter("description", description); - visibility = (byte) req.getParameterAsInt("visibility", visibility); - averageWaitingTime = req.getParameterAsLong("averageWaitingTime", averageWaitingTime); - country = req.getParameter("country", country); - city = req.getParameter("city", city); - postalCode = req.getParameter("postalCode", postalCode); - street = req.getParameter("street", street); - number = req.getParameter("number", number); - latitude = req.getParameterAsFloat("latitude", latitude); - longitude = req.getParameterAsFloat("longitude", longitude); - requiresSignIn = req.getParameterAsBoolean("requiresSignIn", requiresSignIn); - } - - /* - * Methods for calculating the distance between two locations in meters - */ - public boolean hasValidLocation() { - if (latitude == -1 && longitude == -1) { - return false; - } - return true; - } - - public float getDistanceTo(float latitude, float longitude) { - return getDistance(this, latitude, longitude); - } - - public static float getDistance(QueueEntry queue, float latitude, float longitude) { - if (queue.latitude == -1 || queue.longitude == -1 || latitude == -1 || longitude == -1) { - return -1; - } else { - return getDistance(queue.latitude, queue.longitude, latitude, longitude); - } - } - - public static float getDistance(float lat1, float lng1, float lat2, float lng2) { - double earthRadius = 6371000; - double dLat = Math.toRadians(lat2 - lat1); - double dLng = Math.toRadians(lng2 - lng1); - double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2); - double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - float dist = (float) (earthRadius * c); - - return dist; - } - - public float[] offsetLocationToRange(long distance) { - return offsetLocationToRange(latitude, longitude, distance); - } - - public static float[] offsetLocationToRange(float latitude, float longitude, long distance) { - float latitudeDelta = Math.abs((float) (distance / 1000 / 111.111)); - float longitudeDelta = Math.abs((float) (distance / 1000 / (111.111 * Math.cos(latitude)))); - - float latitudeMin = latitude - latitudeDelta; - float latitudeMax = latitude + latitudeDelta; - float longitudeMin = longitude - longitudeDelta; - float longitudeMax = longitude + longitudeDelta; - - return new float[] {latitudeMin, longitudeMin, latitudeMax, longitudeMax}; - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - - public Key generateKey() { - return KeyFactory.createKey(QueueEntry.class.getSimpleName(), name); - } - - public long getBusinessKeyId() { - return businessKeyId; - } - - public void setBusinessKeyId(long businessKeyId) { - this.businessKeyId = businessKeyId; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public byte getVisibility() { - return visibility; - } - - public void setVisibility(byte visibility) { - this.visibility = visibility; - } - - - public long getPhotoImageKeyId() { - return photoImageKeyId; - } - - public void setPhotoImageKeyId(long photoImageKeyId) { - this.photoImageKeyId = photoImageKeyId; - } - - public long getAverageWaitingTime() { - return averageWaitingTime; - } - - public void setAverageWaitingTime(long averageWaitingTime) { - this.averageWaitingTime = averageWaitingTime; - } - - public float getLatitude() { - return latitude; - } - - public void setLatitude(float latitude) { - this.latitude = latitude; - } - - public float getLongitude() { - return longitude; - } - - public void setLongitude(float longitude) { - this.longitude = longitude; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getPostalCode() { - return postalCode; - } - - public void setPostalCode(String postalCode) { - this.postalCode = postalCode; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getNumber() { - return number; - } - - public void setNumber(String number) { - this.number = number; - } - - public int getWaitingPeople() { - return waitingPeople; - } - - public void setWaitingPeople(int waitingPeople) { - this.waitingPeople = waitingPeople; - } - - public boolean getRequiresSignIn() { - return requiresSignIn; - } - - public void setRequiresSignIn(boolean requiresSignIn) { - this.requiresSignIn = requiresSignIn; - } + public static final byte VISIBILITY_PRIVATE = 0; + public static final byte VISIBILITY_PUBLIC = 1; + + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + Key key; + + @Persistent + long businessKeyId; + + @Persistent + String name; + + @Persistent + String description; + + @Persistent + byte visibility; + + @Persistent + long photoImageKeyId; + + @Persistent + long averageWaitingTime; + + @Persistent + boolean requiresSignIn; + + int waitingPeople; + + /** + * Location + */ + @Persistent + float latitude; + @Persistent + float longitude; + + @Persistent + String country; + @Persistent + String city; + @Persistent + String postalCode; + @Persistent + String street; + @Persistent + String number; + + public QueueEntry(long businessKeyId) { + this.businessKeyId = businessKeyId; + visibility = VISIBILITY_PUBLIC; + photoImageKeyId = -1; + waitingPeople = -1; + latitude = -1; + longitude = -1; + requiresSignIn = false; + averageWaitingTime = TimeUnit.MINUTES.toMillis(5); + } + + public void parseFromRequest(ApiRequest req) { + businessKeyId = req.getParameterAsLong("businessKeyId", businessKeyId); + name = req.getParameter("name", name); + description = req.getParameter("description", description); + visibility = (byte) req.getParameterAsInt("visibility", visibility); + averageWaitingTime = req.getParameterAsLong("averageWaitingTime", averageWaitingTime); + country = req.getParameter("country", country); + city = req.getParameter("city", city); + postalCode = req.getParameter("postalCode", postalCode); + street = req.getParameter("street", street); + number = req.getParameter("number", number); + latitude = req.getParameterAsFloat("latitude", latitude); + longitude = req.getParameterAsFloat("longitude", longitude); + requiresSignIn = req.getParameterAsBoolean("requiresSignIn", requiresSignIn); + } + + /* + * Methods for calculating the distance between two locations in meters + */ + public boolean hasValidLocation() { + if (latitude == -1 && longitude == -1) { + return false; + } + return true; + } + + public float getDistanceTo(float latitude, float longitude) { + return getDistance(this, latitude, longitude); + } + + public static float getDistance(QueueEntry queue, float latitude, float longitude) { + if (queue.latitude == -1 || queue.longitude == -1 || latitude == -1 || longitude == -1) { + return -1; + } else { + return getDistance(queue.latitude, queue.longitude, latitude, longitude); + } + } + + public static float getDistance(float lat1, float lng1, float lat2, float lng2) { + double earthRadius = 6371000; + double dLat = Math.toRadians(lat2 - lat1); + double dLng = Math.toRadians(lng2 - lng1); + double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + float dist = (float) (earthRadius * c); + + return dist; + } + + public float[] offsetLocationToRange(long distance) { + return offsetLocationToRange(latitude, longitude, distance); + } + + public static float[] offsetLocationToRange(float latitude, float longitude, long distance) { + float latitudeDelta = Math.abs((float) (distance / 1000 / 111.111)); + float longitudeDelta = Math.abs((float) (distance / 1000 / (111.111 * Math.cos(latitude)))); + + float latitudeMin = latitude - latitudeDelta; + float latitudeMax = latitude + latitudeDelta; + float longitudeMin = longitude - longitudeDelta; + float longitudeMax = longitude + longitudeDelta; + + return new float[]{latitudeMin, longitudeMin, latitudeMax, longitudeMax}; + } + + public Key getKey() { + return key; + } + + public void setKey(Key key) { + this.key = key; + } + + public Key generateKey() { + return KeyFactory.createKey(QueueEntry.class.getSimpleName(), name); + } + + public long getBusinessKeyId() { + return businessKeyId; + } + + public void setBusinessKeyId(long businessKeyId) { + this.businessKeyId = businessKeyId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public byte getVisibility() { + return visibility; + } + + public void setVisibility(byte visibility) { + this.visibility = visibility; + } + + + public long getPhotoImageKeyId() { + return photoImageKeyId; + } + + public void setPhotoImageKeyId(long photoImageKeyId) { + this.photoImageKeyId = photoImageKeyId; + } + + public long getAverageWaitingTime() { + return averageWaitingTime; + } + + public void setAverageWaitingTime(long averageWaitingTime) { + this.averageWaitingTime = averageWaitingTime; + } + + public float getLatitude() { + return latitude; + } + + public void setLatitude(float latitude) { + this.latitude = latitude; + } + + public float getLongitude() { + return longitude; + } + + public void setLongitude(float longitude) { + this.longitude = longitude; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public int getWaitingPeople() { + return waitingPeople; + } + + public void setWaitingPeople(int waitingPeople) { + this.waitingPeople = waitingPeople; + } + + public boolean getRequiresSignIn() { + return requiresSignIn; + } + + public void setRequiresSignIn(boolean requiresSignIn) { + this.requiresSignIn = requiresSignIn; + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueItemEntry.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueItemEntry.java index 9f3d12c..a4a74ae 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueItemEntry.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/QueueItemEntry.java @@ -19,177 +19,177 @@ @PersistenceCapable(detachable = "true") public class QueueItemEntry { - public static final byte STATUS_ALL = -1; - public static final byte STATUS_WAITING = 0; - public static final byte STATUS_CANCELED = 1; - public static final byte STATUS_CALLED = 2; - public static final byte STATUS_DONE = 3; - - @PrimaryKey - @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) - Key key; - - @Persistent - long queueKeyId; - - @Persistent - long userKeyId; - - @Persistent - String name; - - @Persistent - boolean showName; - - @Persistent - boolean usingApp; - - @Persistent - long entryTimestamp; - - @Persistent - long lastStatusChangeTimestamp; - - @Persistent - int ticketNumber; - - @Persistent - byte status; - - public QueueItemEntry(long queueKeyId) { - this.queueKeyId = queueKeyId; - entryTimestamp = new Date().getTime(); - lastStatusChangeTimestamp = entryTimestamp; - status = STATUS_WAITING; - showName = true; - usingApp = true; - ticketNumber = -1; - userKeyId = -1; - } - - public void parseFromRequest(ApiRequest req) { - queueKeyId = req.getParameterAsLong("queueKeyId", queueKeyId); - userKeyId = req.getParameterAsLong("userKeyId", userKeyId); - name = req.getParameter("name", name); - showName = req.getParameterAsBoolean("showName", showName); - usingApp = req.getParameterAsBoolean("usingApp", usingApp); - } - - public void makeDummyItem() { - name = "Dummy Customer"; - entryTimestamp = (long) (new Date().getTime() - (Math.random() * TimeUnit.MINUTES.toMillis(60))); - lastStatusChangeTimestamp = entryTimestamp; - - if (Math.random() < 0.5) { - // make sure we have more people waiting - status = STATUS_WAITING; - } else { - // set random status - status = (byte) Math.round(Math.random() * 3); - } - - showName = Math.random() < 0.5; - usingApp = Math.random() < 0.5; - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - - public Key generateKey() { - return KeyFactory.createKey(QueueItemEntry.class.getSimpleName(), name); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public boolean getShowName() { - return showName; - } - - public void setShowName(boolean showName) { - this.showName = showName; - } - - public boolean isUsingApp() { - return usingApp; - } - - public void setUsingApp(boolean usingApp) { - this.usingApp = usingApp; - } - - public long getEntryTimestamp() { - return entryTimestamp; - } - - public void setEntryTimestamp(long entryTimestamp) { - this.entryTimestamp = entryTimestamp; - this.lastStatusChangeTimestamp = entryTimestamp; - } - - public long getQueueKeyId() { - return queueKeyId; - } - - public void setQueueKeyId(long queueKeyId) { - this.queueKeyId = queueKeyId; - } - - public long getUserKeyId() { - return userKeyId; - } - - public void setUserKeyId(long userKeyId) { - this.userKeyId = userKeyId; - } - - public long getLastStatusChangeTimestamp() { - return lastStatusChangeTimestamp; - } - - public void setLastStatusChangeTimestamp(long lastStatusChangeTimestamp) { - this.lastStatusChangeTimestamp = lastStatusChangeTimestamp; - } - - public int getTicketNumber() { - return ticketNumber; - } - - public void setTicketNumber(int ticketNumber) { - this.ticketNumber = ticketNumber; - } - - public byte getStatus() { - return status; - } - - public void setStatus(byte status) { - this.status = status; - } - - public static class EntryTimestampComparator implements Comparator { - @Override - public int compare(QueueItemEntry one, QueueItemEntry another) { - int returnVal = 0; - if (one.getEntryTimestamp() < another.getEntryTimestamp()) { - returnVal = -1; - } else if (one.getEntryTimestamp() > another.getEntryTimestamp()) { - returnVal = 1; - } else if (one.getEntryTimestamp() == another.getEntryTimestamp()) { - returnVal = 0; - } - return returnVal; - } - } + public static final byte STATUS_ALL = -1; + public static final byte STATUS_WAITING = 0; + public static final byte STATUS_CANCELED = 1; + public static final byte STATUS_CALLED = 2; + public static final byte STATUS_DONE = 3; + + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + Key key; + + @Persistent + long queueKeyId; + + @Persistent + long userKeyId; + + @Persistent + String name; + + @Persistent + boolean showName; + + @Persistent + boolean usingApp; + + @Persistent + long entryTimestamp; + + @Persistent + long lastStatusChangeTimestamp; + + @Persistent + int ticketNumber; + + @Persistent + byte status; + + public QueueItemEntry(long queueKeyId) { + this.queueKeyId = queueKeyId; + entryTimestamp = new Date().getTime(); + lastStatusChangeTimestamp = entryTimestamp; + status = STATUS_WAITING; + showName = true; + usingApp = true; + ticketNumber = -1; + userKeyId = -1; + } + + public void parseFromRequest(ApiRequest req) { + queueKeyId = req.getParameterAsLong("queueKeyId", queueKeyId); + userKeyId = req.getParameterAsLong("userKeyId", userKeyId); + name = req.getParameter("name", name); + showName = req.getParameterAsBoolean("showName", showName); + usingApp = req.getParameterAsBoolean("usingApp", usingApp); + } + + public void makeDummyItem() { + name = "Dummy Customer"; + entryTimestamp = (long) (new Date().getTime() - (Math.random() * TimeUnit.MINUTES.toMillis(60))); + lastStatusChangeTimestamp = entryTimestamp; + + if (Math.random() < 0.5) { + // make sure we have more people waiting + status = STATUS_WAITING; + } else { + // set random status + status = (byte) Math.round(Math.random() * 3); + } + + showName = Math.random() < 0.5; + usingApp = Math.random() < 0.5; + } + + public Key getKey() { + return key; + } + + public void setKey(Key key) { + this.key = key; + } + + public Key generateKey() { + return KeyFactory.createKey(QueueItemEntry.class.getSimpleName(), name); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean getShowName() { + return showName; + } + + public void setShowName(boolean showName) { + this.showName = showName; + } + + public boolean isUsingApp() { + return usingApp; + } + + public void setUsingApp(boolean usingApp) { + this.usingApp = usingApp; + } + + public long getEntryTimestamp() { + return entryTimestamp; + } + + public void setEntryTimestamp(long entryTimestamp) { + this.entryTimestamp = entryTimestamp; + this.lastStatusChangeTimestamp = entryTimestamp; + } + + public long getQueueKeyId() { + return queueKeyId; + } + + public void setQueueKeyId(long queueKeyId) { + this.queueKeyId = queueKeyId; + } + + public long getUserKeyId() { + return userKeyId; + } + + public void setUserKeyId(long userKeyId) { + this.userKeyId = userKeyId; + } + + public long getLastStatusChangeTimestamp() { + return lastStatusChangeTimestamp; + } + + public void setLastStatusChangeTimestamp(long lastStatusChangeTimestamp) { + this.lastStatusChangeTimestamp = lastStatusChangeTimestamp; + } + + public int getTicketNumber() { + return ticketNumber; + } + + public void setTicketNumber(int ticketNumber) { + this.ticketNumber = ticketNumber; + } + + public byte getStatus() { + return status; + } + + public void setStatus(byte status) { + this.status = status; + } + + public static class EntryTimestampComparator implements Comparator { + @Override + public int compare(QueueItemEntry one, QueueItemEntry another) { + int returnVal = 0; + if (one.getEntryTimestamp() < another.getEntryTimestamp()) { + returnVal = -1; + } else if (one.getEntryTimestamp() > another.getEntryTimestamp()) { + returnVal = 1; + } else if (one.getEntryTimestamp() == another.getEntryTimestamp()) { + returnVal = 0; + } + return returnVal; + } + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserEntry.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserEntry.java index 3268158..7ce8d8b 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserEntry.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserEntry.java @@ -13,187 +13,196 @@ @PersistenceCapable(detachable = "true") public class UserEntry { - public static final byte STATUS_DEFAULT = 0; - public static final byte STATUS_BANNED = -1; - - @PrimaryKey - @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) - Key key; - - @Persistent - String googleUserId; - - @Persistent - String facebookUserId; - - @Persistent - String name; - - @Persistent - String mail; - - @Persistent - String pictureUrl; - - @Persistent - String locale; - - @Persistent - byte status; - - @Persistent - float latitude; - - @Persistent - float longitude; - - @Persistent - long lastLocationUpdate; - - @Persistent(defaultFetchGroup = "true") - @Element(dependent = "true") - UserStatsEntry stats; - - public UserEntry() { - super(); - status = STATUS_DEFAULT; - stats = new UserStatsEntry(); - } - - public UserEntry parseFromGooglePayload(Payload payload) { - if (payload != null) { - googleUserId = payload.getSubject(); - name = (String) payload.get("name"); - mail = payload.getEmail(); - pictureUrl = (String) payload.get("picture"); - locale = (String) payload.get("locale"); - } - return this; - } - - public boolean hasPermission(PermissionEntry requestedPermission) { - // set the current user - requestedPermission.setUserKeyId(key.getId()); - - // check if the permission contains any requirements - if (requestedPermission.getPermission() == PermissionEntry.PERMISSION_NONE) { - return true; - } - - // check if the permission subject is valid - if (requestedPermission.getSubjectKeyId() < 1) { - return true; - } - - // check if the permission is about this user - if (UserEntry.class.getSimpleName().equals(requestedPermission.getSubjectKind())) { - if (requestedPermission.getSubjectKeyId() == this.key.getId()) { - return true; - } - } - - // look up the PermissionEntry in the data store - if (this.key != null) { - return PermissionHelper.hasPermission(requestedPermission); - } else { - return false; - } - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - - public String getGoogleUserId() { - return googleUserId; - } - - public void setGoogleUserId(String googleUserId) { - this.googleUserId = googleUserId; - } - - public String getFacebookUserId() { - return facebookUserId; - } - - public void setFacebookUserId(String facebookUserId) { - this.facebookUserId = facebookUserId; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getMail() { - return mail; - } - - public void setMail(String mail) { - this.mail = mail; - } - - public String getPictureUrl() { - return pictureUrl; - } - - public void setPictureUrl(String pictureUrl) { - this.pictureUrl = pictureUrl; - } - - public String getLocale() { - return locale; - } - - public void setLocale(String locale) { - this.locale = locale; - } - - public byte getStatus() { - return status; - } - - public void setStatus(byte status) { - this.status = status; - } - - public UserStatsEntry getStats() { - return stats; - } - - public void setStats(UserStatsEntry stats) { - this.stats = stats; - } - - public float getLatitude() { - return latitude; - } - - public void setLatitude(float latitude) { - this.latitude = latitude; - } - - public float getLongitude() { - return longitude; - } - - public void setLongitude(float longitude) { - this.longitude = longitude; - } - - public long getLastLocationUpdate() { - return lastLocationUpdate; - } - - public void setLastLocationUpdate(long lastLocationUpdate) { - this.lastLocationUpdate = lastLocationUpdate; - } - + public static final byte STATUS_DEFAULT = 0; + public static final byte STATUS_BANNED = -1; + + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + Key key; + + @Persistent + String googleUserId; + + @Persistent + String facebookUserId; + + @Persistent + String name; + + @Persistent + String mail; + + @Persistent + String pictureUrl; + + @Persistent + String locale; + + @Persistent + byte status; + + @Persistent + float latitude; + + @Persistent + float longitude; + + @Persistent + long lastLocationUpdate; + + @Persistent(defaultFetchGroup = "true") + @Element(dependent = "true") + UserStatsEntry stats; + + public UserEntry() { + super(); + status = STATUS_DEFAULT; + stats = new UserStatsEntry(); + } + + public UserEntry parseFromGooglePayload(Payload payload) { + if (payload != null) { + googleUserId = payload.getSubject(); + name = (String) payload.get("name"); + mail = payload.getEmail(); + pictureUrl = (String) payload.get("picture"); + locale = (String) payload.get("locale"); + } + return this; + } + + public boolean hasPermission(PermissionEntry requestedPermission) { + // set the current user + requestedPermission.setUserKeyId(key.getId()); + + // check if the permission contains any requirements + if (requestedPermission.getPermission() == PermissionEntry.PERMISSION_NONE) { + return true; + } + + // check if the permission subject is valid + if (requestedPermission.getSubjectKeyId() < 1) { + return true; + } + + // check if the permission is about this user + if (UserEntry.class.getSimpleName().equals(requestedPermission.getSubjectKind())) { + if (requestedPermission.getSubjectKeyId() == this.key.getId()) { + return true; + } + } + + // look up the PermissionEntry in the data store + if (this.key != null) { + return PermissionHelper.hasPermission(requestedPermission); + } else { + return false; + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(name); + if (key != null) { + sb.append(" (").append(key.getId()).append(")"); + } + return sb.toString(); + } + + public Key getKey() { + return key; + } + + public void setKey(Key key) { + this.key = key; + } + + public String getGoogleUserId() { + return googleUserId; + } + + public void setGoogleUserId(String googleUserId) { + this.googleUserId = googleUserId; + } + + public String getFacebookUserId() { + return facebookUserId; + } + + public void setFacebookUserId(String facebookUserId) { + this.facebookUserId = facebookUserId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMail() { + return mail; + } + + public void setMail(String mail) { + this.mail = mail; + } + + public String getPictureUrl() { + return pictureUrl; + } + + public void setPictureUrl(String pictureUrl) { + this.pictureUrl = pictureUrl; + } + + public String getLocale() { + return locale; + } + + public void setLocale(String locale) { + this.locale = locale; + } + + public byte getStatus() { + return status; + } + + public void setStatus(byte status) { + this.status = status; + } + + public UserStatsEntry getStats() { + return stats; + } + + public void setStats(UserStatsEntry stats) { + this.stats = stats; + } + + public float getLatitude() { + return latitude; + } + + public void setLatitude(float latitude) { + this.latitude = latitude; + } + + public float getLongitude() { + return longitude; + } + + public void setLongitude(float longitude) { + this.longitude = longitude; + } + + public long getLastLocationUpdate() { + return lastLocationUpdate; + } + + public void setLastLocationUpdate(long lastLocationUpdate) { + this.lastLocationUpdate = lastLocationUpdate; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserStatsEntry.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserStatsEntry.java index 61d7387..6799725 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserStatsEntry.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/entries/UserStatsEntry.java @@ -12,102 +12,102 @@ @PersistenceCapable(detachable = "true") public class UserStatsEntry { - @PrimaryKey - @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) - transient Key key; - - @Persistent(mappedBy = "stats") - transient UserEntry user; - - @Persistent - long queuesJoined; - - @Persistent - long queuesCreated; - - @Persistent - long businessesCreated; - - @Persistent - long lastSignIn; - - @Persistent - long firstSignIn; - - @Persistent - long reports; - - public UserStatsEntry() { - super(); - queuesJoined = 0; - queuesCreated = 0; - firstSignIn = (new Date()).getTime(); - lastSignIn = firstSignIn; - reports = 0; - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - - public UserEntry getUser() { - return user; - } - - public void setUser(UserEntry user) { - this.user = user; - } - - public long getQueuesJoined() { - return queuesJoined; - } - - public void setQueuesJoined(long queuesJoined) { - this.queuesJoined = queuesJoined; - } - - public long getQueuesCreated() { - return queuesCreated; - } - - public void setQueuesCreated(long queuesCreated) { - this.queuesCreated = queuesCreated; - } - - public long getLastSignIn() { - return lastSignIn; - } - - public void setLastSignIn(long lastSignIn) { - this.lastSignIn = lastSignIn; - } - - public long getFirstSignIn() { - return firstSignIn; - } - - public void setFirstSignIn(long firstSignIn) { - this.firstSignIn = firstSignIn; - } - - public long getReports() { - return reports; - } - - public void setReports(long reports) { - this.reports = reports; - } - - public long getBusinessesCreated() { - return businessesCreated; - } - - public void setBusinessesCreated(long businessesCreated) { - this.businessesCreated = businessesCreated; - } - + @PrimaryKey + @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) + transient Key key; + + @Persistent(mappedBy = "stats") + transient UserEntry user; + + @Persistent + long queuesJoined; + + @Persistent + long queuesCreated; + + @Persistent + long businessesCreated; + + @Persistent + long lastSignIn; + + @Persistent + long firstSignIn; + + @Persistent + long reports; + + public UserStatsEntry() { + super(); + queuesJoined = 0; + queuesCreated = 0; + firstSignIn = (new Date()).getTime(); + lastSignIn = firstSignIn; + reports = 0; + } + + public Key getKey() { + return key; + } + + public void setKey(Key key) { + this.key = key; + } + + public UserEntry getUser() { + return user; + } + + public void setUser(UserEntry user) { + this.user = user; + } + + public long getQueuesJoined() { + return queuesJoined; + } + + public void setQueuesJoined(long queuesJoined) { + this.queuesJoined = queuesJoined; + } + + public long getQueuesCreated() { + return queuesCreated; + } + + public void setQueuesCreated(long queuesCreated) { + this.queuesCreated = queuesCreated; + } + + public long getLastSignIn() { + return lastSignIn; + } + + public void setLastSignIn(long lastSignIn) { + this.lastSignIn = lastSignIn; + } + + public long getFirstSignIn() { + return firstSignIn; + } + + public void setFirstSignIn(long firstSignIn) { + this.firstSignIn = firstSignIn; + } + + public long getReports() { + return reports; + } + + public void setReports(long reports) { + this.reports = reports; + } + + public long getBusinessesCreated() { + return businessesCreated; + } + + public void setBusinessesCreated(long businessesCreated) { + this.businessesCreated = businessesCreated; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/queries/ImageQuery.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/queries/ImageQuery.java index 03785ab..7b4e336 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/queries/ImageQuery.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/datastore/queries/ImageQuery.java @@ -13,47 +13,47 @@ import com.intelliq.appengine.datastore.entries.ImageEntry; public class ImageQuery { - - private static final Logger log = Logger.getLogger(ImageQuery.class.getName()); - - PersistenceManager pm = PMF.get().getPersistenceManager(); + + private static final Logger log = Logger.getLogger(ImageQuery.class.getName()); + + PersistenceManager pm = PMF.get().getPersistenceManager(); Query query = pm.newQuery(ImageEntry.class); - + public ImageQuery() { - super(); - } - - public List execute(Query query, String value) { - List results = new ArrayList(); - try { - results = (List) query.execute(value); - results.size(); - log.info("ImageEntry execution returned " + results.size() + " item(s)"); - } catch(Exception e) { - e.printStackTrace(); - } finally { - query.closeAll(); - pm.close(); - } - return results; - } - - public ImageEntry getImageByKeyId(String idString) { - long id = Long.parseLong(idString); - return getImageByKeyId(id); - } - - public ImageEntry getImageByKeyId(long id) { - Key key = KeyFactory.createKey(ImageEntry.class.getSimpleName(), id); - ImageEntry image = pm.getObjectById(ImageEntry.class, key); - return image; - } - - public Query getQueryWithUrlEquals() { - query.setFilter("url == valueParam"); - query.declareParameters("String valueParam"); - query.setRange(0, 10); - return query; - } - + super(); + } + + public List execute(Query query, String value) { + List results = new ArrayList(); + try { + results = (List) query.execute(value); + results.size(); + log.info("ImageEntry execution returned " + results.size() + " item(s)"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + query.closeAll(); + pm.close(); + } + return results; + } + + public ImageEntry getImageByKeyId(String idString) { + long id = Long.parseLong(idString); + return getImageByKeyId(id); + } + + public ImageEntry getImageByKeyId(long id) { + Key key = KeyFactory.createKey(ImageEntry.class.getSimpleName(), id); + ImageEntry image = pm.getObjectById(ImageEntry.class, key); + return image; + } + + public Query getQueryWithUrlEquals() { + query.setFilter("url == valueParam"); + query.declareParameters("String valueParam"); + query.setRange(0, 10); + return query; + } + } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/BusinessLogging.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/BusinessLogging.java new file mode 100644 index 0000000..bd9088e --- /dev/null +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/BusinessLogging.java @@ -0,0 +1,50 @@ +package com.intelliq.appengine.logging; + +import com.intelliq.appengine.api.endpoint.business.BusinessEndpoint; +import com.intelliq.appengine.api.endpoint.queue.QueueEndpoint; +import com.intelliq.appengine.datastore.entries.BusinessEntry; +import com.intelliq.appengine.datastore.entries.QueueEntry; +import com.intelliq.appengine.datastore.entries.UserEntry; + +import net.steppschuh.slackmessagebuilder.message.attachment.Attachment; +import net.steppschuh.slackmessagebuilder.message.attachment.AttachmentField; + +import java.util.ArrayList; +import java.util.List; + +public abstract class BusinessLogging { + + public static void logCreation(BusinessEntry business, UserEntry user) { + Attachment attachment = generateBusinessAttachment(business); + attachment.setTitle("Business Created"); + attachment.setText(user.getName() + " created a new business"); + attachment.setThumbUrl(user.getPictureUrl()); + SlackLog.post(attachment); + } + + public static void logEdit(BusinessEntry business, UserEntry user) { + Attachment attachment = generateBusinessAttachment(business); + attachment.setTitle("Business Edited"); + attachment.setText(user.getName() + " edited an existing business"); + attachment.setThumbUrl(user.getPictureUrl()); + SlackLog.post(attachment); + } + + public static Attachment generateBusinessAttachment(BusinessEntry business) { + List fields = new ArrayList<>(); + fields.add(new AttachmentField("Name", business.getName())); + fields.add(new AttachmentField("Mail", business.getMail())); + + if (business.getQueues() != null) { + fields.add(new AttachmentField("Queues", String.valueOf(business.getQueues().size()))); + } + if (business.getKey() != null) { + fields.add(new AttachmentField("ID", String.valueOf(business.getKey().getId()))); + } + + Attachment attachment = SlackLog.generateAttachment(SlackLog.INFO, BusinessEndpoint.class.getSimpleName(), ""); + attachment.setFields(fields); + return attachment; + } + +} diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/QueueLogging.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/QueueLogging.java new file mode 100644 index 0000000..daff60a --- /dev/null +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/QueueLogging.java @@ -0,0 +1,52 @@ +package com.intelliq.appengine.logging; + +import com.intelliq.appengine.api.endpoint.queue.QueueEndpoint; +import com.intelliq.appengine.api.endpoint.user.SignInUserEndpoint; +import com.intelliq.appengine.datastore.entries.QueueEntry; +import com.intelliq.appengine.datastore.entries.UserEntry; + +import net.steppschuh.slackmessagebuilder.message.attachment.Attachment; +import net.steppschuh.slackmessagebuilder.message.attachment.AttachmentField; + +import java.util.ArrayList; +import java.util.List; + +public abstract class QueueLogging { + + public static void logCreation(QueueEntry queue, UserEntry user) { + Attachment attachment = generateQueueAttachment(queue); + attachment.setTitle("Queue Created"); + attachment.setText(user.getName() + " created a new queue"); + attachment.setThumbUrl(user.getPictureUrl()); + SlackLog.post(attachment); + } + + public static void logEdit(QueueEntry queue, UserEntry user) { + Attachment attachment = generateQueueAttachment(queue); + attachment.setTitle("Queue Edited"); + attachment.setText(user.getName() + " edited an existing queue"); + attachment.setThumbUrl(user.getPictureUrl()); + SlackLog.post(attachment); + } + + public static Attachment generateQueueAttachment(QueueEntry queue) { + List fields = new ArrayList<>(); + fields.add(new AttachmentField("Name", queue.getName())); + fields.add(new AttachmentField("City", queue.getCity())); + + if (queue.getVisibility() == QueueEntry.VISIBILITY_PUBLIC) { + fields.add(new AttachmentField("Visibility", "Public")); + } else { + fields.add(new AttachmentField("Visibility", "Private")); + } + fields.add(new AttachmentField("Business ID", String.valueOf(queue.getBusinessKeyId()))); + if (queue.getKey() != null) { + fields.add(new AttachmentField("ID", String.valueOf(queue.getKey().getId()))); + } + + Attachment attachment = SlackLog.generateAttachment(SlackLog.INFO, QueueEndpoint.class.getSimpleName(), ""); + attachment.setFields(fields); + return attachment; + } + +} diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/SlackLog.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/SlackLog.java new file mode 100644 index 0000000..b6b8498 --- /dev/null +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/SlackLog.java @@ -0,0 +1,187 @@ +package com.intelliq.appengine.logging; + +import net.steppschuh.slackmessagebuilder.message.MessageBuilder; +import net.steppschuh.slackmessagebuilder.message.attachment.Attachment; +import net.steppschuh.slackmessagebuilder.message.attachment.AttachmentBuilder; +import net.steppschuh.slackmessagebuilder.message.attachment.AttachmentField; +import net.steppschuh.slackmessagebuilder.request.Webhook; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.logging.Logger; + +public final class SlackLog { + + private static final String WEBHOOK_URL = "https://hooks.slack.com/services/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"; + + public static final int VERBOSE = 2; + public static final int DEBUG = 3; + public static final int INFO = 4; + public static final int WARN = 5; + public static final int ERROR = 6; + + private static final Logger log = Logger.getLogger(SlackLog.class.getName()); + private static final Webhook slackWebhook = new Webhook(WEBHOOK_URL); + private static final MessageBuilder defaultMessageBuilder = getDefaultMessageBuilder(); + + public static MessageBuilder getDefaultMessageBuilder() { + MessageBuilder messageBuilder = new MessageBuilder(); + resetToDefaultMessageBuilder(messageBuilder); + return messageBuilder; + } + + public static void resetToDefaultMessageBuilder() { + resetToDefaultMessageBuilder(defaultMessageBuilder); + } + + public static void resetToDefaultMessageBuilder(MessageBuilder messageBuilder) { + messageBuilder + .setChannel("#log") + .setUsername("Backend") + .setText(null) + .setAttachments(null) + .setIconEmoji(":intelliq:") + .setIconUrl(null); + } + + public static void v(Object tag, Object content) { + v(tag.getClass().getSimpleName(), content); + } + + public static void v(String tag, Object content) { + log.finer(tag + ": " + content.toString()); + Attachment attachment = generateAttachment(VERBOSE, tag, content); + post(attachment); + } + + public static void d(Object tag, Object content) { + d(tag.getClass().getSimpleName(), content); + } + + public static void d(String tag, Object content) { + log.fine(tag + ": " + content.toString()); + Attachment attachment = generateAttachment(DEBUG, tag, content); + post(attachment); + } + + public static void i(Object tag, Object content) { + i(tag.getClass().getSimpleName(), content); + } + + public static void i(String tag, Object content) { + log.info(tag + ": " + content.toString()); + Attachment attachment = generateAttachment(INFO, tag, content); + post(attachment); + } + + public static void w(Object tag, Object content) { + w(tag.getClass().getSimpleName(), content); + } + + public static void w(String tag, Object content) { + log.warning(tag + ": " + content.toString()); + Attachment attachment = generateAttachment(WARN, tag, content); + post(attachment); + } + + public static void e(Object tag, Object content) { + e(tag.getClass().getSimpleName(), content); + } + + public static void e(String tag, Object content) { + log.severe(tag + ": " + content.toString()); + Attachment attachment = generateAttachment(ERROR, tag, content); + post(attachment); + } + + public static void e(Exception exception) { + e("Exception", exception); + } + + public static void e(Object tag, Exception exception) { + e(tag.getClass().getSimpleName(), exception); + } + + public static void e(String tag, Exception exception) { + log.warning(tag + ": " + exception.getMessage()); + String message = exception.getClass().getSimpleName() + ": " + exception.getMessage(); + Attachment attachment = generateAttachment(ERROR, tag, message); + + List fields = new ArrayList<>(); + StackTraceElement[] traces = exception.getStackTrace(); + if (traces != null && traces.length > 0) { + fields.add(new AttachmentField("Method", traces[0].getMethodName())); + fields.add(new AttachmentField("Line", String.valueOf(traces[0].getLineNumber()))); + String className = traces[0].getClassName(); + int dotIndex = className.lastIndexOf('.'); + if (dotIndex != -1) { + className = className.substring(dotIndex + 1); + } + fields.add(new AttachmentField("Class", className)); + } + attachment.setFields(fields); + + post(attachment); + } + + public static void post(Attachment attachment) { + post(null, attachment); + } + + public static void post(String message, Attachment attachment) { + resetToDefaultMessageBuilder(); + defaultMessageBuilder.setText(message); + defaultMessageBuilder.addAttachment(attachment); + try { + slackWebhook.postMessageSynchronous(defaultMessageBuilder.build()); + } catch (Exception ex) { + log.warning("Unable to post to Slack: " + ex.getMessage()); + ex.printStackTrace(); + } + } + + public static Attachment generateAttachment(int logLevel, String tag, Object content) { + DateFormat df = new SimpleDateFormat("HH:mm:ss"); + Date now = Calendar.getInstance().getTime(); + String readableTime = df.format(now); + + StringBuilder sb = new StringBuilder(tag) + .append(" - ").append(readableTime) + .append(" (").append(now.getTime()).append(")"); + + return getAttachmentBuilder(logLevel) + .setText(content.toString()) + .setFooter(sb.toString()) + .build(); + } + + public static AttachmentBuilder getAttachmentBuilder(int logLevel) { + return new AttachmentBuilder() + .setColor(getHexCode(logLevel)); + } + + public static String getHexCode(int logLevel) { + switch (logLevel) { + case DEBUG: { + return "#607D8B"; + } + case INFO: { + return "#009688"; + } + case WARN: { + return "#FFC107"; + } + case ERROR: { + return "#f44336"; + } + default: { + return "#9E9E9E"; + } + } + } + +} \ No newline at end of file diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/UserLogging.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/UserLogging.java new file mode 100644 index 0000000..24d868e --- /dev/null +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/logging/UserLogging.java @@ -0,0 +1,44 @@ +package com.intelliq.appengine.logging; + +import com.intelliq.appengine.api.endpoint.user.SignInUserEndpoint; +import com.intelliq.appengine.api.endpoint.user.UserEndpoint; +import com.intelliq.appengine.datastore.entries.UserEntry; + +import net.steppschuh.slackmessagebuilder.message.attachment.Attachment; +import net.steppschuh.slackmessagebuilder.message.attachment.AttachmentField; + +import java.util.ArrayList; +import java.util.List; + +public abstract class UserLogging { + + public static void logSignIn(UserEntry user) { + Attachment attachment = generateUserAttachment(user); + attachment.setTitle("Sign In"); + attachment.setText("A user signed in"); + attachment.setThumbUrl(user.getPictureUrl()); + SlackLog.post(attachment); + } + + public static void logSignUp(UserEntry user) { + Attachment attachment = generateUserAttachment(user); + attachment.setTitle("Sign Up"); + attachment.setText("A user signed in for the first time"); + attachment.setThumbUrl(user.getPictureUrl()); + SlackLog.post(attachment); + } + + public static Attachment generateUserAttachment(UserEntry user) { + List fields = new ArrayList<>(); + fields.add(new AttachmentField("Name", user.getName())); + fields.add(new AttachmentField("Mail", user.getMail())); + if (user.getKey() != null) { + fields.add(new AttachmentField("ID", String.valueOf(user.getKey().getId()))); + } + + Attachment attachment = SlackLog.generateAttachment(SlackLog.INFO, UserEndpoint.class.getSimpleName(), ""); + attachment.setFields(fields); + return attachment; + } + +} diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/stuff/FakeData.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/stuff/FakeData.java index db03405..efa37b6 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/stuff/FakeData.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/stuff/FakeData.java @@ -5,31 +5,31 @@ public class FakeData { - public static final String[] names = { "Adam Ashton", "Adria Amor", "Aja Adelson", "Alecia Agarwal", "Alissa Ackman", "Allie Abila", "Anastasia Abarca", "Arlene Alba", "Arminda Acuff", - "Audria Aderholt", "Bernadine Bucholtz", "Brittney Bruning", "Cameron Coonrod", "Carmine Caul", "Carmon Cabral", "Chantell Council", "Charlette Corsi", "Charlie Castaldi", "Daren Dorman", - "Darren Difranco", "Delbert Dray", "Della Donaldson", "Dot Deaner", "Douglas Donnell", "Edra Emanuel", "Edyth Elsasser", "Elyse Ecklund", "Emelina Eagar", "Erlinda Eccles", - "Ernest Ebert", "Eun Estridge", "Fatimah Fujiwara", "Floy Foulk", "Frances Finnegan", "Freeda Frink", "Georgeann Gwozdz", "Geraldo Goulette", "Hanh Holiday", "Hyacinth Hallinan", - "Iliana Ismail", "Inger Icenhour", "Isiah Imes", "Jacklyn Johansen", "Jackson Jarnagin", "Jadwiga Jelinek", "Jake Jo", "Jeffery Jacobi", "Jesenia Jock", "Joella Jaworski", - "Jonas Jiminez", "Jonell Jone", "Julietta Jordon", "Karren Kong", "Katharine Kothari", "Katia Kubala", "Ken Koonce", "Kristel Kerr", "Lashaunda Longfellow", "Lawrence Lumpkin", - "Leeann Legette", "Lorilee Lovick", "Loris Landers", "Louis Laroche", "Lucie Leighton", "Lucille Lague", "Luetta Ligon", "Magnolia Mirsky", "Majorie Mcgrory", "Mandi Maynor", - "Marianne Mauck", "Maribel Morison", "Maryanne Mirabella", "Mervin Miers", "Miranda Mclin", "Mireille Marson", "Mohammad Maharaj", "Myron Munday", "Nanette Necaise", "Nikole Nightingale", - "Noelle Newhard", "Norah Nogle", "Qiana Quinlan", "Ramonita Rye", "Reinaldo Rochin", "Rhonda Rittenhouse", "Rolf Rickenbacker", "Sabra Stelter", "Samira Schildgen", "Sanford Strozier", - "Sara Stahler", "Shan Storms", "Shannon Salmons", "Shon Stennett", "Tashia Troutt", "Terresa Tapley", "Toby Trottier", "Tommy Tookes", "Trinity Terrel", "Wilbert Winner", "Yang Yutzy" }; - - public static String[] getNames(int count) { - String[] randomNames = names; - shuffleArray(randomNames); - return Arrays.copyOfRange(randomNames, 0, count < 100 ? count : 99); - } - - static void shuffleArray(String[] ar) { - Random rnd = new Random(); - for (int i = ar.length - 1; i > 0; i--) { - int index = rnd.nextInt(i + 1); - String a = ar[index]; - ar[index] = ar[i]; - ar[i] = a; - } - } + public static final String[] names = {"Adam Ashton", "Adria Amor", "Aja Adelson", "Alecia Agarwal", "Alissa Ackman", "Allie Abila", "Anastasia Abarca", "Arlene Alba", "Arminda Acuff", + "Audria Aderholt", "Bernadine Bucholtz", "Brittney Bruning", "Cameron Coonrod", "Carmine Caul", "Carmon Cabral", "Chantell Council", "Charlette Corsi", "Charlie Castaldi", "Daren Dorman", + "Darren Difranco", "Delbert Dray", "Della Donaldson", "Dot Deaner", "Douglas Donnell", "Edra Emanuel", "Edyth Elsasser", "Elyse Ecklund", "Emelina Eagar", "Erlinda Eccles", + "Ernest Ebert", "Eun Estridge", "Fatimah Fujiwara", "Floy Foulk", "Frances Finnegan", "Freeda Frink", "Georgeann Gwozdz", "Geraldo Goulette", "Hanh Holiday", "Hyacinth Hallinan", + "Iliana Ismail", "Inger Icenhour", "Isiah Imes", "Jacklyn Johansen", "Jackson Jarnagin", "Jadwiga Jelinek", "Jake Jo", "Jeffery Jacobi", "Jesenia Jock", "Joella Jaworski", + "Jonas Jiminez", "Jonell Jone", "Julietta Jordon", "Karren Kong", "Katharine Kothari", "Katia Kubala", "Ken Koonce", "Kristel Kerr", "Lashaunda Longfellow", "Lawrence Lumpkin", + "Leeann Legette", "Lorilee Lovick", "Loris Landers", "Louis Laroche", "Lucie Leighton", "Lucille Lague", "Luetta Ligon", "Magnolia Mirsky", "Majorie Mcgrory", "Mandi Maynor", + "Marianne Mauck", "Maribel Morison", "Maryanne Mirabella", "Mervin Miers", "Miranda Mclin", "Mireille Marson", "Mohammad Maharaj", "Myron Munday", "Nanette Necaise", "Nikole Nightingale", + "Noelle Newhard", "Norah Nogle", "Qiana Quinlan", "Ramonita Rye", "Reinaldo Rochin", "Rhonda Rittenhouse", "Rolf Rickenbacker", "Sabra Stelter", "Samira Schildgen", "Sanford Strozier", + "Sara Stahler", "Shan Storms", "Shannon Salmons", "Shon Stennett", "Tashia Troutt", "Terresa Tapley", "Toby Trottier", "Tommy Tookes", "Trinity Terrel", "Wilbert Winner", "Yang Yutzy"}; + + public static String[] getNames(int count) { + String[] randomNames = names; + shuffleArray(randomNames); + return Arrays.copyOfRange(randomNames, 0, count < 100 ? count : 99); + } + + static void shuffleArray(String[] ar) { + Random rnd = new Random(); + for (int i = ar.length - 1; i > 0; i--) { + int index = rnd.nextInt(i + 1); + String a = ar[index]; + ar[index] = ar[i]; + ar[i] = a; + } + } } diff --git a/IntelliQ/backend/src/main/java/com/intelliq/appengine/website/IntelliQServlet.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/website/IntelliQServlet.java index f8458cd..9b9f639 100644 --- a/IntelliQ/backend/src/main/java/com/intelliq/appengine/website/IntelliQServlet.java +++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/website/IntelliQServlet.java @@ -10,70 +10,70 @@ @SuppressWarnings("serial") public class IntelliQServlet extends HttpServlet { - - private static final Logger log = Logger.getLogger(IntelliQServlet.class.getName()); - - /* - * Handles all requests for the IntelliQ website and redirects to the matching JSP. - */ - public void doGet(HttpServletRequest req, HttpServletResponse resp) - throws IOException { - - String forwardUrl; - String requestUrl = req.getRequestURL().toString(); + + private static final Logger log = Logger.getLogger(IntelliQServlet.class.getName()); + + /* + * Handles all requests for the IntelliQ website and redirects to the matching JSP. + */ + public void doGet(HttpServletRequest req, HttpServletResponse resp) + throws IOException { + + String forwardUrl; + String requestUrl = req.getRequestURL().toString(); String uri = req.getRequestURI(); - String rootUrl = requestUrl.substring( 0, requestUrl.indexOf(uri)); - + String rootUrl = requestUrl.substring(0, requestUrl.indexOf(uri)); + // detect language of request origin String languageCode = RequestFilter.getRequestLanguageCode(req); forwardUrl = "/intelliq/" + languageCode + "/"; - + // forward requests to available JSPs - if (requestUrl.contains("/manage/")) { - if (requestUrl.contains("/queue/")) { - forwardUrl += "manage/queueservlet/"; - } else if (requestUrl.contains("/business/")) { - forwardUrl += "manage/businessservlet/"; - } else { - forwardUrl += "manage/overviewservlet/"; - } - } else if (requestUrl.contains("/edit/")) { - if (requestUrl.contains("/queue/")) { - forwardUrl += "edit/queueservlet/"; - } else if (requestUrl.contains("/business/")) { - forwardUrl += "edit/businessservlet/"; - } - } else if (requestUrl.contains("/display/")) { - if (requestUrl.contains("/queue/")) { - forwardUrl += "display/queueservlet/"; - } else if (requestUrl.contains("/business/")) { - //forwardUrl += "display/businessservlet/"; - } else { - //forwardUrl += "manage/overviewservlet/"; - } - } else if (requestUrl.contains("/apps/")) { - forwardUrl += "appsservlet/"; - } else if (requestUrl.contains("/unternehmen/") || requestUrl.contains("/business/")) { - forwardUrl += "businessservlet/"; - } else if (requestUrl.contains("/signin/")) { - forwardUrl += "signinservlet/"; - } else { - // landing page - forwardUrl += "homeservlet/"; - } - - // get dispatcher for the generated URL + if (requestUrl.contains("/manage/")) { + if (requestUrl.contains("/queue/")) { + forwardUrl += "manage/queueservlet/"; + } else if (requestUrl.contains("/business/")) { + forwardUrl += "manage/businessservlet/"; + } else { + forwardUrl += "manage/overviewservlet/"; + } + } else if (requestUrl.contains("/edit/")) { + if (requestUrl.contains("/queue/")) { + forwardUrl += "edit/queueservlet/"; + } else if (requestUrl.contains("/business/")) { + forwardUrl += "edit/businessservlet/"; + } + } else if (requestUrl.contains("/display/")) { + if (requestUrl.contains("/queue/")) { + forwardUrl += "display/queueservlet/"; + } else if (requestUrl.contains("/business/")) { + //forwardUrl += "display/businessservlet/"; + } else { + //forwardUrl += "manage/overviewservlet/"; + } + } else if (requestUrl.contains("/apps/")) { + forwardUrl += "appsservlet/"; + } else if (requestUrl.contains("/unternehmen/") || requestUrl.contains("/business/")) { + forwardUrl += "businessservlet/"; + } else if (requestUrl.contains("/signin/")) { + forwardUrl += "signinservlet/"; + } else { + // landing page + forwardUrl += "homeservlet/"; + } + + // get dispatcher for the generated URL RequestDispatcher rd = getServletContext().getRequestDispatcher(forwardUrl); - + // set JSP attributes req.setAttribute("rootUrl", rootUrl); req.setAttribute("requestUrl", requestUrl.replace("/intelliq", "")); req.setAttribute("staticUrl", rootUrl + "/static/"); - + try { - rd.forward(req, resp); - } catch (Exception e) { - e.printStackTrace(); - } - } + rd.forward(req, resp); + } catch (Exception e) { + e.printStackTrace(); + } + } }