package org.esa.beam.smos.ee2netcdf; import org.esa.beam.dataio.netcdf.nc.N4FileWriteable; import org.esa.beam.dataio.netcdf.nc.NFileWriteable; import org.esa.beam.dataio.smos.SmosProductReaderPlugIn; import org.esa.beam.framework.dataio.DecodeQualification; import org.esa.beam.framework.datamodel.Product; import org.esa.beam.util.io.FileUtils; import java.io.File; import java.io.IOException; import java.util.logging.Logger; class GPToNetCDFExporter { private final ExportParameter parameter; GPToNetCDFExporter(ExportParameter parameter) { this.parameter = parameter; } void initialize() { ExporterUtils.assertTargetDirectoryExists(parameter.getTargetDirectory()); } void exportProduct(Product product, Logger logger) { final File fileLocation = product.getFileLocation(); NFileWriteable nFileWriteable = null; try { logger.info("Converting product: " + fileLocation.getPath() + " ..."); final FormatExporter exporter = FormatExporterFactory.create(fileLocation.getName()); exporter.initialize(product, parameter); final File outputFile = getOutputFile(fileLocation, parameter.getTargetDirectory()); if (outputFile.isFile()) { if (parameter.isOverwriteTarget()) { if (!outputFile.delete()) { throw new IOException("Unable to delete already existing product: " + outputFile.getAbsolutePath()); } } else { logger.warning("output file '" + outputFile.getPath() + "' exists. Output will not be overwritten."); return; } } nFileWriteable = N4FileWriteable.create(outputFile.getPath()); exporter.prepareGeographicSubset(nFileWriteable, parameter); exporter.addGlobalAttributes(nFileWriteable, product.getMetadataRoot(), parameter); exporter.addDimensions(nFileWriteable); exporter.addVariables(nFileWriteable, parameter); nFileWriteable.create(); exporter.writeData(nFileWriteable); logger.info("Success. Wrote target product: " + outputFile.getPath()); } catch (Exception e) { logger.severe("Failed to convert file: " + fileLocation.getAbsolutePath()); logger.severe(e.getMessage()); } finally { if (nFileWriteable != null) { try { nFileWriteable.close(); } catch (IOException e) { logger.severe("Failed to close file: " + fileLocation.getAbsolutePath()); logger.severe(e.getMessage()); } } } } void exportFile(File file, Logger logger) { Product product = null; try { final SmosProductReaderPlugIn readerPlugIn = new SmosProductReaderPlugIn(); final DecodeQualification decodeQualification = readerPlugIn.getDecodeQualification(file); if (decodeQualification == DecodeQualification.INTENDED) { product = readerPlugIn.createReaderInstance().readProductNodes(file, null); final String productType = product.getProductType(); if (productType.matches(ExportParameter.PRODUCT_TYPE_REGEX)) { exportProduct(product, logger); } else { logger.info("Unable to convert file: " + file.getAbsolutePath()); logger.info("Unsupported product of type: " + productType); } } else { logger.warning("Unable to open file: " + file.getAbsolutePath()); } } catch (IOException e) { logger.severe("Failed to convert file: " + file.getAbsolutePath()); logger.severe(e.getMessage()); } finally { if (product != null) { product.dispose(); } } } // @todo 2 tb/tb duplicated code, extract exporter baseclass tb 2014-07-04 private static File getOutputFile(File dblFile, File targetDirectory) { File outFile = new File(targetDirectory, dblFile.getName()); outFile = FileUtils.exchangeExtension(outFile, ".nc"); return outFile; } }