ddf.test.itests.common.Library.java Source code

Java tutorial

Introduction

Here is the source code for ddf.test.itests.common.Library.java

Source

/**
 * Copyright (c) Codice Foundation
 * <p>
 * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
 * General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or any later version.
 * <p>
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details. A copy of the GNU Lesser General Public License
 * is distributed along with this program and can be found at
 * <http://www.gnu.org/licenses/lgpl.html>.
 */
package ddf.test.itests.common;

import java.io.IOException;
import java.util.UUID;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrSubstitutor;
import org.apache.tika.io.IOUtils;

import com.google.common.collect.ImmutableMap;

/**
 * Helper class containing test data.
 */
public final class Library {

    public static final String VARIABLE_DELIMETER = "$";

    private Library() {
        // static util class
    }

    public static String getSimpleGeoJson() {
        return "{\r\n" + "    \"properties\": {\r\n" + "        \"title\": \"myTitle\",\r\n"
                + "        \"thumbnail\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAALAAgDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUH/8QAJBAAAAQFAwUAAAAAAAAAAAAAABETFAEDBBIVAgUGISJRYZP/xAAVAQEBAAAAAAAAAAAAAAAAAAADBf/EABkRAAMAAwAAAAAAAAAAAAAAAAABAwISIv/aAAwDAQACEQMRAD8A3fRvVTHmTS+RjkUfbolC+fUBDhR0zXMN5WUyibqyClrhMj8WdoAtynSGLfJ//9k=\",\r\n"
                + "        \"created\": \"2012-09-01T00:09:19.368+0000\",\r\n"
                + "        \"metadata-content-type-version\": \"myVersion\",\r\n"
                + "        \"metadata-content-type\": \"myType\",\r\n"
                + "        \"metadata\": \"<xml>text</xml>\",\r\n"
                + "        \"modified\": \"2012-09-01T00:09:19.368+0000\"\r\n" + "    },\r\n"
                + "    \"type\": \"Feature\",\r\n" + "    \"geometry\": {\r\n" + "        \"type\": \"Point\",\r\n"
                + "        \"coordinates\": [\r\n" + "            30.0,\r\n" + "            10.0\r\n"
                + "        ]\r\n" + "    }\r\n" + "} ";
    }

    public static String getSimpleXml() {
        return getSimpleXml("http://example.iana.org/");
    }

    public static String getSimpleXmlNoDec(String uri) {
        return "<metacard xmlns=\"urn:catalog:metacard\" xmlns:ns2=\"http://www.opengis.net/gml\" xmlns:ns3=\"http://www.w3.org/1999/xlink\" xmlns:ns4=\"http://www.w3.org/2001/SMIL20/\" xmlns:ns5=\"http://www.w3.org/2001/SMIL20/Language\">\n"
                + "    <type>ddf.metacard</type>\n" + "    <source>ddf.distribution</source>\n"
                + "    <string name=\"metadata-content-type-version\">\n" + "        <value>myVersion</value>\n"
                + "    </string>\n" + "    <string name=\"title\">\n" + "        <value>myXmlTitle</value>\n"
                + "    </string>\n" + "    <geometry name=\"location\">\n" + "        <value>\n"
                + "            <ns2:Point>\n" + "                <ns2:pos>30.0 10.0</ns2:pos>\n"
                + "            </ns2:Point>\n" + "        </value>\n" + "    </geometry>\n"
                + "    <dateTime name=\"created\">\n" + "        <value>2013-04-18T10:50:27.371-07:00</value>\n"
                + "    </dateTime>\n" + "    <dateTime name=\"modified\">\n"
                + "        <value>2013-04-18T10:50:27.371-07:00</value>\n" + "    </dateTime>\n"
                + "    <base64Binary name=\"thumbnail\">\n"
                + "        <value>/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAALAAgDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUH/8QAJBAAAAQFAwUAAAAAAAAAAAAAABETFAEDBBIVAgUGISJRYZP/xAAVAQEBAAAAAAAAAAAAAAAAAAADBf/EABkRAAMAAwAAAAAAAAAAAAAAAAABAwISIv/aAAwDAQACEQMRAD8A3fRvVTHmTS+RjkUfbolC+fUBDhR0zXMN5WUyibqyClrhMj8WdoAtynSGLfJ//9k=</value>\n"
                + "    </base64Binary>\n" + "    <stringxml name=\"metadata\">\n" + "        <value>\n"
                + "            <xml xmlns:ns6=\"urn:catalog:metacard\" xmlns=\"\">text</xml>\n"
                + "        </value>\n" + "    </stringxml>\n" + "    <string name=\"metadata-content-type\">\n"
                + "        <value>myType</value>\n" + "    </string>\n" + "    <string name=\"resource-uri\">\n"
                + "        <value>" + uri + "</value>\n" + "    </string>\n" + "</metacard>\n";
    }

