package org.geotools.csw; import static org.junit.Assert.*; import java.io.StringReader; import java.net.URI; import java.util.List; import net.opengis.cat.csw20.BriefRecordType; import net.opengis.cat.csw20.RecordType; import net.opengis.cat.csw20.SimpleLiteral; import net.opengis.cat.csw20.SummaryRecordType; import net.opengis.ows10.BoundingBoxType; import org.eclipse.emf.common.util.EList; import org.geotools.ows.OWS; import org.geotools.xml.Encoder; import org.geotools.xml.Parser; import org.junit.Before; import org.junit.Test; public class CSWRecordTest { Parser parser; Encoder encoder; @Before public void setup() { parser = new Parser(new CSWConfiguration()); encoder = new Encoder(new CSWConfiguration()); encoder.getNamespaces().declarePrefix("csw", CSW.NAMESPACE); encoder.getNamespaces().declarePrefix("dc", DC.NAMESPACE); encoder.getNamespaces().declarePrefix("dct", DCT.NAMESPACE); encoder.getNamespaces().declarePrefix("ows", OWS.NAMESPACE); encoder.setIndenting(true); } @Test public void testParseBriefRecord() throws Exception { BriefRecordType br = (BriefRecordType) parser.parse(getClass().getResourceAsStream("BriefRecord.xml")); assertEquals("00180e67-b7cf-40a3-861d-b3a09337b195", br.getIdentifier().get(0).getValue()); assertEquals("Image2000 Product 1 (at1) Multispectral", br.getTitle().get(0).getValue()); assertEquals("Image2000 Product 1 (at1) Multispectral", br.getTitle().get(0).getValue()); assertEquals("dataset", br.getType().getValue()); } @Test public void testRoundTripBriefRecord() throws Exception { BriefRecordType br = (BriefRecordType) parser.parse(getClass().getResourceAsStream("BriefRecord.xml")); String encoded = encoder.encodeAsString(br, CSW.BriefRecord); BriefRecordType reparsed = (BriefRecordType) parser.parse(new StringReader(encoded)); assertTrue(EMFUtils.emfEquals(br, reparsed)); } @Test public void testParseSummaryRecord() throws Exception { SummaryRecordType sr = (SummaryRecordType) parser.parse(getClass().getResourceAsStream("SummaryRecord.xml")); assertEquals("00180e67-b7cf-40a3-861d-b3a09337b195", sr.getIdentifier().get(0).getValue()); assertEquals("Image2000 Product 1 (at1) Multispectral", sr.getTitle().get(0).getValue()); assertEquals("dataset", sr.getType().getValue()); assertEquals("imagery", sr.getSubject().get(0).getValue()); assertEquals("baseMaps", sr.getSubject().get(1).getValue()); assertEquals("earthCover", sr.getSubject().get(2).getValue()); assertEquals("BIL", sr.getFormat().get(0).getValue()); assertEquals("2004-10-04 00:00:00", sr.getModified().get(0).getValue()); String abs = "IMAGE2000 product 1 individual orthorectified scenes. IMAGE2000 was produced from ETM+ Landsat 7 satellite data and provides a consistent European coverage of individual orthorectified scenes in national map projection systems."; assertEquals(abs, sr.getAbstract().get(0).getValue()); } @Test public void testRoundTripSummaryRecord() throws Exception { SummaryRecordType sr = (SummaryRecordType) parser.parse(getClass().getResourceAsStream("SummaryRecord.xml")); String encoded = encoder.encodeAsString(sr, CSW.SummaryRecord); SummaryRecordType reparsed = (SummaryRecordType) parser.parse(new StringReader(encoded)); assertTrue(EMFUtils.emfEquals(sr, reparsed)); } @Test public void testParseRecord() throws Exception { RecordType record = (RecordType) parser.parse(getClass().getResourceAsStream("Record.xml")); BoundingBoxType bbox = record.getBoundingBox().get(0); assertEquals(14.05, bbox.getLowerCorner().get(0)); assertEquals(46.46, bbox.getLowerCorner().get(1)); assertEquals(17.24, bbox.getUpperCorner().get(0)); assertEquals(48.42, bbox.getUpperCorner().get(1)); EList<SimpleLiteral> dcElements = record.getDCElement(); assertEquals(11, dcElements.size()); assertEquals("00180e67-b7cf-40a3-861d-b3a09337b195", getValue(dcElements, "identifier")); assertEquals("Image2000 Product 1 (at1) Multispectral", getValue(dcElements, "title")); assertEquals("dataset", getValue(dcElements, "type")); assertEquals("Vegetation", getValue(dcElements, "subject", 0)); assertEquals(new URI("http://www.digest.org/2.1"), getScheme(dcElements, "subject", 0)); assertEquals("baseMaps", getValue(dcElements, "subject", 1)); assertEquals("earthCover", getValue(dcElements, "subject", 2)); assertEquals("BIL", getValue(dcElements, "format")); assertEquals("Vanda Lima", getValue(dcElements, "creator")); assertEquals("en", getValue(dcElements, "language")); assertEquals("2004-10-04 00:00:00", getValue(dcElements, "modified")); String abs = "IMAGE2000 product 1 individual orthorectified scenes. IMAGE2000 was produced from ETM+ Landsat 7 satellite data and provides a consistent European coverage of individual orthorectified scenes in national map projection systems."; assertEquals(abs, getValue(dcElements, "abstract", 0)); } @Test public void testRoundTripRecord() throws Exception { RecordType record = (RecordType) parser.parse(getClass().getResourceAsStream("Record.xml")); String encoded = encoder.encodeAsString(record, CSW.Record); System.out.println(encoded); RecordType reparsed = (RecordType) parser.parse(new StringReader(encoded)); assertTrue(EMFUtils.emfEquals(record, reparsed)); } private Object getValue(List<SimpleLiteral> elements, String name) { return getValue(elements, name, 0); } private SimpleLiteral getSimpleLiteral(List<SimpleLiteral> elements, String name, int idx) { int curr = 0; for (SimpleLiteral sl : elements) { if(name.equals(sl.getName())) { if(idx == curr) { return sl; } else { curr++; } } } return null; } private Object getValue(List<SimpleLiteral> elements, String name, int idx) { SimpleLiteral sl = getSimpleLiteral(elements, name, idx); if(sl == null) { return null; } else { return sl.getValue(); } } private Object getScheme(List<SimpleLiteral> elements, String name, int idx) { SimpleLiteral sl = getSimpleLiteral(elements, name, idx); if(sl == null) { return null; } else { return sl.getScheme(); } } }