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 2009/05/21 19:06:46 UTC
svn commit: r777178 - in /labs/magma/trunk:
beans-richtext/src/main/resources/META-INF/
beans-richtext/src/main/resources/META-INF/services/
foundation-basics/src/main/java/org/apache/magma/basics/services/
foundation-basics/src/main/java/org/apache/ma...
Author: simoneg
Date: Thu May 21 17:06:45 2009
New Revision: 777178
URL: http://svn.apache.org/viewvc?rev=777178&view=rev
Log:
LABS-366 : new ServiceFinder
Added:
labs/magma/trunk/beans-richtext/src/main/resources/META-INF/magma.default.properties
labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/services/
labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/services/ServiceFinder.java
labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/
labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockService.java
labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl1.java
labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl2.java
labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/ServiceFinderTest.java
labs/magma/trunk/foundation-basics/src/test/resources/
labs/magma/trunk/foundation-basics/src/test/resources/META-INF/
labs/magma/trunk/foundation-basics/src/test/resources/META-INF/magma.properties
labs/magma/trunk/foundation-beans/src/main/resources/META-INF/magma.default.properties
labs/magma/trunk/foundation-database/src/main/resources/META-INF/magma.default.properties
labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/magma.default.properties
Removed:
labs/magma/trunk/beans-richtext/src/main/resources/META-INF/services/
labs/magma/trunk/foundation-beans/src/main/resources/META-INF/services/org.apache.magma.conversion.Converter
labs/magma/trunk/foundation-database/src/main/resources/META-INF/services/
labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/services/
Modified:
labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/Settings.java
labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/SettingsHolder.java
labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java
labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java
Added: labs/magma/trunk/beans-richtext/src/main/resources/META-INF/magma.default.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-richtext/src/main/resources/META-INF/magma.default.properties?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/beans-richtext/src/main/resources/META-INF/magma.default.properties (added)
+++ labs/magma/trunk/beans-richtext/src/main/resources/META-INF/magma.default.properties Thu May 21 17:06:45 2009
@@ -0,0 +1,2 @@
+
+org.apache.magma.conversion.Converter.richtext=org.apache.magma.conversion.richtext.RichTextConverterToString
\ No newline at end of file
Added: labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/services/ServiceFinder.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/services/ServiceFinder.java?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/services/ServiceFinder.java (added)
+++ labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/services/ServiceFinder.java Thu May 21 17:06:45 2009
@@ -0,0 +1,69 @@
+package org.apache.magma.basics.services;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.magma.settings.Settings;
+
+/**
+ * Mimics the Java service system using Settings instead of raw classpath files.
+ *
+ * @author Simone Gianni <si...@apache.org>
+ */
+public class ServiceFinder {
+
+ private static Map<Class<?>, List> providers = new HashMap<Class<?>, List>();
+
+ /**
+ * Find providers of the given class. This searches for settings starting with the class names, for example
+ * if we want to configure providers for the "org.apache.magma.i18n.Formatter" class, we will add the
+ * following settings :
+ *
+ * org.apache.magma.i18n.Formatter.date=org.apache.magma.i18n.formatters.DateFormatter
+ * org.apache.magma.i18n.Formatter.integer=org.apache.magma.i18n.formatters.IntegerFormatter
+ *
+ *
+ * The part following the class name is not important, and is used only to provide settings override.
+ *
+ * @param <T> The class we are searching providers for.
+ * @param clazz The class we are searching providers for.
+ * @return An Iterator (potentially empty) containing providers.
+ */
+ public static <T> Iterator<T> findProviders(Class<T> clazz) {
+ List<T> provider = providers.get(clazz);
+ if (provider != null) {
+ return provider.iterator();
+ }
+
+ provider = new ArrayList<T>();
+
+ String name = clazz.getCanonicalName();
+ Map<String, String> subset = Settings.getPrefix(name);
+ for (Map.Entry<String, String> entry : subset.entrySet()) {
+ String clname = entry.getValue();
+ try {
+ Class<? extends T> provclass = (Class<? extends T>) Class.forName(clname);
+ T newInstance = provclass.newInstance();
+ provider.add(newInstance);
+ } catch (InstantiationException e) {
+ // TODO Log this
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Log this
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ // TODO Log this
+ e.printStackTrace();
+ }
+ }
+ if (Settings.isDeveloperEnv()) {
+ providers.put(clazz, Collections.unmodifiableList(provider));
+ }
+ return provider.iterator();
+ }
+
+}
Modified: labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/Settings.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/Settings.java?rev=777178&r1=777177&r2=777178&view=diff
==============================================================================
--- labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/Settings.java (original)
+++ labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/Settings.java Thu May 21 17:06:45 2009
@@ -89,6 +89,16 @@
}
/**
+ * Retrieves all the setting properties beginning with the given prefix.
+ * @param prefix The prefix to search for.
+ * @return A map with matching setting properties.
+ */
+ public static Map<String, String> getPrefix(String prefix) {
+ if (!holder.isInited()) init();
+ return holder.getPrefix(prefix);
+ }
+
+ /**
* Loads the settings resources.
*/
public static void init() {
Modified: labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/SettingsHolder.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/SettingsHolder.java?rev=777178&r1=777177&r2=777178&view=diff
==============================================================================
--- labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/SettingsHolder.java (original)
+++ labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/SettingsHolder.java Thu May 21 17:06:45 2009
@@ -23,6 +23,7 @@
import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
+import java.util.HashMap;
import java.util.InvalidPropertiesFormatException;
import java.util.Map;
import java.util.Properties;
@@ -135,5 +136,15 @@
public Map<String, String> getAll() {
return Collections.unmodifiableMap((Map) properties);
}
+
+ public Map<String, String> getPrefix(String prefix) {
+ Map<String, String> subset = new HashMap<String, String>();
+ for (Map.Entry<Object, Object> entry : properties.entrySet()) {
+ if (((String)entry.getKey()).startsWith(prefix)) {
+ subset.put((String)entry.getKey(), (String)entry.getValue());
+ }
+ }
+ return Collections.unmodifiableMap(subset);
+ }
}
Added: labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockService.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockService.java?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockService.java (added)
+++ labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockService.java Thu May 21 17:06:45 2009
@@ -0,0 +1,5 @@
+package org.apache.magma.basics.services;
+
+public class MockService {
+
+}
Added: labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl1.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl1.java?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl1.java (added)
+++ labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl1.java Thu May 21 17:06:45 2009
@@ -0,0 +1,5 @@
+package org.apache.magma.basics.services;
+
+public class MockServiceImpl1 extends MockService {
+
+}
Added: labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl2.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl2.java?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl2.java (added)
+++ labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/MockServiceImpl2.java Thu May 21 17:06:45 2009
@@ -0,0 +1,5 @@
+package org.apache.magma.basics.services;
+
+public class MockServiceImpl2 extends MockService {
+
+}
Added: labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/ServiceFinderTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/ServiceFinderTest.java?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/ServiceFinderTest.java (added)
+++ labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/services/ServiceFinderTest.java Thu May 21 17:06:45 2009
@@ -0,0 +1,34 @@
+package org.apache.magma.basics.services;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.junit.Test;
+
+
+public class ServiceFinderTest {
+
+ @Test
+ public void locateServices() throws Exception {
+ Iterator<MockService> found = ServiceFinder.findProviders(MockService.class);
+ assertTrue("Find providers returned empty", found.hasNext());
+
+ List<Class> classes = new ArrayList<Class>();
+ while (found.hasNext()) {
+ classes.add(found.next().getClass());
+ }
+ assertTrue("MockServiceImpl1 not found", classes.contains(MockServiceImpl1.class));
+ assertTrue("MockServiceImpl2 not found", classes.contains(MockServiceImpl1.class));
+ assertEquals("Find providers did not found 2 providers",2, classes.size());
+ }
+
+ @Test
+ public void locateNotExisting() throws Exception {
+ Iterator<ServiceFinderTest> findProviders = ServiceFinder.findProviders(ServiceFinderTest.class);
+ assertFalse("False positive from findProviders", findProviders.hasNext());
+ }
+
+}
Added: labs/magma/trunk/foundation-basics/src/test/resources/META-INF/magma.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/resources/META-INF/magma.properties?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/resources/META-INF/magma.properties (added)
+++ labs/magma/trunk/foundation-basics/src/test/resources/META-INF/magma.properties Thu May 21 17:06:45 2009
@@ -0,0 +1,3 @@
+
+org.apache.magma.basics.services.MockService.impl1=org.apache.magma.basics.services.MockServiceImpl1
+org.apache.magma.basics.services.MockService.impl2=org.apache.magma.basics.services.MockServiceImpl2
\ No newline at end of file
Modified: labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java?rev=777178&r1=777177&r2=777178&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java (original)
+++ labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java Thu May 21 17:06:45 2009
@@ -19,6 +19,7 @@
import java.util.Iterator;
import org.apache.commons.beanutils.MethodUtils;
+import org.apache.magma.basics.services.ServiceFinder;
import org.apache.magma.beans.PropertyInfo;
import sun.misc.Service;
@@ -39,16 +40,11 @@
@SuppressWarnings("unchecked")
public static <T> Converter<T> getConverterFor(Class<T> type) {
Class simpletype = MethodUtils.toNonPrimitiveClass(type);
- Iterator providers = Service.providers(Converter.class);
+ Iterator<Converter> providers = ServiceFinder.findProviders(Converter.class);
while (providers.hasNext()) {
- Converter converter = (Converter) providers.next();
+ Converter converter = providers.next();
if (converter.converts(simpletype)) return converter.build(type);
}
- // TODO reenable this for java 1.6
- //ServiceLoader<Converter> loader = ServiceLoader.load(Converter.class);
- //for (Converter converter : loader) {
- // if (converter.converts(simpletype)) return converter.build(type);
- //}
return null;
}
Added: labs/magma/trunk/foundation-beans/src/main/resources/META-INF/magma.default.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/main/resources/META-INF/magma.default.properties?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-beans/src/main/resources/META-INF/magma.default.properties (added)
+++ labs/magma/trunk/foundation-beans/src/main/resources/META-INF/magma.default.properties Thu May 21 17:06:45 2009
@@ -0,0 +1,13 @@
+org.apache.magma.conversion.Converter.bigdecimal=org.apache.magma.conversion.string.BigDecimalConverter
+org.apache.magma.conversion.Converter.biginteger=org.apache.magma.conversion.string.BigIntegerConverter
+org.apache.magma.conversion.Converter.boolean=org.apache.magma.conversion.string.BooleanConverter
+org.apache.magma.conversion.Converter.byte=org.apache.magma.conversion.string.ByteConverter
+org.apache.magma.conversion.Converter.class=org.apache.magma.conversion.string.ClassConverter
+org.apache.magma.conversion.Converter.date=org.apache.magma.conversion.string.DateConverter
+org.apache.magma.conversion.Converter.double=org.apache.magma.conversion.string.DoubleConverter
+org.apache.magma.conversion.Converter.enum=org.apache.magma.conversion.string.EnumConverter
+org.apache.magma.conversion.Converter.float=org.apache.magma.conversion.string.FloatConverter
+org.apache.magma.conversion.Converter.integer=org.apache.magma.conversion.string.IntegerConverter
+org.apache.magma.conversion.Converter.long=org.apache.magma.conversion.string.LongConverter
+org.apache.magma.conversion.Converter.short=org.apache.magma.conversion.string.ShortConverter
+org.apache.magma.conversion.Converter.string=org.apache.magma.conversion.string.StringConverter
Added: labs/magma/trunk/foundation-database/src/main/resources/META-INF/magma.default.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/main/resources/META-INF/magma.default.properties?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-database/src/main/resources/META-INF/magma.default.properties (added)
+++ labs/magma/trunk/foundation-database/src/main/resources/META-INF/magma.default.properties Thu May 21 17:06:45 2009
@@ -0,0 +1 @@
+org.apache.magma.conversion.Converter.database=org.apache.magma.database.DatabaseConverter
\ No newline at end of file
Modified: 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=777178&r1=777177&r2=777178&view=diff
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java (original)
+++ labs/magma/trunk/foundation-i18n/src/main/java/org/apache/magma/i18n/Formatters.java Thu May 21 17:06:45 2009
@@ -3,6 +3,7 @@
import java.util.Iterator;
import org.apache.commons.beanutils.MethodUtils;
+import org.apache.magma.basics.services.ServiceFinder;
import org.apache.magma.basics.utils.AnnotationToInstance;
import sun.misc.Service;
@@ -55,18 +56,11 @@
*/
public static <T> Formatter<T> getFormatterFor(Class<T> type) {
Class simpletype = MethodUtils.toNonPrimitiveClass(type);
- Iterator providers = Service.providers(Formatter.class);
+ Iterator<Formatter> providers = ServiceFinder.findProviders(Formatter.class);
while (providers.hasNext()) {
- Formatter formatter = (Formatter) providers.next();
+ Formatter formatter = providers.next();
if (formatter.converts(simpletype)) return formatter.buildDefault(type);
}
-
-
- // TODO reenable this for java 1.6
- //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/resources/META-INF/magma.default.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/magma.default.properties?rev=777178&view=auto
==============================================================================
--- labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/magma.default.properties (added)
+++ labs/magma/trunk/foundation-i18n/src/main/resources/META-INF/magma.default.properties Thu May 21 17:06:45 2009
@@ -0,0 +1,4 @@
+org.apache.magma.i18n.Formatter.date=org.apache.magma.i18n.formatters.DateFormatter
+org.apache.magma.i18n.Formatter.double=org.apache.magma.i18n.formatters.DoubleFormatter
+org.apache.magma.i18n.Formatter.boolean=org.apache.magma.i18n.formatters.BooleanFormatter
+org.apache.magma.i18n.Formatter.enum=org.apache.magma.i18n.formatters.EnumFormatter
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org