Skip to content

Commit

Permalink
Make SLDVisitor implement org.geotools.styling.StyleVisitor
Browse files Browse the repository at this point in the history
  • Loading branch information
tbarsballe committed Aug 24, 2017
1 parent c192a1d commit 75d9c6c
Show file tree
Hide file tree
Showing 10 changed files with 276 additions and 234 deletions.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.geoserver.catalog;

import org.geotools.styling.NamedStyle;
import org.geotools.styling.Style;
import org.geotools.styling.StyledLayer;
import org.geotools.styling.UserLayer;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

/**
* Adapter implementation of {@link GeoServerSLDVisitor}
*/
public abstract class GeoServerSLDVisitorAdapter extends GeoServerSLDVisitor {
public GeoServerSLDVisitorAdapter(Catalog catalog, CoordinateReferenceSystem fallbackCrs) {
super(catalog, fallbackCrs);
}

@Override
public PublishedInfo visitNamedLayerInternal(StyledLayer namedLayer) {
return null;
}

@Override
public void visitUserLayerRemoteOWS(UserLayer userLayer) {

}

@Override
public void visitUserLayerInlineFeature(UserLayer userLayer) {

}

@Override
public StyleInfo visitNamedStyleInternal(NamedStyle namedStyle) {
return null;
}

@Override
public void visitUserStyleInternal(Style userStyle) {

}
}
55 changes: 28 additions & 27 deletions src/main/src/main/java/org/geoserver/catalog/LayerGroupHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package org.geoserver.catalog;

