Package org.geoserver.wms.dimension

Source Code of org.geoserver.wms.dimension.DimensionInfoSerializationTest

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2014 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.dimension;

import static org.junit.Assert.*;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.geoserver.catalog.DimensionDefaultValueSetting;
import org.geoserver.catalog.DimensionInfo;
import org.geoserver.catalog.DimensionDefaultValueSetting.Strategy;
import org.geoserver.catalog.impl.DimensionInfoImpl;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.config.util.XStreamPersisterFactory;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.wms.WMSTestSupport;
import org.junit.Test;
import org.w3c.dom.Document;

import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;

public class DimensionInfoSerializationTest extends WMSTestSupport {
   
   
    @Test
    public void testMinStrategyXMLSerialization() throws Exception{
        assertBackAndForthSerialization(Strategy.MINIMUM);
    }
   
    @Test
    public void testMaxStrategyXMLSerialization() throws Exception{
        assertBackAndForthSerialization(Strategy.MAXIMUM);
    }
   
    @Test
    public void testFixedStrategyXMLSerialization() throws Exception{
       assertBackAndForthSerialization(Strategy.FIXED);            
       assertBackAndForthSerialization(Strategy.FIXED,"2014-01-24T13:25:00.000Z");
    }
   
    @Test
    public void testNearestStrategyXMLSerialization() throws Exception{
       assertBackAndForthSerialization(Strategy.NEAREST);
       assertBackAndForthSerialization(Strategy.NEAREST,"2014-01-24T13:25:00.000Z");
    }
   
    protected void assertBackAndForthSerialization(Strategy used) throws Exception {
        assertBackAndForthSerialization(used, null);
    }
    protected void assertBackAndForthSerialization(Strategy used, String referenceValue) throws Exception {
        DimensionDefaultValueSetting setting = new DimensionDefaultValueSetting();
        setting.setStrategyType(used);
        if (referenceValue != null){
            setting.setReferenceValue(referenceValue);
        }
        DimensionInfo di = new DimensionInfoImpl();
        di.setDefaultValue(setting);       
        Document diDOM = marshallToXML(di);
        assertXpathExists("//defaultValue/strategy", diDOM);
        assertXpathEvaluatesTo(used.name(), "//defaultValue/strategy", diDOM);
        if (referenceValue != null){
            assertXpathExists("//defaultValue/referenceValue", diDOM);
            assertXpathEvaluatesTo(referenceValue, "//defaultValue/referenceValue", diDOM);
        }
       
        DimensionInfo di2 = unmarshallFromXML(diDOM);
        assertTrue("Unmarshalled strategy does not match the original one",di2.getDefaultValue().getStrategyType() == used);
       
        if (referenceValue != null){
            assertTrue("Unmarshalled referenceValue does not match the original one", di2.getDefaultValue().getReferenceValue().equals(referenceValue));
        }
    }
   
    protected Document marshallToXML(DimensionInfo di) throws Exception{
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        XStreamPersisterFactory xpf = GeoServerExtensions.bean(XStreamPersisterFactory.class);
        XStreamPersister persister = xpf.createXMLPersister();
        persister.save(di, baos);
        baos.flush();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();       
        DocumentBuilder builder = factory.newDocumentBuilder();
        return builder.parse(new ByteArrayInputStream(baos.toByteArray()));
    }
   
    protected DimensionInfo unmarshallFromXML(Document doc) throws Exception{
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        StreamResult result = new StreamResult(baos);
        transformer.transform(source, result);
        XStreamPersisterFactory xpf = GeoServerExtensions.bean(XStreamPersisterFactory.class);
        XStreamPersister persister = xpf.createXMLPersister();
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        return persister.load(bais, DimensionInfo.class);
    }
}
TOP

Related Classes of org.geoserver.wms.dimension.DimensionInfoSerializationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.