You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2008/09/30 15:22:16 UTC

svn commit: r700456 - in /labs/magma/trunk/foundation-i18n: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/magma/ src/main/java/org/apache/magma/i18n/ src/main/java/org/apache/magma/i18n/formatter...

Author: simoneg
Date: Tue Sep 30 06:22:13 2008
New Revision: 700456

URL: http://svn.apache.org/viewvc?rev=700456&view=rev
Log:
LABS-178 : this package supports i18n of localizable strings

Added:
    labs/magma/trunk/foundation-i18n/pom.xml
    labs/magma/trunk/foundation-i18n/src/
    labs/magma/trunk/foundation-i18n/src/main/
    labs/magma/trunk/foundation-i18n/src/main/java/
    labs/magma/trunk/foundation-i18n/src/main/java/org/
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormatterInPropertyInfo.aj
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormattingInHandler.aj
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/ContextMatrix.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/CurrentLocale.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Format.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatter.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattersInViewUtils.aj
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattingToHandler.aj
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocaleHolder.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocalizeLocalizableString.aj
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/NilFormatter.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DateFormatter.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DoubleFormatter.java
    labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/EnumFormatter.java
    labs/magma/trunk/foundation-i18n/src/main/resources/
    labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/
    labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/services/
    labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/services/org.apache.magma.i18n.Formatter
    labs/magma/trunk/foundation-i18n/src/test/
    labs/magma/trunk/foundation-i18n/src/test/java/
    labs/magma/trunk/foundation-i18n/src/test/java/org/
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/FormatOnBeanTest.java
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/MatchingTest.java
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/NormalizationTest.java
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DateFormatterFormatTest.java
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DoubleFormatterTest.java
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.java
    labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.java
    labs/magma/trunk/foundation-i18n/src/test/resources/
    labs/magma/trunk/foundation-i18n/target-eclipse/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/conversion/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormatterInPropertyInfo.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormattingInHandler.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/ContextMatrix.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/CurrentLocale.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Format.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatter.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatters.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattersInViewUtils.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattingToHandler.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocaleHolder.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocalizeLocalizableString.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/NilFormatter.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DateFormatter.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DoubleFormatter.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/EnumFormatter.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/FormatOnBeanTest.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/MatchingTest.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/NormalizationTest.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest$Check.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest$Check.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.class   (with props)
    labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.class   (with props)

