Bladeren bron

fix #991 improve collapsing navigation

Shinsuke Sugaya 8 jaren geleden
bovenliggende
commit
65ab1b4db0

+ 3 - 0
src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java

@@ -587,6 +587,9 @@ public class FessLabels extends UserMessages {
     /** The key of the message: Search */
     public static final String LABELS_SEARCH = "{labels.search}";
 
+    /** The key of the message: Similar results are displayed. */
+    public static final String LABELS_similar_doc_result_status = "{labels.similar_doc_result_status}";
+
     /** The key of the message: Results <b>{2}</b><span class="hidden-phone"> -</span> <b>{3}</b> of <b>{1}</b> for <b>{0}</b> */
     public static final String LABELS_search_result_status = "{labels.search_result_status}";
 

+ 5 - 1
src/main/java/org/codelibs/fess/util/QueryResponseList.java

@@ -186,6 +186,11 @@ public class QueryResponseList implements List<Map<String, Object>> {
         existPrevPage = start > 0;
         existNextPage = start < (long) (allPageCount - 1) * (long) pageSize;
         currentPageNumber = start / pageSize + 1;
+        if (existNextPage && size() < pageSize) {
+            // collapsing
+            existNextPage = false;
+            allPageCount = currentPageNumber;
+        }
         currentStartRecordNumber = allRecordCount != 0 ? (currentPageNumber - 1) * pageSize + 1 : 0;
         currentEndRecordNumber = (long) currentPageNumber * pageSize;
         currentEndRecordNumber = allRecordCount < currentEndRecordNumber ? allRecordCount : currentEndRecordNumber;
@@ -203,7 +208,6 @@ public class QueryResponseList implements List<Map<String, Object>> {
         for (int i = startPageRangeSize; i <= endPageRangeSize; i++) {
             pageNumberList.add(String.valueOf(i));
         }
-
     }
 
     @Override

+ 1 - 0
src/main/resources/fess_label.properties

@@ -186,6 +186,7 @@ labels.sidebar.placeholder_search=Search...
 labels.sidebar.menu=MENU
 labels.footer.copyright=&copy;2017 <a href="https://github.com/codelibs">CodeLibs Project</a>.
 labels.search=Search
+labels.similar_doc_result_status=Similar results are displayed.
 labels.search_result_status=Results <b>{2}</b><span class="hidden-phone"> -</span> <b>{3}</b> of <b>{1}</b> for <b>{0}</b>
 labels.search_result_time=({0} sec)
 labels.prev_page=Prev

+ 1 - 0
src/main/resources/fess_label_en.properties

@@ -186,6 +186,7 @@ labels.sidebar.placeholder_search=Search...
 labels.sidebar.menu=MENU
 labels.footer.copyright=&copy;2017 <a href="https://github.com/codelibs">CodeLibs Project</a>.
 labels.search=Search
+labels.similar_doc_result_status=Similar results are displayed.
 labels.search_result_status=Results <b>{2}</b><span class="hidden-phone"> -</span> <b>{3}</b> of <b>{1}</b> for <b>{0}</b>
 labels.search_result_time=({0} sec)
 labels.prev_page=Prev

+ 1 - 0
src/main/resources/fess_label_ja.properties

@@ -179,6 +179,7 @@ labels.sidebar.placeholder_search=\u691c\u7d22...
 labels.sidebar.menu=\u30e1\u30cb\u30e5\u30fc
 labels.footer.copyright=&copy;2017 <a href="https://github.com/codelibs">CodeLibs Project</a>.
 labels.search=\u691c\u7d22
+labels.similar_doc_result_status=\u985e\u4f3c\u3057\u3066\u3044\u308b\u7d50\u679c\u3092\u8868\u793a\u3057\u3066\u3044\u307e\u3059\u3002 
 labels.search_result_status=<b>{0}</b> \u306e\u691c\u7d22\u7d50\u679c<span class="br-phone"></span> <b>{1}</b> \u4ef6\u4e2d <b>{2}</b> - <b>{3}</b> \u4ef6\u76ee
 labels.search_result_time=({0} \u79d2)
 labels.prev_page=\u524d\u3078

+ 5 - 0
src/main/webapp/WEB-INF/view/searchResults.jsp

@@ -11,6 +11,11 @@
 				<la:message key="labels.search_result_time" arg0="${f:h(execTime)}" />
 			</c:if>
 		</p>
+		<c:if test="${! empty sdh }">
+		<p>
+			<la:message key="labels.similar_doc_result_status" />
+		</p>
+		</c:if>
 	</div>
 </div>
 <c:if test="${partialResults}">

+ 183 - 16
src/test/java/org/codelibs/fess/util/QueryResponseListTest.java

@@ -25,7 +25,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
     public void test_calculatePageInfo_page0() {
         QueryResponseList qrList;
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 0;
+            }
+        };
         qrList.calculatePageInfo(0, 20);
         assertEquals(20, qrList.getPageSize());
         assertEquals(1, qrList.getCurrentPageNumber());
@@ -40,7 +45,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
     public void test_calculatePageInfo_page1() {
         QueryResponseList qrList;
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 10;
+            }
+        };
         qrList.allRecordCount = 10;
         qrList.calculatePageInfo(0, 20);
         assertEquals(20, qrList.getPageSize());
