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]