Mercurial > hg > LGServices
view src/main/java/de/mpiwg/web/jsp/BooksPage.java @ 75:e5697f7775b2
Display columns named "source" and "year" and implement filter & sorting on them. Hide the column "Start Year"
author | Calvin Yeh <cyeh@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 27 Mar 2017 17:50:58 +0200 |
parents | b8ad346e39a0 |
children | 141fa833d126 |
line wrap: on
line source
package de.mpiwg.web.jsp; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; 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; import de.mpiwg.gazetteer.db.DBSectionVersion; import de.mpiwg.gazetteer.utils.DBService; import de.mpiwg.web.books.SortBooksByAdminType; import de.mpiwg.web.books.SortBooksByBookId; import de.mpiwg.web.books.SortBooksByDate; import de.mpiwg.web.books.SortBooksByDynasty; import de.mpiwg.web.books.SortBooksByEdition; import de.mpiwg.web.books.SortBooksByEditor; import de.mpiwg.web.books.SortBooksByLevel1; import de.mpiwg.web.books.SortBooksByLevel2; import de.mpiwg.web.books.SortBooksByName; import de.mpiwg.web.books.SortBooksByPeriod; import de.mpiwg.web.books.SortBooksByStartYear; import de.mpiwg.web.books.SortBooksByTocCorrection; public class BooksPage extends AbstractJSPPage{ private static Logger logger = Logger.getLogger(BooksPage.class); public static String bean = "booksBean"; 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 DataPaginator paginator = new DataPaginator(); 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(); private String lastEditorFilter = new String(); private String editTimeFilter = new String(); private String yearFilter = new String(); private String sourceFilter = new String(); private String filteringMessage; 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"); this.lastEditorFilter = getParameter("lastEditorFilter"); this.editTimeFilter = getParameter("editTimeFilter"); this.yearFilter = getParameter("yearFilter"); this.sourceFilter = getParameter("sourceFilter"); } 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.contains(book.getLevel1(), level1Filter)) && (StringUtils.isEmpty(level2Filter) || StringUtils.contains(book.getLevel2(), level2Filter)) && (StringUtils.isEmpty(periodFilter) || StringUtils.contains(book.getPeriod(), periodFilter)) && (StringUtils.isEmpty(editionFilter) || StringUtils.contains(book.getEdition(), editionFilter)) && (StringUtils.isEmpty(bookNameFilter) || StringUtils.contains(book.getName(), bookNameFilter)) && (StringUtils.isEmpty(dynastyFilter) || StringUtils.contains(book.getDynasty(), dynastyFilter)) && (StringUtils.isEmpty(adminTypeFilter) || StringUtils.contains(book.getAdmin_type(), adminTypeFilter)) && (StringUtils.isEmpty(yearFilter) || StringUtils.contains(book.getYear(), yearFilter)) && (StringUtils.isEmpty(sourceFilter) || StringUtils.contains(book.getSource(), sourceFilter)) ){ String lastEditor = new String(); String editTime = new String(); if ( book.getCurrentSectionVersion() != null) { lastEditor = book.getCurrentSectionVersion().getEditor(); editTime = book.getCurrentSectionVersion().getDate(); } if( (StringUtils.isEmpty(lastEditorFilter) || StringUtils.contains(lastEditor, lastEditorFilter)) && (StringUtils.isEmpty(editTimeFilter) || StringUtils.contains(editTime, editTimeFilter)) ){ this.filteredBookList.add(book); } //this.filteredBookList.add(book); } } } if(completeBookList.size() > 0){ this.filteringMessage = this.filteredBookList.size() + " book(s) listed after filtering"; this.paginator.setCurrentPage(0); this.paginator.resetNumberOfPages(filteredBookList.size()); this.updateCurrentBooks(); }else{ this.filteredBookList = null; } } private void updateCurrentBooks() { // update displayBookList using paginator this.paginator.initCount(); int startRecord = this.paginator.getCurrentPage() * this.paginator.getItemsPerPage(); if(this.paginator.getNumberOfPages() == 0){ this.displayBookList = new ArrayList<DBBook>(); }else if((this.paginator.getCurrentPage() + 1) == this.paginator.getNumberOfPages()){ int mod = this.filteredBookList.size() % paginator.getItemsPerPage(); if(mod == 0){ this.displayBookList = filteredBookList.subList(startRecord, startRecord + this.paginator.getItemsPerPage()); }else{ this.displayBookList = filteredBookList.subList(startRecord, startRecord + mod); } }else{ this.displayBookList = filteredBookList.subList(startRecord, startRecord + this.paginator.getItemsPerPage()); } } 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 getYearFilter() { return yearFilter; } public void setYearFilter(String yearFilter) { this.yearFilter = yearFilter; } public String getSourceFilter() { return yearFilter; } public void setSourceFilter(String sourceFilter) { this.sourceFilter = sourceFilter; } public String getTocBookId() { return tocBookId; } public void setTocBookId(String tocBookId) { this.tocBookId = tocBookId; } public int getBookNumber() { return bookNumber; } public void setBookNumber(int bookNumber) { this.bookNumber = bookNumber; } public List<DBBook> getCompleteBookList() { return completeBookList; } public void loadBooks(){ if(this.completeBookList == null){ this.forceLoadBooks(); this.filteringMessage = null; } } public void forceLoadBooks(){ logger.debug("force loadBooks"); this.loadSectionsVersion(); this.completeBookList = new ArrayList<DBBook>(); if(getSessionBean().getUser() != null){ logger.debug("loading book list"); // === load book table from db == for(DBBook book : DBService.getInstance().getBooks()){ // set editor and date (current version) book.setCurrentSectionVersion(sectionVersionMap.get(book.getId())); this.completeBookList.add(book); } this.setBookNumber(this.completeBookList.size()); } sortByBookIdUp(); //bookId ascend as default sorting // Note that every sortXYZ() function has filter() in it, so it will also force reload filteredList and displayList } private void loadSectionsVersion(){ this.sectionVersionMap = new HashMap<String, DBSectionVersion>(); try { for(DBSectionVersion sv : DBService.getInstance().getSectionVersionList()){ this.sectionVersionMap.put(sv.getBooks_id(), sv); } } catch (Exception e) { addMsg("There is an internal error: " + e.getLocalizedMessage()); e.printStackTrace(); } } public void setTocCorrection() { String tocBookId = this.getTocBookId(); logger.debug("tocFinishedBookId=" + tocBookId); try { // update toc correction status to DB DBService.getInstance().updateTocCorrection(tocBookId, "1"); // update toc correction status DBService.getInstance().getBook(tocBookId).setTocCorrection("1"); }catch (Exception e) { addMsg("There is an internal error: " + e.getLocalizedMessage()); e.printStackTrace(); } //logger.debug("toc_correction:"+DBService.getInstance().getBook(tocBookId).getTocCorrection()); } public void unSetTocCorrection() { String tocBookId = this.getTocBookId(); logger.debug("tocFinishedBookId=" + tocBookId); try { DBService.getInstance().updateTocCorrection(tocBookId, "0"); DBService.getInstance().getBook(tocBookId).setTocCorrection("0"); }catch (Exception e) { addMsg("There is an internal error: " + e.getLocalizedMessage()); e.printStackTrace(); } } public void saveComment() { String bookComment = getParameter("bookComment"); String currentBookId = getParameter("currentBookId"); logger.debug("saveComment. currentBookId=" + currentBookId + ", bookComment: "+ bookComment); try { DBService.getInstance().updateComment(currentBookId, bookComment); //DBService.getInstance().getBook(currentBookId).setComments(bookComment); } catch (Exception e) { addMsg("There is an internal error: " + e.getLocalizedMessage()); e.printStackTrace(); } } public void sortByBookIdUp() { Collections.sort(this.completeBookList, new SortBooksByBookId()); filter(); } public void sortByBookIdDown() { Collections.sort(this.completeBookList, new SortBooksByBookId()); Collections.reverse(completeBookList); filter(); } public void sortByBookNameUp(){ Collections.sort(this.completeBookList, new SortBooksByName()); filter(); } public void sortByBookNameDown(){ Collections.sort(this.completeBookList, new SortBooksByName()); Collections.reverse(completeBookList); filter(); } public void sortByLevel1Up(){ Collections.sort(this.completeBookList, new SortBooksByLevel1()); filter(); } public void sortByLevel1Down(){ Collections.sort(this.completeBookList, new SortBooksByLevel1()); Collections.reverse(completeBookList); filter(); } public void sortByLevel2Up(){ Collections.sort(this.completeBookList, new SortBooksByLevel2()); filter(); } public void sortByLevel2Down(){ Collections.sort(this.completeBookList, new SortBooksByLevel2()); Collections.reverse(completeBookList); filter(); } public void sortByPeriodUp(){ Collections.sort(this.completeBookList, new SortBooksByPeriod()); filter(); } public void sortByPeriodDown(){ Collections.sort(this.completeBookList, new SortBooksByPeriod()); Collections.reverse(completeBookList); filter(); } public void sortByAdminTypeUp(){ Collections.sort(this.completeBookList, new SortBooksByAdminType()); filter(); } public void sortByAdminTypeDown(){ Collections.sort(this.completeBookList, new SortBooksByAdminType()); Collections.reverse(completeBookList); filter(); } public void sortByStartYearUp(){ Collections.sort(this.completeBookList, new SortBooksByStartYear()); filter(); } public void sortByStartYearDown(){ Collections.sort(this.completeBookList, new SortBooksByStartYear()); Collections.reverse(completeBookList); filter(); } public void sortByDynastyUp(){ Collections.sort(this.completeBookList, new SortBooksByDynasty()); filter(); } public void sortByDynastyDown(){ Collections.sort(this.completeBookList, new SortBooksByDynasty()); Collections.reverse(completeBookList); filter(); } public void sortByEditionUp(){ Collections.sort(this.completeBookList, new SortBooksByEdition()); filter(); } public void sortByEditionDown(){ Collections.sort(this.completeBookList, new SortBooksByEdition()); Collections.reverse(completeBookList); filter(); } public void sortByEditorUp(){ Collections.sort(this.completeBookList, new SortBooksByEditor()); filter(); } public void sortByEditorDown(){ Collections.sort(this.completeBookList, new SortBooksByEditor()); Collections.reverse(completeBookList); filter(); } public void sortByDateUp(){ Collections.sort(this.completeBookList, new SortBooksByDate()); filter(); } public void sortByDateDown(){ Collections.sort(this.completeBookList, new SortBooksByDate()); Collections.reverse(completeBookList); filter(); } public void sortByTocCorrectionUp(){ Collections.sort(this.completeBookList, new SortBooksByTocCorrection()); filter(); } public void sortByTocCorrectionDown(){ Collections.sort(this.completeBookList, new SortBooksByTocCorrection()); Collections.reverse(completeBookList); filter(); } public void sortByYearUp(){ Collections.sort(this.completeBookList, new SortBooksByYear()); filter(); } public void sortByYearDown(){ Collections.sort(this.completeBookList, new SortBooksByYear()); Collections.reverse(completeBookList); filter(); } public void sortBySourceUp(){ Collections.sort(this.completeBookList, new SortBooksBySource()); filter(); } public void sortBySourceDown(){ Collections.sort(this.completeBookList, new SortBooksBySource()); Collections.reverse(completeBookList); 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; } public void firstPage() { this.paginator.first(); this.updateCurrentBooks(); } public void lastPage() { this.paginator.last(); this.updateCurrentBooks(); } public void fastForward() { this.paginator.fastForward(); this.updateCurrentBooks(); } public void fastRewind() { this.paginator.fastRewind(); this.updateCurrentBooks(); } public void previousPage() { this.paginator.previous(); this.updateCurrentBooks(); } public void nextPage() { this.paginator.next(); this.updateCurrentBooks(); } public DataPaginator getPaginator() { return paginator; } public void setPaginator(DataPaginator paginator) { this.paginator = paginator; } public String getFilteringMessage() { return filteringMessage; } public void setFilteringMessage(String filteringMessage) { this.filteringMessage = filteringMessage; } public String getLastEditorFilter() { return lastEditorFilter; } public void setLastEditorFilter(String lastEditorFilter) { this.lastEditorFilter = lastEditorFilter; } public String getEditTimeFilter() { return editTimeFilter; } public void setEditTimeFilter(String editTimeFilter) { this.editTimeFilter = editTimeFilter; } }