// Path: src/main/java/xdb/control/Renderer.java
// public interface Renderer {
// 
//     /**
//      * Mime type generated by this renderer (text/html, text/xml, etc.).
//      * 
//      * @return The mime type.
//      */
//     public String getMimeType();
// 
//     /**
//      * Write query results to an output stream.
//      * 
//      * @param results
//      *            The list of results to render.
//      * @param out
//      *            The output stream.
//      * @param params
//      *            The query parameters.
//      * @throws java.io.IOException
//      *             For errors.
//      */
//     public void render(List<Node> results, PrintWriter out, Map<String, String[]> params)
//         throws IOException;
// }
// 
// Path: src/main/java/xdb/renderer/RendererInit.java
// public final class RendererInit {
// 
//     private RendererInit() {
//     }
// 
//     /**
//      * Init the renderer from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @param fileName
//      *            The file name.
//      * @return The renderer.
//      * @throws IOException
//      *             For errors.
//      */
//     public static Renderer init(Element configElement, String fileName) throws IOException {
//         if ("xquery-renderer".equals(configElement.getNodeName())) {
//             return XQueryRenderer.init(configElement);
//         } else if ("xsl-renderer".equals(configElement.getNodeName())) {
//             return XslRenderer.init(configElement);
//         } else {
//             String msg = "Unknown renderer in " + fileName + " - " + configElement.getNodeName();
//             throw new IllegalStateException(msg);
//         }
//     }
// }
// 
// Path: src/main/java/xdb/renderer/XQueryRenderer.java
// public class XQueryRenderer implements Renderer {
//     private final String xquery;
//     private final String mimeType;
//     private final String outputType;
// 
//     /**
//      * Initialize the renderer from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @return The renderer.
//      * @throws IOException
//      */
//     public static XQueryRenderer init(Element configElement) throws IOException {
//         String mimeType = configElement.getAttribute("mime-type");
//         String xquery = configElement.getTextContent();
//         String file = configElement.getAttribute("file");
//         if (file != null) {
//             String path = QueryConfigManager.getConfigRoot() + "/" + file;
//             xquery = FileUtil.loadText(new File(path));
//         }
//         return new XQueryRenderer(xquery, mimeType);
//     }
// 
//     /**
//      * Constructor.
//      * 
//      * @param xquery
//      *            The query.
//      * @param mimeType
//      *            The output mime type.
//      */
//     public XQueryRenderer(String xquery, String mimeType) {
//         this.xquery = xquery;
//         this.mimeType = mimeType;
//         if (mimeType.endsWith("xml")) {
//             outputType = "xml";
//         } else if (mimeType.endsWith("html")) {
//             outputType = "html";
//         } else {
//             outputType = "text";
//         }
//     }
// 
//     @Override
//     public String getMimeType() {
//         return this.mimeType;
//     }
// 
//     @Override
//     public void render(List<Node> results, PrintWriter out, Map<String, String[]> params) throws IOException {
//         try {
//             Map<String, String> flatMap = CollectionsUtil.flatten(params);
//             XQueryEngine.query(results.get(0), xquery, flatMap, out, outputType);
//         } catch (Exception ex) {
//             throw new IOException(ex.getMessage());
//         }
//     }
// }
// 
// Path: src/test/java/xdb/test/TestUtil.java
// public class TestUtil {
// 
//     public static Document parse(String xml) throws Exception {
//         StringReader reader = new StringReader(xml);
//         InputSource is = new InputSource(reader);
//         return new XmlParser().parse(is);
//     }
// }


import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.w3c.dom.Element;
import xdb.control.Renderer;
import xdb.renderer.RendererInit;
import xdb.renderer.XQueryRenderer;
import xdb.test.TestUtil;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package xdb.renderer;



/**
 * 
 * @author ps142237
 */
public class XQueryRendererTest extends TestCase {

    public XQueryRendererTest(String testName) {
        super(testName);
    }

    public void testInit() throws Exception {
        Renderer renderer = initRenderer();
        assertTrue(renderer instanceof XQueryRenderer);
    }

