diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-03-27 06:54:17 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-03-27 06:54:17 +0000 |
commit | 9526d652e75d6aeb498ad5f3272e426c2b8d01a0 (patch) | |
tree | c73e3a2130025297f62924dba914cd622c97bd86 /src/main/java | |
parent | 6d1ab6db5ba7b4f1d18d87548fceae4012542c53 (diff) | |
parent | bad18d984ff5cf173daa4d4888fae7674c95b6b0 (diff) | |
download | dashboard-9526d652e75d6aeb498ad5f3272e426c2b8d01a0.tar.gz |
Merge "New Test Suite Page for test suite data."
Diffstat (limited to 'src/main/java')
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 = |