/* (c) 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wms.ncwms; import java.util.Map; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.ows.AbstractDispatcherCallback; import org.geoserver.ows.Dispatcher; import org.geoserver.ows.LocalPublished; import org.geoserver.ows.LocalWorkspace; import org.geoserver.ows.Request; import org.geoserver.ows.URLMangler; import org.geotools.util.Converters; public class NcWmsDatasetCallback extends AbstractDispatcherCallback implements URLMangler { private Catalog catalog; public NcWmsDatasetCallback(Catalog catalog) { this.catalog = catalog; } @Override public Request init(Request request) { if(request.getRawKvp() == null) { return request; } String dataset = Converters.convert(request.getRawKvp().get("DATASET"), String.class); if (dataset != null) { WorkspaceInfo ws = catalog.getWorkspaceByName(dataset); if (ws != null) { LocalWorkspace.set(ws); return request; } LayerInfo layer = catalog.getLayerByName(dataset); if (layer != null) { LocalWorkspace.set(layer.getResource().getStore().getWorkspace()); LocalPublished.set(layer); return request; } LayerGroupInfo group = catalog.getLayerGroupByName(dataset); if (group != null) { LocalWorkspace.set(group.getWorkspace()); LocalPublished.set(group); return request; } } return request; } @Override public void mangleURL(StringBuilder baseURL, StringBuilder path, Map<String, String> kvp, URLType type) { Request request = Dispatcher.REQUEST.get(); if (request != null && "GetCapabilities".equals(request.getRequest()) && request.getRawKvp() != null) { String dataset = Converters.convert(request.getRawKvp().get("DATASET"), String.class); if (dataset != null) { kvp.put("DATASET", dataset); } } } }