private CoverageInfo buildHeterogeneousResolutionView( String name, Consumer<CoverageView> viewCustomizer, String... coverageNames) throws Exception { List<CoverageBand> bands = new ArrayList<>(); int bandIdx = 0; for (String coverageName : coverageNames) { CoverageBand band = new CoverageBand( Arrays.asList(new InputCoverageBand(coverageName, "0")), coverageName, bandIdx++, CompositionType.BAND_SELECT); bands.add(band); } final CoverageView coverageView = new CoverageView(name, bands); viewCustomizer.accept(coverageView); final Catalog cat = getCatalog(); final CoverageStoreInfo storeInfo = cat.getCoverageStoreByName("s2reduced"); final CatalogBuilder builder = new CatalogBuilder(cat); builder.setStore(storeInfo); final CoverageInfo coverageInfo = coverageView.createCoverageInfo(name, storeInfo, builder); coverageInfo.getParameters().put("USE_JAI_IMAGEREAD", "false"); cat.add(coverageInfo); return cat.getCoverage(coverageInfo.getId()); }
bands.add(outputBandV); final CoverageView coverageView = new CoverageView("wind", bands); final CoverageView sameViewDifferentName = new CoverageView(); sameViewDifferentName.setName("winds"); sameViewDifferentName.setCoverageBands(bands); assertNotEquals(coverageView, sameViewDifferentName); assertEquals(coverageView.getBand(1), outputBandV); assertEquals(outputBandU, coverageView.getBands("u-component").get(0)); assertEquals(2, coverageView.getSize()); assertEquals(2, coverageView.getCoverageBands().size()); assertEquals("wind", coverageView.getName());
CompositionType.BAND_SELECT); final CoverageView coverageView = new CoverageView(RGB_IR_VIEW, Arrays.asList(rBand, gBand, bBand, irBand)); coverageView.setEnvelopeCompositionType(null); coverageView.setSelectedResolution(null); return coverageView;
@Override public int removeGranules(Filter filter, Hints hints) { // unmap the feature identifiers Filter unmapped = GranuleStoreViewFilterVisitor.unmapIdentifiers(filter, coverageView.getName()); List<CoverageBand> bands = coverageView.getCoverageBands(); int removed = 0; for (CoverageBand band : bands) { String coverageName = band.getInputCoverageBands().get(0).getCoverageName(); GranuleStore granuleStore; try { granuleStore = (GranuleStore) reader.getGranules(coverageName, false); // TODO: We may revisit the #removed granules computation to take into // account cases where we remove different number of records across different // input coverages removed = granuleStore.removeGranules(unmapped, hints); } catch (UnsupportedOperationException e) { LOGGER.log(Level.FINER, e.getMessage(), e); } catch (IOException e) { LOGGER.log(Level.FINER, e.getMessage(), e); } } return removed; }
CoverageInfo coverageInfo, Hints hints) { this.coverageName = coverageView.getName(); this.delegate = delegate; this.coverageView = coverageView; this.hints = hints; referenceName = coverageView.getBand(0).getInputCoverageBands().get(0).getCoverageName(); canSupportHeterogeneousCoverages = JAIExt.isJAIExtOperation("BandMerge"); originalSampleModel.getWidth(), originalSampleModel.getHeight(), coverageView.getCoverageBands().size());
private void configureBandsFlagsOnCatalog(Catalog cat) throws Exception { final CoverageStoreInfo storeInfo = cat.getCoverageStoreByName("bands-flags"); final CoverageView coverageView = buildBandsFlagsView(); final CatalogBuilder builder = new CatalogBuilder(cat); builder.setStore(storeInfo); final CoverageInfo coverageInfo = coverageView.createCoverageInfo(BANDS_FLAGS_VIEW, storeInfo, builder); coverageInfo.getParameters().put("USE_JAI_IMAGEREAD", "false"); cat.add(coverageInfo); }
final CoverageView coverageView = new CoverageView(BANDS_FLAGS_VIEW, bands); return coverageView;
CompositionType.BAND_SELECT); final CoverageView coverageView = new CoverageView(RGB_IR_VIEW, Arrays.asList(rBand, gBand, bBand, irBand)); coverageView.setEnvelopeCompositionType(null); coverageView.setSelectedResolution(null); coverageView.createCoverageInfo(RGB_IR_VIEW, storeInfo, builder); coverageInfo.getParameters().put("USE_JAI_IMAGEREAD", "false"); cat.add(coverageInfo);
protected CoverageView buildCoverageView() throws IOException { CoverageView view = new CoverageView(name, coverageEditor.currentOutputBands); view.setEnvelopeCompositionType(envelopeCompositionType); view.setSelectedResolution(selectedResolution); if (resolutionReferenceCoverage != null) { final int referenceCoverageIndex = getReferenceCoverageIndex(); view.setSelectedResolutionIndex(referenceCoverageIndex); } return view; }
protected void onSave() { try { if (name.equalsIgnoreCase(COVERAGE_VIEW_NAME)) { throw new IllegalArgumentException( "Make sure to specify a proper coverage name, different that " + COVERAGE_VIEW_NAME); } final Catalog catalog = getCatalog(); final CatalogBuilder builder = new CatalogBuilder(catalog); final CoverageStoreInfo coverageStoreInfo = catalog.getCoverageStore(storeId); CoverageInfo coverageInfo = null; final CoverageView coverageView = buildCoverageView(); List<CoverageBand> coverageBands = coverageView.getCoverageBands(); if (coverageBands == null || coverageBands.isEmpty()) { throw new IllegalArgumentException("No output bands have been specified "); } coverageInfo = coverageView.createCoverageInfo(name, coverageStoreInfo, builder); final LayerInfo layerInfo = builder.buildLayer(coverageInfo); setResponsePage(new ResourceConfigurationPage(layerInfo, true)); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to create Coverage View", e); error( new ParamResourceModel("creationFailure", this, getFirstErrorMessage(e)) .getString()); } }
"The specified coverage does not have a coverage view attached to it"); outputBands = new ArrayList<CoverageBand>(coverageView.getCoverageBands()); name = coverageView.getName(); envelopeCompositionType = Optional.ofNullable(coverageView.getEnvelopeCompositionType()) .orElse(EnvelopeCompositionType.INTERSECTION); selectedResolution = Optional.ofNullable(coverageView.getSelectedResolution()) .orElse(SelectedResolution.BEST); } else {
@Override public SimpleFeatureType getSchema() throws IOException { List<CoverageBand> bands = coverageView.getCoverageBands(); String coverageName = bands.get(0).getInputCoverageBands().get(0).getCoverageName(); return reader.getGranules(coverageName, true).getSchema(); }
@Test public void testCoverageViewGranuleSource() throws Exception { final String VIEW_NAME = "view"; CoverageInfo info = buildHeterogeneousResolutionView( VIEW_NAME, cv -> { cv.setSelectedResolution(SelectedResolution.BEST); }, "B02", "B03", "B04"); StructuredGridCoverage2DReader reader = (StructuredGridCoverage2DReader) info.getGridCoverageReader(null, null); GranuleSource source = reader.getGranules(VIEW_NAME, true); Query query = new Query(VIEW_NAME); // used to throw exception here SimpleFeatureCollection granules = source.getGranules(query); // just check we can pull data from it DataUtilities.first(granules); // there are three bands, so three granules making up the coverage assertEquals(3, granules.size()); }
protected void onSave() { try { final Catalog catalog = getCatalog(); final CatalogBuilder builder = new CatalogBuilder(catalog); final CoverageStoreInfo coverageStoreInfo = catalog.getCoverageStore(storeId); final CoverageView coverageView = buildCoverageView(); final List<CoverageBand> coverageBands = coverageView.getCoverageBands(); if (coverageBands == null || coverageBands.isEmpty()) { throw new IllegalArgumentException("No output bands have been specified "); } coverageView.updateCoverageInfo(name, coverageStoreInfo, builder, coverageInfo); // set it back in the main page and redirect to it previousPage.updateResource(coverageInfo); setResponsePage(previousPage); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to create feature type", e); error( new ParamResourceModel("creationFailure", this, getFirstErrorMessage(e)) .getString()); } }
"s2AllBandsIntersection", cv -> { cv.setEnvelopeCompositionType(EnvelopeCompositionType.INTERSECTION); }, "B01",
@Override public void validate(IValidatable<String> validatable) { String vcName = validatable.getValue(); final CoverageStoreInfo store = getCatalog().getStore(storeId, CoverageStoreInfo.class); List<CoverageInfo> coverages = getCatalog().getCoveragesByCoverageStore(store); for (CoverageInfo curr : coverages) { CoverageView currvc = curr.getMetadata().get(CoverageView.COVERAGE_VIEW, CoverageView.class); if (currvc != null) { if (coverageInfoId == null || !coverageInfoId.equals(curr.getId())) { if (currvc.getName().equals(vcName) && newCoverage) { Map<String, Object> map = new HashMap<>(); map.put("name", vcName); map.put("coverageName", curr.getName()); IValidationError err = new ValidationError("duplicateCoverageViewName") .addKey("duplicateCoverageViewName") .setVariables(map); validatable.error(err); return; } } } } } }
private void configureIROnCatalog(Catalog cat) throws Exception { final CoverageStoreInfo storeInfo = cat.getCoverageStoreByName("ir-rgb"); final CoverageView coverageView = buildRgbIRView(); final CatalogBuilder builder = new CatalogBuilder(cat); builder.setStore(storeInfo); final CoverageInfo coverageInfo = coverageView.createCoverageInfo(RGB_IR_VIEW, storeInfo, builder); coverageInfo.getParameters().put("USE_JAI_IMAGEREAD", "false"); coverageInfo.getDimensions().get(0).setName("Red"); coverageInfo.getDimensions().get(1).setName("Green"); coverageInfo.getDimensions().get(2).setName("Blue"); coverageInfo.getDimensions().get(3).setName("Infrared"); cat.add(coverageInfo); }
coverageBands.add(outputBand_u); coverageBands.add(outputBand_v); CoverageView coverageView = new CoverageView("regional_currents", coverageBands); metadata.put("COVERAGE_VIEW", coverageView);
@Override public SimpleFeatureCollection getGranules(Query q) throws IOException { List<CoverageBand> bands = coverageView.getCoverageBands(); Query renamedQuery = q != null ? new Query(q) : new Query(); if (q != null && q.getFilter() != null) { Filter unmapped = GranuleStoreViewFilterVisitor.unmapIdentifiers( q.getFilter(), coverageView.getName()); renamedQuery.setFilter(unmapped); tb.setName(coverageView.getName()); return new RetypingFeatureCollection(result, tb.buildFeatureType()) { @Override
this.envelopeComposer = initEnvelopeComposer(); List<CoverageBand> bands = coverageView.getCoverageBands(); int coverageBandsSize = bands.size();