package org.geowebcache.arcgis.config;
import com.thoughtworks.xstream.XStream;
import junit.framework.TestCase;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.net.URL;
public class CacheInfoPersisterTest extends TestCase {
public void testLoadSpatialReference() {
String spatialRef = "<SpatialReference xsi:type='typens:ProjectedCoordinateSystem'>" //
+ " <WKT>PROJCS["NZGD_2000_New_Zealand_Transverse_Mercator",GEOGCS["GCS_NZGD_2000",DATUM["D_NZGD_2000",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",1600000.0],PARAMETER["False_Northing",10000000.0],PARAMETER["Central_Meridian",173.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",2193]]</WKT>" //
+ " <XOrigin>-4020900</XOrigin>" //
+ " <YOrigin>1900</YOrigin>" //
+ " <XYScale>450445547.3910538</XYScale>" //
+ " <ZOrigin>0.5</ZOrigin>" //
+ " <ZScale>1</ZScale>" //
+ " <MOrigin>-100000</MOrigin>" //
+ " <MScale>10000</MScale>" //
+ " <XYTolerance>0.0037383177570093459</XYTolerance>" //
+ " <ZTolerance>2</ZTolerance>" //
+ " <MTolerance>2</MTolerance>" //
+ " <HighPrecision>true</HighPrecision>" //
+ " <WKID>2193</WKID>" //
+ " <LatestWKID>2193</LatestWKID>" //
+ "</SpatialReference>";
CacheInfoPersister persister = new CacheInfoPersister();
XStream xs = persister.getConfiguredXStream();
SpatialReference sr = (SpatialReference) xs.fromXML(new StringReader(spatialRef));
assertNotNull(sr);
String wkt = "PROJCS[\"NZGD_2000_New_Zealand_Transverse_Mercator\",GEOGCS[\"GCS_NZGD_2000\",DATUM[\"D_NZGD_2000\",SPHEROID[\"GRS_1980\",6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"False_Easting\",1600000.0],PARAMETER[\"False_Northing\",10000000.0],PARAMETER[\"Central_Meridian\",173.0],PARAMETER[\"Scale_Factor\",0.9996],PARAMETER[\"Latitude_Of_Origin\",0.0],UNIT[\"Meter\",1.0],AUTHORITY[\"EPSG\",2193]]";
assertEquals(wkt, sr.getWKT());
assertEquals(-4020900, sr.getXOrigin(), 1e-6);
assertEquals(1900, sr.getYOrigin(), 1e-6);
assertEquals(450445547.3910538, sr.getXYScale(), 1e-6);
assertEquals(0.5, sr.getZOrigin(), 1e-6);
assertEquals(1, sr.getZScale(), 1e-6);
assertEquals(10000, sr.getMScale(), 1e-6);
assertEquals(0.0037383177570093459, sr.getXYTolerance(), 1e-6);
assertEquals(2, sr.getZTolerance(), 1e-6);
assertEquals(2, sr.getMTolerance(), 1e-6);
assertEquals(true, sr.isHighPrecision());
assertEquals(2193, sr.getWKID());
assertEquals(2193, sr.getLatestWKID());
}
public void testLoadTileOrigin() {
String tileOrigin = "<TileOrigin xsi:type='typens:PointN'>" //
+ " <X>-4020900</X>" //
+ " <Y>19998100</Y>" //
+ "</TileOrigin>";
CacheInfoPersister persister = new CacheInfoPersister();
XStream xs = persister.getConfiguredXStream();
TileOrigin to = (TileOrigin) xs.fromXML(new StringReader(tileOrigin));
assertNotNull(to);
assertEquals(-4020900, to.getX(), 1e-6);
assertEquals(19998100, to.getY(), 1e-6);
}
public void testLoadTileCacheInfo() {
String tileCacheInfo = "<TileCacheInfo xsi:type='typens:TileCacheInfo'>" //
+ " <SpatialReference xsi:type='typens:ProjectedCoordinateSystem'>" //
+ " </SpatialReference>" //
+ " <TileOrigin xsi:type='typens:PointN'>" //
+ " <X>-4020900</X>" //
+ " <Y>19998100</Y>" //
+ " </TileOrigin>" //
+ " <TileCols>512</TileCols>" //
+ " <TileRows>512</TileRows>" //
+ " <DPI>96</DPI>" //
+ " <PreciseDPI>96</PreciseDPI>" //
+ " <LODInfos xsi:type='typens:ArrayOfLODInfo'>" //
+ " <LODInfo xsi:type='typens:LODInfo'>" //
+ " </LODInfo>" //
+ " </LODInfos>" //
+ "</TileCacheInfo>";
CacheInfoPersister persister = new CacheInfoPersister();
XStream xs = persister.getConfiguredXStream();
TileCacheInfo tci = (TileCacheInfo) xs.fromXML(new StringReader(tileCacheInfo));
assertNotNull(tci);
assertNotNull(tci.getSpatialReference());
assertNotNull(tci.getTileOrigin());
assertEquals(512, tci.getTileCols());
assertEquals(512, tci.getTileRows());
assertEquals(96, tci.getDPI());
assertEquals(96, tci.getPreciseDPI());
assertNotNull(tci.getLodInfos());
assertEquals(1, tci.getLodInfos().size());
}
public void testLoadLODInfo() {
String lodInfo = "<LODInfo xsi:type='typens:LODInfo'>" //
+ " <LevelID>10</LevelID>" //
+ " <Scale>6000000</Scale>" //
+ " <Resolution>1587.5031750063501</Resolution>" //
+ "</LODInfo>";
CacheInfoPersister persister = new CacheInfoPersister();
XStream xs = persister.getConfiguredXStream();
LODInfo li = (LODInfo) xs.fromXML(new StringReader(lodInfo));
assertNotNull(li);
assertEquals(10, li.getLevelID());
assertEquals(6000000, li.getScale(), 1e-6);
assertEquals(1587.5031750063501, li.getResolution(), 1e-6);
}
public void testLoadTileImageInfo() {
String tileImageInfo = "<TileImageInfo xsi:type='typens:TileImageInfo'>"//
+ " <CacheTileFormat>JPEG</CacheTileFormat>"//
+ " <CompressionQuality>80</CompressionQuality>"//
+ " <Antialiasing>true</Antialiasing>"//
+ " <BandCount>1</BandCount>"//
+ " <LERCError>0</LERCError>"//
+ "</TileImageInfo>";
CacheInfoPersister persister = new CacheInfoPersister();
XStream xs = persister.getConfiguredXStream();
TileImageInfo tii = (TileImageInfo) xs.fromXML(new StringReader(tileImageInfo));
assertNotNull(tii);
assertEquals("JPEG", tii.getCacheTileFormat());
assertEquals(80f, tii.getCompressionQuality(), 1e-6f);
assertTrue(tii.isAntialiasing());
assertEquals(1, tii.getBandCount());
assertEquals(0.0f, tii.getLERCError());
}
public void testLoadCacheStorageInfo() {
String cacheStorageInfo = "<CacheStorageInfo xsi:type='typens:CacheStorageInfo'>"//
+ " <StorageFormat>esriMapCacheStorageModeExploded</StorageFormat>"//
+ " <PacketSize>10</PacketSize>"//
+ "</CacheStorageInfo>";
CacheInfoPersister persister = new CacheInfoPersister();
XStream xs = persister.getConfiguredXStream();
CacheStorageInfo csi = (CacheStorageInfo) xs.fromXML(new StringReader(cacheStorageInfo));
assertNotNull(csi);
assertEquals(CacheStorageInfo.EXPLODED_FORMAT_CODE, csi.getStorageFormat());
assertEquals(10, csi.getPacketSize());
}
public void testLoadEnvelopeN() {
String envelopeN = "<EnvelopeN xsi:type='typens:EnvelopeN' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema'"//
+ "xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.0'>"//
+ "<XMin>700000</XMin>"//
+ "<YMin>-450000</YMin>"//
+ "<XMax>1588888.8888888895</XMax>"//
+ "<YMax>440000</YMax>"//
+ "</EnvelopeN>";
CacheInfoPersister persister = new CacheInfoPersister();
XStream xs = persister.getConfiguredXStream();
EnvelopeN en = (EnvelopeN) xs.fromXML(new StringReader(envelopeN));
assertNotNull(en);
assertEquals(700000, en.getXmin(), 1e-6);
assertEquals(-450000, en.getYmin(), 1e-6);
assertEquals(1588888.8888888895, en.getXmax(), 1e-6);
assertEquals(440000, en.getYmax(), 1e-6);
}
public void testLoadCacheInfo_ArcGIS_92() throws Exception {
URL url = getClass().getResource("/arcgis_09.2_conf.xml");
CacheInfo ci = load(url);
assertNotNull(ci);
assertNotNull(ci.getTileCacheInfo());
assertNotNull(ci.getTileCacheInfo().getSpatialReference());
assertNotNull(ci.getTileCacheInfo().getTileOrigin());
assertNotNull(ci.getTileCacheInfo().getLodInfos());
assertEquals(18, ci.getTileCacheInfo().getLodInfos().size());
assertNotNull(ci.getTileImageInfo());
assertNotNull(ci.getCacheStorageInfo());
}
public void testLoadCacheInfo_ArcGIS_93() throws Exception {
URL url = getClass().getResource("/arcgis_09.3_conf.xml");
CacheInfo ci = load(url);
assertNotNull(ci);
assertNotNull(ci.getTileCacheInfo());
assertNotNull(ci.getTileCacheInfo().getSpatialReference());
assertNotNull(ci.getTileCacheInfo().getTileOrigin());
assertNotNull(ci.getTileCacheInfo().getLodInfos());
assertEquals(11, ci.getTileCacheInfo().getLodInfos().size());
assertNotNull(ci.getTileImageInfo());
assertNotNull(ci.getCacheStorageInfo());
}
public void testLoadCacheInfo_ArcGIS_10() throws Exception {
URL url = getClass().getResource("/arcgis_10.0_conf.xml");
CacheInfo ci = load(url);
assertNotNull(ci);
assertNotNull(ci.getTileCacheInfo());
assertNotNull(ci.getTileCacheInfo().getSpatialReference());
assertNotNull(ci.getTileCacheInfo().getTileOrigin());
assertNotNull(ci.getTileCacheInfo().getLodInfos());
assertEquals(15, ci.getTileCacheInfo().getLodInfos().size());
assertNotNull(ci.getTileImageInfo());
assertNotNull(ci.getCacheStorageInfo());
}
private CacheInfo load(final URL url) throws Exception {
CacheInfoPersister persister = new CacheInfoPersister();
InputStream stream = url.openStream();
Reader reader = new InputStreamReader(stream);
CacheInfo cacheInfo;
try {
cacheInfo = persister.load(reader);
} finally {
stream.close();
}
return cacheInfo;
}
}