changeset 17:372dab740f15

new: filters in books page
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Tue, 02 Jun 2015 11:56:45 +0200
parents a7e9c1f8edb4
children 881e7591f3e4
files src/main/java/de/mpiwg/web/jsp/BooksPage.java src/main/java/de/mpiwg/web/jsp/JSPProxy.java src/main/java/de/mpiwg/web/jsp/SearchPage.java src/main/webapp/pages/books.jsp
diffstat 4 files changed, 284 insertions(+), 176 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/web/jsp/BooksPage.java	Mon Jun 01 14:40:48 2015 +0200
+++ b/src/main/java/de/mpiwg/web/jsp/BooksPage.java	Tue Jun 02 11:56:45 2015 +0200
@@ -10,6 +10,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 
 import de.mpiwg.gazetteer.db.DBBook;
@@ -36,21 +37,143 @@
 	public static String page = "pages/books.jsp";
 	private List<DBBook> completeBookList;
 	
+	private List<DBBook> filteredBookList;
+	private List<DBBook> displayBookList;
 
 	private Map<String, DBSectionVersion> sectionVersionMap = null;
 	private int bookNumber;
 
 	private String tocBookId = new String();
-
+	
+	private String bookNameFilter = new String();
+	private String dynastyFilter = new String();
+	private String adminTypeFilter = new String();
+	private String level1Filter = new String();
+	private String level2Filter = new String();
+	private String periodFilter = new String();
+	private String editionFilter = new String();
+	
 
 	public void loadParameters(HttpServletRequest request, HttpServletResponse response){
 		this.request = request;
 		this.response = response;
 		
 		this.tocBookId = getParameter("tocBookId");
+
+		this.bookNameFilter = getParameter("bookNameFilter");
+		this.dynastyFilter = getParameter("dynastyFilter");
+		this.adminTypeFilter = getParameter("adminTypeFilter");
+		this.level1Filter = getParameter("level1Filter");
+		this.level2Filter = getParameter("level2Filter");
+		this.periodFilter = getParameter("periodFilter");
+		this.editionFilter = getParameter("editionFilter");
+		
+	}
+	
+	
+
+	public void filter(){
+		
+		this.filteredBookList = new ArrayList<DBBook>();
+		for(DBBook book : this.completeBookList){
+			if(!this.filteredBookList.contains(book)){
+				
+				if( (StringUtils.isEmpty(dynastyFilter) || StringUtils.startsWith(book.getDynasty(), dynastyFilter)) &&
+						(StringUtils.isEmpty(level1Filter) || StringUtils.startsWith(book.getLevel1(), level1Filter)) &&
+						(StringUtils.isEmpty(level2Filter) || StringUtils.startsWith(book.getLevel2(), level2Filter)) &&
+						(StringUtils.isEmpty(periodFilter) || StringUtils.startsWith(book.getPeriod(), periodFilter)) &&
+						(StringUtils.isEmpty(editionFilter) || StringUtils.startsWith(book.getEdition(), editionFilter)) &&
+						(StringUtils.isEmpty(bookNameFilter) || StringUtils.startsWith(book.getName(), bookNameFilter)) &&
+						(StringUtils.isEmpty(adminTypeFilter) || StringUtils.startsWith(book.getAdmin_type(), adminTypeFilter))
+								){
+					this.filteredBookList.add(book);
+					
+				}	
+			}
+		}
+		
+		if(completeBookList.size() > 0){
+			//this.searchMessage = completeSectionList.size() + " section(s) found for the term(s): " + this.searchTerm;
+			//this.filteringMessage = this.filteredSectionList.size() + " section(s) listed after the filtering";
+			//this.paginator.setCurrentPage(0);
+			//this.paginator.resetNumberOfPages(filteredSectionList.size());
+			this.updateCurrentBooks();
+		}else{
+			//this.searchMessage = "No sections found for the term(s): " + this.searchTerm;
+			this.filteredBookList = null;
+		}
+		
 	}
 	
 	