    public void testGetMimeType() throws Exception {
        Renderer instance = initRenderer();
        String expResult = "text/plain";
        String result = instance.getMimeType();
        assertEquals(expResult, result);
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void testRender() throws Exception {
        String xml = "<parts>";
        xml += "<part id='1' description='Part 1' />";
        xml += "<part id='2' description='Part 2 with &quot;' />";
        xml += "</parts>";
// Path: src/main/java/xdb/control/Renderer.java
// public interface Renderer {
// 
//     /**
//      * Mime type generated by this renderer (text/html, text/xml, etc.).
//      * 
//      * @return The mime type.
//      */
//     public String getMimeType();
// 
//     /**
//      * Write query results to an output stream.
//      * 
//      * @param results
//      *            The list of results to render.
//      * @param out
//      *            The output stream.
//      * @param params
//      *            The query parameters.
//      * @throws java.io.IOException
//      *             For errors.
//      */
//     public void render(List<Node> results, PrintWriter out, Map<String, String[]> params)
//         throws IOException;
// }
// 
// Path: src/main/java/xdb/renderer/RendererInit.java
// public final class RendererInit {
// 
//     private RendererInit() {
//     }
// 
//     /**
//      * Init the renderer from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @param fileName
//      *            The file name.
//      * @return The renderer.
//      * @throws IOException
//      *             For errors.
//      */
//     public static Renderer init(Element configElement, String fileName) throws IOException {
//         if ("xquery-renderer".equals(configElement.getNodeName())) {
//             return XQueryRenderer.init(configElement);
//         } else if ("xsl-renderer".equals(configElement.getNodeName())) {
//             return XslRenderer.init(configElement);
//         } else {
//             String msg = "Unknown renderer in " + fileName + " - " + configElement.getNodeName();
//             throw new IllegalStateException(msg);
//         }
//     }
// }
// 
// Path: src/main/java/xdb/renderer/XQueryRenderer.java
// public class XQueryRenderer implements Renderer {
//     private final String xquery;
//     private final String mimeType;
//     private final String outputType;
// 
//     /**
//      * Initialize the renderer from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @return The renderer.
//      * @throws IOException
//      */
//     public static XQueryRenderer init(Element configElement) throws IOException {
//         String mimeType = configElement.getAttribute("mime-type");
//         String xquery = configElement.getTextContent();
//         String file = configElement.getAttribute("file");
//         if (file != null) {
//             String path = QueryConfigManager.getConfigRoot() + "/" + file;
//             xquery = FileUtil.loadText(new File(path));
//         }
//         return new XQueryRenderer(xquery, mimeType);
//     }
// 
//     /**
//      * Constructor.
//      * 
//      * @param xquery
//      *            The query.
//      * @param mimeType
//      *            The output mime type.
//      */
//     public XQueryRenderer(String xquery, String mimeType) {
//         this.xquery = xquery;
//         this.mimeType = mimeType;
//         if (mimeType.endsWith("xml")) {
//             outputType = "xml";
//         } else if (mimeType.endsWith("html")) {
//             outputType = "html";
//         } else {
//             outputType = "text";
//         }
//     }
// 
//     @Override
//     public String getMimeType() {
//         return this.mimeType;
//     }
// 
//     @Override
//     public void render(List<Node> results, PrintWriter out, Map<String, String[]> params) throws IOException {
//         try {
//             Map<String, String> flatMap = CollectionsUtil.flatten(params);
//             XQueryEngine.query(results.get(0), xquery, flatMap, out, outputType);
//         } catch (Exception ex) {
//             throw new IOException(ex.getMessage());
//         }
//     }
// }
// 
// Path: src/test/java/xdb/test/TestUtil.java
// public class TestUtil {
// 
//     public static Document parse(String xml) throws Exception {
//         StringReader reader = new StringReader(xml);
//         InputSource is = new InputSource(reader);
//         return new XmlParser().parse(is);
//     }
// }


// Path: src/test/java/xdb/renderer/XQueryRendererTest.java
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.w3c.dom.Element;
import xdb.control.Renderer;
import xdb.renderer.RendererInit;
import xdb.renderer.XQueryRenderer;
import xdb.test.TestUtil;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package xdb.renderer;



/**
 * 
 * @author ps142237
 */
public class XQueryRendererTest extends TestCase {

    public XQueryRendererTest(String testName) {
        super(testName);
    }

    public void testInit() throws Exception {
        Renderer renderer = initRenderer();
        assertTrue(renderer instanceof XQueryRenderer);
    }

    public void testGetMimeType() throws Exception {
        Renderer instance = initRenderer();
        String expResult = "text/plain";
        String result = instance.getMimeType();
        assertEquals(expResult, result);
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void testRender() throws Exception {
        String xml = "<parts>";
        xml += "<part id='1' description='Part 1' />";
        xml += "<part id='2' description='Part 2 with &quot;' />";
        xml += "</parts>";
        List results = Collections.singletonList(TestUtil.parse(xml));