    public static String getSimpleXml(String uri) {
        return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + getSimpleXmlNoDec(uri);
    }

    public static String getCswQuery(String propertyName, String literalValue, String ouputFormat,
            String outputSchema) {

        String schema = "";
        if (StringUtils.isNotBlank(outputSchema)) {
            schema = "outputSchema=\"" + outputSchema + "\" ";
        }

        return "<csw:GetRecords resultType=\"results\" outputFormat=\"" + ouputFormat + "\" " + schema
                + "startPosition=\"1\" maxRecords=\"10\" service=\"CSW\" version=\"2.0.2\" xmlns:ns2=\"http://www.opengis.net/ogc\" xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\" xmlns:ns4=\"http://www.w3.org/1999/xlink\" xmlns:ns3=\"http://www.opengis.net/gml\" xmlns:ns9=\"http://www.w3.org/2001/SMIL20/Language\" xmlns:ns5=\"http://www.opengis.net/ows\" xmlns:ns6=\"http://purl.org/dc/elements/1.1/\" xmlns:ns7=\"http://purl.org/dc/terms/\" xmlns:ns8=\"http://www.w3.org/2001/SMIL20/\">"
                + "    <ns10:Query typeNames=\"csw:Record\" xmlns=\"\" xmlns:ns10=\"http://www.opengis.net/cat/csw/2.0.2\">"
                + "        <ns10:ElementSetName>full</ns10:ElementSetName>"
                + "        <ns10:Constraint version=\"1.1.0\">" + "            <ns2:Filter>"
                + "                <ns2:PropertyIsLike wildCard=\"*\" singleChar=\"#\" escapeChar=\"!\">"
                + "                    <ns2:PropertyName>" + propertyName + "</ns2:PropertyName>"
                + "                    <ns2:Literal>" + literalValue + "</ns2:Literal>"
                + "                </ns2:PropertyIsLike>" + "            </ns2:Filter>"
                + "        </ns10:Constraint>" + "    </ns10:Query>" + "</csw:GetRecords>";
    }

    public static String getCswSubscription(String propertyName, String literalValue, String ouputFormat,
            String outputSchema, String responseHandler) {

        String schema = "";
        if (StringUtils.isNotBlank(outputSchema)) {
            schema = "outputSchema=\"" + outputSchema + "\" ";
        }

        return "<csw:GetRecords resultType=\"results\" outputFormat=\"" + ouputFormat + "\" " + schema
                + "startPosition=\"1\" maxRecords=\"10\" service=\"CSW\" version=\"2.0.2\" xmlns:ns2=\"http://www.opengis.net/ogc\" xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\" xmlns:ns4=\"http://www.w3.org/1999/xlink\" xmlns:ns3=\"http://www.opengis.net/gml\" xmlns:ns9=\"http://www.w3.org/2001/SMIL20/Language\" xmlns:ns5=\"http://www.opengis.net/ows\" xmlns:ns6=\"http://purl.org/dc/elements/1.1/\" xmlns:ns7=\"http://purl.org/dc/terms/\" xmlns:ns8=\"http://www.w3.org/2001/SMIL20/\">"
                + "    <csw:ResponseHandler>" + responseHandler + "</csw:ResponseHandler>"
                + "    <ns10:Query typeNames=\"csw:Record\" xmlns=\"\" xmlns:ns10=\"http://www.opengis.net/cat/csw/2.0.2\">"
                + "        <ns10:ElementSetName>full</ns10:ElementSetName>"
                + "        <ns10:Constraint version=\"1.1.0\">" + "            <ns2:Filter>"
                + "                <ns2:PropertyIsLike wildCard=\"*\" singleChar=\"#\" escapeChar=\"!\">"
                + "                    <ns2:PropertyName>" + propertyName + "</ns2:PropertyName>"
                + "                    <ns2:Literal>" + literalValue + "</ns2:Literal>"
                + "                </ns2:PropertyIsLike>" + "            </ns2:Filter>"
                + "        </ns10:Constraint>" + "    </ns10:Query>" + "</csw:GetRecords>";
    }

