1   package org.weda.tapestry;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   import org.weda.test.WedaTestCase;
6   import org.weda.property.ObjectDescriptorRegistry;
7   import org.weda.enhance.ObjectEnhancer;
8   import org.weda.property.PropertyDescriptor;
9   import org.weda.domain.Employee;
10  import org.weda.tapestry.renderer.Renderer;
11  import org.weda.tapestry.renderer.impl.DummyRenderer;
12  import org.weda.tapestry.renderer.impl.InplaceRenderer;
13  import org.weda.domain.Address;
14  import org.weda.domain.Company;
15  import org.weda.tapestry.renderer.impl.RendererInfo;
16  import org.weda.tapestry.renderer.impl.RendererRegistryImpl;
17  
18  /**
19   *
20   * @author Mikhail Titov
21   */
22  public class RendererRegistryTest extends WedaTestCase{
23      
24      public RendererRegistryTest(String name) throws Exception {
25          super(name);
26      }
27      
28      public void test_DefaultRendererRegistry() throws Exception {
29          RendererRegistryImpl reg = new RendererRegistryImpl();
30          List<RendererInfo> config = new ArrayList<RendererInfo>();
31          config.add(
32              createRendererInfo(
33                  "1", Company.class, "id", Integer.class
34                  , PropertyDescriptor.OBJECT_PROPERTY_MIME_TYPE));
35          config.add(
36              createRendererInfo(
37                  "1", Company.class, "id", Long.class
38                  , PropertyDescriptor.OBJECT_PROPERTY_MIME_TYPE));
39          config.add(
40              createRendererInfo(
41                  "2", null, "id", Integer.class
42                  , PropertyDescriptor.OBJECT_PROPERTY_MIME_TYPE));
43          config.add(
44              createRendererInfo(
45                  "3", null, null, Integer.class
46                  , PropertyDescriptor.OBJECT_PROPERTY_MIME_TYPE));
47          config.add(
48              createRendererInfo(
49                  "4", null, null, null
50                  , PropertyDescriptor.OBJECT_PROPERTY_MIME_TYPE));
51          config.add(
52              createRendererInfo(
53                  "5", null, null, null, null));
54          reg.setRenderers(config);
55          reg.setObjectEnhancer(
56                  (ObjectEnhancer)registry.getService(ObjectEnhancer.class));
57          reg.init();
58          //
59          ObjectDescriptorRegistry objDescRegistry = (ObjectDescriptorRegistry)
60                  registry.getService(ObjectDescriptorRegistry.class);
61          PropertyDescriptor pd = 
62                  objDescRegistry.getPropertyDescriptor(Company.class, "id");
63          TestRenderer renderer = (TestRenderer)reg.getRenderer(pd);
64          assertNotNull(renderer);
65          assertEquals("1", renderer.getDefaultPattern());
66          //
67          pd = objDescRegistry.getPropertyDescriptor(Address.class, "id");
68          assertEquals(pd.OBJECT_PROPERTY_MIME_TYPE, pd.getMimeType());
69          renderer = (TestRenderer)reg.getRenderer(pd);
70          assertNotNull(renderer);
71          assertEquals("2", renderer.getDefaultPattern());
72          //
73          pd = objDescRegistry.getPropertyDescriptor(
74                  Company.class, "employeCount");
75          renderer = (TestRenderer)reg.getRenderer(pd);
76          assertNotNull(renderer);
77          assertEquals("3", renderer.getDefaultPattern());
78          //
79          pd = objDescRegistry.getPropertyDescriptor(Company.class, "name");
80          renderer = (TestRenderer)reg.getRenderer(pd);
81          assertNotNull(renderer);
82          assertEquals("4", renderer.getDefaultPattern());
83          //
84          pd = objDescRegistry.getPropertyDescriptor(Employee.class, "photo");
85          renderer = (TestRenderer)reg.getRenderer(pd);
86          assertNotNull(renderer);
87          assertEquals("5", renderer.getDefaultPattern());
88      }
89      
90      public void test_configuration() throws Exception {
91          List<RendererInfo> config = (List<RendererInfo>)
92                  registry.getConfiguration("org.weda.tapestry.Renderers");
93          assertNotNull(config);
94          assertTrue(config.size()>0);
95          RendererInfo testInfo = null;
96          for (RendererInfo info: config)
97              if (TestRenderer.class.equals(info.getRendererClass())){
98                  testInfo=info;
99                  break;
100             }
101         assertNotNull(testInfo);
102         assertEquals(TestRenderer.class, testInfo.getObjectClass());
103         assertEquals("defaultPattern", testInfo.getPropertyName());
104         assertEquals(String.class, testInfo.getValueClass());
105         assertEquals(
106                 PropertyDescriptor.OBJECT_PROPERTY_MIME_TYPE
107                 , testInfo.getMimeType());
108     }
109     
110     public void test_service() throws Exception {
111         RendererRegistry reg = 
112                 (RendererRegistry)registry.getService(RendererRegistry.class);
113         assertNotNull(reg);
114         ObjectDescriptorRegistry objDescRegistry = (ObjectDescriptorRegistry)
115                 registry.getService(ObjectDescriptorRegistry.class);
116         PropertyDescriptor pd = 
117                 objDescRegistry.getPropertyDescriptor(Company.class, "id");
118         Renderer renderer = reg.getRenderer(pd);
119         assertNotNull(renderer);        
120         assertEquals(InplaceRenderer.class, renderer.getClass());
121         pd = objDescRegistry.getPropertyDescriptor(Employee.class, "photo");
122         renderer = reg.getRenderer(pd);
123         assertNotNull(renderer);
124         assertEquals(DummyRenderer.class, renderer.getClass());
125 //        ExternalLinkRenderer refRenderer = (ExternalLinkRenderer)renderer;
126 //        assertNotNull(refRenderer.getLinkFactory());
127 //        assertNotNull(refRenderer.getRendererEngine());
128     }
129         
130     private RendererInfo createRendererInfo(
131             String id, Class objectClass, String propertyName, Class valueClass
132             , String mimeType)
133     {
134         RendererInfo info = new RendererInfo();
135         info.setObjectClass(objectClass);
136         info.setPropertyName(propertyName);
137         info.setValueClass(valueClass);
138         info.setMimeType(mimeType);
139         info.setDefaultPattern(id);
140         info.setRendererClass(TestRenderer.class);
141         return info;
142     }
143     
144 }