Added: labs/magma/trunk/foundation-i18n/pom.xml
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/pom.xml?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/pom.xml (added)
+++ labs/magma/trunk/foundation-i18n/pom.xml Tue Sep 30 06:22:13 2008
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <parent>
+    <artifactId>magma-parent</artifactId>
+    <groupId>org.apache.magma</groupId>
+    <version>1</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.magma</groupId>
+  <artifactId>foundation-i18n</artifactId>
+  <name>Magma Foundation Internationalization</name>
+  <version>0.0.1-SNAPSHOT</version>
+  <description>Offers internationalization aspects and locale aware converters</description>
+  <packaging>magma</packaging>
+  <build>
+  	<plugins>
+  		<plugin>
+  			<groupId>org.apache.magma.tools</groupId>
+  			<artifactId>maven-magma-plugin</artifactId>
+  			<extensions>true</extensions>
+  		</plugin>
+  	</plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.magma</groupId>
+      <artifactId>foundation-basics</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.magma</groupId>
+      <artifactId>foundation-conversion</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.5</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.magma</groupId>
+      <artifactId>foundation-beans-view</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormatterInPropertyInfo.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormatterInPropertyInfo.aj?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormatterInPropertyInfo.aj (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormatterInPropertyInfo.aj Tue Sep 30 06:22:13 2008
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.magma.i18n;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import org.apache.magma.conversion.AddConverterInPropertyInfo;
+
+import org.apache.magma.beans.PropertyInfo;
+
+public aspect AddFormatterInPropertyInfo {
+
+	declare precedence : AddFormatterInPropertyInfo, AddConverterInPropertyInfo;
+	
+	private Formatter PropertyInfo.formatter = null;
+
+	public Formatter PropertyInfo.getFormatter() {
+		return this.formatter;
+	}
+	
+	after(PropertyInfo info, PropertyDescriptor desc) : 
+		execution(* PropertyInfo.init(PropertyDescriptor, Class)) && target(info) && args(desc,..) {
+		if (info.getType() == null) return;
+		
+		Method readMethod = desc.getReadMethod();
+		if (readMethod == null) return;
+		Format annotation = readMethod.getAnnotation(Format.class);
+		Formatter formatter = null;
+		if (annotation != null) {
+			formatter = Formatters.getFormatterFor(annotation, info.getType());
+		} else {
+			formatter = Formatters.getFormatterFor(info.getType());
+		}
+		if (formatter != null) {
+			info.formatter = formatter;
+		}
+		
+		if (info.formatter != null) {
+			info.alterMaximumStringSize(info.formatter.getMaximumStringSize());
+		}
+	}
+	
+	String around(PropertyInfo info, Object value) : 
+		execution(String PropertyInfo.toUser(Object)) && 
+		this(info) && args(value) {
+		if (info.formatter != null) {
+			return info.formatter.toString(value);
+		}
+		return proceed(info, value);
+	}
+	
+		
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormattingInHandler.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormattingInHandler.aj?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormattingInHandler.aj (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/AddFormattingInHandler.aj Tue Sep 30 06:22:13 2008
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.magma.i18n;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.BeanHandler;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.conversion.ConversionException;
+
+public privileged aspect AddFormattingInHandler {
+
+	private Map<String,String> BeanHandler.formattedValues = new HashMap<String,String>();
+	private Set<String> BeanHandler.formattedExplicitlySet = new HashSet<String>();
+	
+	public void BeanHandler.setFormattedStringValue(String field, String value) {
+		PropertyInfo property = data.getProperty(field);
+		if (property == null) throw new MagmaException("Cannot find a property named {0} in class {1}", field, bean.getClass().getName());
+		if (property.getFormatter() == null) {
+			this.setStringValue(field, value);
+			return;
+		}
+		if (!property.isWriteable()) throw new MagmaException("Property {0} is read only in class {1}", field, bean.getClass().getName());
+		formattedExplicitlySet.add(field);
+		formattedValues.put(field, value);
+	}
+	
+	public void BeanHandler.setFormattedStringValues(Map<String, String> values) {
+		for (Map.Entry<String, String> entry : values.entrySet()) {
+			setFormattedStringValue(entry.getKey(), entry.getValue());
+		}
+	}
+
+	public String BeanHandler.getFormattedStringValue(String field) {
+		PropertyInfo property = data.getProperty(field);
+		if (property == null) throw new MagmaException("Cannot find a proprty named {0} in class {1}", field, bean.getClass().getName());
+		if (property.getFormatter() == null) {
+			return this.getStringValue(field);
+		}		
+		if (!property.isReadable()) throw new MagmaException("Property {0} is not readable in class {1}", field, bean.getClass().getName());
+		return formattedValues.get(field);
+	}
+	
+	public void BeanHandler.rollbackFormattedStringValues() {
+		this.formattedValues.clear();
+		Set<String> names = this.data.getPropertyNames();
+		for (String name : names) {
+			PropertyInfo property = this.data.getProperty(name);
+			Object val = this.values.get(name);
+			if (val != null) {
+				Formatter form = property.getFormatter();
+				if (form != null) {
+					this.formattedValues.put(name, form.toString(val));
+				} else {
+					this.formattedValues.put(name, this.getStringValue(name));
+				}
+			} else {
+				this.formattedValues.put(name, "");
+			}
+		}		
+	}
+	
+	public void BeanHandler.commitFormattedStringValues() {
+		ConversionException exc = null;
+		for (String name : formattedExplicitlySet) {
+			PropertyInfo property = data.getProperty(name);
+			String val = formattedValues.get(name);
+			if (!property.isWriteable()) continue;
+			Formatter form = property.getFormatter();
+			if (form != null) {
+				try {
+					setValue(name, form.fromString(val));
+				} catch (ConversionException e) {
+					e.setSubject(property);
+					if (exc == null) {
+						exc = e;
+					} else {
+						exc.join(e);
+					}
+				}
+			} else {
+				setStringValue(name, val);
+			}
+		}	
+		if (exc != null) throw exc;
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/ContextMatrix.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/ContextMatrix.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/ContextMatrix.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/ContextMatrix.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,50 @@
+package org.apache.magma.i18n;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.apache.magma.basics.LocalizationContext;
+
+public class ContextMatrix {
+
+	private String[] parts;
+	private String value;
+
+	public ContextMatrix(String key, String value) {
+		StringTokenizer stok = new StringTokenizer(key, ".");
+		List<String> parts = new ArrayList<String>();
+		while (stok.hasMoreElements()) {
+			parts.add(stok.nextToken());
+		}
+		this.parts = parts.toArray(new String[parts.size()]);
+		this.value = value;
+	}
+
+	public String getMainDiscriminator() {
+		return parts[parts.length - 1];
+	}
+
+	public int getScore(LocalizationContext mc) {
+		//int maxscore = (mc.size() * (mc.size() + 1)) / 2;
+		int total = 0;
+		int upto = 0;
+		int pos = 0;
+		for (String string : mc) {
+			pos++;
+			if (parts[upto].equals(string)) {
+				upto++;
+				total += pos;
+				if (upto == parts.length) return total;
+			}
+		}
+		return 0;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/CurrentLocale.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/CurrentLocale.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/CurrentLocale.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/CurrentLocale.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,48 @@
+package org.apache.magma.i18n;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.basics.LocalizationContext;
+
+
+public class CurrentLocale {
+
+	private static Map<Locale, LocaleHolder> holders = new HashMap<Locale, LocaleHolder>();
+	
+	private static ThreadLocal<LocaleHolder> current = new ThreadLocal<LocaleHolder>();
+	
+	public static void setLocale(Locale locale) {
+		LocaleHolder holder = holders.get(locale);
+		if (holder == null) {
+			synchronized (holders) {
+				holder = holders.get(locale);
+				if (holder == null) {
+					holder = new LocaleHolder(locale);
+					// do not cache while in developement
+					if (!System.getProperty("magma.env", "none").equals("devel")) {
+						holders.put(locale, holder);
+					}
+				}
+			}
+		}
+		current.set(holder);
+	}
+	
+	public static String convert(String string) {
+		LocaleHolder holder = current.get();
+		if (holder == null) return string;
+		return holder.getMessage(LocalizationContext.current(), string);
+	}
+
+	public static Locale getLocale() {
+		LocaleHolder holder = current.get();
+		if (holder == null) {
+			return Locale.getDefault();
+		}
+		return holder.getLocale();
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Format.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Format.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Format.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Format.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,15 @@
+package org.apache.magma.i18n;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface Format {
+
+	public Class<? extends Formatter<?>> type() default NilFormatter.class;
+	public String format() default "default";
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatter.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatter.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatter.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,11 @@
+package org.apache.magma.i18n;
+
+import org.apache.magma.conversion.Converter;
+
+public interface Formatter<T> extends Converter<T> {
+
+	public void setFormat(String format);
+	
+	public Formatter<T> buildDefault(Class<? extends T> clazz);
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,42 @@
+package org.apache.magma.i18n;
+
+import java.util.ServiceLoader;
+
+import org.apache.commons.beanutils.MethodUtils;
+import org.apache.magma.basics.utils.AnnotationToInstance;
+
+public class Formatters {
+
+	public static Formatter getFormatterFor(Format ann, Class<?> type) {
+		Class<? extends Formatter> formclass = ann.type();
+		Formatter ret = null;
+		if (formclass.equals(NilFormatter.class)) {
+			ret = getFormatterFor(type);
+		} else {
+			try {
+				ret = formclass.newInstance();
+			} catch (InstantiationException e) {
+				return null;
+			} catch (IllegalAccessException e) {
+				return null;
+			}
+		}
+		setupFormatter(ann, ret);
+		return ret;
+	}
+
+	public static void setupFormatter(Format annotation, Formatter ret) {
+		AnnotationToInstance.setup(annotation, ret);
+	}
+
+	public static <T> Formatter<T> getFormatterFor(Class<T> type) {
+		Class simpletype = MethodUtils.toNonPrimitiveClass(type);
+		ServiceLoader<Formatter> loader = ServiceLoader.load(Formatter.class);
+		for (Formatter formatter : loader) {
+			if (formatter.converts(simpletype)) return formatter.buildDefault(type);
+		}
+		return null;
+	}	
+	
+
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattersInViewUtils.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattersInViewUtils.aj?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattersInViewUtils.aj (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattersInViewUtils.aj Tue Sep 30 06:22:13 2008
@@ -0,0 +1,19 @@
+package org.apache.magma.i18n;
+
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.view.tree.ViewUtils;
+
+public aspect HookFormattersInViewUtils {
+
+	String around(MagmaBeanSupport bean, PropertyInfo property, Object value) : 
+		execution(public static String ViewUtils.getStringValue(MagmaBeanSupport,PropertyInfo,Object))
+	    && args(bean, property, value) {
+		Formatter form = property.getFormatter();
+		if (form != null) {
+			return form.toString(value);
+		} else {
+			return proceed(bean, property, value);
+		}
+	}
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattingToHandler.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattingToHandler.aj?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattingToHandler.aj (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/HookFormattingToHandler.aj Tue Sep 30 06:22:13 2008
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.magma.i18n;
+
+import org.apache.magma.beans.BeanHandler;
+import org.apache.magma.conversion.HookConversionToHandler;
+
+public aspect HookFormattingToHandler {
+
+	declare precedence : HookFormattingToHandler, HookConversionToHandler;
+	
+	after(BeanHandler handler) : execution(public void BeanHandler.rollback()) && this(handler) {
+		handler.rollbackFormattedStringValues();
+	}
+	
+	before(BeanHandler handler) : execution(public void BeanHandler.commit()) && this(handler) {
+		handler.commitFormattedStringValues();
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocaleHolder.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocaleHolder.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocaleHolder.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocaleHolder.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,133 @@
+package org.apache.magma.i18n;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.magma.basics.LocalizationContext;
+import org.apache.magma.settings.SettingsHolder;
+
+public class LocaleHolder {
+
+	private Locale locale;
+	private SettingsHolder messages = new SettingsHolder();
+	
+	private Map<String, List<ContextMatrix>> firstLookup = new HashMap<String, List<ContextMatrix>>();
+	
+	public LocaleHolder(Locale locale) {
+		this.locale = locale;		    
+	    initMessages();
+	    buildMatrix();
+	}
+
+	private void initMessages() {
+		messages.initing();
+		if (messages.isInited()) return;
+		
+		String language = locale.getLanguage();
+	    String country = locale.getCountry();
+	    String variant = locale.getVariant();
+
+	    List<Locale> locales = new ArrayList<Locale>(4);
+	    if (variant.length() > 0) {
+		locales.add(locale);
+	    }
+	    if (country.length() > 0) {
+		locales.add((locales.size() == 0) ?
+			    locale : new Locale(language, country, ""));
+	    }
+	    if (language.length() > 0) {
+		locales.add((locales.size() == 0) ?
+			    locale : new Locale(language, "", ""));
+	    }
+	    locales.add(Locale.ROOT);
+		
+		Collections.reverse(locales);
+		
+		load("META-INF/messages.default.", locales);
+		load("META-INF/messages.", locales);
+		
+		for (Locale locale : locales) {
+			messages.overrideWith(new File("messages." + locale.toString().toLowerCase()));			
+		}
+		messages.inited();
+	}
+
+	private void load(String base, List<Locale> locales) {
+		for (Locale locale : locales) {
+			try {
+				String url = base + locale.toString().toLowerCase() + ".properties";
+				url = url.replaceAll("\\.\\.", ".");
+				Enumeration<URL> resources = getClass().getClassLoader().getResources(url);
+				while (resources.hasMoreElements()) {
+					messages.overrideWith(resources.nextElement());
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}			
+		}
+	}
+	
+	public void buildMatrix() {
+		Map<String, String> all = messages.getAll();
+		for (Map.Entry<String, String> entry : all.entrySet()) {
+			ContextMatrix cm = new ContextMatrix(entry.getKey(), entry.getValue());
+			String discriminator = cm.getMainDiscriminator();
+			List<ContextMatrix> list = firstLookup.get(discriminator);
+			if (list == null) {
+				list = new ArrayList<ContextMatrix>();
+				firstLookup.put(discriminator, list);
+			}
+			list.add(cm);
+		}
+	}
+	
+	
+	public String getMessage(LocalizationContext ct, String original) {
+		String deh = normalize(original);
+		List<ContextMatrix> list = firstLookup.get(deh);
+		if (list == null || list.size() == 0) return original;
+		ct.push(deh);
+		int topscore = 0;
+		ContextMatrix winner = null;
+		for (ContextMatrix cm : list) {
+			int score = cm.getScore(ct);
+			if (score > topscore) {
+				topscore = score;
+				winner = cm;
+			}
+		}
+		ct.pop();
+		if (winner == null) return original;
+		return winner.getValue();
+	}
+	
+	public static String normalize(String original) {
+		StringBuffer sb = new StringBuffer(original.toLowerCase());
+		if (sb.length() > 30) {
+			int add = sb.length() - 30;
+			sb.delete(30, sb.length() - 1);
+			sb.append('+');
+			sb.append(Integer.toString(add));
+		}
+		for (int i = 0; i < sb.length(); i++) {
+			if (!Character.isJavaIdentifierPart(sb.charAt(i))) {
+				sb.setCharAt(i, '_');
+			}
+		}
+		return sb.toString();
+	}
+
+	public Locale getLocale() {
+		return locale;
+	}
+	
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocalizeLocalizableString.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocalizeLocalizableString.aj?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocalizeLocalizableString.aj (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/LocalizeLocalizableString.aj Tue Sep 30 06:22:13 2008
@@ -0,0 +1,16 @@
+package org.apache.magma.i18n;
+
+import java.text.MessageFormat;
+import org.apache.magma.basics.LocalizableString;
+
+public aspect LocalizeLocalizableString {
+
+	String around(LocalizableString ls) : execution(String LocalizableString.toString()) && this(ls) {
+		String message = ls.getMessage();
+		message = CurrentLocale.convert(message);
+		Object[] args = ls.getArgs();
+		if (args == null || args.length == 0) return message;
+		return MessageFormat.format(message, args);
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/NilFormatter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/NilFormatter.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/NilFormatter.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/NilFormatter.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,34 @@
+package org.apache.magma.i18n;
+
+import org.apache.magma.conversion.Converter;
+
+public class NilFormatter implements Formatter<Object>{
+
+	public Formatter<Object> buildDefault(Class<? extends Object> clazz) {
+		return null;
+	}
+
+	public void setFormat(String format) {
+	}
+
+	public Converter<Object> build(Class<? extends Object> clazz) {
+		return null;
+	}
+
+	public boolean converts(Class<?> clazz) {
+		return false;
+	}
+
+	public Object fromString(String value) {
+		return null;
+	}
+
+	public int getMaximumStringSize() {
+		return 0;
+	}
+
+	public String toString(Object value) {
+		return null;
+	}
+
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DateFormatter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DateFormatter.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DateFormatter.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DateFormatter.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,134 @@
+package org.apache.magma.i18n.formatters;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.conversion.ConversionException;
+import org.apache.magma.conversion.DateConverter;
+import org.apache.magma.i18n.CurrentLocale;
+import org.apache.magma.i18n.Formatter;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class DateFormatter extends DateConverter implements Formatter<Date> {
+
+	private String customFormat = "default";
+	
+	// For format values, -1 means no display, -2 means not parsed
+	private int dateFormat = -1;
+	private int timeFormat = -1;
+	
+	public String toString(Date value) {
+		if (value == null) return "";
+		DateFormat formatter = getFormatter();
+		return formatter.format(value);
+	}
+	
+	@Override
+	public Date fromString(String value) {
+		if (value == null || value.length() == 0) return null;
+		DateFormat formatter = getFormatter();
+		formatter.setLenient(false);
+		try {
+			return formatter.parse(value);
+		} catch (ParseException e) {
+			throw new ConversionException(parsingError, e);
+		}
+	}
+
+	protected DateFormat getFormatter() {
+		Locale locale = CurrentLocale.getLocale();
+		if (customFormat != null) {
+			if (customFormat.equals("default")) {
+				String myformat = new LocalizableString("date_format").toString();
+				if (myformat.toString().endsWith("date_format")) {
+					return DateFormat.getDateInstance(DateFormat.SHORT, locale);									
+				} else {
+					return new SimpleDateFormat(myformat, locale);					
+				}
+			} else {
+				return new SimpleDateFormat(customFormat, locale);
+			}
+		} else {
+			if (timeFormat >= 0 && dateFormat >= 0) {
+				return DateFormat.getDateTimeInstance(dateFormat, timeFormat, locale);
+			} else if (dateFormat >= 0) {
+				return DateFormat.getDateInstance(dateFormat, locale);				
+			} else if (timeFormat >= 0) {
+				return DateFormat.getTimeInstance(timeFormat, locale);								
+			} else {
+				throw new MagmaException("Date formatter has inconsistent configuration");
+			}
+		}
+	}
+
+	public void setFormat(String format) {
+		if (format.equals("default")) {
+			this.customFormat = "default";
+			return;
+		}
+		this.customFormat = null;
+		this.dateFormat = checkForFormat(format);
+		if (dateFormat != -2) {
+			if (format.indexOf(',') != -1) {
+				format = format.substring(format.indexOf(',') + 1);
+			} else {
+				return;
+			}
+		}
+		this.timeFormat = checkForFormat(format);
+		if (timeFormat != -2) {
+			if (format.indexOf(',') != -1) {
+				format = format.substring(format.indexOf(',') + 1);
+			} else {
+				return;
+			}
+		}
+		if (this.timeFormat < 0  && this.dateFormat < 0) {
+			try {
+				new SimpleDateFormat(format);
+			} catch (IllegalArgumentException e) {
+				throw new MagmaException(e, "The given pattern {0} is not a valid one, see docs for DateFormatter for more infos", format);
+			}
+			this.customFormat = format;
+		}
+	}
+
+	/**
+	 * @return -1 for explicit none, -2 for unparsable, one of default formats otherwise
+	 */
+	protected int checkForFormat(String format) {
+		format = format.toLowerCase();
+		if (format.startsWith("none") || format.startsWith(",")) return -1;
+		if (format.startsWith("short")) return DateFormat.SHORT;
+		if (format.startsWith("full")) return DateFormat.FULL;
+		if (format.startsWith("long")) return DateFormat.LONG;
+		if (format.startsWith("medium")) return DateFormat.MEDIUM;
+		return -2;
+	}
+
+	public String getCustomFormat() {
+		return customFormat;
+	}
+
+	public int getDateFormat() {
+		return dateFormat;
+	}
+
+	public int getTimeFormat() {
+		return timeFormat;
+	}
+	
+	public DateFormatter buildDefault(Class<? extends Date> clazz) {
+		return this;
+	}
+
+	@Override
+	public int getMaximumStringSize() {
+		return this.toString(new Date(1230764399999l)).length();
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DoubleFormatter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DoubleFormatter.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DoubleFormatter.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/DoubleFormatter.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,116 @@
+package org.apache.magma.i18n.formatters;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Currency;
+import java.util.Locale;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.conversion.ConversionException;
+import org.apache.magma.conversion.DoubleConverter;
+import org.apache.magma.i18n.CurrentLocale;
+import org.apache.magma.i18n.Formatter;
+
+public class DoubleFormatter extends DoubleConverter implements Formatter<Double> {
+
+	
+	private String myformat = "default";
+	
+	public DoubleFormatter buildDefault(Class<? extends Double> clazz) {
+		DoubleFormatter ret = (DoubleFormatter)super.build(clazz);
+		ret.setFormat(myformat);
+		return ret;
+	}
+
+	public void setFormat(String format) {
+		myformat = format;
+	}
+
+	public String toString(Double value) {
+		if (value == null) return "";
+		NumberFormat formatter = getFormatter(getFormatterName());
+		if (formatter == null) return super.toString(value);
+		return formatter.format(value);
+	}
+	
+	@Override
+	public Double fromString(String value) {
+		if (value == null || value.length() == 0) return onNative ? 0d : null;
+		String formattername = getFormatterName();
+		NumberFormat formatter = getFormatter(formattername);
+		if (formatter == null) return super.fromString(value);
+		try {
+			return formatter.parse(value).doubleValue();
+		} catch (ParseException e) {
+			// Try to clean it up and do a row parse, just in case of currencies
+			if (formattername.toLowerCase().startsWith("currency")) {
+				value = numberTrim(value);
+				if (value.length() > 0) {
+					formatter = getFormatter(null);
+					try {
+						return formatter.parse(value).doubleValue();
+					} catch (ParseException e1) {
+						throw new ConversionException(parsingError, e1);						
+					}
+				}
+			}
+			throw new ConversionException(parsingError, e);
+		}
+	}
+
+	private String numberTrim(String value) {
+		value = value.trim();
+		while (value.length() > 0 && 
+				!Character.isDigit(value.charAt(0)) &&
+				value.charAt(0) != '-') value = value.substring(1);
+		while (value.length() > 0 && !Character.isDigit(value.charAt(value.length() - 1))) value = value.substring(0,value.length() - 1);
+		return value;
+	}
+
+	public String getFormatterName() {
+		String useformat = this.myformat;
+		if (this.myformat.toLowerCase().equals("default")) {
+			useformat = new LocalizableString("double_format").toString();
+			if (useformat.toString().endsWith("double_format")) {
+				return null;									
+			}
+		}
+		return useformat;
+	}
+	
+	public NumberFormat getFormatter(String useformat) {
+		Locale locale = CurrentLocale.getLocale();
+		if (useformat == null) {
+			return NumberFormat.getInstance(locale);
+		}
+		if (useformat.equalsIgnoreCase("scientific")) {
+			return null;
+		}
+		if (useformat.toLowerCase().startsWith("currency")) {
+			NumberFormat instance = NumberFormat.getCurrencyInstance(locale);
+			if (instance instanceof DecimalFormat) {
+				DecimalFormat df = (DecimalFormat) instance;
+				df.setCurrency(Currency.getInstance(useformat.substring(9).toUpperCase()));
+			}
+			return instance;
+		} else if (useformat.toLowerCase().startsWith("percent")) {
+			NumberFormat instance = NumberFormat.getPercentInstance(locale);
+			if (useformat.length() > 7) {
+				if (instance instanceof DecimalFormat) {
+					DecimalFormat df = (DecimalFormat) instance;
+					df.setMaximumFractionDigits(Integer.valueOf(useformat.substring(8)));
+				}
+			}
+			return instance;
+		} else {
+			NumberFormat instance = NumberFormat.getInstance(locale);
+			if (instance instanceof DecimalFormat) {
+				DecimalFormat df = (DecimalFormat) instance;
+				df.applyPattern(useformat);
+			}
+			return instance;
+		}
+	}
+
+}

Added: labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/EnumFormatter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/EnumFormatter.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/EnumFormatter.java (added)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/formatters/EnumFormatter.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,29 @@
+package org.apache.magma.i18n.formatters;
+
+import org.apache.magma.conversion.EnumConverter;
+import org.apache.magma.i18n.CurrentLocale;
+import org.apache.magma.i18n.Formatter;
+import org.apache.magma.i18n.LocaleHolder;
+
+public class EnumFormatter extends EnumConverter implements Formatter<Enum> {
+
+	public EnumFormatter() {
+		
+	}
+	
+	public EnumFormatter(Class<? extends Enum> clazz) {
+		super(clazz);
+	}
+
+	public EnumFormatter buildDefault(Class<? extends Enum> clazz) {
+		return new EnumFormatter(clazz);
+	}
+
+	public void setFormat(String format) {
+	}
+
+	public String toString(Enum value) {
+		return CurrentLocale.convert(super.toString(value));
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/services/org.apache.magma.i18n.Formatter
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/services/org.apache.magma.i18n.Formatter?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/services/org.apache.magma.i18n.Formatter (added)
+++ labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/services/org.apache.magma.i18n.Formatter Tue Sep 30 06:22:13 2008
@@ -0,0 +1,17 @@
+#Licensed to the Apache Software Foundation (ASF) under one or more
+#contributor license agreements.  See the NOTICE file distributed with
+#this work for additional information regarding copyright ownership.
+#The ASF licenses this file to You 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.
+org.apache.magma.i18n.formatters.DateFormatter
+org.apache.magma.i18n.formatters.DoubleFormatter
+org.apache.magma.i18n.formatters.EnumFormatter

Added: labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/FormatOnBeanTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/FormatOnBeanTest.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/FormatOnBeanTest.java (added)
+++ labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/FormatOnBeanTest.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,62 @@
+package org.apache.magma.i18n;
+
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+import org.apache.magma.beans.BeanData;
+import org.apache.magma.beans.BeanHandler;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.i18n.formatters.DateFormatter;
+import org.apache.magma.i18n.teststuff.ExplicitlyFormattedBean;
+import org.apache.magma.i18n.teststuff.ImplicitlyFormattedBean;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import com.sun.xml.internal.bind.v2.runtime.property.Property;
+
+public class FormatOnBeanTest {
+
+	@Test
+	public void implicitFormat() throws Exception {
+		ImplicitlyFormattedBean b = new ImplicitlyFormattedBean();
+
+		BeanData bd = b.beanData();
+		PropertyInfo pi = bd.getProperty("birthday");
+		assertNotNull(pi.getFormatter());
+		assertEquals(DateFormatter.class, pi.getFormatter().getClass());
+		
+		CurrentLocale.setLocale(Locale.ITALIAN);
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		b.setBirthday(sdf.parse("1979-03-05"));
+		
+		
+		BeanHandler bh = b.handler();
+		String val = bh.getFormattedStringValue("birthday");
+		assertEquals("05/03/79", val);
+		
+		assertEquals(8, pi.getFormatter().getMaximumStringSize());
+	}
+	
+	@Test
+	public void explicitFormat() throws Exception {
+		ExplicitlyFormattedBean b = new ExplicitlyFormattedBean();
+
+		BeanData bd = b.beanData();
+		PropertyInfo pi = bd.getProperty("birthday");
+		assertNotNull(pi.getFormatter());
+		assertEquals(DateFormatter.class, pi.getFormatter().getClass());
+		assertEquals("HH:mm dd/MM/yyyy", ((DateFormatter)pi.getFormatter()).getCustomFormat());
+		
+		CurrentLocale.setLocale(Locale.ITALIAN);
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		b.setBirthday(sdf.parse("1979-03-05"));
+		
+		
+		BeanHandler bh = b.handler();
+		String val = bh.getFormattedStringValue("birthday");
+		assertEquals("00:00 05/03/1979", val);
+		
+		assertEquals(16, pi.getFormatter().getMaximumStringSize());
+		assertEquals(16, pi.getMaximumStringSize());
+	}
+}

Added: labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/MatchingTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/MatchingTest.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/MatchingTest.java (added)
+++ labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/MatchingTest.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,97 @@
+package org.apache.magma.i18n;
+
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.*;
+
+import org.apache.magma.basics.LocalizationContext;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoint;
+import org.junit.experimental.theories.DataPoints;
+
+public class MatchingTest {
+
+	@Test
+	public void simpleCompleteMatching() throws Exception {
+		LocalizationContext mc = new LocalizationContext();
+		mc.push(getClass());
+		mc.push("test");
+		
+		ContextMatrix cm = new ContextMatrix(getClass().getSimpleName() + ".test", "test");
+		assertThat(cm.getMainDiscriminator(), equalTo("test"));
+		
+		int score = cm.getScore(mc);
+		assertThat(score, equalTo(3));
+	}
+
+	@Test
+	public void simplePartialMatching() throws Exception {
+		LocalizationContext mc = new LocalizationContext();
+		mc.push(getClass());
+		mc.push("test");
+		
+		ContextMatrix cm = new ContextMatrix("test", "test");
+		int score = cm.getScore(mc);
+		assertTrue("Expected a match", score > 0);		
+	}
+	
+	@Test
+	public void simpleNotMatching() throws Exception {
+		LocalizationContext mc = new LocalizationContext();
+		mc.push("test");
+		
+		ContextMatrix cm = new ContextMatrix(getClass().getSimpleName() + ".test", "test");
+		
+		int score = cm.getScore(mc);
+		assertThat(score, equalTo(0));		
+	}
+	
+	@Test
+	public void simpleJumpingMatch() throws Exception {
+		LocalizationContext mc = new LocalizationContext();
+		mc.push("testingthejump");
+		mc.push(getClass());
+		mc.push("test");
+		
+		ContextMatrix cm = new ContextMatrix("testingthejump.test", "test");
+		
+		int score = cm.getScore(mc);
+		assertTrue("Expected a match", score > 0);		
+	}
+	
+	@Test
+	public void betterMatch() throws Exception {
+		LocalizationContext mc = new LocalizationContext();
+		mc.push("testingthejump");
+		mc.push(getClass());
+		mc.push("test");
+		
+		ContextMatrix cm1 = new ContextMatrix("testingthejump.test", "test");
+		int score1 = cm1.getScore(mc);
+		ContextMatrix cm2 = new ContextMatrix("test", "test");
+		int score2 = cm2.getScore(mc);
+		assertTrue(score1 + " is not > than " + score2, score1 > score2);		
+	}
+	
+	@Test
+	public void betterMatchAsPerBug184() throws Exception {
+		LocalizationContext mc = new LocalizationContext();
+		mc.push("CompoundHtmlProducer");
+		mc.push("BeanFormProducer");
+		mc.push("UserBean");
+		mc.push("BeanFormProducer");
+		mc.push("UserBean");
+		mc.push("field1");
+		mc.push("field1");
+		mc.push("field2");
+		mc.push("field2");
+		mc.push("field2");
+		mc.push("key");
+		
+		ContextMatrix cm1 = new ContextMatrix("UserBean.field2", "key");
+		int score1 = cm1.getScore(mc);
+		ContextMatrix cm2 = new ContextMatrix("UserBean.field1", "key");
+		int score2 = cm2.getScore(mc);
+		assertTrue(score1 + " is not > than " + score2, score1 > score2);		
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/NormalizationTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/NormalizationTest.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/NormalizationTest.java (added)
+++ labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/NormalizationTest.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,29 @@
+package org.apache.magma.i18n;
+
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoint;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+import static org.junit.Assert.*;
+
+@RunWith(Theories.class)
+public class NormalizationTest {
+
+	@DataPoint
+	public static String[]
+	SET1 = { "plain", "plain" },
+	SET2 = { "plain_admissible", "plain_admissible"},
+	SET3 = { "plain with space", "plain_with_space"},
+	SET4 = { "numb3r5", "numb3r5"},
+	SET5 = { "anything @#{0}.", "anything____0__"};
+
+	@Theory
+	public void normalization(String[] set) {
+		String orig = set[0];
+		String outcome = set[1];
+		String result = LocaleHolder.normalize(orig);
+		//System.out.println("'" + orig + "' should give '" + outcome + "' not '" + result + "'");
+		assertEquals(outcome, result);
+	}
+}

Added: labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DateFormatterFormatTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DateFormatterFormatTest.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DateFormatterFormatTest.java (added)
+++ labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DateFormatterFormatTest.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,44 @@
+package org.apache.magma.i18n.formatters;
+
+import org.junit.Ignore;
+import org.junit.experimental.theories.DataPoint;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+import static java.text.DateFormat.*;
+import static org.junit.Assert.*;
+
+@RunWith(Theories.class)
+public class DateFormatterFormatTest {
+
+	static class Check {
+		public String format;
+		public String custom;
+		public int dateFormat;
+		public int timeFormat;
+		
+		public Check(String format, String custom, int dateFormat, int timeFormat) {
+			this.format = format;
+			this.custom = custom;
+			this.dateFormat = dateFormat;
+			this.timeFormat = timeFormat;
+		}
+	}
+	
+	@DataPoint
+	public static Check
+	set1 = new Check("default", "default", -1, -1),
+	set2 = new Check("yyyy/MM/dd", "yyyy/MM/dd", -2, -2),
+	set3 = new Check("long", null, LONG, -1),
+	set4 = new Check("none,long", null, -1, LONG);
+	
+	@Theory
+	public void formatText(Check check) {
+		DateFormatter df = new DateFormatter();
+		df.setFormat(check.format);
+		assertEquals(check.custom, df.getCustomFormat());
+		assertEquals(check.dateFormat, df.getDateFormat());
+		assertEquals(check.timeFormat, df.getTimeFormat());
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DoubleFormatterTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DoubleFormatterTest.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DoubleFormatterTest.java (added)
+++ labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/formatters/DoubleFormatterTest.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,90 @@
+package org.apache.magma.i18n.formatters;
+
+import java.util.Locale;
+
+import org.apache.magma.i18n.CurrentLocale;
+import org.junit.experimental.theories.DataPoint;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+import static org.junit.Assert.*;
+
+@RunWith(Theories.class)
+public class DoubleFormatterTest {
+
+	static class Check {
+		public double value;
+		public String format;
+		public String itstring;
+		public String usstring;
+		
+		public boolean checkto = true;
+		public boolean checkfrom = true;
+		
+		public Check(double value, String format, String itstring, String usstring) {
+			this.value = value;
+			this.format = format;
+			this.itstring = itstring;
+			this.usstring = usstring;
+		}
+
+		public Check(double value, String format, String itstring, String usstring, boolean checkto, boolean checkfrom) {
+			this.value = value;
+			this.format = format;
+			this.itstring = itstring;
+			this.usstring = usstring;
+			this.checkto = checkto;
+			this.checkfrom = checkfrom;
+		}
+	
+		
+		
+	}
+	
+	@DataPoint
+	public static Check 
+	set1 = new Check(1d, "default", "1", "1"),
+	set2 = new Check(1.1d, "default", "1,1", "1.1"),
+	set3 = new Check(-1.05d, "default", "-1,05", "-1.05"),
+	set4 = new Check(100000, "default", "100.000", "100,000"),
+	set4b = new Check(100000, "default", "100000", "100000", false, true),
+	set4c = new Check(100000.001, "default", "100.000,001", "100,000.001"),
+	set4d = new Check(100000.001, "default", "100000,001", "100000.001", false, true),
+	set5 = new Check(110000000, "scientific", "1.1E8", "1.1E8"),
+	set5b = new Check(110000, "scientific", "110000.0", "110000.0"),
+	set5c = new Check(0.00000001, "scientific", "1.0E-8", "1.0E-8"),
+	set6 = new Check(0.5d, "percent", "50%", "50%"),
+	set7 = new Check(0.555d, "percent-2", "55,5%", "55.5%"),
+	set8 = new Check(100d, "currency-EUR", "EUR 100,00", "EUR100.00"),
+	set8b = new Check(100d, "currency-EUR", "100,00", "100.00", false, true),
+	set8c = new Check(100d, "currency-EUR", "100", "100", false, true),
+	set8d = new Check(100d, "currency-EUR", "+100 EUR", "+100E", false, true),
+	set8e = new Check(-100d, "currency-EUR", "E-100", "-100E", false, true),
+	set9 = new Check(100.10d, "currency-EUR", "EUR 100,10", "EUR100.10"),
+	set10 = new Check(100d, "##0.00", "100,00", "100.00"),
+	set11 = new Check(0.1d, "#00.00", "00,10", "00.10");
+	
+	@Theory
+	public void doubleFormat(Check check) {
+		DoubleFormatter df = new DoubleFormatter();
+		df.setFormat(check.format);
+		CurrentLocale.setLocale(Locale.ITALIAN);
+		String itTo = check.checkto ? df.toString(check.value) : "";
+		double itFrom = check.checkfrom ? df.fromString(check.itstring) : 0d;
+		CurrentLocale.setLocale(Locale.US);
+		String usTo = check.checkto ? df.toString(check.value) : "";
+		double usFrom = check.checkfrom ? df.fromString(check.usstring) : 0d;
+		
+		if (check.checkto) {
+			assertEquals(check.itstring, itTo);
+			assertEquals(check.usstring, usTo);
+		} 
+		if (check.checkfrom) {
+			assertEquals(check.value, itFrom, 0.001d);
+			assertEquals(check.value, usFrom, 0.001d);
+		}
+	}
+	
+	
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.java (added)
+++ labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,22 @@
+package org.apache.magma.i18n.teststuff;
+
+import java.util.Date;
+
+import org.apache.magma.beans.MagmaBean;
+import org.apache.magma.i18n.Format;
+
+@MagmaBean
+public class ExplicitlyFormattedBean {
+
+	private Date birthday;
+
+	@Format(format="HH:mm dd/MM/yyyy")
+	public Date getBirthday() {
+		return birthday;
+	}
+
+	public void setBirthday(Date birthday) {
+		this.birthday = birthday;
+	}
+	
+}

Added: labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.java?rev=700456&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.java (added)
+++ labs/magma/trunk/foundation-i18n/src/test/java/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.java Tue Sep 30 06:22:13 2008
@@ -0,0 +1,22 @@
+package org.apache.magma.i18n.teststuff;
+
+import java.util.Date;
+
+import org.apache.magma.beans.MagmaBean;
+
+@MagmaBean
+public class ImplicitlyFormattedBean {
+
+	private Date birthday;
+
+	public Date getBirthday() {
+		return birthday;
+	}
+
+	public void setBirthday(Date birthday) {
+		this.birthday = birthday;
+	}
+	
+	
+	
+}

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormatterInPropertyInfo.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormatterInPropertyInfo.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormatterInPropertyInfo.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormattingInHandler.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormattingInHandler.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/AddFormattingInHandler.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/ContextMatrix.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/ContextMatrix.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/ContextMatrix.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/CurrentLocale.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/CurrentLocale.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/CurrentLocale.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Format.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Format.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Format.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatter.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatter.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatter.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatters.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatters.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/Formatters.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattersInViewUtils.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattersInViewUtils.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattersInViewUtils.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattingToHandler.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattingToHandler.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/HookFormattingToHandler.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocaleHolder.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocaleHolder.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocaleHolder.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocalizeLocalizableString.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocalizeLocalizableString.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/LocalizeLocalizableString.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/NilFormatter.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/NilFormatter.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/NilFormatter.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DateFormatter.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DateFormatter.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DateFormatter.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DoubleFormatter.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DoubleFormatter.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/DoubleFormatter.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/EnumFormatter.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/EnumFormatter.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/classes/org/apache/magma/i18n/formatters/EnumFormatter.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/FormatOnBeanTest.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/FormatOnBeanTest.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/FormatOnBeanTest.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/MatchingTest.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/MatchingTest.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/MatchingTest.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/NormalizationTest.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/NormalizationTest.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/NormalizationTest.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest$Check.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest%24Check.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest$Check.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DateFormatterFormatTest.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest$Check.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest%24Check.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest$Check.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/formatters/DoubleFormatterTest.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ExplicitlyFormattedBean.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.class
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.class?rev=700456&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/magma/trunk/foundation-i18n/target-eclipse/test-classes/org/apache/magma/i18n/teststuff/ImplicitlyFormattedBean.class
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org