package nl.ipo.cds.etl.process;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.sql.Date;
import java.sql.Timestamp;
import javax.xml.stream.XMLStreamException;
import nl.ipo.cds.etl.process.helpers.HttpGetUtil;
import nl.ipo.cds.utils.AxiomUtils;
import org.apache.axiom.om.OMElement;
import org.apache.http.client.ClientProtocolException;
import org.junit.Before;
import org.junit.Test;
public class TestMetadataHarvester {
private MetadataHarvester harvester;
@Before
public void createHarvester () {
harvester = new MetadataHarvester ("http://www.provinciaalgeoregister-test.nl/pgr-csw/");
}
@Test
public void testGetFeatureCollectionUrl () throws Exception {
final String url = " http://www.provinciaalgeoregister.nl/pgr-csw/services?request=GetRecordById&service=CSW&version=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=89a5cd04-8c75-5361-a0c0-203dc6682812";
final InputStream stream = getClass ().getClassLoader ().getResourceAsStream ("nl/ipo/cds/etl/process/89a5cd04-8c75-5361-a0c0-203dc6682812.xml");
try {
final PgrMetadata metadata = harvester.parseMetadataFromUrl (url, getUrl (url, stream));
assertNotNull (metadata);
String fcUrl = harvester.getFeatureCollectionUrl(metadata);
} finally {
stream.close ();
}
}
@SuppressWarnings("deprecation")
@Test
public void testParseMetadataUrl () throws Exception {
final String url = "http://192.168.122.21/polact_ontgrondingen_v.xml";
final InputStream stream = getClass ().getClassLoader ().getResourceAsStream ("nl/ipo/cds/etl/process/polact_ontgrondingen_v.xml");
try {
final PgrMetadata metadata = harvester.parseMetadataFromUrl (url, getUrl (url, stream));
// Test the metadata:
assertNotNull (metadata);
assertEquals ("http://192.168.122.21/polact_ontgrondingen_v.xml", metadata.getMetadataUrl ());
assertEquals ("http://portal.prvlimburg.nl/geoservices/polact_4b_groene_waarden", metadata.getWfsUrl ());
assertEquals ("polact_ontgrondingen_v", metadata.getFeatureTypeName ());
assertEquals (new Timestamp (new Date (109, 02, 06).getTime ()), metadata.getTimestamp ());
assertEquals ("http://portal.prvlimburg.nl/geoservices/polact_4b_groene_waarden?request=DescribeFeatureType&typename=polact_ontgrondingen_v&service=WFS&version=1.1.0", metadata.getSchemaUrl ());
} finally {
stream.close ();
}
}
@SuppressWarnings("deprecation")
@Test
public void testParseMetadataXsd_withprotocol () throws Exception {
final String url = "http://5.9.86.120/main.html?download&weblink=1ce45bdc72413758b4af31237bf42bbc&realfilename=Transportroutedeel_md_bewerkt.xml";
final InputStream stream = getClass ().getClassLoader ().getResourceAsStream ("nl/ipo/cds/etl/process/Transportroutedeel_md_bewerkt.xml");
// final InputStream stream = new URL(url).openStream();
try {
final PgrMetadata metadata = harvester.parseMetadataFromUrl (url, getUrl (url, stream));
// Test the metadata:
assertNotNull (metadata);
assertEquals (url, metadata.getMetadataUrl ());
assertEquals ("http://5.9.86.120/main.html?download&weblink=245133580414d3563cfa25f1e170043e&realfilename=Transportroutedeel_tst2.gml", metadata.getWfsUrl ());
assertEquals ("Transportroutedeel", metadata.getFeatureTypeName ());
assertEquals (new Timestamp (new Date (113, 9, 4).getTime ()), metadata.getTimestamp ());
// xsd is retrieved from metadata
assertEquals ("http://5.9.86.120/main.html?download&weblink=248ee0b02370782301f92b302b4a3131&realfilename=Transportroutedeel_tst2.xsd", metadata.getSchemaUrl ());
} finally {
stream.close ();
}
}
@SuppressWarnings("deprecation")
@Test
public void testParseMetadataXsd_noprotocol () throws Exception {
final String url = "http://5.9.86.120/main.html?download&weblink=1ce45bdc72413758b4af31237bf42bbc&realfilename=Transportroutedeel_md_bewerkt.xml";
final InputStream stream = getClass ().getClassLoader ().getResourceAsStream ("nl/ipo/cds/etl/process/Transportroutedeel_md_bewerkt-no-w3c-xsd.xml");
try {
final PgrMetadata metadata = harvester.parseMetadataFromUrl (url, getUrl (url, stream));
// Test the metadata:
assertNotNull (metadata);
assertEquals (url, metadata.getMetadataUrl ());
assertEquals ("http://5.9.86.120/main.html?download&weblink=245133580414d3563cfa25f1e170043e&realfilename=Transportroutedeel_tst2.gml", metadata.getWfsUrl ());
assertEquals ("Transportroutedeel", metadata.getFeatureTypeName ());
assertEquals (new Timestamp (new Date (113, 9, 4).getTime ()), metadata.getTimestamp ());
// xsd should have exact same url and name as gml, because it is not retrieved from metadata
assertEquals ("http://5.9.86.120/main.html?download&weblink=245133580414d3563cfa25f1e170043e&realfilename=Transportroutedeel_tst2.xsd", metadata.getSchemaUrl ());
} finally {
stream.close ();
}
}
@SuppressWarnings("deprecation")
@Test
public void testParseMetadataLimburg () throws Exception {
final String uuid = "79ae44d2-1bd9-487a-a622-80214051d5fa";
final String url = "http://www.provinciaalgeoregister.nl/pgr-csw/services?request=GetRecordById&service=CSW&version=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=79ae44d2-1bd9-487a-a622-80214051d5fa";
final InputStream stream = getClass ().getClassLoader ().getResourceAsStream ("nl/ipo/cds/etl/process/limburg-ehs-csw.xml");
try {
final PgrMetadata metadata = harvester.parseMetadataFromPgr (uuid, url, getUrl (url, stream));
// Test the metadata:
assertNotNull (metadata);
assertEquals ("http://www.provinciaalgeoregister.nl/pgr-csw/services?request=GetRecordById&service=CSW&version=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=79ae44d2-1bd9-487a-a622-80214051d5fa", metadata.getMetadataUrl ());
assertEquals ("http://portal.prvlimburg.nl/geoservices/inspire?", metadata.getWfsUrl ());
assertEquals ("EcologischeHoofdstructuur", metadata.getFeatureTypeName ());
assertEquals (new Timestamp (new Date (112, 10, 30).getTime ()), metadata.getTimestamp ());
assertEquals ("http://portal.prvlimburg.nl/geoservices/inspire?request=DescribeFeatureType&typename=EcologischeHoofdstructuur&service=WFS&version=1.1.0", metadata.getSchemaUrl ());
} finally {
stream.close ();
}
}
private HttpGetUtil getUrl (final String url, final InputStream stream) {
return new MockHttpGetUtil (url, stream);
}
private static class MockHttpGetUtil extends HttpGetUtil {
private final InputStream inputStream;
public MockHttpGetUtil (final String url, final InputStream stream) {
super (url);
this.inputStream = stream;
}
@Override
public boolean isValidResponse() throws IOException {
return true;
}
@Override
public void close () {
}
@Override
public OMElement getEntityOMElement () throws ClientProtocolException, URISyntaxException, IOException, XMLStreamException {
return AxiomUtils.getOMElementFromInputStream (inputStream);
}
@Override
public int getStatusCode() throws IOException {
return 200;
}
}
}