summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-03-27 06:54:17 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-03-27 06:54:17 +0000
commit9526d652e75d6aeb498ad5f3272e426c2b8d01a0 (patch)
treec73e3a2130025297f62924dba914cd622c97bd86 /src/main/java
parent6d1ab6db5ba7b4f1d18d87548fceae4012542c53 (diff)
parentbad18d984ff5cf173daa4d4888fae7674c95b6b0 (diff)
downloaddashboard-9526d652e75d6aeb498ad5f3272e426c2b8d01a0.tar.gz
Merge "New Test Suite Page for test suite data."
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/android/vts/config/ObjectifyListener.java16
-rw-r--r--src/main/java/com/android/vts/config/ObjectifyWebFilter.java4
-rw-r--r--src/main/java/com/android/vts/entity/TestLogSummaryEntity.java91
-rw-r--r--src/main/java/com/android/vts/entity/TestSuiteResultEntity.java131
-rw-r--r--src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java92
-rw-r--r--src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java76
-rw-r--r--src/main/java/com/android/vts/servlet/ShowReleaseServlet.java66
-rw-r--r--src/main/java/com/android/vts/util/DatastoreHelper.java4
8 files changed, 308 insertions, 172 deletions
diff --git a/src/main/java/com/android/vts/config/ObjectifyListener.java b/src/main/java/com/android/vts/config/ObjectifyListener.java
index 8857764..cee9dd1 100644
--- a/src/main/java/com/android/vts/config/ObjectifyListener.java
+++ b/src/main/java/com/android/vts/config/ObjectifyListener.java
@@ -16,18 +16,18 @@
package com.android.vts.config;
-import com.android.vts.entity.TestLogSummaryEntity;
+import com.android.vts.entity.TestSuiteResultEntity;
+import com.googlecode.objectify.ObjectifyFactory;
import com.googlecode.objectify.ObjectifyService;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
-import javax.servlet.annotation.WebListener;
import java.util.logging.Level;
import java.util.logging.Logger;
/** The @WebListener annotation for registering a class as a listener of a web application. */
-@WebListener
+// @WebListener
/**
* Initializing Objectify Service at the container start up before any web components like servlet
* get initialized.
@@ -36,13 +36,15 @@ public class ObjectifyListener implements ServletContextListener {
private static final Logger logger = Logger.getLogger(ObjectifyListener.class.getName());
- /** Receives notification that the web application initialization process is starting.
- * This function will register Entity classes for objectify.
+ /**
+ * Receives notification that the web application initialization process is starting. This
+ * function will register Entity classes for objectify.
*/
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
- ObjectifyService.init();
- ObjectifyService.register(TestLogSummaryEntity.class);
+ ObjectifyFactory objectifyFactory = ObjectifyService.factory();
+ objectifyFactory.register(TestSuiteResultEntity.class);
+ objectifyFactory.begin();
logger.log(Level.INFO, "Value Initialized from context.");
}
diff --git a/src/main/java/com/android/vts/config/ObjectifyWebFilter.java b/src/main/java/com/android/vts/config/ObjectifyWebFilter.java
index 3813d0b..d008291 100644
--- a/src/main/java/com/android/vts/config/ObjectifyWebFilter.java
+++ b/src/main/java/com/android/vts/config/ObjectifyWebFilter.java
@@ -18,10 +18,8 @@ package com.android.vts.config;
import com.googlecode.objectify.ObjectifyFilter;
-import javax.servlet.annotation.WebFilter;
-
/** Annotation used to declare a servlet filter. */
-@WebFilter(urlPatterns = {"/*"})
+// @WebFilter(urlPatterns = {"/*"})
/**
* Servlet filter for objectify library. Objectify requires a filter to clean up any thread-local
* transaction contexts and pending asynchronous operations that remain at the end of a request.
diff --git a/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java b/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java
deleted file mode 100644
index 787295c..0000000
--- a/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you
- * may not use this file except in compliance with the License. You may
- * obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.vts.entity;
-
-import com.googlecode.objectify.annotation.Cache;
-import com.googlecode.objectify.annotation.Entity;
-import com.googlecode.objectify.annotation.Id;
-import com.googlecode.objectify.annotation.Index;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.util.Date;
-
-import static com.googlecode.objectify.ObjectifyService.ofy;
-
-/** Entity Class for saving Test Log Summary */
-@Cache
-@Entity
-@EqualsAndHashCode(of = "id")
-@NoArgsConstructor
-public class TestLogSummaryEntity {
-
- /** Test Log Summary id */
- @Id Long id;
-
- /** Test Log Summary branch information */
- @Index @Getter @Setter String branch;
-
- /** Test Log Summary build target information */
- @Index @Getter @Setter String target;
-
- /** Test Log Summary build ID information */
- @Index @Getter @Setter String build_id;
-
- /** Test Log Summary system finrgerprint information */
- @Getter @Setter String system_fingerprint;
-
- /** Test Log Summary vendor fingerprint information */
- @Getter @Setter String vendor_fingerprint;
-
- /** Test Log Summary test count for success information */
- @Index @Getter @Setter int pass;
-
- /** Test Log Summary test count for failure information */
- @Index @Getter @Setter int fail;
-
- /** When this record was created or updated */
- @Index @Getter Date updated;
-
- /** Construction function for TestLogSummaryEntity Class */
- public TestLogSummaryEntity(
- Long id,
- String branch,
- String target,
- String build_id,
- String system_fingerprint,
- String vendor_fingerprint,
- int pass,
- int fail) {
- this.id = id;
- this.branch = branch;
- this.target = target;
- this.build_id = build_id;
- this.system_fingerprint = system_fingerprint;
- this.vendor_fingerprint = vendor_fingerprint;
- this.pass = pass;
- this.fail = fail;
- }
-
- /** Saving function for the instance of this class */
- private void save() {
- this.updated = new Date();
- ofy().defer().save().entity(this);
- }
-}
diff --git a/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java b/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java
new file mode 100644
index 0000000..9a2dd48
--- /dev/null
+++ b/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you
+ * may not use this file except in compliance with the License. You may
+ * obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.vts.entity;
+
+import com.googlecode.objectify.annotation.Cache;
+import com.googlecode.objectify.annotation.Entity;
+import com.googlecode.objectify.annotation.Id;
+import com.googlecode.objectify.annotation.Index;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.googlecode.objectify.ObjectifyService.ofy;
+
+/** Entity Class for saving Test Log Summary */
+@Cache
+@Entity
+@EqualsAndHashCode(of = "id")
+@NoArgsConstructor
+public class TestSuiteResultEntity {
+
+ /** Test Suite start time field */
+ @Id Long startTime;
+
+ /** Test Suite end time field */
+ @Getter @Setter Long endTime;
+
+ /** Test Suite about field */
+ @Getter @Setter String about;
+
+ /** Test Suite suite plan field */
+ @Index @Getter @Setter String suitePlan;
+
+ /** Test Suite suite version field */
+ @Getter @Setter String suiteVersion;
+
+ /** Test Suite suite build number field */
+ @Getter @Setter String suiteBuildNumber;
+
+ /** Test Suite test finished module count field */
+ @Getter @Setter int modulesDone;
+
+ /** Test Suite total number of module field */
+ @Getter @Setter int modulesTotal;
+
+ /** Test Suite branch field */
+ @Index @Getter @Setter String branch;
+
+ /** Test Suite build target field */
+ @Index @Getter @Setter String target;
+
+ /** Test Suite build ID field */
+ @Index @Getter @Setter String buildId;
+
+ /** Test Suite system fingerprint field */
+ @Getter @Setter String buildSystemFingerprint;
+
+ /** Test Suite vendor fingerprint field */
+ @Getter @Setter String buildVendorFingerprint;
+
+ /** Test Suite test count for success field */
+ @Index @Getter @Setter int passedTestCaseCount;
+
+ /** Test Suite test count for failure field */
+ @Index @Getter @Setter int failedTestCaseCount;
+
+ /** When this record was created or updated */
+ @Index @Getter Date updated;
+
+ /** Construction function for TestSuiteResultEntity Class */
+ public TestSuiteResultEntity(
+ Long startTime,
+ Long endTime,
+ String about,
+ String suitePlan,
+ String suiteVersion,
+ String suiteBuildNumber,
+ int modulesDone,
+ int modulesTotal,
+ String branch,
+ String target,
+ String buildId,
+ String buildSystemFingerprint,
+ String buildVendorFingerprint,
+ int passedTestCaseCount,
+ int failedTestCaseCount) {
+ this.startTime = startTime;
+ this.endTime = endTime;
+ this.about = about;
+ this.suitePlan = suitePlan;
+ this.suiteVersion = suiteVersion;
+ this.suiteBuildNumber = suiteBuildNumber;
+ this.modulesDone = modulesDone;
+ this.modulesTotal = modulesTotal;
+ this.branch = branch;
+ this.target = target;
+ this.buildId = buildId;
+ this.buildSystemFingerprint = buildSystemFingerprint;
+ this.buildVendorFingerprint = buildVendorFingerprint;
+ this.passedTestCaseCount = passedTestCaseCount;
+ this.failedTestCaseCount = failedTestCaseCount;
+ }
+
+ /** Saving function for the instance of this class */
+ public void save() {
+ this.updated = new Date();
+ ofy().defer().save().entity(this);
+ }
+
+ public List<? extends TestSuiteResultEntity> getTestSuitePlans() {
+ return ofy().load().type(this.getClass()).project("suitePlan").distinct(true).list();
+ }
+}
diff --git a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java
index 9564ed2..c719947 100644
--- a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java
@@ -18,33 +18,24 @@ package com.android.vts.servlet;
import com.android.vts.entity.TestPlanEntity;
import com.android.vts.entity.TestPlanRunEntity;
+import com.android.vts.entity.TestSuiteResultEntity;
import com.android.vts.util.FilterUtil;
-import com.google.appengine.api.datastore.DatastoreService;
-import com.google.appengine.api.datastore.DatastoreServiceFactory;
-import com.google.appengine.api.datastore.Entity;
-import com.google.appengine.api.datastore.Key;
-import com.google.appengine.api.datastore.KeyFactory;
+import com.google.appengine.api.datastore.*;
import com.google.appengine.api.datastore.Query.Filter;
import com.google.appengine.api.datastore.Query.SortDirection;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.stream.Collectors;
+
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.stream.Collectors;
+
+import static com.googlecode.objectify.ObjectifyService.ofy;
public class ShowGreenReleaseServlet extends BaseServlet {
- private static final String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_green_release.jsp";
private static final int MAX_RUNS_PER_PAGE = 9999;
/** Helper class for displaying each device build info on the green build page. */
@@ -185,6 +176,30 @@ public class ShowGreenReleaseServlet extends BaseServlet {
@Override
public void doGetHandler(HttpServletRequest request, HttpServletResponse response)
throws IOException {
+
+ String testType =
+ request.getParameter("type") == null ? "plan" : request.getParameter("type");
+
+ RequestDispatcher dispatcher;
+ if (testType.equalsIgnoreCase("plan")) {
+ dispatcher = this.getTestPlanDispatcher(request, response);
+ } else {
+ dispatcher = this.getTestSuiteDispatcher(request, response);
+ }
+
+ try {
+ request.setAttribute("testType", testType);
+ response.setStatus(HttpServletResponse.SC_OK);
+ dispatcher.forward(request, response);
+ } catch (ServletException e) {
+ logger.log(Level.SEVERE, "Servlet Exception caught : ", e);
+ }
+ }
+
+ private RequestDispatcher getTestPlanDispatcher(
+ HttpServletRequest request, HttpServletResponse response) {
+ String GREEN_RELEASE_JSP = "WEB-INF/jsp/show_green_plan_release.jsp";
+
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Map<String, List<String>> paramInfoMap =
@@ -219,7 +234,7 @@ public class ShowGreenReleaseServlet extends BaseServlet {
put(
"device",
new String[] {
- deviceBuildInfo.getDeviceBuildTarget()
+ deviceBuildInfo.getDeviceBuildTarget()
});
}
};
@@ -283,11 +298,14 @@ public class ShowGreenReleaseServlet extends BaseServlet {
+ deviceBuildInfo.getDeviceBuildTarget(),
testPlanRunEntityList);
- // The passBuildIdList containing all passed buildId List for device
- List<String> passBuildIdList = testPlanRunEntityList.stream()
- .filter(entity -> entity.failCount == 0L)
- .map(entity -> entity.testBuildId)
- .collect(Collectors.toList());
+ // The passBuildIdList containing all passed buildId List for
+ // device
+ List<String> passBuildIdList =
+ testPlanRunEntityList
+ .stream()
+ .filter(entity -> entity.failCount == 0L)
+ .map(entity -> entity.testBuildId)
+ .collect(Collectors.toList());
allPassIdLists.add(passBuildIdList);
logger.log(Level.INFO, "passBuildIdList => " + passBuildIdList);
@@ -341,7 +359,7 @@ public class ShowGreenReleaseServlet extends BaseServlet {
branchKey
+ "-"
+ deviceBuildInfo
- .getDeviceBuildTarget())
+ .getDeviceBuildTarget())
.stream()
.filter(
entity ->
@@ -361,14 +379,24 @@ public class ShowGreenReleaseServlet extends BaseServlet {
}
});
+
request.setAttribute("plan", request.getParameter("plan"));
request.setAttribute("greenBuildInfo", baseParamMap);
- response.setStatus(HttpServletResponse.SC_OK);
- RequestDispatcher dispatcher = request.getRequestDispatcher(PLAN_RELEASE_JSP);
- try {
- dispatcher.forward(request, response);
- } catch (ServletException e) {
- logger.log(Level.SEVERE, "Servlet Exception caught : ", e);
- }
+ RequestDispatcher dispatcher = request.getRequestDispatcher(GREEN_RELEASE_JSP);
+ return dispatcher;
+ }
+
+ private RequestDispatcher getTestSuiteDispatcher(
+ HttpServletRequest request, HttpServletResponse response) {
+ String GREEN_RELEASE_JSP = "WEB-INF/jsp/show_green_suite_release.jsp";
+
+ String testPlan = request.getParameter("plan");
+
+ List<TestSuiteResultEntity> testSuiteResultEntityList =
+ ofy().load().type(TestSuiteResultEntity.class).filter("suitePlan", testPlan).list();
+
+ request.setAttribute("testSuiteResultEntityList", testSuiteResultEntityList);
+ RequestDispatcher dispatcher = request.getRequestDispatcher(GREEN_RELEASE_JSP);
+ return dispatcher;
}
}
diff --git a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java
index 357ef27..1cdfcc3 100644
--- a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java
@@ -19,36 +19,28 @@ package com.android.vts.servlet;
import com.android.vts.entity.DeviceInfoEntity;
import com.android.vts.entity.TestPlanEntity;
import com.android.vts.entity.TestPlanRunEntity;
+import com.android.vts.entity.TestSuiteResultEntity;
import com.android.vts.util.DatastoreHelper;
import com.android.vts.util.FilterUtil;
-import com.google.appengine.api.datastore.DatastoreService;
-import com.google.appengine.api.datastore.DatastoreServiceFactory;
-import com.google.appengine.api.datastore.Entity;
-import com.google.appengine.api.datastore.Key;
-import com.google.appengine.api.datastore.KeyFactory;
-import com.google.appengine.api.datastore.Query;
+import com.google.appengine.api.datastore.*;
import com.google.appengine.api.datastore.Query.Filter;
import com.google.appengine.api.datastore.Query.SortDirection;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
+import org.apache.commons.lang.StringUtils;
+
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.lang.StringUtils;
+import java.io.IOException;
+import java.util.*;
+import java.util.logging.Level;
+
+import static com.googlecode.objectify.ObjectifyService.ofy;
public class ShowPlanReleaseServlet extends BaseServlet {
- private static final String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_plan_release.jsp";
private static final int MAX_RUNS_PER_PAGE = 90;
@Override
@@ -99,7 +91,31 @@ public class ShowPlanReleaseServlet extends BaseServlet {
@Override
public void doGetHandler(HttpServletRequest request, HttpServletResponse response)
throws IOException {
+ String testType =
+ request.getParameter("type") == null ? "plan" : request.getParameter("type");
+
+ RequestDispatcher dispatcher;
+ if (testType.equalsIgnoreCase("plan")) {
+ dispatcher = this.getTestPlanDispatcher(request, response);
+ } else {
+ dispatcher = this.getTestSuiteDispatcher(request, response);
+ }
+
+ try {
+ request.setAttribute("testType", testType);
+ response.setStatus(HttpServletResponse.SC_OK);
+ dispatcher.forward(request, response);
+ } catch (ServletException e) {
+ logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e);
+ }
+ }
+
+ private RequestDispatcher getTestPlanDispatcher(
+ HttpServletRequest request, HttpServletResponse response) {
+ String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_plan_release.jsp";
+
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
+
Long startTime = null; // time in microseconds
Long endTime = null; // time in microseconds
if (request.getParameter("startTime") != null) {
@@ -144,8 +160,7 @@ public class ShowPlanReleaseServlet extends BaseServlet {
FilterUtil.getTimeFilter(
testPlanKey, TestPlanRunEntity.KIND, startTime, endTime, typeFilter);
Map<String, String[]> parameterMap = request.getParameterMap();
- List<Filter> userTestFilters =
- FilterUtil.getUserTestFilters(parameterMap);
+ List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap);
userTestFilters.add(0, testPlanRunFilter);
Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap);
@@ -247,12 +262,23 @@ public class ShowPlanReleaseServlet extends BaseServlet {
request.setAttribute("endTime", new Gson().toJson(endTime));
request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches()));
request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors()));
- response.setStatus(HttpServletResponse.SC_OK);
+
RequestDispatcher dispatcher = request.getRequestDispatcher(PLAN_RELEASE_JSP);
- try {
- dispatcher.forward(request, response);
- } catch (ServletException e) {
- logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e);
- }
+ return dispatcher;
+ }
+
+ private RequestDispatcher getTestSuiteDispatcher(
+ HttpServletRequest request, HttpServletResponse response) {
+ String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_suite_release.jsp";
+
+ String testPlan = request.getParameter("plan");
+
+ List<TestSuiteResultEntity> testSuiteResultEntityList =
+ ofy().load().type(TestSuiteResultEntity.class).filter("suitePlan", testPlan).list();
+
+ request.setAttribute("plan", request.getParameter("plan"));
+ request.setAttribute("testSuiteResultEntityList", testSuiteResultEntityList);
+ RequestDispatcher dispatcher = request.getRequestDispatcher(PLAN_RELEASE_JSP);
+ return dispatcher;
}
}
diff --git a/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java
index d631161..648beb8 100644
--- a/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java
@@ -17,12 +17,17 @@
package com.android.vts.servlet;
import com.android.vts.entity.TestPlanEntity;
+import com.android.vts.entity.TestSuiteResultEntity;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.users.UserServiceFactory;
-import com.google.gson.Gson;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
@@ -30,14 +35,12 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import java.util.stream.Collectors;
+
+import static com.googlecode.objectify.ObjectifyService.ofy;
/** Represents the servlet that is invoked on loading the release page. */
public class ShowReleaseServlet extends BaseServlet {
- private static final String RELEASE_JSP = "WEB-INF/jsp/show_release.jsp";
@Override
public PageType getNavParentType() {
@@ -52,6 +55,28 @@ public class ShowReleaseServlet extends BaseServlet {
@Override
public void doGetHandler(HttpServletRequest request, HttpServletResponse response)
throws IOException {
+ String testType =
+ request.getParameter("type") == null ? "plan" : request.getParameter("type");
+
+ RequestDispatcher dispatcher;
+ if (testType.equalsIgnoreCase("plan")) {
+ dispatcher = this.getTestPlanDispatcher(request, response);
+ } else {
+ dispatcher = this.getTestSuiteDispatcher(request, response);
+ }
+
+ try {
+ request.setAttribute("testType", testType);
+ response.setStatus(HttpServletResponse.SC_OK);
+ dispatcher.forward(request, response);
+ } catch (ServletException e) {
+ logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e);
+ }
+ }
+
+ private RequestDispatcher getTestPlanDispatcher(
+ HttpServletRequest request, HttpServletResponse response) {
+ String RELEASE_JSP = "WEB-INF/jsp/show_release.jsp";
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Set<String> planSet = new HashSet<>();
@@ -64,14 +89,31 @@ public class ShowReleaseServlet extends BaseServlet {
List<String> plans = new ArrayList<>(planSet);
plans.sort(Comparator.naturalOrder());
- response.setStatus(HttpServletResponse.SC_OK);
request.setAttribute("isAdmin", UserServiceFactory.getUserService().isUserAdmin());
request.setAttribute("planNames", plans);
RequestDispatcher dispatcher = request.getRequestDispatcher(RELEASE_JSP);
- try {
- dispatcher.forward(request, response);
- } catch (ServletException e) {
- logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e);
- }
+ return dispatcher;
+ }
+
+ private RequestDispatcher getTestSuiteDispatcher(
+ HttpServletRequest request, HttpServletResponse response) {
+ String RELEASE_JSP = "WEB-INF/jsp/show_release.jsp";
+
+ List<TestSuiteResultEntity> suiteResultEntityList =
+ ofy().load()
+ .type(TestSuiteResultEntity.class)
+ .project("suitePlan")
+ .distinct(true)
+ .list();
+
+ List<String> plans =
+ suiteResultEntityList
+ .stream()
+ .map(suiteEntity -> suiteEntity.getSuitePlan())
+ .collect(Collectors.toList());
+ request.setAttribute("isAdmin", UserServiceFactory.getUserService().isUserAdmin());
+ request.setAttribute("planNames", plans);
+ RequestDispatcher dispatcher = request.getRequestDispatcher(RELEASE_JSP);
+ return dispatcher;
}
}
diff --git a/src/main/java/com/android/vts/util/DatastoreHelper.java b/src/main/java/com/android/vts/util/DatastoreHelper.java
index 6d71b02..364ed04 100644
--- a/src/main/java/com/android/vts/util/DatastoreHelper.java
+++ b/src/main/java/com/android/vts/util/DatastoreHelper.java
@@ -96,7 +96,7 @@ public class DatastoreHelper {
* @return boolean True if there are newer data points.
* @throws IOException
*/
- public static boolean hasNewer(Key parentKey, String kind, Long lowerBound) throws IOException {
+ public static boolean hasNewer(Key parentKey, String kind, Long lowerBound) {
if (lowerBound == null || lowerBound <= 0) return false;
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key startKey = KeyFactory.createKey(parentKey, kind, lowerBound);
@@ -116,7 +116,7 @@ public class DatastoreHelper {
* @return boolean True if there are older data points.
* @throws IOException
*/
- public static boolean hasOlder(Key parentKey, String kind, Long upperBound) throws IOException {
+ public static boolean hasOlder(Key parentKey, String kind, Long upperBound) {
if (upperBound == null || upperBound <= 0) return false;
Key endKey = KeyFactory.createKey(parentKey, kind, upperBound);
Filter endFilter =