001 package org.apache.myfaces.tobago.model; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020 import org.apache.commons.lang.StringUtils; 021 import org.apache.myfaces.tobago.event.SortActionEvent; 022 import org.slf4j.Logger; 023 import org.slf4j.LoggerFactory; 024 025 import javax.faces.component.UIColumn; 026 import java.io.Serializable; 027 import java.util.ArrayList; 028 import java.util.List; 029 030 // TODO find a better solution for this 031 public class SheetState implements Serializable { 032 private static final long serialVersionUID = 7765536344426661777L; 033 private static final Logger LOG = LoggerFactory.getLogger(SheetState.class); 034 public static final String SEPARATOR = ","; 035 036 private int first = -1; 037 private String sortedColumnId; 038 private boolean ascending; 039 private String columnWidths; 040 private List<Integer> selectedRows; 041 private Integer[] scrollPosition; 042 043 public SheetState() { 044 resetSelected(); 045 } 046 047 public void resetSelected() { 048 selectedRows = new ArrayList<Integer>(); 049 } 050 051 public List<Integer> getSelectedRows() { 052 return selectedRows; 053 } 054 055 public void setSelectedRows(List<Integer> selectedRows) { 056 assert selectedRows != null; 057 this.selectedRows = selectedRows; 058 } 059 060 public String getSortedColumnId() { 061 return sortedColumnId; 062 } 063 064 public void setSortedColumnId(String sortedColumnId) { 065 this.sortedColumnId = sortedColumnId; 066 } 067 068 public boolean isAscending() { 069 return ascending; 070 } 071 072 public void setAscending(boolean ascending) { 073 this.ascending = ascending; 074 } 075 076 public String getColumnWidths() { 077 return columnWidths; 078 } 079 080 public void setColumnWidths(String columnWidths) { 081 this.columnWidths = columnWidths; 082 } 083 084 public int getFirst() { 085 return first; 086 } 087 088 public void setFirst(int first) { 089 this.first = first; 090 } 091 092 public void updateSortState(SortActionEvent sortEvent) { 093 094 UIColumn actualColumn = sortEvent.getColumn(); 095 096 if (actualColumn.getId().equals(sortedColumnId)) { 097 ascending = !ascending; 098 } else { 099 ascending = true; 100 sortedColumnId = actualColumn.getId(); 101 } 102 } 103 104 public Integer[] getScrollPosition() { 105 return scrollPosition; 106 } 107 108 public void setScrollPosition(Integer[] scrollPosition) { 109 this.scrollPosition = scrollPosition; 110 } 111 112 public static Integer[] parseScrollPosition(String value) { 113 Integer[] position = null; 114 if (!StringUtils.isBlank(value)) { 115 int sep = value.indexOf(";"); 116 if (LOG.isInfoEnabled()) { 117 LOG.info("value = \"" + value + "\" sep = " + sep + ""); 118 } 119 if (sep == -1) { 120 throw new NumberFormatException(value); 121 } 122 int left = Integer.parseInt(value.substring(0, sep)); 123 int top = Integer.parseInt(value.substring(sep + 1)); 124 position = new Integer[2]; 125 position[0] = left; 126 position[1] = top; 127 } 128 return position; 129 } 130 }