+	private void updateCurrentBooks() {
+		this.displayBookList = this.filteredBookList;
+		/*this.paginator.initCount();
+		int startRecord = this.paginator.getCurrentPage()
+				* this.paginator.getItemsPerPage();
+		
+		if(this.paginator.getNumberOfPages() == 0){
+			this.displaySectionList = new ArrayList<DBSection>();
+		}else if((this.paginator.getCurrentPage() + 1) == this.paginator.getNumberOfPages()){
+			int mod = this.filteredSectionList.size() % paginator.getItemsPerPage();
+			if(mod == 0){
+				this.displaySectionList = filteredSectionList.subList(startRecord, startRecord + this.paginator.getItemsPerPage());
+			}else{
+				this.displaySectionList = filteredSectionList.subList(startRecord, startRecord + mod);	
+			}
+			
+		}else{
+			this.displaySectionList = filteredSectionList.subList(startRecord, startRecord + this.paginator.getItemsPerPage());	
+		}
+		
+		for(DBSection section : this.displaySectionList){
+			section.setBranches(this.branchesMap.get(section.getId()));
+		}
+		*/
+	}
+	
+
+	public List<DBBook> getDisplayBookList() {
+		return displayBookList;
+	}
+
+
+
+	public void setDisplayBookList(List<DBBook> displayBookList) {
+		this.displayBookList = displayBookList;
+	}
+
+	
+	public String getDynastyFilter() {
+		return dynastyFilter;
+	}
+
+
+	public void setDynastyFilter(String dynastyFilter) {
+		this.dynastyFilter = dynastyFilter;
+	}
+
+
+	public String getAdminTypeFilter() {
+		return adminTypeFilter;
+	}
+
+
+	public void setAdminTypeFilter(String adminTypeFilter) {
+		this.adminTypeFilter = adminTypeFilter;
+	}
+
+
+	public String getLevel1Filter() {
+		return level1Filter;
+	}
+
+
+	public void setLevel1Filter(String level1Filter) {
+		this.level1Filter = level1Filter;
+	}
+
+	
 	public String getTocBookId() {
 		return tocBookId;
 	}
