@Override public <T extends CatalogInfo> CloseableIterator<T> list( Class<T> of, Filter filter, @Nullable Integer offset, @Nullable Integer count, @Nullable SortBy... sortOrder) { return filterIsolated(of, facade.list(of, filter, offset, count, sortOrder)); }
@Override public <T extends CatalogInfo> int count(Class<T> of, Filter filter) { CloseableIterator<T> found = facade.list(of, filter, null, null); try (CloseableIterator<T> filtered = filterIsolated(of, found)) { int count = 0; while (filtered.hasNext()) { count++; filtered.next(); } return count; } }
public <T extends CatalogInfo> CloseableIterator<T> list( Class<T> of, Filter filter, Integer offset, Integer count, SortBy... sortBy) { Filter securityFilter = securityFilter(of, filter); CloseableIterator<T> filtered; // HACK here, go straigth to the facade of the delegate to get a method supporting sortby[] filtered = delegate.getFacade().list(of, securityFilter, offset, count, sortBy); // create secured decorators on-demand. Assume this method is used only for listing, not // for accessing a single resource by name/id, thus use hide policy for mixed mode final Function<T, T> securityWrapper = securityWrapper(of, MixedModeBehavior.HIDE); final CloseableIterator<T> filteredWrapped; filteredWrapped = CloseableIteratorAdapter.transform(filtered, securityWrapper); // wrap the iterator in a notNull filter to ensure any filtered // layers (result is null) don't get passed on from the securityWrapper // Function. When the AccessLevel is HIDDEN and a layer gets filtered // out via a CatalogFilter - for example, this can happen with a // LocalWorkspaceCatalogFilter and a virtual service request return CloseableIteratorAdapter.filter( filteredWrapped, com.google.common.base.Predicates.<T>notNull()); }
@Override public <T extends CatalogInfo> CloseableIterator<T> list( final Class<T> of, final Filter filter, Integer offset, Integer count, SortBy sortOrder) { CatalogFacade facade = getFacade(); if (sortOrder != null && !facade.canSort(of, sortOrder.getPropertyName().getPropertyName())) { // TODO: use GeoTools' merge-sort code to provide sorting anyways throw new UnsupportedOperationException( "Catalog backend can't sort on property " + sortOrder.getPropertyName() + " in-process sorting is pending implementation"); } return facade.list(of, filter, offset, count, sortOrder); }
public CatalogStoreFeatureIterator(int offset, int count, SortBy[] sortOrder, Filter filter, Catalog catalog, CatalogStoreMapping mapping, RecordDescriptor recordDescriptor, Map<String, String> interpolationProperties) { this.offset = offset; this.count = count; this.sortOrder = sortOrder; this.filter = filter; catalogFacade = catalog.getFacade(); this.mapping = mapping; this.interpolationProperties = interpolationProperties; layerIt = catalogFacade.list(ResourceInfo.class, filter, null, null, sortOrder); nextLayer(); layerGroupIt = catalogFacade.list(LayerGroupInfo.class, filter, null, null, sortOrder); nextLayerGroup(); comparator = sortOrder==null || sortOrder.length==0 ? null : CatalogComparatorFactory.buildComparator(sortOrder); index = 0; while (index < offset && hasNext()) { nextInternal(); } builder = new GenericRecordBuilder(recordDescriptor); }
/** * Returns a sorted list of layer names in the specified workspace (or * if the workspace is *) */ protected List<String> getLayerNames(String workspaceName) { List<String> resultSet = new ArrayList<String>(); if (workspaceName != null) { FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(); try (CloseableIterator<ResourceInfo> it = getCatalog() .getFacade() .list( ResourceInfo.class, Predicates.equal("store.workspace.name", workspaceName), null, null, ff.sort("name", SortOrder.ASCENDING))) { while (it.hasNext()) { resultSet.add(it.next().getName()); } } } return resultSet; }