@Override protected void addBands(Product product, DeimosMetadata componentMetadata, int componentIndex) { super.addBands(product, componentMetadata, componentIndex); if (DeimosConstants.PROCESSING_1R.equals(componentMetadata.getProcessingLevel())) { initGeoCoding(product); } }
/** * Returns a wrapping VirtualDirEx object over the input product. * * @param input The reader input as received from the caller. * @return An instance of VirtualDirEx * @throws IOException */ protected VirtualDirEx getInput(Object input) throws IOException { File inputFile = getFileInput(input); if (inputFile.isFile() && !VirtualDirEx.isPackedFile(inputFile)) { final File absoluteFile = inputFile.getAbsoluteFile(); inputFile = absoluteFile.getParentFile(); if (inputFile == null) { throw new IOException(String.format("Unable to retrieve parent to file %s.", absoluteFile.getAbsolutePath())); } } return VirtualDirEx.create(inputFile); }
@Override protected Product readProductNodesImpl() throws IOException { productDirectory = getInput(super.getInput()); if (getReaderPlugIn().getDecodeQualification(super.getInput()) == DecodeQualification.UNABLE) { throw new IOException("The selected product cannot be read with the current reader."); String[] metadataFiles = productDirectory.findAll(getMetadataExtension()); if (metadataFiles != null) { logger.info("Reading product metadata"); List<M> rasterMetadataList = CollectionHelper.where(metadata, m -> m.getFileName().endsWith(getMetadataFileSuffix())); if (rasterMetadataList == null || rasterMetadataList.size() == 0 || (firstMetadata = rasterMetadataList.get(0)) == null || ((metadataProfile = firstMetadata.getMetadataProfile()) == null || !metadataProfile.startsWith(getMetadataProfile()))) { IOException ex = new IOException("The selected product is not readable by this reader. Please use the appropriate filter"); logger.log(Level.SEVERE, ex.getMessage(), ex); product = createProduct(firstMetadata.getRasterWidth(), firstMetadata.getRasterHeight(), firstMetadata); addBands(product, currentMetadata, i); addMetadataMasks(product, firstMetadata); readAdditionalMasks(productDirectory);
rasterFileNames = getRasterFileNames(); if (componentIndex >= rasterFileNames.size()) { throw new ArrayIndexOutOfBoundsException(String.format("Invalid component index: %d", componentIndex)); GeoTiffProductReader reader = new GeoTiffReaderEx(getReaderPlugIn()); Product tiffProduct = reader.readProductNodes(rasterFile, null); if (tiffProduct != null) { if (product == null) { product = createProduct(tiffProduct.getSceneRasterWidth(), tiffProduct.getSceneRasterHeight(), componentMetadata); Dimension preferredTileSize = tiffProduct.getPreferredTileSize(); if (preferredTileSize == null) { preferredTileSize = getPreferredTileSize(product); if (rasterFileNames.size() > 1) { bandPrefix = "scene_" + String.valueOf(componentIndex) + "_"; String groupPattern = computeGroupPattern(); if (!StringUtils.isNullOrEmpty(groupPattern)) { product.setAutoGrouping(groupPattern); String bandName = bandPrefix + getBandNames()[idx]; Band targetBand = new ColorPaletteBand(bandName, srcBand.getDataType(), product.getSceneRasterWidth(), product.getSceneRasterHeight(), this.colorPaletteFilePath); targetBand.setNoDataValue(srcBand.getNoDataValue());