support/general no longer depends on hibernate-jpa
[utils] / trunk / system / general / src / main / java / org / wamblee / system / core / DefaultRequiredInterface.java
index e028342e9d2fa98528ec04e7ccc2dfd90ce59e39..4e0db74be375620f8f60dd5b383a2e1a5017de32 100644 (file)
@@ -17,6 +17,8 @@ package org.wamblee.system.core;
 
 import java.util.Arrays;
 
+import org.wamblee.reflection.ReflectionUtils;
+
 public class DefaultRequiredInterface implements RequiredInterface {
 
        private String _name;
@@ -74,6 +76,8 @@ public class DefaultRequiredInterface implements RequiredInterface {
        private boolean serviceProvided(Class aRequired, Class[] aProvided) { 
                for (Class provided: aProvided) {
                        try {
+                               provided = ReflectionUtils.wrapIfNeeded(provided);
+                               aRequired = ReflectionUtils.wrapIfNeeded(aRequired);
                                provided.asSubclass(aRequired);
                                return true; 
                        } catch (ClassCastException e) {
@@ -90,19 +94,19 @@ public class DefaultRequiredInterface implements RequiredInterface {
        
        @Override
        public void setProvider(ProvidedInterface aProvider) {
+           assert aProvider != null; 
+           assert implementedBy(aProvider);
                _provider = aProvider;  
        }
-
+       
        @Override
-       public <T> T getImplementation(Class<T> aClass) {
-               if ( _provider == null ) { 
-                       return null; 
-               }
-               return (T)_provider.getImplementation();
+       public boolean equals(Object obj) { 
+           return this == obj; 
        }
        
        @Override
-       public boolean equals(Object obj) {
+       public boolean covers(RequiredInterface obj) {
+           // TODO do more than equals. 
                if ( !(obj instanceof DefaultRequiredInterface)) { 
                        return false; 
                }
@@ -129,6 +133,7 @@ public class DefaultRequiredInterface implements RequiredInterface {
        @Override
        public String toString() {
                StringBuffer buf = new StringBuffer();
+               buf.append("." + getName() + ":");
                for (Class intf: _required) { 
                        buf.append("." + intf.getName());
                }