@@ -52,7 +62,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals(1, qrList.getCurrentStartRecordNumber());
         assertEquals(10, qrList.getCurrentEndRecordNumber());
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 20;
         qrList.calculatePageInfo(0, 20);
         assertEquals(20, qrList.getPageSize());
@@ -64,7 +79,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals(1, qrList.getCurrentStartRecordNumber());
         assertEquals(20, qrList.getCurrentEndRecordNumber());
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 21;
         qrList.calculatePageInfo(0, 20);
         assertEquals(20, qrList.getPageSize());
@@ -76,7 +96,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals(1, qrList.getCurrentStartRecordNumber());
         assertEquals(20, qrList.getCurrentEndRecordNumber());
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 40;
         qrList.calculatePageInfo(0, 20);
         assertEquals(20, qrList.getPageSize());
@@ -88,7 +113,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals(1, qrList.getCurrentStartRecordNumber());
         assertEquals(20, qrList.getCurrentEndRecordNumber());
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 41;
         qrList.calculatePageInfo(0, 20);
         assertEquals(20, qrList.getPageSize());
@@ -104,7 +134,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
     public void test_calculatePageInfo_page2() {
         QueryResponseList qrList;
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 1;
+            }
+        };
         qrList.allRecordCount = 21;
         qrList.calculatePageInfo(20, 20);
         assertEquals(20, qrList.getPageSize());
@@ -116,7 +151,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals(21, qrList.getCurrentStartRecordNumber());
         assertEquals(21, qrList.getCurrentEndRecordNumber());
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 40;
         qrList.calculatePageInfo(20, 20);
         assertEquals(20, qrList.getPageSize());
@@ -128,7 +168,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals(21, qrList.getCurrentStartRecordNumber());
         assertEquals(40, qrList.getCurrentEndRecordNumber());
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 41;
         qrList.calculatePageInfo(20, 20);
         assertEquals(20, qrList.getPageSize());
@@ -140,7 +185,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals(21, qrList.getCurrentStartRecordNumber());
         assertEquals(40, qrList.getCurrentEndRecordNumber());
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 61;
         qrList.calculatePageInfo(20, 20);
         assertEquals(20, qrList.getPageSize());
@@ -157,14 +207,24 @@ public class QueryResponseListTest extends UnitFessTestCase {
         QueryResponseList qrList;
         List<String> pnList;
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 20;
         qrList.calculatePageInfo(0, 20);
         pnList = qrList.getPageNumberList();
         assertEquals(1, pnList.size());
         assertEquals("1", pnList.get(0));
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 61;
         qrList.calculatePageInfo(0, 20);
         pnList = qrList.getPageNumberList();
@@ -174,7 +234,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals("3", pnList.get(2));
         assertEquals("4", pnList.get(3));
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 200;
         qrList.calculatePageInfo(0, 20);
         pnList = qrList.getPageNumberList();
@@ -186,7 +251,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals("5", pnList.get(4));
         assertEquals("6", pnList.get(5));
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 1;
+            }
+        };
         qrList.allRecordCount = 21;
         qrList.calculatePageInfo(20, 20);
         pnList = qrList.getPageNumberList();
