Clover coverage report - Code Coverage for tapestry-contrib release 4.0-rc-2
Coverage timestamp: Sat Dec 17 2005 09:47:13 PST
file stats: LOC: 175   Methods: 8
NCLOC: 123   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
XTileService.java 0% 0% 0% 0%
coverage
 1    // Copyright 2004, 2005 The Apache Software Foundation
 2    //
 3    // Licensed under the Apache License, Version 2.0 (the "License");
 4    // you may not use this file except in compliance with the License.
 5    // You may obtain a copy of the License at
 6    //
 7    // http://www.apache.org/licenses/LICENSE-2.0
 8    //
 9    // Unless required by applicable law or agreed to in writing, software
 10    // distributed under the License is distributed on an "AS IS" BASIS,
 11    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12    // See the License for the specific language governing permissions and
 13    // limitations under the License.
 14   
 15    package org.apache.tapestry.contrib.ajax;
 16   
 17    import java.io.IOException;
 18    import java.io.OutputStream;
 19    import java.io.StringWriter;
 20    import java.util.HashMap;
 21    import java.util.Map;
 22   
 23    import javax.xml.parsers.DocumentBuilder;
 24    import javax.xml.parsers.DocumentBuilderFactory;
 25    import javax.xml.transform.OutputKeys;
 26    import javax.xml.transform.Transformer;
 27    import javax.xml.transform.TransformerFactory;
 28    import javax.xml.transform.dom.DOMSource;
 29    import javax.xml.transform.stream.StreamResult;
 30   
 31    import org.apache.hivemind.ApplicationRuntimeException;
 32    import org.apache.hivemind.util.Defense;
 33    import org.apache.tapestry.IComponent;
 34    import org.apache.tapestry.IPage;
 35    import org.apache.tapestry.IRequestCycle;
 36    import org.apache.tapestry.engine.IEngineService;
 37    import org.apache.tapestry.engine.ILink;
 38    import org.apache.tapestry.error.RequestExceptionReporter;
 39    import org.apache.tapestry.services.LinkFactory;
 40    import org.apache.tapestry.services.ServiceConstants;
 41    import org.apache.tapestry.util.ContentType;
 42    import org.apache.tapestry.web.WebResponse;
 43    import org.w3c.dom.Document;
 44    import org.w3c.dom.Node;
 45   
 46    /**
 47    * @author mindbridge
 48    * @author Paul Green
 49    * @since 4.0
 50    */
 51    public class XTileService implements IEngineService
 52    {
 53    public static final String SERVICE_NAME = "xtile";
 54   
 55    private RequestExceptionReporter _exceptionReporter;
 56   
 57    private WebResponse _response;
 58   
 59    private LinkFactory _linkFactory;
 60   
 61  0 public String getName()
 62    {
 63  0 return SERVICE_NAME;
 64    }
 65   
 66  0 public ILink getLink(boolean post, Object parameter)
 67    {
 68  0 Defense.isAssignable(parameter, IComponent.class, "parameter");
 69   
 70  0 IComponent component = (IComponent) parameter;
 71   
 72  0 Map parameters = new HashMap();
 73  0 parameters.put(ServiceConstants.PAGE, component.getPage().getPageName());
 74  0 parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
 75   
 76  0 return _linkFactory.constructLink(this, false, parameters, false);
 77    }
 78   
 79  0 public void service(IRequestCycle cycle) throws IOException
 80    {
 81  0 String pageName = cycle.getParameter(ServiceConstants.PAGE);
 82  0 String componentId = cycle.getParameter(ServiceConstants.COMPONENT);
 83   
 84  0 IPage componentPage = cycle.getPage(pageName);
 85  0 IComponent component = componentPage.getNestedComponent(componentId);
 86   
 87  0 if (!(component instanceof IXTile))
 88  0 throw new ApplicationRuntimeException("Incorrect component type: was "
 89    + component.getClass() + " but must be " + IXTile.class, component, null, null);
 90   
 91  0 IXTile xtile = (IXTile) component;
 92   
 93  0 String[] params = cycle.getParameters(ServiceConstants.PARAMETER);
 94  0 cycle.setListenerParameters(params);
 95   
 96  0 xtile.trigger(cycle);
 97   
 98    // do not squeeze on output either
 99  0 Object[] args = cycle.getListenerParameters();
 100  0 String strArgs = generateOutputString(args);
 101  0 if (strArgs != null)
 102    {
 103  0 OutputStream output = _response.getOutputStream(new ContentType("text/xml"));
 104  0 output.write(strArgs.getBytes("utf-8"));
 105    }
 106    }
 107   
 108  0 protected String generateOutputString(Object[] args)
 109    {
 110  0 try
 111    {
 112  0 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 113  0 dbf.setValidating(false);
 114  0 DocumentBuilder db = dbf.newDocumentBuilder();
 115  0 Document doc = db.newDocument();
 116   
 117  0 Node rootNode = doc.createElement("data");
 118  0 doc.appendChild(rootNode);
 119   
 120  0 if (args != null)
 121    {
 122  0 for (int i = 0; i < args.length; i++)
 123    {
 124  0 Object value = args[i];
 125   
 126  0 Node spNode = doc.createElement("sp");
 127  0 rootNode.appendChild(spNode);
 128   
 129  0 Node valueNode = doc.createTextNode(value.toString());
 130  0 spNode.appendChild(valueNode);
 131    }
 132    }
 133   
 134  0 TransformerFactory trf = TransformerFactory.newInstance();
 135  0 Transformer tr = trf.newTransformer();
 136  0 tr.setOutputProperty(OutputKeys.INDENT, "yes");
 137   
 138  0 DOMSource domSrc = new DOMSource(doc);
 139  0 StringWriter writer = new StringWriter();
 140  0 StreamResult res = new StreamResult(writer);
 141  0 tr.transform(domSrc, res);
 142  0 writer.close();
 143   
 144  0 return writer.toString();
 145    }
 146    catch (Exception e)
 147    {
 148  0 _exceptionReporter.reportRequestException("Cannot generate XML", e);
 149  0 return null;
 150    }
 151    }
 152   
 153  0 public void setExceptionReporter(RequestExceptionReporter exceptionReporter)
 154    {
 155  0 _exceptionReporter = exceptionReporter;
 156    }
 157   
 158  0 public void setResponse(WebResponse response)
 159    {
 160  0 _response = response;
 161    }
 162   
 163  0 public static void main(String[] args)
 164    {
 165  0 XTileService objService = new XTileService();
 166  0 System.out.println(objService.generateOutputString(new Object[]
 167    { "test > work", new Integer(20) }));
 168    }
 169   
 170  0 public void setLinkFactory(LinkFactory linkFactory)
 171    {
 172  0 _linkFactory = linkFactory;
 173    }
 174   
 175    }