Coverage Report - org.seasar.teeda.core.render.html.HtmlRenderKitImpl
 
Classes in this File Line Coverage Branch Coverage Complexity
HtmlRenderKitImpl
91%
39/43
100%
6/6
1.091
HtmlRenderKitImpl$1
27%
3/11
N/A
1.091
HtmlRenderKitImpl$RendererHolder
86%
6/7
N/A
1.091
 
 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.render.html;
 17  
 
 18  
 import java.io.IOException;
 19  
 import java.io.OutputStream;
 20  
 import java.io.Writer;
 21  
 
 22  
 import javax.faces.context.ResponseStream;
 23  
 import javax.faces.context.ResponseWriter;
 24  
 import javax.faces.render.Renderer;
 25  
 import javax.faces.render.ResponseStateManager;
 26  
 
 27  
 import org.seasar.framework.container.S2Container;
 28  
 import org.seasar.framework.util.AssertionUtil;
 29  
 import org.seasar.teeda.core.application.ComponentLookupStrategy;
 30  
 import org.seasar.teeda.core.context.html.HtmlResponseWriter;
 31  
 import org.seasar.teeda.core.render.AbstractRenderKit;
 32  
 import org.seasar.teeda.core.render.html.support.HtmlRenderKitKeyGenerateUtil;
 33  
 import org.seasar.teeda.core.util.ContentTypeUtil;
 34  
 
 35  
 /**
 36  
  * @author shot
 37  
  * @author manhole
 38  
  */
 39  
 public class HtmlRenderKitImpl extends AbstractRenderKit {
 40  
 
 41  
     private static final String RENDERER_SUFFIX = "_RENDERER_FACES_CONFIG";
 42  
 
 43  1
     private static final int RENDERER_SUFFIX_LENGTH = RENDERER_SUFFIX.length();
 44  
 
 45  
     private ResponseStateManager responseStateManager;
 46  
 
 47  
     private S2Container container;
 48  
 
 49  
     private ComponentLookupStrategy componentLookupStrategy;
 50  
 
 51  10
     public HtmlRenderKitImpl() {
 52  10
     }
 53  
 
 54  
     public void addRenderer(String family, String renderType, Renderer renderer) {
 55  9
         AssertionUtil.assertNotNull("family", family);
 56  8
         AssertionUtil.assertNotNull("renderType", renderType);
 57  7
         AssertionUtil.assertNotNull("renderer", renderer);
 58  6
         String rendererKey = HtmlRenderKitKeyGenerateUtil.getGeneratedKey(
 59  
                 family, renderType)
 60  
                 + RENDERER_SUFFIX;
 61  6
         final S2Container c = getContainer();
 62  6
         if (c.hasComponentDef(rendererKey)) {
 63  1
             RendererHolder holder = (RendererHolder) c
 64  
                     .getComponent(rendererKey);
 65  1
             holder.setRenderer(renderer);
 66  
         } else {
 67  5
             RendererHolder holder = new RendererHolder();
 68  5
             holder.setRenderer(renderer);
 69  5
             holder.setRendererKey(rendererKey);
 70  5
             c.register(holder, rendererKey);
 71  
         }
 72  6
     }
 73  
 
 74  
     public Renderer getRenderer(String family, String renderType) {
 75  11
         AssertionUtil.assertNotNull("family", family);
 76  10
         AssertionUtil.assertNotNull("renderType", renderType);
 77  9
         String rendererKey = HtmlRenderKitKeyGenerateUtil.getGeneratedKey(
 78  
                 family, renderType);
 79  9
         Renderer renderer = getRendererFromFacesConfig(rendererKey);
 80  9
         if (renderer == null) {
 81  4
             renderer = getRendererFromContainer(rendererKey);
 82  
         }
 83  9
         return renderer;
 84  
     }
 85  
 
 86  
     protected Renderer getRendererFromFacesConfig(String rendererKey) {
 87  9
         String key = new String(new StringBuffer(rendererKey.length()
 88  
                 + RENDERER_SUFFIX_LENGTH).append(rendererKey).append(
 89  
                 RENDERER_SUFFIX));
 90  9
         RendererHolder holder = (RendererHolder) componentLookupStrategy
 91  
                 .getComponentByName(key);
 92  9
         return (holder != null) ? holder.getRenderer() : null;
 93  
     }
 94  
 
 95  
     protected Renderer getRendererFromContainer(String rendererKey) {
 96  4
         return (Renderer) getContainer().getRoot().getComponent(rendererKey);
 97  
     }
 98  
 
 99  
     public ResponseStream createResponseStream(final OutputStream out) {
 100  1
         return new ResponseStream() {
 101  
 
 102  
             public void write(int b) throws IOException {
 103  2
                 out.write(b);
 104  2
             }
 105  
 
 106  
             public void close() throws IOException {
 107  0
                 out.close();
 108  0
             }
 109  
 
 110  
             public void flush() throws IOException {
 111  0
                 out.flush();
 112  0
             }
 113  
 
 114  
             public void write(byte[] bytes) throws IOException {
 115  0
                 out.write(bytes, 0, bytes.length);
 116  0
             }
 117  
 
 118  1
             public void write(byte[] bytes, int off, int len)
 119  
                     throws IOException {
 120  0
                 out.write(bytes, off, len);
 121  0
             }
 122  
 
 123  
         };
 124  
     }
 125  
 
 126  
     public ResponseWriter createResponseWriter(Writer writer,
 127  
             String contentTypeList, String characterEncoding) {
 128  2
         HtmlResponseWriter htmlResponseWriter = new HtmlResponseWriter();
 129  2
         htmlResponseWriter.setWriter(writer);
 130  2
         String contentType = ContentTypeUtil.getContentType(contentTypeList);
 131  2
         htmlResponseWriter.setContentType(contentType);
 132  2
         htmlResponseWriter.setCharacterEncoding(characterEncoding);
 133  2
         return htmlResponseWriter;
 134  
     }
 135  
 
 136  
     public ResponseStateManager getResponseStateManager() {
 137  0
         return responseStateManager;
 138  
     }
 139  
 
 140  
     public void setResponseStateManager(
 141  
             ResponseStateManager responseStateManager) {
 142  0
         this.responseStateManager = responseStateManager;
 143  0
     }
 144  
 
 145  
     public void setContainer(S2Container container) {
 146  12
         this.container = container;
 147  12
     }
 148  
 
 149  
     public S2Container getContainer() {
 150  10
         return container;
 151  
     }
 152  
 
 153  
     public ComponentLookupStrategy getComponentLookupStrategy() {
 154  0
         return componentLookupStrategy;
 155  
     }
 156  
 
 157  
     public void setComponentLookupStrategy(
 158  
             ComponentLookupStrategy componentLookupStrategy) {
 159  9
         this.componentLookupStrategy = componentLookupStrategy;
 160  9
     }
 161  
 
 162  5
     public static class RendererHolder {
 163  
 
 164  
         private String rendererKey;
 165  
 
 166  
         private Renderer renderer;
 167  
 
 168  
         public Renderer getRenderer() {
 169  5
             return renderer;
 170  
         }
 171  
 
 172  
         public void setRenderer(Renderer renderer) {
 173  6
             this.renderer = renderer;
 174  6
         }
 175  
 
 176  
         public String getRendererKey() {
 177  0
             return rendererKey;
 178  
         }
 179  
 
 180  
         public void setRendererKey(String rendererKey) {
 181  5
             this.rendererKey = rendererKey;
 182  5
         }
 183  
     }
 184  
 }