diff --git a/IntelliQ/.gitignore b/IntelliQ/.gitignore
index 42b5b24..7c68061 100755
--- a/IntelliQ/.gitignore
+++ b/IntelliQ/.gitignore
@@ -1,8 +1,8 @@
*.iml
+**/*.iml
.gradle
/local.properties
-/.idea/workspace.xml
-/.idea/libraries
+/.idea/
.DS_Store
/build
/*/build
diff --git a/IntelliQ/.idea/gradle.xml b/IntelliQ/.idea/gradle.xml
index 9dbb2e9..faf06f1 100755
--- a/IntelliQ/.idea/gradle.xml
+++ b/IntelliQ/.idea/gradle.xml
@@ -13,14 +13,7 @@
-
+
diff --git a/IntelliQ/.idea/misc.xml b/IntelliQ/.idea/misc.xml
index 1a3eaff..5d19981 100755
--- a/IntelliQ/.idea/misc.xml
+++ b/IntelliQ/.idea/misc.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/IntelliQ/backend/build.gradle b/IntelliQ/backend/build.gradle
index 7d1bf79..25e4c83 100644
--- a/IntelliQ/backend/build.gradle
+++ b/IntelliQ/backend/build.gradle
@@ -24,7 +24,7 @@ sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
dependencies {
- //compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile fileTree(dir: 'libs', include: ['*.jar'])
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.38'
compile group: 'com.google.apis', name: 'google-api-services-oauth2', version: 'v1-rev120-1.22.0'
@@ -42,8 +42,12 @@ dependencies {
compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.2'
compile 'javax.servlet:servlet-api:2.5'
-}
+ testCompile 'com.google.appengine:appengine-api-labs:1.9.8'
+ testCompile 'com.google.appengine:appengine-api-stubs:1.9.8'
+ testCompile 'com.google.appengine:appengine-testing:1.9.8'
+ testCompile 'junit:junit:4.12'
+}
appengine {
downloadSdk = true
@@ -56,3 +60,31 @@ appengine {
enhanceOnBuild = true
}
}
+
+task backupDataStore << {
+ copy {
+ from 'build/exploded-app/WEB-INF/appengine-generated'
+ into 'datastore/'
+ include '**/*.xml'
+ include '**/*.bin'
+ }
+ println "Backed up datastore"
+}
+
+task restoreDataStore << {
+ copy {
+ from 'datastore/'
+ into 'build/exploded-app/WEB-INF/appengine-generated'
+ include '**/*.xml'
+ include '**/*.bin'
+ }
+ println "Restored datastore"
+}
+
+appengineExplodeApp.doFirst {
+ backupDataStore.execute()
+}
+
+appengineExplodeApp.doLast {
+ restoreDataStore.execute()
+}
\ No newline at end of file
diff --git a/IntelliQ/backend/datastore/datastore-indexes-auto.xml b/IntelliQ/backend/datastore/datastore-indexes-auto.xml
new file mode 100644
index 0000000..dd4f99f
--- /dev/null
+++ b/IntelliQ/backend/datastore/datastore-indexes-auto.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/IntelliQ/backend/datastore/local_db.bin b/IntelliQ/backend/datastore/local_db.bin
new file mode 100644
index 0000000..36934e1
Binary files /dev/null and b/IntelliQ/backend/datastore/local_db.bin differ
diff --git a/IntelliQ/backend/libs/slackmessagebuilder.jar b/IntelliQ/backend/libs/slackmessagebuilder.jar
new file mode 100644
index 0000000..dec02a1
Binary files /dev/null and b/IntelliQ/backend/libs/slackmessagebuilder.jar differ
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 = "" + tagName + ">";
-
- 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 = "" + tagName + ">";
+
+ 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..2f2566c 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,121 @@ 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 if(uri.contains(".well-known/assetlinks.json")) {
+ // redirect to Digital Asset Links JSON file
+ RequestDispatcher rd = request.getRequestDispatcher("/static/assetlinks.json");
+ rd.forward(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 +154,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..e480b36 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";
@@ -44,6 +44,7 @@ public final class EndpointManager {
public static final String ENDPOINT_QUEUE_ITEM = ENDPOINT_API + "item/";
public static final String ENDPOINT_QUEUE_ITEM_GET = ENDPOINT_QUEUE_ITEM + "get/";
public static final String ENDPOINT_QUEUE_ITEM_ADD = ENDPOINT_QUEUE_ITEM + "add/";
+ public static final String ENDPOINT_QUEUE_ITEM_FROM = ENDPOINT_QUEUE_ITEM + "from/";
public static final String ENDPOINT_QUEUE_ITEM_STATUS = ENDPOINT_QUEUE_ITEM + "status/";
public static final String ENDPOINT_QUEUE_ITEM_DELETE = ENDPOINT_QUEUE_ITEM + "delete/";
public static final String ENDPOINT_QUEUE_ITEM_LAST = ENDPOINT_QUEUE_ITEM + "last/";
@@ -54,36 +55,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..ae0d08f 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,82 @@
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);
+
+ // indicates that the item was created by the queue management
+ boolean addedByManagement = false;
+
+ // assign the queue item to the current user
+ UserEntry user = request.getUser();
+ if (user != null) {
+ PermissionEntry editQueuePermission = new PermissionEntry();
+ editQueuePermission.setPermission(PermissionEntry.PERMISSION_EDIT);
+ editQueuePermission.setSubjectKeyId(queueKeyId);
+ addedByManagement = user.hasPermission(editQueuePermission);
+
+ queueItemEntry.setUserKeyId(user.getKey().getId());
+ }
+
+ // make sure that user is not already in this queue
+ if (queueItemEntry.getUserKeyId() > -1 && !addedByManagement) {
+ 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
+ if (!addedByManagement) {
+ 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..174b5d8 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,60 @@
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/GetQueueItemsFromUserEndpoint.java b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetQueueItemsFromUserEndpoint.java
new file mode 100644
index 0000000..2830917
--- /dev/null
+++ b/IntelliQ/backend/src/main/java/com/intelliq/appengine/api/endpoint/queueitem/GetQueueItemsFromUserEndpoint.java
@@ -0,0 +1,47 @@
+package com.intelliq.appengine.api.endpoint.queueitem;
+
+import com.intelliq.appengine.api.ApiRequest;
+import com.intelliq.appengine.api.ApiResponse;
+import com.intelliq.appengine.api.endpoint.Endpoint;
+import com.intelliq.appengine.api.endpoint.EndpointManager;
+import com.intelliq.appengine.datastore.QueueItemHelper;
+import com.intelliq.appengine.datastore.entries.QueueItemEntry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jdo.JDOObjectNotFoundException;
+import javax.servlet.http.HttpServletResponse;
+
+
+public class GetQueueItemsFromUserEndpoint extends Endpoint {
+
+ @Override
+ public String getEndpointPath() {
+ return EndpointManager.ENDPOINT_QUEUE_ITEM_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 queueItemEntries = QueueItemHelper.getQueueItemsByUserKeyId(userKeyId);
+ response.setContent(queueItemEntries);
+ } catch (JDOObjectNotFoundException exception) {
+ response.setStatusCode(HttpServletResponse.SC_NOT_FOUND);
+ response.setException(new Exception("Unable to find queue items for the user"));
+ }
+ 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..b4fc677 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,32 @@
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 GetQueueItemsFromUserEndpoint());
+ 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