    public static String getCswQuery(String propertyName, String literalValue) {
        return getCswQuery(propertyName, literalValue, "application/xml", "http://www.opengis.net/cat/csw/2.0.2");
    }

    public static String getCswSubscription(String propertyName, String literalValue, String responseHandler) {
        return getCswSubscription(propertyName, literalValue, "application/xml",
                "http://www.opengis.net/cat/csw/2.0.2", responseHandler);
    }

    public static String getCswQueryMetacardXml(String propertyName, String literalValue) {
        return getCswQuery(propertyName, literalValue, "application/xml", "urn:catalog:metacard");
    }

    public static String getCswQueryJson(String propertyName, String literalValue) {
        return getCswQuery(propertyName, literalValue, "application/json", null);
    }

    public static String getCswIngest() {
        return getCswInsert("csw:Record", getCswRecord(UUID.randomUUID().toString()));
    }

    public static String getCswRecord(String id) {
        return "        <csw:Record\n" + "            xmlns:ows=\"http://www.opengis.net/ows\"\n"
                + "            xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "            xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"
                + "            xmlns:dct=\"http://purl.org/dc/terms/\"\n"
                + "            xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" + "            <dc:identifier>"
                + id + "</dc:identifier>\n" + "            <dc:title>Aliquam fermentum purus quis arcu</dc:title>\n"
                + "            <dc:type>http://purl.org/dc/dcmitype/Text</dc:type>\n"
                + "            <dc:subject>Hydrography--Dictionaries</dc:subject>\n"
                + "            <dc:format>application/pdf</dc:format>\n"
                + "            <dc:date>2006-05-12</dc:date>\n"
                + "            <dct:abstract>Vestibulum quis ipsum sit amet metus imperdiet vehicula. Nulla scelerisque cursus mi.</dct:abstract>\n"
                + "            <ows:BoundingBox crs=\"urn:x-ogc:def:crs:EPSG:6.11:4326\">\n"
                + "                <ows:LowerCorner>44.792 -6.171</ows:LowerCorner>\n"
                + "                <ows:UpperCorner>51.126 -2.228</ows:UpperCorner>\n"
                + "            </ows:BoundingBox>\n" + "        </csw:Record>\n";
    }

    public static String getCswInsert(String typeName, String record) {
        return "<csw:Transaction\n" + "    service=\"CSW\"\n" + "    version=\"2.0.2\"\n"
                + "    verboseResponse=\"true\"\n" + "    xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\">\n"
                + "    <csw:Insert typeName=\"" + typeName + "\">\n" + record + "    </csw:Insert>\n"
                + "</csw:Transaction>";
    }

    public static String getRegistryNode() throws IOException {
        return IOUtils.toString(Library.class.getResourceAsStream("/csw-rim-node.xml"));
    }

    public static String getCswRegistryInsert() throws IOException {
        return Library.getCswInsert("rim:RegistryPackage", getRegistryNode());
    }

    public static String getCswRegistryUpdate() throws IOException {
        return "<csw:Transaction\n" + "    service=\"CSW\"\n" + "    version=\"2.0.2\"\n"
                + "    verboseResponse=\"true\"\n" + "    xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\">\n"
                + "    <csw:Update typeName=\"rim:RegistryPackage\">\n" + getRegistryNode() + "\n"
                + "    </csw:Update>\n" + "</csw:Transaction>";
    }

