/* * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security). * * 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 egovframework.rte.ptl.mvc.tags.ui.pagination; import java.text.MessageFormat; /** * AbstractPaginationRenderer.java * <p/><b>NOTE:</b><pre> 인터페이스 PaginationRenderer의 구현 추상클래스. * 기본적인 페이징 기능이 구현되어 있으며, 화면에서 아래와 같이 display 된다. * * [처음][이전] 1 2 3 4 5 6 7 8 [다음][마지막] * * 클래스 변수들이 각 element와 매핑이 되는데, * firstPageLabel = [처음] * previousPageLabel = [이전] * currentPageLabel = 현재 페이지 번호 * otherPageLabel = 현재 페이지를 제외한 페이지 번호 * nextPageLabel = [다음] * lastPageLabel = [마지막] * * 클래스 변수값을 AbstractPaginationRenderer를 상속받은 하위 클래스에서 주게 되면, * 페이징 포맷만 프로젝트 UI에 맞춰 커스터마이징 할 수 있다. * 자세한 사항은 개발자 메뉴얼의 개발프레임워크 실행환경/화면처리/MVC/View/Pagination Tag를 참고하라. * </pre> * @author 실행환경 개발팀 함철 * @since 2009.06.01 * @version 1.0 * @see * * <pre> * << 개정이력(Modification Information) >> * * 수정일 수정자 수정내용 * ------- -------- --------------------------- * 2009.05.30 함철 최초 생성 * * </pre> */ public abstract class AbstractPaginationRenderer implements PaginationRenderer { protected String firstPageLabel; protected String previousPageLabel; protected String currentPageLabel; protected String otherPageLabel; protected String nextPageLabel; protected String lastPageLabel; public String renderPagination(PaginationInfo paginationInfo, String jsFunction) { StringBuffer strBuff = new StringBuffer(); int firstPageNo = paginationInfo.getFirstPageNo(); int firstPageNoOnPageList = paginationInfo.getFirstPageNoOnPageList(); int totalPageCount = paginationInfo.getTotalPageCount(); int pageSize = paginationInfo.getPageSize(); int lastPageNoOnPageList = paginationInfo.getLastPageNoOnPageList(); int currentPageNo = paginationInfo.getCurrentPageNo(); int lastPageNo = paginationInfo.getLastPageNo(); if (totalPageCount > pageSize) { if (firstPageNoOnPageList > pageSize) { strBuff.append(MessageFormat.format(firstPageLabel, new Object[] { jsFunction, Integer.toString(firstPageNo) })); strBuff.append(MessageFormat.format(previousPageLabel, new Object[] { jsFunction, Integer.toString(firstPageNoOnPageList - 1) })); } else { strBuff.append(MessageFormat.format(firstPageLabel, new Object[] { jsFunction, Integer.toString(firstPageNo) })); strBuff.append(MessageFormat.format(previousPageLabel, new Object[] { jsFunction, Integer.toString(firstPageNo) })); } } for (int i = firstPageNoOnPageList; i <= lastPageNoOnPageList; i++) { if (i == currentPageNo) { strBuff.append(MessageFormat.format(currentPageLabel, new Object[] { Integer.toString(i) })); } else { strBuff.append(MessageFormat.format(otherPageLabel, new Object[] { jsFunction, Integer.toString(i), Integer.toString(i) })); } } if (totalPageCount > pageSize) { if (lastPageNoOnPageList < totalPageCount) { strBuff.append(MessageFormat.format(nextPageLabel, new Object[] { jsFunction, Integer.toString(firstPageNoOnPageList + pageSize) })); strBuff.append(MessageFormat.format(lastPageLabel, new Object[] { jsFunction, Integer.toString(lastPageNo) })); } else { strBuff.append(MessageFormat.format(nextPageLabel, new Object[] { jsFunction, Integer.toString(lastPageNo) })); strBuff.append(MessageFormat.format(lastPageLabel, new Object[] { jsFunction, Integer.toString(lastPageNo) })); } } return strBuff.toString(); } }