@@ -75,7 +198,9 @@
 	public void loadBooks(){
 		if(this.completeBookList == null){
 			this.forceLoadBooks();
-		}
+			filter();
+		} 
+		
 	}
 	
 	public void forceLoadBooks(){
@@ -146,137 +271,184 @@
 
 	public void sortByBookIdUp() {
 		Collections.sort(this.completeBookList, new SortBooksByBookId());
-		//filter();
+		filter();
 	}
 
 	public void sortByBookIdDown() {
 		Collections.sort(this.completeBookList, new SortBooksByBookId());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 
 	public void sortByBookNameUp(){
 		Collections.sort(this.completeBookList, new SortBooksByName());
-		//filter();
+		filter();
 	}
 	
 	public void sortByBookNameDown(){
 		Collections.sort(this.completeBookList, new SortBooksByName());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	
 	public void sortByLevel1Up(){
 		Collections.sort(this.completeBookList, new SortBooksByLevel1());
-		//filter();
+		filter();
 	}
 	
 	public void sortByLevel1Down(){
 		Collections.sort(this.completeBookList, new SortBooksByLevel1());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	public void sortByLevel2Up(){
 		Collections.sort(this.completeBookList, new SortBooksByLevel2());
-		//filter();
+		filter();
 	}
 	
 	public void sortByLevel2Down(){
 		Collections.sort(this.completeBookList, new SortBooksByLevel2());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	
 	public void sortByPeriodUp(){
 		Collections.sort(this.completeBookList, new SortBooksByPeriod());
-		//filter();
+		filter();
 	}
 	
 	public void sortByPeriodDown(){
 		Collections.sort(this.completeBookList, new SortBooksByPeriod());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	
 	public void sortByAdminTypeUp(){
 		Collections.sort(this.completeBookList, new SortBooksByAdminType());
-		//filter();
+		filter();
 	}
 	
 	public void sortByAdminTypeDown(){
 		Collections.sort(this.completeBookList, new SortBooksByAdminType());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	
 	public void sortByStartYearUp(){
 		Collections.sort(this.completeBookList, new SortBooksByStartYear());
-		//filter();
+		filter();
 	}
 	
 	public void sortByStartYearDown(){
 		Collections.sort(this.completeBookList, new SortBooksByStartYear());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	
 	public void sortByDynastyUp(){
 		Collections.sort(this.completeBookList, new SortBooksByDynasty());
-		//filter();
+		filter();
 	}
 	
 	public void sortByDynastyDown(){
 		Collections.sort(this.completeBookList, new SortBooksByDynasty());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	public void sortByEditionUp(){
 		Collections.sort(this.completeBookList, new SortBooksByEdition());
-		//filter();
+		filter();
 	}
 	
 	public void sortByEditionDown(){
 		Collections.sort(this.completeBookList, new SortBooksByEdition());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 
 	
 	
 	public void sortByEditorUp(){
 		Collections.sort(this.completeBookList, new SortBooksByEditor());
-		//filter();
+		filter();
 	}
 	
 	public void sortByEditorDown(){
 		Collections.sort(this.completeBookList, new SortBooksByEditor());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	
 	public void sortByDateUp(){
 		Collections.sort(this.completeBookList, new SortBooksByDate());
-		//filter();
+		filter();
 	}
 	
 	public void sortByDateDown(){
 		Collections.sort(this.completeBookList, new SortBooksByDate());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 
 	public void sortByTocCorrectionUp(){
 		Collections.sort(this.completeBookList, new SortBooksByTocCorrection());
-		//filter();
+		filter();
 	}
 	
 	public void sortByTocCorrectionDown(){
 		Collections.sort(this.completeBookList, new SortBooksByTocCorrection());
 		Collections.reverse(completeBookList);
-		//filter();
+		filter();
 	}
 	
-	
-	
+	public String getBookNameFilter() {
+		return bookNameFilter;
+	}
+
+
+
+	public void setBookNameFilter(String bookNameFilter) {
+		this.bookNameFilter = bookNameFilter;
+	}
+
+
+
+	public String getLevel2Filter() {
+		return level2Filter;
+	}
+
+
+
+	public void setLevel2Filter(String level2Filter) {
+		this.level2Filter = level2Filter;
+	}
+
+
+
+	public String getPeriodFilter() {
+		return periodFilter;
+	}
+
+
+
+	public void setPeriodFilter(String periodFilter) {
+		this.periodFilter = periodFilter;
+	}
+
+
+
+	public String getEditionFilter() {
+		return editionFilter;
+	}
+
+
+
+	public void setEditionFilter(String editionFilter) {
+		this.editionFilter = editionFilter;
+	}
+
+
+
+
 	
 }
--- a/src/main/java/de/mpiwg/web/jsp/JSPProxy.java	Mon Jun 01 14:40:48 2015 +0200
+++ b/src/main/java/de/mpiwg/web/jsp/JSPProxy.java	Tue Jun 02 11:56:45 2015 +0200
@@ -158,6 +158,8 @@
 				
 				} else if (StringUtils.equals(action, "forceReloadBooks")) {
 					getSessionBean().getBooksPage().forceLoadBooks();
+				} else if(StringUtils.equals(action, "filter")){
+					getSessionBean().getBooksPage().filter();
 				
 				// Sorting
 				} else if(StringUtils.equals(action, "sortByBookIdUp")){
--- a/src/main/java/de/mpiwg/web/jsp/SearchPage.java	Mon Jun 01 14:40:48 2015 +0200
+++ b/src/main/java/de/mpiwg/web/jsp/SearchPage.java	Tue Jun 02 11:56:45 2015 +0200
@@ -71,6 +71,7 @@
 		this.adminTypeFilter = getParameter("adminTypeFilter");
 		this.level1Filter = getParameter("level1Filter");
 		this.searchIn = getIntParameter("searchIn");
+			
 	}
 	
 	public void search(){
--- a/src/main/webapp/pages/books.jsp	Mon Jun 01 14:40:48 2015 +0200
+++ b/src/main/webapp/pages/books.jsp	Tue Jun 02 11:56:45 2015 +0200
@@ -12,148 +12,7 @@
 
 	<jsp:include page="../componentes/headContent.jsp"/>	
 
-	
-	<script>
-		$(function() {
-			
-		    $( "#dialogMoreInfo" ).dialog({
-		        autoOpen: false,
-		        modal: true,
-		        position: { my: "center", at: "top", of: window },
-		        hide: {
-		          effect: "explode",
-		          duration: 1000
-		        }
-		      });
-		   
-			$( ".moreInfo" ).click(function() {
-				var sectionId = $( this ).data('section-id');
-				
-				var url0 = "<%=sessionBean.getApplicationBean().getRootServer()%>/methods/sectionTableDetails.jsp?sectionId=" + sectionId;
-				
-				$.ajax( url0 )
-				.done(function(data) {
-					$( "#dialogMoreInfoTable" ).replaceWith(data);
-					$( "#dialogMoreInfo" ).dialog( "open" );
-				})
-			  	.fail(function() {
-			    	console.error("Error calling: " + query);
-			  	})
-				
-				
-				
-		    });			
-			
-			$("#searchTerm").autocomplete({
-				source : function(request, response) {
-					var radioButton0 = $("input[type='radio'][name='searchIn']:checked");
-					var searchInVal = (radioButton0) ? radioButton0.val() : 0;
-				$.ajax({
-					url : "<%=sessionBean.getApplicationBean().getRootServer()%>/methods/searchAutocomplete.jsp",
-						type : "POST",
-						dataType : "json",
-						data : {
-							term : request.term,
-							searchIn : searchInVal
-						},
-						success : function(data) {
-	
-							response($.map(data, function(item) {
-								return {
-									label : item.name,
-									value : item.value,
-								}
-							}));
-						},
-						error : function(error) {
-							alert('error: ' + error);
-						}
-					});
-				},
-				minLength : 0
-			});
-			
-			$("#dynastyFilter").autocomplete({
-				source : function(request, response) {
-					$.ajax({
-						url : "<%=sessionBean.getApplicationBean().getRootServer()%>/methods/dynastyAutocomplete.jsp",
-						type : "POST",
-						dataType : "json",
-						data : {
-							term : request.term
-						},
-						success : function(data) {
-	
-							response($.map(data, function(item) {
-								return {
-									label : item.name,
-									value : item.value,
-								}
-							}));
-						},
-						error : function(error) {
-							alert('error: ' + error);
-						}
-					});
-				},
-				minLength : 0
-			});	
-			
-			$("#level1Filter").autocomplete({
-				source : function(request, response) {
-					$.ajax({
-						url : "<%=sessionBean.getApplicationBean().getRootServer()%>/methods/level1Autocomplete.jsp",
-						type : "POST",
-						dataType : "json",
-						data : {
-							term : request.term
-						},
-						success : function(data) {
-	
-							response($.map(data, function(item) {
-								return {
-									label : item.name,
-									value : item.value,
-								}
-							}));
-						},
-						error : function(error) {
-							alert('error: ' + error);
-						}
-					});
-				},
-				minLength : 0
-			});		
-			
-			$("#adminTypeFilter").autocomplete({
-				source : function(request, response) {
-					$.ajax({
-						url : "<%=sessionBean.getApplicationBean().getRootServer()%>/methods/adminTypeAutocomplete.jsp",
-						type : "POST",
-						dataType : "json",
-						data : {
-							term : request.term
-						},
-						success : function(data) {
-	
-							response($.map(data, function(item) {
-								return {
-									label : item.name,
-									value : item.value,
-								}
-							}));
-						},
-						error : function(error) {
-							alert('error: ' + error);
-						}
-					});
-				},
-				minLength : 0
-			});		
-				
-		});
-			
-	</script>
+
 </head>
 
 <body>
@@ -168,12 +27,14 @@
 	
 		<% if(sessionBean.getUser() == null) { %>
 			<label>You must login!</label>
-		<% } else { 
-			sessionBean.getBooksPage().loadParameters(request, response);
-			sessionBean.getBooksPage().loadBooks();
-			// TODO: add a "update" to forceLoadBooks()
+		<% } else {
+			if (sessionBean.getBooksPage().getCompleteBookList() == null){ 
+				sessionBean.getBooksPage().loadParameters(request, response);
+				sessionBean.getBooksPage().loadBooks();
+			}
+			
 		%>
-			
+		
 		<div class="subTitel">List of Books
 			<p class="label">Total <%= sessionBean.getBooksPage().getBookNumber() %> books</p>
 		</div>
@@ -226,6 +87,16 @@
 										</table>
 									</td>
 								</tr>
+								<tr>
+									<td>
+										<input type="text" name="bookNameFilter" value="<%= sessionBean.getBooksPage().getBookNameFilter()%>" size="10"/>
+									</td>									
+									<td>
+										<input type="image"
+											onclick="setAction('filter', 'booksForm');"
+											src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
+									</td>							
+								</tr>
 							</table>
 						</td> 
 						<td>
@@ -247,6 +118,16 @@
 										</table>
 									</td>
 								</tr>
+								<tr>
+									<td>
+										<input type="text" name="editionFilter" value="<%= sessionBean.getBooksPage().getEditionFilter()%>" size="10"/>
+									</td>									
+									<td>
+										<input type="image"
+											onclick="setAction('filter', 'booksForm');"
+											src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
+									</td>							
+								</tr>
 							</table>
 						</td>
 						<td>
@@ -268,6 +149,16 @@
 										</table>
 									</td>
 								</tr>
+								<tr>
+									<td>
+										<input type="text" name="level1Filter" value="<%= sessionBean.getBooksPage().getLevel1Filter()%>" size="10"/>
+									</td>									
+									<td>
+										<input type="image"
+											onclick="setAction('filter', 'booksForm');"
+											src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
+									</td>							
+								</tr>
 							</table>
 						</td>
 						<td>
@@ -289,6 +180,16 @@
 										</table>
 									</td>
 								</tr>
+								<tr>
+									<td>
+										<input type="text" name="level2Filter" value="<%= sessionBean.getBooksPage().getLevel2Filter()%>" size="10"/>
+									</td>									
+									<td>
+										<input type="image"
+											onclick="setAction('filter', 'booksForm');"
+											src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
+									</td>							
+								</tr>
 							</table>
 						</td>
 						<td>
@@ -310,6 +211,16 @@
 										</table>
 									</td>
 								</tr>
+								<tr>
+									<td>
+										<input type="text" name="periodFilter" value="<%= sessionBean.getBooksPage().getPeriodFilter()%>" size="10"/>
+									</td>									
+									<td>
+										<input type="image"
+											onclick="setAction('filter', 'booksForm');"
+											src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
+									</td>							
+								</tr>
 							</table>
 						</td>
 						<td>
@@ -331,6 +242,16 @@
 										</table>
 									</td>
 								</tr>
+								<tr>
+									<td>
+										<input type="text" name="dynastyFilter" value="<%= sessionBean.getBooksPage().getDynastyFilter()%>" size="10"/>
+									</td>									
+									<td>
+										<input type="image"
+											onclick="setAction('filter', 'booksForm');"
+											src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
+									</td>							
+								</tr>
 							</table>
 						</td>
 						<td>
@@ -352,6 +273,16 @@
 										</table>
 									</td>
 								</tr>
+								<tr>
+									<td>
+										<input type="text" name="adminTypeFilter" value="<%= sessionBean.getBooksPage().getAdminTypeFilter()%>" size="10"/>
+									</td>									
+									<td>
+										<input type="image"
+											onclick="setAction('filter', 'booksForm');"
+											src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
+									</td>							
+								</tr>
 							</table>
 						</td>
 						<td>
@@ -422,6 +353,7 @@
 										</table>
 									</td>
 								</tr>
+								
 							</table>
 						</td>
 						<td>
@@ -448,7 +380,8 @@
 						
 					</tr>	
 				
-					<% for(DBBook book : sessionBean.getBooksPage().getCompleteBookList() ) { %>
+					<% //for(DBBook book : sessionBean.getBooksPage().getCompleteBookList() ) { 
+						for (DBBook book : sessionBean.getBooksPage().getDisplayBookList() ) {%>
 					
 					<tr>
 						<!-- books info -->