package thredds.metadata;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import thredds.catalog.InvCatalogFactory;
import thredds.catalog.InvCatalogImpl;
import thredds.catalog.InvDatasetImpl;
import thredds.catalog.ThreddsMetadata;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import ucar.nc2.constants.FeatureType;
import ucar.nc2.thredds.MetadataExtractorAcdd;
import ucar.nc2.time.CalendarDate;
import ucar.nc2.units.DateRange;
import ucar.unidata.util.test.category.NeedsCdmUnitTest;
import ucar.unidata.util.test.TestDir;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import static org.junit.Assert.assertEquals;
/**
* Test MetadataExtractor and MetadataExtractorAcdd
*
* @author caron
* @since 11/1/13
*/
@Category(NeedsCdmUnitTest.class)
public class TestMetadataExtractor {
@Test
public void testMetadataExtractorAcdd() throws IOException, URISyntaxException {
String filename = TestDir.cdmUnitTestDir + "agg/pointFeatureCollection/netCDFbuoydata/BOD001_000_20050627_20051109.nc";
NetcdfFile ncfile = NetcdfFile.open(filename);
InvCatalogImpl cat = new InvCatalogImpl("testAcdd", "1.0.5", new URI("file:baseURI"));
InvDatasetImpl ds = new InvDatasetImpl(null, "testAcdd");
ds.finish();
MetadataExtractorAcdd acdd = new MetadataExtractorAcdd(Attribute.makeMap(ncfile.getGlobalAttributes()), ds, ds.getLocalMetadataInheritable());
acdd.extract();
ncfile.close();
cat.addDataset(ds);
cat.finish();
InvCatalogFactory fac = InvCatalogFactory.getDefaultFactory(false);
System.out.printf("%s%n", fac.writeXML(cat));
assertEquals(ds.getDataType(), FeatureType.STATION);
assert ds.getDocumentation("title").startsWith("Seawater temperature data collected from Bodega Head");
assert ds.getDocumentation("summary").startsWith("These seawater data are collected");
assert ds.getDocumentation("history").startsWith("2012-03-06 09:41:58 UTC:");
assert ds.getDocumentation("comment").startsWith("Supplementary information: West Coast Observing");
assert ds.getDocumentation("rights").startsWith("Please cite Gulf of the Farallones National");
DateRange tc = ds.getTimeCoverage();
assert tc != null;
assertEquals(tc.getStart().getCalendarDate(), CalendarDate.parseISOformat(null, "2005-06-27T21:48:00"));
assertEquals(tc.getEnd().getCalendarDate(), CalendarDate.parseISOformat(null, "2005-11-09T00:53:59"));
ThreddsMetadata.GeospatialCoverage geo = ds.getGeospatialCoverage();
assert geo != null;
assert geo.getEastWestRange().getSize() == 0.0;
assert geo.getNorthSouthRange().getSize() == 0.0;
List<ThreddsMetadata.Source> creators = ds.getCreators();
assert creators.size() == 1;
ThreddsMetadata.Source creator = creators.get(0);
assert creator.getName().startsWith("Data Manager");
assert creator.getEmail().equals("Data Manager (bmldata@ucdavis.edu)");
assert creator.getUrl().equals("http://bml.ucdavis.edu");
List<ThreddsMetadata.Source> publishers = ds.getPublishers();
assert publishers.size() == 1;
ThreddsMetadata.Source pub = publishers.get(0);
assert pub.getName().startsWith("US NATIONAL OCEANOGRAPHIC DATA CENTER");
assert pub.getEmail().equals("NODC.Services@noaa.gov");
assert pub.getUrl().equals("http://www.nodc.noaa.gov/");
List<ThreddsMetadata.Vocab> vocab = ds.getKeywords();
assert vocab.size() == 5;
ThreddsMetadata.Vocab voc = vocab.get(0);
assert voc.getVocabulary().startsWith("GCMD Earth Science Keywords. Version 5.3.3");
}
}