package ucar.nc2.ft.point;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import ucar.nc2.FileWriter2;
import ucar.nc2.NetcdfFile;
import ucar.nc2.NetcdfFileWriter;
import ucar.nc2.constants.FeatureType;
import ucar.nc2.dataset.NetcdfDataset;
import ucar.unidata.util.test.TestDir;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Synthetic (Ncml) datasets for testing point feature variants.
*
* @author cwardgar
* @since 2014/07/08
*/
@RunWith(Parameterized.class)
public class TestCfDocDsgExamples {
public static String cfDocDsgExamplesDir = TestDir.cdmLocalTestDataDir + "cfDocDsgExamples/";
public static List<Object[]> getPointDatasets() {
List<Object[]> result = new ArrayList<>();
result.add(new Object[] { "H.1.1.ncml", FeatureType.POINT, 12 });
return result;
}
public static List<Object[]> getStationDatasets() {
List<Object[]> result = new ArrayList<>();
result.add(new Object[] { "H.2.1.1.ncml", FeatureType.STATION, 50 });
result.add(new Object[] { "H.2.2.1.ncml", FeatureType.STATION, 130 });
result.add(new Object[] { "H.2.3.1.ncml", FeatureType.STATION, 5 });
// result.add(new Object[] { "H.2.3.2.ncml", FeatureType.STATION, 15 }); LOOK failing
result.add(new Object[] { "H.2.4.1.ncml", FeatureType.STATION, 100 });
result.add(new Object[] { "H.2.5.1.ncml", FeatureType.STATION, 30 });
return result;
}
public static List<Object[]> getProfileDatasets() {
List<Object[]> result = new ArrayList<>();
result.add(new Object[] { "H.3.1.1.ncml", FeatureType.PROFILE, 56 });
result.add(new Object[] { "H.3.3.1.ncml", FeatureType.PROFILE, 42 });
result.add(new Object[] { "H.3.4.1.ncml", FeatureType.PROFILE, 37 });
result.add(new Object[] { "H.3.5.1.ncml", FeatureType.PROFILE, 37 });
return result;
}
public static List<Object[]> getTrajectoryDatasets() {
List<Object[]> result = new ArrayList<>();
result.add(new Object[] { "H.4.1.1.ncml", FeatureType.TRAJECTORY, 24 });
result.add(new Object[] { "H.4.2.1.ncml", FeatureType.TRAJECTORY, 42 });
result.add(new Object[] { "H.4.3.1.ncml", FeatureType.TRAJECTORY, 75 });
result.add(new Object[] { "H.4.4.1.ncml", FeatureType.TRAJECTORY, 75 });
return result;
}
public static List<Object[]> getStationProfileDatasets() {
List<Object[]> result = new ArrayList<>();
result.add(new Object[] { "H.5.1.1.ncml", FeatureType.STATION_PROFILE, 120 });
result.add(new Object[] { "H.5.1.2.ncml", FeatureType.STATION_PROFILE, 60 });
result.add(new Object[] { "H.5.2.1.ncml", FeatureType.STATION_PROFILE, 20 });
result.add(new Object[] { "H.5.3.1.ncml", FeatureType.STATION_PROFILE, 145 });
return result;
}
public static List<Object[]> getSectionDatasets() {
List<Object[]> result = new ArrayList<>();
result.add(new Object[] { "H.6.1.1.ncml", FeatureType.SECTION, 120 });
result.add(new Object[] { "H.6.2.1.ncml", FeatureType.SECTION, 20 });
result.add(new Object[] { "H.6.3.1.ncml", FeatureType.SECTION, 145 });
return result;
}
@Parameterized.Parameters(name = "{0}") // Name the tests after the location.
public static List<Object[]> getTestParameters() {
List<Object[]> result = new ArrayList<>();
result.addAll(getPointDatasets());
result.addAll(getStationDatasets());
result.addAll(getProfileDatasets());
result.addAll(getTrajectoryDatasets());
result.addAll(getStationProfileDatasets());
result.addAll(getSectionDatasets());
return result;
}
private String location;
private FeatureType ftype;
private int countExpected;
private boolean show = true;
public TestCfDocDsgExamples(String location, FeatureType ftype, int countExpected) {
this.location = cfDocDsgExamplesDir + location;
this.ftype = ftype;
this.countExpected = countExpected;
}
@Test
public void checkPointDataset() throws IOException {
assert countExpected == TestPointDatasets.checkPointDataset(location, ftype, show);
}
// Convert all NCML files in cfDocDsgExamplesDir to NetCDF-3 files.
public static void main(String[] args) throws IOException {
File examplesDir = new File(cfDocDsgExamplesDir);
File convertedDir = new File(examplesDir, "converted");
convertedDir.mkdirs();
for (File inputFile : examplesDir.listFiles(new NcmlFilenameFilter())) {
String inputFilePath = inputFile.getCanonicalPath();
String outputFileName = inputFile.getName().substring(0, inputFile.getName().length() - 2);
String outputFilePath = new File(convertedDir, outputFileName).getCanonicalPath();
System.out.printf("Writing %s to %s.%n", inputFilePath, outputFilePath);
try (NetcdfFile ncfileIn = NetcdfDataset.openFile(inputFilePath, null)) {
NetcdfFileWriter.Version version = NetcdfFileWriter.Version.netcdf3;
FileWriter2 writer = new FileWriter2(ncfileIn, outputFilePath, version, null);
NetcdfFile ncfileOut = writer.write(null);
if (ncfileOut != null) {
ncfileOut.close();
}
}
}
}
private static class NcmlFilenameFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("ncml");
}
}
}