001 package org.nanocontainer.script.xml.issues; 002 003 import java.io.Reader; 004 import java.io.StringReader; 005 006 import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase; 007 import org.nanocontainer.script.xml.XMLContainerBuilder; 008 import org.picocontainer.PicoContainer; 009 import org.picocontainer.defaults.SetterInjectionComponentAdapterFactory; 010 011 public class ServiceDependencyTestCase extends AbstractScriptedContainerBuilderTestCase { 012 013 public void testCanInstantiateProcessWithSDIDependencies() { 014 Reader script = new StringReader("" + 015 "<container component-adapter-factory='"+SetterInjectionComponentAdapterFactory.class.getName()+"'>"+ 016 " <component-implementation class='"+Service1Impl.class.getName()+"'/>"+ 017 " <component-implementation class='"+ServiceAImpl.class.getName()+"'/>"+ 018 " <component-implementation class='"+Service2Impl.class.getName()+"'/>"+ 019 " <component-implementation class='"+ServiceBImpl.class.getName()+"'/>"+ 020 " <component-implementation class='"+Process.class.getName()+"'/>"+ 021 "</container>"); 022 assertProcessWithDependencies(script); 023 } 024 025 private void assertProcessWithDependencies(Reader script) { 026 PicoContainer pico = buildContainer(script); 027 assertNotNull(pico); 028 Process process = (Process)pico.getComponentInstanceOfType(Process.class); 029 assertNotNull(process); 030 assertNotNull(process.getServiceA()); 031 assertNotNull(process.getServiceA().getService1()); 032 assertNotNull(process.getServiceB()); 033 assertNotNull(process.getServiceB().getService2()); 034 } 035 036 private PicoContainer buildContainer(Reader script) { 037 return buildContainer(new XMLContainerBuilder(script, getClass().getClassLoader()), null, "SOME_SCOPE"); 038 } 039 040 public static class Process { 041 private ServiceA serviceA; 042 043 private ServiceB serviceB; 044 045 // use with SDI 046 public Process() { 047 } 048 049 public ServiceA getServiceA() { 050 return serviceA; 051 } 052 053 public void setServiceA(ServiceA serviceA) { 054 this.serviceA = serviceA; 055 } 056 057 public ServiceB getServiceB() { 058 return serviceB; 059 } 060 061 public void setServiceB(ServiceB serviceB) { 062 this.serviceB = serviceB; 063 } 064 } 065 066 public static interface Service1 { 067 } 068 069 public static interface Service2 { 070 } 071 072 public static class Service1Impl implements Service1 { 073 public Service1Impl() { 074 } 075 } 076 077 public static class Service2Impl implements Service2 { 078 public Service2Impl() { 079 } 080 } 081 082 public static interface ServiceA { 083 public Service1 getService1(); 084 } 085 086 public static interface ServiceB { 087 public Service2 getService2(); 088 } 089 090 public static class ServiceAImpl implements ServiceA { 091 private Service1 service1; 092 public ServiceAImpl() { 093 } 094 public Service1 getService1() { 095 return service1; 096 } 097 public void setService1(Service1 service1) { 098 this.service1 = service1; 099 } 100 } 101 102 public static class ServiceBImpl implements ServiceB { 103 private Service2 service2; 104 public ServiceBImpl() { 105 } 106 public Service2 getService2() { 107 return service2; 108 } 109 public void setService2(Service2 service2) { 110 this.service2 = service2; 111 } 112 } 113 } 114 115