import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
Expand Down Expand Up @@ -355,38 +356,43 @@ private static boolean checkStyleGroupLoops(StyleInfo styleGroup, LayerGroupInfo
StyledLayerDescriptor sld = new GeoServerDataDirectory(catalog.getResourceLoader()).parsedSld(styleGroup);

final boolean[] hasLoop = {false};
new SLDVisitorAdapter(catalog, group.getBounds() == null ? null : group.getBounds().getCoordinateReferenceSystem()) {
sld.accept(new GeoServerSLDVisitorAdapter(catalog, group.getBounds() == null ? null : group.getBounds().getCoordinateReferenceSystem()) {

private final IllegalStateException recursionException = new IllegalStateException("Style group contains recursive structure");
@Override
public SLDVisitor apply(StyledLayerDescriptor sld) throws IOException {
public void visit(StyledLayerDescriptor sld) {
try {
super.apply(sld);
super.visit(sld);
} catch (IllegalStateException e) {
hasLoop[0] = true;
if (recursionException.equals(e)) {
hasLoop[0] = true;
} else {
throw e;
}
}
return this;
}

@Override
public PublishedInfo visitNamedLayer(StyledLayer namedLayer) {
public PublishedInfo visitNamedLayerInternal(StyledLayer namedLayer) {
//If this group hasn't been added to the catalog yet, make sure it is not referenced by a NamedLayer
if (namedLayer.getName() != null && namedLayer.getName().equals(group.getName())) {
throw new IllegalStateException("Style group contains recursive structure");
throw recursionException;
}
LayerGroupInfo child = catalog.getLayerGroupByName(namedLayer.getName());
if (child != null) {
if (isGroupInStack(child, path)) {
path.push(child);
throw new IllegalStateException("Style group contains recursive structure");
throw recursionException;
} else if (checkLoops(child, path)) {
throw new IllegalStateException("Style group contains recursive structure");
throw recursionException;
}
return child;
}
return null;
}
}.apply(sld);
});
return hasLoop[0];
} catch (IOException | ServiceException e) {
} catch (IllegalStateException | IOException | ServiceException | UncheckedIOException | UnsupportedOperationException e) {
LOGGER.log(Level.WARNING, "Error extracting layers from Style Group '" + styleGroup.getName() + "'. Skipping...", e);
return false;
}
Expand Down Expand Up @@ -422,15 +428,15 @@ private static void expandStyleGroup(StyleInfo styleGroup, CoordinateReferenceSy
Catalog catalog = getCatalogFromStyle(styleGroup);
StyledLayerDescriptor sld = ResourcePool.create(catalog).dataDir().parsedSld(styleGroup);
StyleGroupHelper helper = new StyleGroupHelper(catalog, crs);
helper.apply(sld);
sld.accept(helper);
layers.addAll(helper.getLayers());
styles.addAll(helper.getStyles());
} catch (IOException | ServiceException e) {
} catch (IllegalStateException | IOException | ServiceException | UncheckedIOException | UnsupportedOperationException e) {
LOGGER.log(Level.WARNING, "Error extracting styles from Style Group '" + styleGroup.getName() + "'. Skipping...", e);
}
}

protected static class StyleGroupHelper extends SLDVisitorAdapter {
protected static class StyleGroupHelper extends GeoServerSLDVisitorAdapter {

List<LayerInfo> layers;
List<StyleInfo> styles;
Expand All @@ -439,11 +445,10 @@ public StyleGroupHelper(Catalog catalog, CoordinateReferenceSystem fallbackCrs)
}

@Override
public StyleGroupHelper apply(StyledLayerDescriptor sld) throws IOException {
public void visit(StyledLayerDescriptor sld) {
layers = new ArrayList<>();
styles = new ArrayList<>();
super.apply(sld);
return this;
super.visit(sld);
}

public List<LayerInfo> getLayers() {
Expand All @@ -455,7 +460,7 @@ public List<StyleInfo> getStyles() {
}

@Override
public PublishedInfo visitNamedLayer(StyledLayer namedLayer) {
public PublishedInfo visitNamedLayerInternal(StyledLayer namedLayer) {
LayerGroupInfo lg = catalog.getLayerGroupByName(namedLayer.getName());
if (lg == null) {
return catalog.getLayerByName(namedLayer.getName());
Expand All @@ -464,20 +469,16 @@ public PublishedInfo visitNamedLayer(StyledLayer namedLayer) {
}

@Override
public Style visitNamedStyle(StyledLayer layer, NamedStyle namedStyle, LayerInfo info) {
public StyleInfo visitNamedStyleInternal(NamedStyle namedStyle) {
StyleInfo s = catalog.getStyleByName(namedStyle.getName());
layers.add(info);
layers.add((LayerInfo)info);
styles.add(s);
try {
return s.getStyle();
} catch (IOException e) {
throw new ServiceException(e);
}
return s;
}

@Override
public void visitUserStyle(StyledLayer layer, Style userStyle, LayerInfo info) {
layers.add(info);
public void visitUserStyleInternal(Style userStyle) {
layers.add((LayerInfo)info);
styles.add(new StyleWrappingStyleInfoImpl(userStyle));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import org.apache.commons.io.IOUtils;
import org.geoserver.platform.ServiceException;
import org.geotools.styling.NamedStyle;
import org.geotools.styling.Style;
import org.geotools.styling.StyledLayer;
import org.geotools.styling.StyledLayerDescriptor;

Expand Down Expand Up @@ -115,7 +114,7 @@ public List<StyleInfo> visitStyles(boolean doRename) throws IOException{
SLDNamedLayerRenameVisitor visitor = new SLDNamedLayerRenameVisitor(catalog, doRename);
try {
StyledLayerDescriptor sld = catalog.getResourcePool().getSld(style);
visitor.apply(sld);
sld.accept(visitor);
if (visitor.needsRename) {
stylesToUpdate.add(style);
if (doRename) {
Expand Down Expand Up @@ -171,7 +170,7 @@ String findUniqueStyleName(String workspace, String name) {
return styleName;
}

private class SLDNamedLayerRenameVisitor extends SLDVisitorAdapter {
private class SLDNamedLayerRenameVisitor extends GeoServerSLDVisitorAdapter {

//Should the named layers in the styles be renamed when they are visited
boolean doRename = false;
Expand All @@ -184,13 +183,7 @@ public SLDNamedLayerRenameVisitor(Catalog catalog, boolean doRename) {
}

@Override
public SLDNamedLayerRenameVisitor apply(StyledLayerDescriptor sld) throws IOException {
super.apply(sld);
return this;
}

@Override
public PublishedInfo visitNamedLayer(StyledLayer namedLayer) {
public PublishedInfo visitNamedLayerInternal(StyledLayer namedLayer) {
String layerName = namedLayer.getName();
PublishedInfo p = catalog.getLayerGroupByName(layerName);
if (p != null) {
Expand All @@ -211,7 +204,7 @@ public PublishedInfo visitNamedLayer(StyledLayer namedLayer) {
}

@Override
public Style visitNamedStyle(StyledLayer layer, NamedStyle namedStyle, LayerInfo info) throws IOException {
public StyleInfo visitNamedStyleInternal(NamedStyle namedStyle) {
String styleName = namedStyle.getName();
StyleInfo s = catalog.getStyleByName(styleName);
if (renamedStyles.get(styleName) != null) {
Expand All @@ -220,7 +213,7 @@ public Style visitNamedStyle(StyledLayer layer, NamedStyle namedStyle, LayerInfo
namedStyle.setName(renamedStyles.get(styleName));
}
}
return s.getStyle();
return s;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
package org.geoserver.catalog;

import org.geoserver.platform.ServiceException;
import org.geotools.styling.NamedStyle;
import org.geotools.styling.Style;
import org.geotools.styling.StyledLayer;
import org.geotools.styling.StyledLayerDescriptor;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* Created by tbarsballe on 2017-08-21.
*/
public class SLDNamedLayerValidator extends SLDVisitorAdapter {
public class SLDNamedLayerValidator extends GeoServerSLDVisitorAdapter {

public List<Exception> validationErrors = new ArrayList<>();

Expand All @@ -27,17 +24,16 @@ public List<Exception> getValidationErrors() {
}

@Override
public SLDNamedLayerValidator apply(StyledLayerDescriptor sld) {
public void visit(StyledLayerDescriptor sld) {
try {
super.apply(sld);
super.visit(sld);
} catch (Exception e) {
validationErrors.add(e);
}
return this;
}

@Override
public PublishedInfo visitNamedLayer(StyledLayer namedLayer) {
public PublishedInfo visitNamedLayerInternal(StyledLayer namedLayer) {
PublishedInfo p = catalog.getLayerGroupByName(namedLayer.getName());
if (p == null) {
p = catalog.getLayerByName(namedLayer.getName());
Expand All @@ -49,15 +45,17 @@ public PublishedInfo visitNamedLayer(StyledLayer namedLayer) {
}

@Override
public Style visitNamedStyle(StyledLayer layer, NamedStyle namedStyle, LayerInfo info) throws IOException {
public StyleInfo visitNamedStyleInternal(NamedStyle namedStyle) {
StyleInfo s = catalog.getStyleByName(namedStyle.getName());
if (s == null) {
validationErrors.add(new Exception("No style named '" + namedStyle.getName()+ "' found in the catalog"));
}
return s.getStyle();
return s;
}

public static List<Exception> validate(Catalog catalog, StyledLayerDescriptor sld) {
return new SLDNamedLayerValidator(catalog, null).apply(sld).getValidationErrors();
SLDNamedLayerValidator validator = new SLDNamedLayerValidator(catalog, null);
sld.accept(validator);
return validator.getValidationErrors();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,6 @@
import java.util.List;
import java.util.logging.Logger;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.PublishedInfo;
import org.geoserver.catalog.SLDVisitor;
import org.geotools.styling.NamedStyle;
import org.geotools.styling.Style;
import org.geotools.styling.StyledLayer;
import org.geotools.styling.UserLayer;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public Object read(Object request, Reader reader, Map kvp) throws Exception {
Styles.handler(getMap.getStyleFormat()).parse(reader, getMap.styleVersion(), null, null);

//process the sld
new ProcessStandaloneSLDVisitor(wms, getMap).apply(sld);
sld.accept(new ProcessStandaloneSLDVisitor(wms, getMap));
//GetMapKvpRequestReader.processStandaloneSld(wms, getMap, sld);

return getMap;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,7 @@ private void processSld(final GetMapRequest request, final List<?> requestedLaye
final StyledLayerDescriptor sld, final List styleNames) throws ServiceException,
IOException {
if (requestedLayers.size() == 0) {
new ProcessStandaloneSLDVisitor(wms, request).apply(sld);
sld.accept(new ProcessStandaloneSLDVisitor(wms, request));
} else {
processLibrarySld(request, sld, requestedLayers, styleNames);
}
Expand Down

0 comments on commit 75d9c6c

Please sign in to comment.