001 /** 002 * ========================================= 003 * LibFormula : a free Java formula library 004 * ========================================= 005 * 006 * Project Info: http://reporting.pentaho.org/libformula/ 007 * 008 * (C) Copyright 2006-2007, by Pentaho Corporation and Contributors. 009 * 010 * This library is free software; you can redistribute it and/or modify it under the terms 011 * of the GNU Lesser General Public License as published by the Free Software Foundation; 012 * either version 2.1 of the License, or (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 015 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 016 * See the GNU Lesser General Public License for more details. 017 * 018 * You should have received a copy of the GNU Lesser General Public License along with this 019 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, 020 * Boston, MA 02111-1307, USA. 021 * 022 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 023 * in the United States and other countries.] 024 * 025 * 026 * ------------ 027 * $Id: TypeRegistry.java 3161 2007-08-13 17:46:03Z mimil $ 028 * ------------ 029 * (C) Copyright 2006-2007, by Pentaho Corporation. 030 */ 031 package org.jfree.formula.typing; 032 033 import java.util.Date; 034 035 import org.jfree.formula.lvalues.TypeValuePair; 036 import org.jfree.formula.typing.sequence.NumberSequence; 037 038 /** 039 * The type registry manages the known value types. 040 * 041 * @author Thomas Morgner 042 */ 043 public interface TypeRegistry 044 { 045 /** 046 * Returns an comparator for the given types. 047 * 048 * @param type1 049 * @param type2 050 * @return 051 */ 052 public ExtendedComparator getComparator(Type type1, Type type2); 053 054 /** 055 * Converts the object of the given type into a number. If the object is not 056 * convertible, a NumberFormatException is thrown. (This conversion is used 057 * by the operator implementations.) 058 * 059 * @param type1 060 * @param value 061 * @return the value as number or ZERO if the value is unconvertible. 062 * @throws TypeConversionException if the type cannot be represented as number. 063 */ 064 public Number convertToNumber (Type type1, Object value) 065 throws TypeConversionException ; 066 067 /** 068 * (This conversion is used by the operator implementations.) 069 * 070 * @param type1 071 * @param value 072 * @return the value as string or an empty string, if the value given is null. 073 * @throws TypeConversionException 074 */ 075 public String convertToText (Type type1, Object value) throws TypeConversionException; 076 077 /** 078 * Converts the object of the given type into a boolean. 079 * 080 * @param type1 081 * @param value 082 * @return The value as Boolean or null. 083 */ 084 public Boolean convertToLogical (Type type1, Object value) throws TypeConversionException; 085 086 /** 087 * Converts the object of the given type into a date. 088 * 089 * @param type1 090 * @param value 091 * @return The value as Date or null. 092 */ 093 public Date convertToDate(Type type1, Object value) throws TypeConversionException; 094 095 public NumberSequence convertToNumberSequence(final Type type, final Object value) throws TypeConversionException; 096 097 /** 098 * Checks, whether the target type would accept the specified value object 099 * and value type. (This conversion is used by the functions.) 100 * 101 * @param targetType 102 * @param valuePair 103 */ 104 public TypeValuePair convertTo(final Type targetType, 105 final TypeValuePair valuePair) throws TypeConversionException; 106 107 public Type guessTypeOfObject(Object o); 108 }