package thredds.catalog; import thredds.catalog2.builder.CatalogBuilder; import thredds.catalog2.xml.parser.ThreddsXmlParserException; import thredds.catalog2.xml.parser.ThreddsXmlParser; import thredds.catalog2.xml.parser.stax.StaxThreddsXmlParser; import java.net.URISyntaxException; import java.net.URI; import java.io.StringReader; import ucar.nc2.util.memory.MemoryCounterAgent; /** * _more_ * * @author edavis * @since 4.0 */ public class LargeCatalogReadUtils { private LargeCatalogReadUtils() {} public static String createExampleRadarServiceCatalogAsString( int numDatasets ) { StringBuilder sb = new StringBuilder(); sb .append( "<?xml version='1.0' encoding='UTF-8'?>\n" ) .append( "<catalog xmlns='http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0'\n") .append( " xmlns:xlink='http://www.w3.org/1999/xlink'\n") .append( " name='Radar Level2 datasets in near real time'\n") .append( " version='1.0.1'>\n" ) .append( "\n" ) .append( " <service name='OPENDAP' serviceType='OPENDAP' base='/thredds/dodsC/nexrad/level2/IDD/'/>\n" ) .append( " <dataset name='RadarLevel2 datasets for available stations and times' collectionType='TimeSeries'\n") .append( " ID='accept=xml&stn=KARX&time_start=2009-04-07T00:00:00Z&time_end=2009-05-22T16:44:39Z'>\n" ) .append( " <metadata inherited='true'>\n" ) .append( " <dataType>Radial</dataType>\n" ) .append( " <dataFormat>NEXRAD2</dataFormat>\n" ) .append( " <serviceName>OPENDAP</serviceName>\n" ) .append( "\n" ) .append( " </metadata>\n" ) .append( "\n" ); for ( int i = 0; i < numDatasets - 1; i++ ) { sb .append( " <dataset name='Level2_KARX_20090522_1518.ar2v' ID='" ).append( 1209322007 + i ).append( "'\n" ) .append( " urlPath='KARX/20090522/Level2_KARX_20090522_1518.ar2v'>\n" ) .append( " <date type='start of ob'>2009-05-22T15:18:00</date>\n" ) .append( " </dataset>" ); } sb .append( " <dataset name=\"Level2_KARX_20090407_0007.ar2v\" ID=\"1616941921\"\n") .append( " urlPath=\"KARX/20090407/Level2_KARX_20090407_0007.ar2v\">\n" ) .append( " <date type=\"start of ob\">2009-04-07T00:07:00</date>\n" ) .append( " </dataset>\n"); sb .append( " </dataset>\n" ) .append( "</catalog>" ); return sb.toString(); } public static InvCatalogImpl parseCatalogIntoInvCatalogImpl( String docBaseUriString ) throws URISyntaxException { InvCatalogFactory fac = InvCatalogFactory.getDefaultFactory( false ); return fac.readXML( docBaseUriString ); } public static InvCatalogImpl parseCatalogIntoInvCatalogImpl( String docAsString, String docBaseUriString ) throws URISyntaxException { InvCatalogFactory fac = InvCatalogFactory.getDefaultFactory( false ); return fac.readXML( docAsString, new URI( docBaseUriString ) ); } public static CatalogBuilder parseCatalogIntoBuilder( String docAsString, String docBaseUriString ) throws URISyntaxException, ThreddsXmlParserException { URI docBaseUri = new URI( docBaseUriString ); ThreddsXmlParser cp = StaxThreddsXmlParser.newInstance(); return cp.parseIntoBuilder( new StringReader( docAsString ), docBaseUri ); } public static CatalogBuilder parseCatalogIntoBuilder( String docUriString ) throws URISyntaxException, ThreddsXmlParserException { URI docUri = new URI( docUriString ); ThreddsXmlParser cp = StaxThreddsXmlParser.newInstance(); return cp.parseIntoBuilder( docUri ); } public static void measureSize( Object o ) { long memShallow = MemoryCounterAgent.sizeOf( o ); long memDeep = MemoryCounterAgent.deepSizeOf( o ); System.out.printf( "%s, shallow=%d, deep=%d%n", o.getClass().getSimpleName(), memShallow, memDeep ); } }