Author: jsdelfino
Date: Tue Aug 14 12:42:38 2007
New Revision: 565878

URL: http://svn.apache.org/viewvc?view=rev&rev=565878
Log:
Support dynamic registration of interface visitors.

Modified:
    
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java

Modified: 
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java?view=diff&rev=565878&r1=565877&r2=565878
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java
 Tue Aug 14 12:42:38 2007
@@ -18,14 +18,64 @@
  */
 package org.apache.tuscany.sca.interfacedef.java;
 
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.tuscany.sca.interfacedef.impl.TempServiceDeclarationUtil;
 import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceFactoryImpl;
+import 
org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor;
 
 /**
  * A factory for the Java interface model.
  */
 public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl 
implements JavaInterfaceFactory {
     
+    private boolean loadedVisitors; 
+    
     public DefaultJavaInterfaceFactory() {
+    }
+    
+    @Override
+    public List<JavaInterfaceVisitor> getInterfaceVisitors() {
+        loadVisitors();
+        return super.getInterfaceVisitors();
+    }
+    
+    /**
+     * Load visitors declared under META-INF/services
+     */
+    @SuppressWarnings("unchecked")
+    private void loadVisitors() {
+        if (loadedVisitors)
+            return;
+
+        // Get the databinding service declarations
+        ClassLoader classLoader = JavaInterfaceVisitor.class.getClassLoader();
+        Set<String> visitorDeclarations; 
+        try {
+            visitorDeclarations = 
TempServiceDeclarationUtil.getServiceClassNames(classLoader, 
JavaInterfaceVisitor.class.getName());
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        }
+        
+        // Load data bindings
+        for (String visitorDeclaration: visitorDeclarations) {
+            JavaInterfaceVisitor visitor;
+            try {
+                Class<JavaInterfaceVisitor> visitorClass = 
(Class<JavaInterfaceVisitor>)Class.forName(visitorDeclaration, true, 
classLoader);
+                visitor = visitorClass.newInstance();
+            } catch (ClassNotFoundException e) {
+                throw new IllegalArgumentException(e);
+            } catch (InstantiationException e) {
+                throw new IllegalArgumentException(e);
+            } catch (IllegalAccessException e) {
+                throw new IllegalArgumentException(e);
+            }
+            addInterfaceVisitor(visitor);
+        }
+        
+        loadedVisitors = true;
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to