diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-05-24 18:35:18 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-05-24 18:35:18 +0000 |
commit | fc8957fa8b549e6411c225d99e8dae97de2755be (patch) | |
tree | 9f0498dce2e7c4edff7d6015dfac56fdee8fd68a /src/main | |
parent | 30257ba9a08cee77d28f193ce50522bae6a3e241 (diff) | |
parent | b4cf9e240a246ca630ba37a1fa43a437b2a95d26 (diff) | |
download | dashboard-fc8957fa8b549e6411c225d99e8dae97de2755be.tar.gz |
Merge "Adding search functionality on test suite page"
Diffstat (limited to 'src/main')
5 files changed, 161 insertions, 45 deletions
diff --git a/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java b/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java index 7ba1373..e77d664 100644 --- a/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java +++ b/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java @@ -299,8 +299,10 @@ public class TestSuiteResultEntity { if (totalTestCaseCount.intValue() <= 0) { this.passedTestCaseRatio = 0; } else { - BigDecimal passedTestCaseCountDecimal= new BigDecimal(passedTestCaseCount); - BigDecimal result = passedTestCaseCountDecimal.divide(totalTestCaseCount, 10, BigDecimal.ROUND_FLOOR); + BigDecimal passedTestCaseCountDecimal = new BigDecimal(passedTestCaseCount); + BigDecimal result = + passedTestCaseCountDecimal.divide( + totalTestCaseCount, 10, BigDecimal.ROUND_FLOOR); this.passedTestCaseRatio = result.longValue() * 100; } @@ -318,8 +320,44 @@ public class TestSuiteResultEntity { ofy().save().entity(this).now(); } - public List<? extends TestSuiteResultEntity> getTestSuitePlans() { - return ofy().load().type(this.getClass()).project("suitePlan").distinct(true).list(); + public static List<TestSuiteResultEntity> getTestSuitePlans() { + return ofy().load() + .type(TestSuiteResultEntity.class) + .project("suitePlan") + .distinct(true) + .list(); + } + + public static List<TestSuiteResultEntity> getBranchDistinctList() { + return ofy().load() + .type(TestSuiteResultEntity.class) + .project("branch") + .distinct(true) + .list(); + } + + public static List<TestSuiteResultEntity> getBuildIdDistinctList() { + return ofy().load() + .type(TestSuiteResultEntity.class) + .project("buildId") + .distinct(true) + .list(); + } + + public static List<TestSuiteResultEntity> getTargetDistinctList() { + return ofy().load() + .type(TestSuiteResultEntity.class) + .project("target") + .distinct(true) + .list(); + } + + public static List<TestSuiteResultEntity> getHostNameDistinctList() { + return ofy().load() + .type(TestSuiteResultEntity.class) + .project("hostName") + .distinct(true) + .list(); } public String getDeviceNameFromVendorFpt() { diff --git a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java index 11383bf..207857c 100644 --- a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java @@ -292,15 +292,15 @@ public class ShowPlanReleaseServlet extends BaseServlet { String testPlan = request.getParameter("plan"); String testCategoryType = - request.getParameter("testCategoryType") == null + Objects.isNull(request.getParameter("testCategoryType")) ? "1" : request.getParameter("testCategoryType"); int page = - request.getParameter("page") == null + Objects.isNull(request.getParameter("page")) ? 1 : Integer.valueOf(request.getParameter("page")); String nextPageToken = - request.getParameter("nextPageToken") == null + Objects.isNull(request.getParameter("nextPageToken")) ? "" : request.getParameter("nextPageToken"); @@ -308,8 +308,24 @@ public class ShowPlanReleaseServlet extends BaseServlet { ofy().load() .type(TestSuiteResultEntity.class) .filter("suitePlan", testPlan) - .filter(this.getTestTypeFieldName(testCategoryType), true) - .orderKey(true); + .filter(this.getTestTypeFieldName(testCategoryType), true); + + if (Objects.nonNull(request.getParameter("branch"))) { + request.setAttribute("branch", request.getParameter("branch")); + testSuiteResultEntityQuery = + testSuiteResultEntityQuery.filter("branch", request.getParameter("branch")); + } + if (Objects.nonNull(request.getParameter("hostName"))) { + request.setAttribute("hostName", request.getParameter("hostName")); + testSuiteResultEntityQuery = + testSuiteResultEntityQuery.filter("hostName", request.getParameter("hostName")); + } + if (Objects.nonNull(request.getParameter("buildId"))) { + request.setAttribute("buildId", request.getParameter("buildId")); + testSuiteResultEntityQuery = + testSuiteResultEntityQuery.filter("buildId", request.getParameter("buildId")); + } + testSuiteResultEntityQuery = testSuiteResultEntityQuery.orderKey(true); Pagination<TestSuiteResultEntity> testSuiteResultEntityPagination = new Pagination( @@ -349,17 +365,16 @@ public class ShowPlanReleaseServlet extends BaseServlet { return dispatcher; } - private String getTestTypeFieldName(String testCategoryType) { String fieldName; switch (testCategoryType) { - case "1": // TOT + case "1": // TOT fieldName = "testTypeIndex.TOT"; break; - case "2": // OTA + case "2": // OTA fieldName = "testTypeIndex.OTA"; break; - case "4": // SIGNED + case "4": // SIGNED fieldName = "testTypeIndex.SIGNED"; break; default: diff --git a/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java index 648beb8..ed634a3 100644 --- a/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java @@ -99,12 +99,7 @@ public class ShowReleaseServlet extends BaseServlet { 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<TestSuiteResultEntity> suiteResultEntityList = TestSuiteResultEntity.getTestSuitePlans(); List<String> plans = suiteResultEntityList diff --git a/src/main/webapp/WEB-INF/datastore-indexes.xml b/src/main/webapp/WEB-INF/datastore-indexes.xml index 4b1c6cc..455ae40 100644 --- a/src/main/webapp/WEB-INF/datastore-indexes.xml +++ b/src/main/webapp/WEB-INF/datastore-indexes.xml @@ -108,6 +108,21 @@ </datastore-index> <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> + <property name="branch" direction="asc"/> + <property name="__key__" direction="desc"/> + </datastore-index> + + <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> + <property name="hostName" direction="asc"/> + <property name="__key__" direction="desc"/> + </datastore-index> + + <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> + <property name="buildId" direction="asc"/> + <property name="__key__" direction="desc"/> + </datastore-index> + + <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> <property name="testType" direction="asc"/> <property name="suitePlan" direction="asc"/> <property name="__key__" direction="desc"/> diff --git a/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp b/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp index 3efdc9f..a19aea5 100644 --- a/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp +++ b/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp @@ -28,6 +28,20 @@ <link rel='stylesheet' href='/css/search_header.css'> <script type='text/javascript'> $(document).ready(function() { + + $.deparam = $.deparam || function(uri){ + if(uri === undefined){ + uri = window.location.search; + } + var queryString = {}; + uri.replace( + new RegExp( + "([^?=&]+)(=([^&#]*))?", "g"), + function($0, $1, $2, $3) { queryString[$1] = $3; } + ); + return queryString; + }; + $("li.tab").each(function( index ) { $(this).click(function() { window.open($(this).children().attr("href"), '_self'); @@ -35,12 +49,54 @@ }); $(".search-icon-wrapper").click(function() { - console.log($(this)); - $(".search-wrapper").slideToggle("fast", function() { // Animation complete. }); }); + + <c:if test="${not empty branch or not empty hostName or not empty buildId}"> + $(".search-wrapper").slideToggle("fast"); + </c:if> + + $("#searchBtn").click(function(event) { + event.preventDefault(); + + var url = '<c:out value="${requestScope['javax.servlet.forward.servlet_path']}" escapeXml="false"></c:out>'; + var params = $.deparam('<c:out value="${requestScope['javax.servlet.forward.query_string']}" escapeXml="false"></c:out>'); + + var branch = $("#deviceBranch").val().trim(); + if ( branch.length > 0 ) { + params['branch'] = branch; + } else { + delete params['branch']; + } + var host = $("#host").val().trim(); + if ( host.length > 0 ) { + params['hostName'] = host; + } else { + delete params['hostName']; + } + var buildId = $("#deviceBuildId").val().trim(); + if ( buildId.length > 0 ) { + params['buildId'] = buildId; + } else { + delete params['buildId']; + } + + $(location).prop('href', url + "?" + decodeURIComponent($.param(params))); + $(this).prop('href', url); + }); + + $("#deviceBranch").autocomplete({ + source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ], + open: function( event, ui ) { + alert("open") + }, + close: function( event, ui ) { + alert("close") + } + }); + }); </script> <body> @@ -58,28 +114,16 @@ <div class="search-wrapper" style="display: none"> <div class="col s12"> <div class="input-field col s4"> - <input class="filter-input ui-autocomplete-input" type="text" autocomplete="off" /> + <input id="deviceBranch" type="text" value="<c:out value="${branch}"></c:out>" autocomplete="off" /> <label>Device Branch</label> </div> <div class="input-field col s4"> - <input class="filter-input ui-autocomplete-input" type="text" autocomplete="off" /> - <label>Device Type</label> - </div> - <div class="input-field col s4"> - <input class="filter-input" type="text" /> - <label>Device Build ID</label> - </div> - <div class="input-field col s4"> - <input class="filter-input" type="text" /> + <input id="host" type="text" value="<c:out value="${hostName}"></c:out>" autocomplete="off" /> <label>Host</label> </div> <div class="input-field col s4"> - <input class="filter-input validate" type="text" pattern="(^)(<|>|<=|>=|=)?[ ]*?[0-9]+$" placeholder="e.g. 5, >0, <=10" /> - <label class="active">Passing Test Case Count</label> - </div> - <div class="input-field col s4"> - <input class="filter-input validate" type="text" pattern="(^)(<|>|<=|>=|=)?[ ]*?[0-9]+$" placeholder="e.g. 5, >0, <=10" /> - <label class="active">Non-Passing Test Case Count</label> + <input id="deviceBuildId" type="text" value="<c:out value="${buildId}"></c:out>" autocomplete="off" /> + <label>Device Build ID</label> </div> </div> <div class="col s12"> @@ -87,7 +131,7 @@ </div> <div class="run-type-wrapper col s3"> - <a class="waves-effect waves-light btn"> + <a class="waves-effect waves-light btn" id="searchBtn"> <i class="material-icons left">search</i>Apply </a> </div> @@ -100,13 +144,13 @@ <ul class="tabs"> <li class="tab col s4" id="totTabLink"> - <a class="${testCategoryType == '1' ? 'active' : 'inactive'}" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=1">TOT</a> + <a class="<c:out value="${testCategoryType == '1' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=1">TOT</a> </li> <li class="tab col s4" id="signedTabLink"> - <a class="${testCategoryType == '4' ? 'active' : 'inactive'}" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=4">SIGNED</a> + <a class="<c:out value="${testCategoryType == '4' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=4">SIGNED</a> </li> <li class="tab col s4" id="otaTabLink"> - <a class="${testCategoryType == '2' ? 'active' : 'inactive'}" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=2">OTA</a> + <a class="<c:out value="${testCategoryType == '2' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=2">OTA</a> </li> </ul> @@ -164,7 +208,6 @@ <div class="col s5"> <span class="suite-test-run-metadata"> <b>Suite Build Number: </b><c:out value="${testSuiteResultEntity.suiteBuildNumber}"></c:out><br> - <b>VTS Build: </b><c:out value="${testSuiteResultEntity.buildId}"></c:out><br> <b>Device Name: </b><c:out value="${testSuiteResultEntity.deviceName}"></c:out><br> </span> </div> @@ -235,12 +278,22 @@ </div> <div class="row"> + <c:set var="searchQueryString" value="" /> + <c:if test="${not empty branch}"> + <c:set var="searchQueryString" value="${searchQueryString}&branch=${branch}" /> + </c:if> + <c:if test="${not empty hostName}"> + <c:set var="searchQueryString" value="${searchQueryString}&hostName=${hostName}" /> + </c:if> + <c:if test="${not empty buildId}"> + <c:set var="searchQueryString" value="${searchQueryString}&buildId=${buildId}" /> + </c:if> <div class="col s12 center-align"> <ul class="pagination"> <c:choose> <c:when test="${testSuiteResultEntityPagination.minPageRange gt testSuiteResultEntityPagination.pageSize}"> <li class="waves-effect"> - <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.minPageRange - 1}&nextPageToken=${testSuiteResultEntityPagination.previousPageCountToken}"> + <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.minPageRange - 1}&nextPageToken=${testSuiteResultEntityPagination.previousPageCountToken}${searchQueryString}"> <i class="material-icons">chevron_left</i> </a> </li> @@ -251,7 +304,7 @@ </c:choose> <c:forEach var="pageLoop" begin="${testSuiteResultEntityPagination.minPageRange}" end="${testSuiteResultEntityPagination.maxPageRange}"> <li class="waves-effect<c:if test="${pageLoop eq page}"> active</c:if>"> - <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${pageLoop}<c:if test="${testSuiteResultEntityPagination.currentPageCountToken ne ''}">&nextPageToken=${testSuiteResultEntityPagination.currentPageCountToken}</c:if>"> + <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${pageLoop}<c:if test="${testSuiteResultEntityPagination.currentPageCountToken ne ''}">&nextPageToken=${testSuiteResultEntityPagination.currentPageCountToken}</c:if>${searchQueryString}"> <c:out value="${pageLoop}" /> </a> </li> @@ -259,7 +312,7 @@ <c:choose> <c:when test="${testSuiteResultEntityPagination.maxPages gt testSuiteResultEntityPagination.pageSize}"> <li class="waves-effect"> - <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.maxPageRange + 1}&nextPageToken=${testSuiteResultEntityPagination.nextPageCountToken}"> + <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.maxPageRange + 1}&nextPageToken=${testSuiteResultEntityPagination.nextPageCountToken}${searchQueryString}"> <i class="material-icons">chevron_right</i> </a> </li> |