    public static String getCswRegistryDelete() throws IOException {
        return "<csw:Transaction service=\"CSW\"\n"
                + "   version=\"2.0.2\" xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "   xmlns:ogc=\"http://www.opengis.net/ogc\">\n"
                + "  <csw:Delete typeName=\"rim:RegistryPackage\" handle=\"something\">\n"
                + "    <csw:Constraint version=\"2.0.0\">\n" + "      <ogc:Filter>\n"
                + "        <ogc:PropertyIsEqualTo>\n"
                + "            <ogc:PropertyName>registry-id</ogc:PropertyName>\n"
                + "            <ogc:Literal>urn:uuid:2014ca7f59ac46f495e32b4a67a51276</ogc:Literal>\n"
                + "        </ogc:PropertyIsEqualTo>\n" + "      </ogc:Filter>\n" + "    </csw:Constraint>\n"
                + "  </csw:Delete>\n" + "</csw:Transaction>";
    }

    public static String getCswFilterDelete() {
        return "<csw:Transaction service=\"CSW\"\n"
                + "   version=\"2.0.2\" xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "   xmlns:ogc=\"http://www.opengis.net/ogc\">\n"
                + "  <csw:Delete typeName=\"csw:Record\" handle=\"something\">\n"
                + "    <csw:Constraint version=\"2.0.0\">\n" + "      <ogc:Filter>\n"
                + "        <ogc:PropertyIsEqualTo>\n" + "            <ogc:PropertyName>title</ogc:PropertyName>\n"
                + "            <ogc:Literal>Aliquam fermentum purus quis arcu</ogc:Literal>\n"
                + "        </ogc:PropertyIsEqualTo>\n" + "      </ogc:Filter>\n" + "    </csw:Constraint>\n"
                + "  </csw:Delete>\n" + "</csw:Transaction>";
    }

    public static String getCswCqlDelete() {
        return "<csw:Transaction service=\"CSW\"\n"
                + "   version=\"2.0.2\" xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "   xmlns:ogc=\"http://www.opengis.net/ogc\">\n"
                + "  <csw:Delete typeName=\"csw:Record\" handle=\"something\">\n"
                + "    <csw:Constraint version=\"2.0.0\">\n" + "      <ogc:CqlText>\n"
                + "        title = 'Aliquam fermentum purus quis arcu'\n" + "      </ogc:CqlText>\n"
                + "    </csw:Constraint>\n" + "  </csw:Delete>\n" + "</csw:Transaction>";
    }

    public static String getCswCqlDeleteNone() {
        return "<csw:Transaction service=\"CSW\"\n"
                + "   version=\"2.0.2\" xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "   xmlns:ogc=\"http://www.opengis.net/ogc\">\n"
                + "  <csw:Delete typeName=\"csw:Record\" handle=\"something\">\n"
                + "    <csw:Constraint version=\"2.0.0\">\n" + "      <ogc:CqlText>\n"
                + "        title = 'fake title'\n" + "      </ogc:CqlText>\n" + "    </csw:Constraint>\n"
                + "  </csw:Delete>\n" + "</csw:Transaction>";
    }

    public static String getCombinedCswInsertAndDelete() {
        return "<csw:Transaction\n" + "    service=\"CSW\"\n" + "    version=\"2.0.2\"\n"
                + "    verboseResponse=\"true\"\n" + "    xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "    xmlns:ogc=\"http://www.opengis.net/ogc\">\n"
                + "    <csw:Delete typeName=\"csw:Record\" handle=\"something\">\n"
                + "      <csw:Constraint version=\"2.0.0\">\n" + "        <ogc:CqlText>\n"
                + "          title = 'Aliquam fermentum purus quis arcu'\n" + "        </ogc:CqlText>\n"
                + "      </csw:Constraint>\n" + "    </csw:Delete>\n" + "    <csw:Insert typeName=\"csw:Record\">\n"
                + "        <csw:Record\n" + "            xmlns:ows=\"http://www.opengis.net/ows\"\n"
                + "            xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "            xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"
                + "            xmlns:dct=\"http://purl.org/dc/terms/\"\n"
                + "            xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"
                + "            <dc:identifier>123</dc:identifier>\n"
                + "            <dc:title>A Different Title</dc:title>\n"
                + "            <dc:type>http://purl.org/dc/dcmitype/Text</dc:type>\n"
                + "            <dc:subject>Hydrography--Dictionaries</dc:subject>\n"
                + "            <dc:format>application/pdf</dc:format>\n"
                + "            <dc:date>2006-05-12</dc:date>\n"
                + "            <dct:abstract>Vestibulum quis ipsum sit amet metus imperdiet vehicula. Nulla scelerisque cursus mi.</dct:abstract>\n"
                + "            <ows:BoundingBox crs=\"urn:x-ogc:def:crs:EPSG:6.11:4326\">\n"
                + "                <ows:LowerCorner>44.792 -6.171</ows:LowerCorner>\n"
                + "                <ows:UpperCorner>51.126 -2.228</ows:UpperCorner>\n"
                + "            </ows:BoundingBox>\n" + "        </csw:Record>\n" + "    </csw:Insert>\n"
                + "  </csw:Transaction>";
    }

