Coverage Report - org.seasar.teeda.core.config.faces.assembler.impl.DefaultRenderKitAssembler
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultRenderKitAssembler
98%
52/53
94%
15/16
1.769
DefaultRenderKitAssembler$RenderKitBean
100%
12/12
100%
2/2
1.769
 
 1  
 /*
 2  
  * Copyright 2004-2011 the Seasar Foundation and the Others.
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *     http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 13  
  * either express or implied. See the License for the specific language
 14  
  * governing permissions and limitations under the License.
 15  
  */
 16  
 package org.seasar.teeda.core.config.faces.assembler.impl;
 17  
 
 18  
 import java.util.ArrayList;
 19  
 import java.util.Iterator;
 20  
 import java.util.List;
 21  
 import java.util.Map;
 22  
 
 23  
 import javax.faces.internal.FactoryFinderUtil;
 24  
 import javax.faces.render.RenderKit;
 25  
 import javax.faces.render.RenderKitFactory;
 26  
 import javax.faces.render.Renderer;
 27  
 
 28  
 import org.seasar.framework.beans.BeanDesc;
 29  
 import org.seasar.framework.beans.factory.BeanDescFactory;
 30  
 import org.seasar.framework.container.S2Container;
 31  
 import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
 32  
 import org.seasar.framework.log.Logger;
 33  
 import org.seasar.framework.util.ClassUtil;
 34  
 import org.seasar.teeda.core.JsfConstants;
 35  
 import org.seasar.teeda.core.config.faces.assembler.RenderKitAssembler;
 36  
 import org.seasar.teeda.core.config.faces.element.RenderKitElement;
 37  
 import org.seasar.teeda.core.config.faces.element.RendererElement;
 38  
 import org.seasar.teeda.core.util.DIContainerUtil;
 39  
 import org.seasar.teeda.core.util.IteratorUtil;
 40  
 
 41  
 /**
 42  
  * @author shot
 43  
  */
 44  
 public class DefaultRenderKitAssembler extends RenderKitAssembler {
 45  
 
 46  1
     private static Logger logger_ = Logger
 47  2
             .getLogger(DefaultRenderKitAssembler.class);
 48  
 
 49  
     private List renderLists_;
 50  
 
 51  
     public DefaultRenderKitAssembler(Map renderKits) {
 52  8
         super(renderKits);
 53  8
     }
 54  
 
 55  
     protected void setupBeforeAssemble() {
 56  8
         renderLists_ = new ArrayList();
 57  8
         for (Iterator itr = IteratorUtil.getEntryIterator(getRenderKits()); itr
 58  11
                 .hasNext();) {
 59  3
             Map.Entry entry = (Map.Entry) itr.next();
 60  3
             RenderKitElement renderKitElement = (RenderKitElement) entry
 61  
                     .getValue();
 62  3
             String renderKitId = getRenderKitId(renderKitElement);
 63  3
             String className = getRenderKitClassName(renderKitElement);
 64  3
             List renderers = renderKitElement.getRendererElements();
 65  3
             isAllSuitableJsfElement(renderers, RendererElement.class);
 66  3
             RenderKitBean bean = new RenderKitBean(renderKitId, className,
 67  
                     renderers);
 68  3
             renderLists_.add(bean);
 69  
         }
 70  8
     }
 71  
 
 72  
     private String getRenderKitId(RenderKitElement renderKitElement) {
 73  3
         String renderKitId = renderKitElement.getRenderKitId();
 74  3
         if (renderKitId != null) {
 75  3
             return renderKitId;
 76  
         }
 77  0
         return RenderKitFactory.HTML_BASIC_RENDER_KIT;
 78  
     }
 79  
 
 80  
     public void assemble() {
 81  3
         RenderKitFactory renderKitFactory = FactoryFinderUtil
 82  
                 .getRenderKitFactory();
 83  3
         for (Iterator itr = IteratorUtil.getIterator(renderLists_); itr
 84  6
                 .hasNext();) {
 85  3
             RenderKitBean bean = (RenderKitBean) itr.next();
 86  3
             String renderKitId = bean.getRenderKitId();
 87  3
             RenderKit renderKit = createRenderKit(bean.getClassName());
 88  
 
 89  3
             RendererElement rendererElement = null;
 90  6
             while ((rendererElement = bean.getRendererElement()) != null) {
 91  3
                 String rendererClass = rendererElement.getRendererClass();
 92  3
                 Renderer renderer = createRenderer(rendererClass);
 93  3
                 renderKit.addRenderer(rendererElement.getComponentFamily(),
 94  
                         rendererElement.getRendererType(), renderer);
 95  
             }
 96  3
             renderKitFactory.addRenderKit(renderKitId, renderKit);
 97  
         }
 98  3
     }
 99  
 
 100  
     protected String getRenderKitClassName(RenderKitElement renderKitElement) {
 101  4
         String className = renderKitElement.getRenderKitClass();
 102  4
         if (className == null) {
 103  2
             className = JsfConstants.DEFAULT_RENDERKIT_CLASS;
 104  
         }
 105  4
         return className;
 106  
     }
 107  
 
 108  
     protected RenderKit createRenderKit(String className) {
 109  5
         Class clazz = ClassUtil.forName(className);
 110  5
         RenderKit renderKit = (RenderKit) DIContainerUtil
 111  
                 .getComponentNoException(clazz);
 112  5
         if (renderKit == null) {
 113  4
             renderKit = (RenderKit) newInstance(className);
 114  4
             S2Container container = SingletonS2ContainerFactory.getContainer();
 115  4
             BeanDesc beanDesc = BeanDescFactory.getBeanDesc(clazz);
 116  4
             if (beanDesc.hasPropertyDesc("container")) {
 117  1
                 beanDesc.getPropertyDesc("container").setValue(renderKit,
 118  
                         container);
 119  
             }
 120  
         }
 121  5
         return renderKit;
 122  
     }
 123  
 
 124  
     protected Renderer createRenderer(String className) {
 125  5
         Renderer renderer = null;
 126  
         try {
 127  5
             renderer = (Renderer) newInstance(className);
 128  1
         } catch (Exception e) {
 129  1
             logger_.warn("Exception " + e
 130  
                     + "occured when trying to create Renderer.");
 131  4
         }
 132  5
         return renderer;
 133  
     }
 134  
 
 135  
     List getRenderList() {
 136  1
         return renderLists_;
 137  
     }
 138  
 
 139  
     static class RenderKitBean {
 140  
 
 141  
         private String renderKitId_;
 142  
 
 143  
         private String className_;
 144  
 
 145  
         private Iterator renderers_;
 146  
 
 147  
         public RenderKitBean(String renderKitId, String className,
 148  3
                 List rendererElements) {
 149  3
             renderKitId_ = renderKitId;
 150  3
             className_ = className;
 151  3
             renderers_ = rendererElements.iterator();
 152  3
         }
 153  
 
 154  
         public String getClassName() {
 155  3
             return className_;
 156  
         }
 157  
 
 158  
         public String getRenderKitId() {
 159  4
             return renderKitId_;
 160  
         }
 161  
 
 162  
         public boolean hasNext() {
 163  6
             return renderers_.hasNext();
 164  
         }
 165  
 
 166  
         public RendererElement getRendererElement() {
 167  6
             RendererElement element = null;
 168  6
             if (hasNext()) {
 169  3
                 element = (RendererElement) renderers_.next();
 170  
             }
 171  6
             return element;
 172  
         }
 173  
     }
 174  
 
 175  
 }