@@ -194,7 +264,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals("1", pnList.get(0));
         assertEquals("2", pnList.get(1));
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 61;
         qrList.calculatePageInfo(20, 20);
         pnList = qrList.getPageNumberList();
@@ -204,7 +279,12 @@ public class QueryResponseListTest extends UnitFessTestCase {
         assertEquals("3", pnList.get(2));
         assertEquals("4", pnList.get(3));
 
-        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>());
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 20;
+            }
+        };
         qrList.allRecordCount = 200;
         qrList.calculatePageInfo(20, 20);
         pnList = qrList.getPageNumberList();
@@ -219,4 +299,91 @@ public class QueryResponseListTest extends UnitFessTestCase {
 
     }
 
+    public void test_calculatePageInfo_collapse() {
+        QueryResponseList qrList;
+
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 0;
+            }
+        };
+        qrList.calculatePageInfo(0, 20);
+        assertEquals(20, qrList.getPageSize());
+        assertEquals(1, qrList.getCurrentPageNumber());
+        assertEquals(0, qrList.getAllRecordCount());
+        assertEquals(1, qrList.getAllPageCount());
+        assertEquals(false, qrList.isExistPrevPage());
+        assertEquals(false, qrList.isExistNextPage());
+        assertEquals(0, qrList.getCurrentStartRecordNumber());
+        assertEquals(0, qrList.getCurrentEndRecordNumber());
+
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 10;
+            }
+        };
+        qrList.allRecordCount = 20;
+        qrList.calculatePageInfo(0, 20);
+        assertEquals(20, qrList.getPageSize());
+        assertEquals(1, qrList.getCurrentPageNumber());
+        assertEquals(20, qrList.getAllRecordCount());
+        assertEquals(1, qrList.getAllPageCount());
+        assertEquals(false, qrList.isExistPrevPage());
+        assertEquals(false, qrList.isExistNextPage());
+        assertEquals(1, qrList.getCurrentStartRecordNumber());
+        assertEquals(20, qrList.getCurrentEndRecordNumber());
+
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 10;
+            }
+        };
+        qrList.allRecordCount = 21;
+        qrList.calculatePageInfo(0, 20);
+        assertEquals(20, qrList.getPageSize());
+        assertEquals(1, qrList.getCurrentPageNumber());
+        assertEquals(21, qrList.getAllRecordCount());
+        assertEquals(1, qrList.getAllPageCount());
+        assertEquals(false, qrList.isExistPrevPage());
+        assertEquals(false, qrList.isExistNextPage());
+        assertEquals(1, qrList.getCurrentStartRecordNumber());
+        assertEquals(20, qrList.getCurrentEndRecordNumber());
+
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 21;
+            }
+        };
+        qrList.allRecordCount = 41;
+        qrList.calculatePageInfo(0, 20);
+        assertEquals(20, qrList.getPageSize());
+        assertEquals(1, qrList.getCurrentPageNumber());
+        assertEquals(41, qrList.getAllRecordCount());
+        assertEquals(3, qrList.getAllPageCount());
+        assertEquals(false, qrList.isExistPrevPage());
+        assertEquals(true, qrList.isExistNextPage());
+        assertEquals(1, qrList.getCurrentStartRecordNumber());
+        assertEquals(20, qrList.getCurrentEndRecordNumber());
+
+        qrList = new QueryResponseList(new ArrayList<Map<String, Object>>()) {
+            @Override
+            public int size() {
+                return 1;
+            }
+        };
+        qrList.allRecordCount = 41;
+        qrList.calculatePageInfo(20, 20);
+        assertEquals(20, qrList.getPageSize());
+        assertEquals(2, qrList.getCurrentPageNumber());
+        assertEquals(41, qrList.getAllRecordCount());
+        assertEquals(2, qrList.getAllPageCount());
+        assertEquals(true, qrList.isExistPrevPage());
+        assertEquals(false, qrList.isExistNextPage());
+        assertEquals(21, qrList.getCurrentStartRecordNumber());
+        assertEquals(40, qrList.getCurrentEndRecordNumber());
+    }
 }