package org.openswing.swing.pivottable.aggregators.java; import java.util.Calendar; import java.io.Serializable; import java.util.Arrays; /** * <p>Title: OpenSwing Framework</p> * <p>Description: Generic aggregator for row/column fields of a pivot table: * it decodes a String value to a String value, by grouping input values based on their prefix. * * Example: "Alan" -> "A", "Bob" -> "B", "Craig" -> "C". * * Example: if LetterAggregator is initialized as follows: * * addGroup('a','g',"A-G"); * addGroup('h','l',"H-L"); * addGroup('m','q',"M-Q"); * addGroup('r','z',"R-Z"); * * then returned values are: "Alan" -> "A-G", "Bob" -> "A-G", "Hillary" -> "H-L", "Sam" -> "R-Z" * </p> * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p> * * <p> This file is part of OpenSwing Framework. * This library is free software; you can redistribute it and/or * modify it under the terms of the (LGPL) Lesser General Public * License as published by the Free Software Foundation; * * GNU LESSER GENERAL PUBLIC LICENSE * Version 2.1, February 1999 * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * The author may be contacted at: * maurocarniel@tin.it</p> * * @author Mauro Carniel * @version 1.0 */ public class LetterAggregator extends GenericAggregator implements Serializable { char[] fromChars = new char[0]; char[] toChars = new char[0]; String[] groupValues = new String[0]; public LetterAggregator() { } public final void addGroup(char fromChar,char toChar,String groupValue) { char[] aux = new char[fromChars.length+1]; System.arraycopy(fromChars,0,aux,0,fromChars.length); aux[aux.length-1] = Character.toUpperCase(fromChar); fromChars = aux; aux = new char[toChars.length+1]; System.arraycopy(toChars,0,aux,0,toChars.length); aux[aux.length-1] = Character.toUpperCase(toChar); toChars = aux; String[] aux2 = new String[groupValues.length+1]; System.arraycopy(groupValues,0,aux2,0,groupValues.length); aux2[aux2.length-1] = groupValue; groupValues = aux2; } public final Object decodeValue(Object value) { if (value!=null && value.toString().length()>0) { if (fromChars.length==0) return value.toString().toUpperCase().substring(0,1); char c = value.toString().toUpperCase().charAt(0); for(int i=0;i<fromChars.length;i++) if (c>=fromChars[i] && c<=toChars[i]) return groupValues[i]; return value.toString().toUpperCase().substring(0,1); } return value; } public final boolean equals(Object obj) { if (obj.getClass()!=LetterAggregator.class) return false; String s1 = ""; for(int i=0;i<groupValues.length;i++) s1 += groupValues[i]+"_"; String s2 = ""; for(int i=0;i<((LetterAggregator)obj).groupValues.length;i++) s2 += ((LetterAggregator)obj).groupValues[i]+"_"; return s1.equals(s2); } public final int hashCode() { String s1 = ""; for(int i=0;i<groupValues.length;i++) s1 += groupValues[i]+"_"; return s1.hashCode(); } }