001 /* 002 Copyright (C) 2003 Laurent Martelli <laurent@aopsys.com> 003 004 This program is free software; you can redistribute it and/or modify 005 it under the terms of the GNU Lesser General Public License as 006 published by the Free Software Foundation; either version 2 of the 007 License, or (at your option) any later version. 008 009 This program is distributed in the hope that it will be useful, 010 but WITHOUT ANY WARRANTY; without even the implied warranty of 011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 GNU Lesser General Public License for more details. 013 014 You should have received a copy of the GNU Lesser General Public License 015 along with this program; if not, write to the Free Software 016 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ 017 018 package org.objectweb.jac.aspects.gui; 019 020 import java.text.DecimalFormat; 021 import java.text.ParsePosition; 022 import org.apache.log4j.Logger; 023 import org.objectweb.jac.core.rtti.FieldItem; 024 import org.objectweb.jac.core.rtti.MetaItem; 025 import org.objectweb.jac.core.rtti.RttiAC; 026 import org.objectweb.jac.util.Strings; 027 028 public class FloatFormat implements NumberFormat { 029 static Logger logger = Logger.getLogger("gui"); 030 031 protected DecimalFormat format; 032 protected FieldItem field; 033 034 public FloatFormat(FieldItem field) { 035 this.field = field; 036 037 MetaItem type = field!=null?RttiAC.getFieldType(field):null; 038 String formatString = null; 039 if (type!=null) 040 formatString = GuiAC.getFloatFormat(type); 041 else if (field!=null) 042 formatString = GuiAC.getFloatFormat(field); 043 else 044 formatString = GuiAC.getFloatFormat(); 045 046 if (formatString!=null) 047 format = new DecimalFormat(formatString); 048 else 049 logger.error("No format for "+field); 050 } 051 052 public String format(Object value) { 053 return format((Number)value); 054 } 055 056 public String format(Number value) { 057 if (value!=null) 058 return format(value.doubleValue()); 059 else 060 return ""; 061 } 062 063 public String format(double value) { 064 if (format!=null) 065 return format.format(value); 066 else 067 return ""+value; 068 } 069 070 public Object parse(String str, ParsePosition pos) { 071 return parseNumber(str,pos); 072 } 073 074 public Number parseNumber(String str, ParsePosition pos) { 075 String string = str.trim(); 076 077 if (Strings.isEmpty(string)) 078 return null; 079 080 return format.parse(str,pos); 081 } 082 083 public Float parseFloat(String str, ParsePosition pos) { 084 Number n = parseNumber(str,pos); 085 if (n!=null) { 086 return new Float(n.floatValue()); 087 } else { 088 return null; 089 } 090 } 091 092 public Double parseDouble(String str, ParsePosition pos) { 093 Number n = parseNumber(str,pos); 094 if (n!=null) { 095 return new Double(n.doubleValue()); 096 } else { 097 return null; 098 } 099 } 100 } 101