    public static String getCswUpdateByNewRecord() {
        return "<csw:Transaction\n" + "    service=\"CSW\"\n" + "    version=\"2.0.2\"\n"
                + "    verboseResponse=\"true\"\n" + "    xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\">\n"
                + "    <csw:Update>\n" + "        <csw:Record\n"
                + "            xmlns:ows=\"http://www.opengis.net/ows\"\n"
                + "            xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "            xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"
                + "            xmlns:dct=\"http://purl.org/dc/terms/\"\n"
                + "            xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"
                + "            <dc:identifier>identifier placeholder</dc:identifier>\n"
                + "            <dc:title>Updated Title</dc:title>\n"
                + "            <dc:type>http://purl.org/dc/dcmitype/Text</dc:type>\n"
                + "            <dc:subject>Updated Subject</dc:subject>\n"
                + "            <dc:format>application/pdf</dc:format>\n"
                + "            <dc:date>2015-08-10</dc:date>\n"
                + "            <dct:abstract>Vestibulum quis ipsum sit amet metus imperdiet vehicula. Nulla scelerisque cursus mi.</dct:abstract>\n"
                + "            <ows:BoundingBox crs=\"urn:x-ogc:def:crs:EPSG:6.11:4326\">\n"
                + "                <ows:LowerCorner>1.0 2.0</ows:LowerCorner>\n"
                + "                <ows:UpperCorner>3.0 4.0</ows:UpperCorner>\n"
                + "            </ows:BoundingBox>\n" + "        </csw:Record>\n" + "    </csw:Update>\n"
                + "</csw:Transaction>";
    }

    public static String getCswUpdateByFilterConstraint() {
        return "<csw:Transaction\n" + "    service=\"CSW\"\n" + "    version=\"2.0.2\"\n"
                + "    verboseResponse=\"true\"\n" + "    xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "    xmlns:ogc=\"http://www.opengis.net/ogc\">\n" + "    <csw:Update>\n"
                + "      <csw:RecordProperty>\n" + "        <csw:Name>title</csw:Name>\n"
                + "        <csw:Value>Updated Title</csw:Value>\n" + "      </csw:RecordProperty>\n"
                + "      <csw:RecordProperty>\n" + "        <csw:Name>date</csw:Name>\n"
                + "        <csw:Value>2015-08-25</csw:Value>\n" + "      </csw:RecordProperty>\n"
                + "      <csw:RecordProperty>\n" + "        <csw:Name>format</csw:Name>\n"
                + "        <csw:Value></csw:Value>\n" + "      </csw:RecordProperty>\n"
                + "      <csw:Constraint version=\"2.0.0\">\n" + "        <ogc:Filter>\n"
                + "          <ogc:PropertyIsEqualTo>\n" + "            <ogc:PropertyName>title</ogc:PropertyName>\n"
                + "            <ogc:Literal>Aliquam fermentum purus quis arcu</ogc:Literal>\n"
                + "          </ogc:PropertyIsEqualTo>\n" + "        </ogc:Filter>\n" + "      </csw:Constraint>\n"
                + "    </csw:Update>\n" + "</csw:Transaction>";
    }

    public static String getCswUpdateRemoveAttributesByCqlConstraint() {
        return "<csw:Transaction\n" + "service=\"CSW\"\n" + "version=\"2.0.2\"\n" + "  verboseResponse=\"true\"\n"
                + "  xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "  xmlns:ogc=\"http://www.opengis.net/ogc\">\n" + "  <csw:Update>\n"
                + "    <csw:RecordProperty>\n" + "      <csw:Name>title</csw:Name>\n"
                + "    </csw:RecordProperty>\n" + "    <csw:RecordProperty>\n" + "      <csw:Name>date</csw:Name>\n"
                + "    </csw:RecordProperty>\n" + "    <csw:RecordProperty>\n"
                + "      <csw:Name>location</csw:Name>\n" + "    </csw:RecordProperty>\n"
                + "    <csw:Constraint version=\"2.0.0\">\n" + "      <ogc:CqlText>\n"
                + "        title = 'Aliquam fermentum purus quis arcu'\n" + "      </ogc:CqlText>\n"
                + "    </csw:Constraint>\n" + "  </csw:Update>\n" + "</csw:Transaction>";
    }

    public static String getGetRecordByIdUrl() {
        return "?service=CSW&version=2.0.2&request=GetRecordById&NAMESPACE=xmlns="
                + "http://www.opengis.net/cat/csw/2.0.2&ElementSetName=full&"
                + "outputFormat=application/xml&outputSchema=http://www.opengis.net/cat/csw/2.0.2&"
                + "id=placeholder_id";
    }

    public static String getGetRecordByIdProductRetrievalUrl() {
        return "?service=CSW&version=2.0.2&request=GetRecordById&NAMESPACE=xmlns="
                + "http://www.opengis.net/cat/csw/2.0.2&" + "outputFormat=application/octet-stream&outputSchema="
                + "http://www.iana.org/assignments/media-types/application/octet-stream&" + "id=placeholder_id";
    }

    public static String getGetRecordByIdXml() {
        return "<GetRecordById xmlns=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "xmlns:ogc=\"http://www.opengis.net/ogc\"\n"
                + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
                + "service=\"CSW\" version=\"2.0.2\" outputFormat=\"application/xml\"\n"
                + "outputSchema=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "xsi:schemaLocation=\"http://www.opengis.net/cat/csw/2.0.2../../../csw/2.0.2/CSW-discovery.xsd\">\n"
                + "  <ElementSetName>full</ElementSetName>\n" + "  <Id>placeholder_id_1</Id>\n"
                + "  <Id>placeholder_id_2</Id>\n" + "</GetRecordById>";
    }

    public static String getGetRecordByIdProductRetrievalXml() {
        return "<GetRecordById xmlns=\"http://www.opengis.net/cat/csw/2.0.2\"\n"
                + "xmlns:ogc=\"http://www.opengis.net/ogc\"\n"
                + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
                + "service=\"CSW\" version=\"2.0.2\" outputFormat=\"application/octet-stream\"\n"
                + "outputSchema=\"http://www.iana.org/assignments/media-types/application/octet-stream\">\n"
                + "  <Id>placeholder_id_1</Id>\n" + "</GetRecordById>";
    }

    public static String getCswRecordResponse() throws IOException {
        return IOUtils.toString(Library.class.getResourceAsStream("/get-records-response.xml"));
    }

    public static String getFileContent(String filePath) {

        return getFileContent(filePath, ImmutableMap.<String, String>builder().build());
    }

    /**
     * Variables to be replaced in a resource file should be in the format: $variableName$
     * The variable to replace in the file should also also match the parameter names of the method calling getFileContent.
     *
     * @param filePath
     * @param params
     * @return
     */
    public static String getFileContent(String filePath, ImmutableMap<String, String> params) {

        StrSubstitutor strSubstitutor = new StrSubstitutor(params);

        strSubstitutor.setVariablePrefix(VARIABLE_DELIMETER);
        strSubstitutor.setVariableSuffix(VARIABLE_DELIMETER);
        String fileContent = null;

        try {
            fileContent = org.apache.commons.io.IOUtils.toString(Library.class.getResourceAsStream(filePath),
                    "UTF-8");
        } catch (IOException e) {
            throw new RuntimeException("Failed to read filepath: " + filePath);
        }

        return strSubstitutor.replace(fileContent);
    }
}