Index: src/test/java/org/geoserver/kml/KMLReflectorTest.java =================================================================== --- src/test/java/org/geoserver/kml/KMLReflectorTest.java (revision 17099) +++ src/test/java/org/geoserver/kml/KMLReflectorTest.java (working copy) @@ -66,7 +66,7 @@ assertXpathEvaluatesTo("onStop", "kml/Folder/NetworkLink[1]/Url/viewRefreshMode", dom); assertXpathEvaluatesTo("1", "kml/Folder/NetworkLink[1]/Url/viewRefreshTime", dom); - Map expectedKVP = toKvp("http://localhost:80/geoserver/wms?format_options=KMPLACEMARK%3Afalse%3BKMATTR%3Atrue%3BKMSCORE%3A40%3BSUPEROVERLAY%3Afalse%3B&service=wms&srs=EPSG%3A4326&width=1024&styles=BasicPolygons&height=1024&transparent=false&request=GetMap&layers=cite%3ABasicPolygons&format=application%2Fvnd.google-earth.kmz;mode&version=1.1.1"); + Map expectedKVP = toKvp("http://localhost:80/geoserver/wms?format_options=KMPLACEMARK%3Afalse%3BKMATTR%3Atrue%3BKMSCORE%3A40%3BSUPEROVERLAY%3Afalse%3B&service=wms&srs=EPSG%3A4326&width=1024&styles=BasicPolygons&height=1024&transparent=false&request=GetMap&layers=cite%3ABasicPolygons&format=application%2Fvnd.google-earth.kmz&version=1.1.1"); Map resultedKVP = toKvp(xpath.evaluate( "kml/Folder/NetworkLink[1]/Url/href", dom)); Index: src/test/java/org/geoserver/kml/KMLNetworkLinkTransformerTest.java =================================================================== --- src/test/java/org/geoserver/kml/KMLNetworkLinkTransformerTest.java (revision 17099) +++ src/test/java/org/geoserver/kml/KMLNetworkLinkTransformerTest.java (working copy) @@ -103,7 +103,7 @@ assertXpathEvaluatesTo("128", "//kml/Folder/NetworkLink/Region/Lod/minLodPixels", dom); assertXpathEvaluatesTo("-1", "//kml/Folder/NetworkLink/Region/Lod/maxLodPixels", dom); - final Map expectedKvp = KMLReflectorTest.toKvp("http://geoserver.org:8181/geoserver/wms?format_options=relLinks%3Atrue%3B&service=wms&srs=EPSG%3A4326&width=512&styles=Default+Style&height=256&transparent=false&bbox=-1.0%2C-10.0%2C1.0%2C10.0&request=GetMap&layers=geos%3ATestPoints&format=image%2Fdummy&version=1.1.1"); + final Map expectedKvp = KMLReflectorTest.toKvp("http://geoserver.org:8181/geoserver/wms?format_options=relLinks%3Atrue%3B&service=wms&srs=EPSG%3A4326&width=512&styles=Default+Style&height=256&transparent=false&bbox=-1.0%2C-10.0%2C1.0%2C10.0&request=GetMap&layers=geos%3ATestPoints&format=application%2Fvnd.google-earth.kmz&version=1.1.1"); final Map actualKvp = KMLReflectorTest.toKvp(xpath.evaluate( "//kml/Folder/NetworkLink/Link/href", dom)); KMLReflectorTest.assertMapsEqual(expectedKvp, actualKvp); @@ -147,7 +147,7 @@ assertXpathEvaluatesTo("1", "//kml/Folder/NetworkLink/visibility", dom); final Map expectedKvp = - KMLReflectorTest.toKvp("http://geoserver.org:8181/geoserver/wms?format_options=relLinks%3Atrue%3B&service=wms&srs=EPSG%3A4326&width=512&styles=Default+Style&height=256&transparent=false&request=GetMap&layers=geos%3ATestPoints&format=image%2Fdummy&version=1.1.1"); + KMLReflectorTest.toKvp("http://geoserver.org:8181/geoserver/wms?format_options=relLinks%3Atrue%3B&service=wms&srs=EPSG%3A4326&width=512&styles=Default+Style&height=256&transparent=false&request=GetMap&layers=geos%3ATestPoints&format=application%2Fvnd.google-earth.kmz&version=1.1.1"); final Map actualKvp = KMLReflectorTest.toKvp(xpath.evaluate("//kml/Folder/NetworkLink/Url/href", dom)); KMLReflectorTest.assertMapsEqual(expectedKvp, actualKvp); Index: src/main/java/org/geoserver/kml/KMLTransformer.java =================================================================== --- src/main/java/org/geoserver/kml/KMLTransformer.java (revision 17099) +++ src/main/java/org/geoserver/kml/KMLTransformer.java (working copy) @@ -123,15 +123,15 @@ superoverlay = (superoverlay == null ? Boolean.FALSE : superoverlay); if (superoverlay) { //encode as super overlay - encodeSuperOverlayLayer(mapContext, layer, group); + encodeSuperOverlayLayer(mapContext, layer); } else { //figure out which type of layer this is, raster or vector if (layerInfo.getType() != MapLayerInfo.TYPE_RASTER) { //vector - encodeVectorLayer(mapContext, layer, group); + encodeVectorLayer(mapContext, layer); } else { //encode as normal ground overlay - encodeRasterLayer(mapContext, layer, group); + encodeRasterLayer(mapContext, layer); } } } @@ -142,7 +142,7 @@ for (int i = 0; i < layers.length; i++) { //layer and info MapLayer layer = layers[i]; - encodeLegend(mapContext, layer, group); + encodeLegend(mapContext, layer); } } @@ -157,7 +157,7 @@ * Encodes a vector layer as kml. */ @SuppressWarnings("unchecked") - protected void encodeVectorLayer(WMSMapContext mapContext, MapLayer layer, boolean group) { + protected void encodeVectorLayer(WMSMapContext mapContext, MapLayer layer) { //get the data SimpleFeatureSource featureSource = (SimpleFeatureSource) layer.getFeatureSource(); SimpleFeatureCollection features = null; @@ -188,12 +188,12 @@ if (useVector) { //encode KMLVectorTransformer tx = createVectorTransformer(mapContext, layer); - initTransformer(tx, group); + initTransformer(tx); tx.setScaleDenominator(scaleDenominator); tx.createTranslator(contentHandler).encode(features); } else { KMLRasterTransformer tx = createRasterTransfomer(mapContext); - initTransformer(tx, group); + initTransformer(tx); //set inline to true to have the transformer reference images // inline in the zip file @@ -203,7 +203,7 @@ } else { //kmz not selected, just do straight vector KMLVectorTransformer tx = createVectorTransformer(mapContext, layer); - initTransformer(tx, group); + initTransformer(tx); tx.setScaleDenominator(scaleDenominator); tx.createTranslator(contentHandler).encode(features); } @@ -231,9 +231,9 @@ /** * Encodes a raster layer as kml. */ - protected void encodeRasterLayer(WMSMapContext mapContext, MapLayer layer, boolean group) { + protected void encodeRasterLayer(WMSMapContext mapContext, MapLayer layer) { KMLRasterTransformer tx = createRasterTransfomer(mapContext); - initTransformer(tx, group); + initTransformer(tx); tx.setInline(kmz); tx.createTranslator(contentHandler).encode(layer); @@ -242,25 +242,25 @@ /** * Encodes a layer as a super overlay. */ - protected void encodeSuperOverlayLayer(WMSMapContext mapContext, MapLayer layer, boolean group) { + protected void encodeSuperOverlayLayer(WMSMapContext mapContext, MapLayer layer) { KMLSuperOverlayTransformer tx = new KMLSuperOverlayTransformer(wms, mapContext); - initTransformer(tx, group); + initTransformer(tx); tx.createTranslator(contentHandler).encode(layer); } /** * Encodes the legend for a maper layer as a scree overlay. */ - protected void encodeLegend(WMSMapContext mapContext, MapLayer layer, boolean group) { + protected void encodeLegend(WMSMapContext mapContext, MapLayer layer) { KMLLegendTransformer tx = new KMLLegendTransformer(mapContext); - initTransformer(tx, group); + initTransformer(tx); tx.createTranslator(contentHandler).encode(layer); } - protected void initTransformer(KMLTransformerBase delegate, boolean group) { + protected void initTransformer(KMLTransformerBase delegate) { delegate.setIndentation( getIndentation() ); delegate.setEncoding(getEncoding()); - delegate.setStandAlone(!group); + delegate.setStandAlone(false); } double computeScaleDenominator(MapLayer layer, WMSMapContext mapContext) { Index: src/main/java/org/geoserver/kml/KMLSuperOverlayTransformer.java =================================================================== --- src/main/java/org/geoserver/kml/KMLSuperOverlayTransformer.java (revision 17099) +++ src/main/java/org/geoserver/kml/KMLSuperOverlayTransformer.java (working copy) @@ -81,7 +81,7 @@ start("Document"); if (isStandAlone()) { String kmltitle = (String) mapContext.getRequest().getFormatOptions().get("kmltitle"); - element("name", (kmltitle != null && isStandAlone() ? kmltitle : mapLayer.getTitle())); + element("name", (kmltitle != null && mapContext.layers().size() <= 1 ? kmltitle : mapLayer.getTitle())); } if ("cached".equals(KMLUtils.getSuperoverlayMode(mapContext.getRequest(), wms))) { Index: src/main/java/org/geoserver/kml/KMLRasterTransformer.java =================================================================== --- src/main/java/org/geoserver/kml/KMLRasterTransformer.java (revision 17099) +++ src/main/java/org/geoserver/kml/KMLRasterTransformer.java (working copy) @@ -103,7 +103,7 @@ start("Folder"); //element("name", "layer_" + mapLayerOrder); String kmltitle = (String) mapContext.getRequest().getFormatOptions().get("kmltitle"); - element("name", (kmltitle != null && isStandAlone() ? kmltitle : "layer_" + mapLayerOrder)); + element("name", (kmltitle != null && mapContext.layers().size() <= 1 ? kmltitle : "layer_" + mapLayerOrder)); element("description", mapLayer.getTitle()); start("GroundOverlay"); Index: src/main/java/org/geoserver/kml/KMLVectorTransformer.java =================================================================== --- src/main/java/org/geoserver/kml/KMLVectorTransformer.java (revision 17099) +++ src/main/java/org/geoserver/kml/KMLVectorTransformer.java (working copy) @@ -93,7 +93,7 @@ new String[] {"xmlns:atom", "http://purl.org/atom/ns#" })); //element("name", mapLayer.getTitle()); String kmltitle = (String) mapContext.getRequest().getFormatOptions().get("kmltitle"); - element("name", (kmltitle != null && isStandAlone() ? kmltitle : mapLayer.getTitle())); + element("name", (kmltitle != null && mapContext.layers().size() <= 1 ? kmltitle : mapLayer.getTitle())); String relLinks = (String)mapContext.getRequest().getFormatOptions().get("relLinks"); // Add prev/next links if requested Index: src/main/java/org/geoserver/kml/KMLNetworkLinkTransformer.java =================================================================== --- src/main/java/org/geoserver/kml/KMLNetworkLinkTransformer.java (revision 17099) +++ src/main/java/org/geoserver/kml/KMLNetworkLinkTransformer.java (working copy) @@ -14,7 +14,6 @@ import org.geoserver.wms.WMSMapContext; import org.geoserver.wms.WMSRequests; import org.geotools.styling.Style; -import org.geotools.xml.transform.TransformerBase; import org.geotools.xml.transform.Translator; import org.xml.sax.ContentHandler; @@ -29,7 +28,7 @@ * @author Justin Deoliveira, The Open Planning Project, jdeolive@openplans.org * */ -public class KMLNetworkLinkTransformer extends TransformerBase { +public class KMLNetworkLinkTransformer extends KMLMapTransformer { /** * logger @@ -54,6 +53,8 @@ private WMS wms; public KMLNetworkLinkTransformer(WMS wms, WMSMapContext mapContext){ + super(wms, mapContext, null); + this.wms = wms; this.mapContext = mapContext; } @@ -84,7 +85,17 @@ request = ((WMSMapContext) o).getRequest(); } - start( "kml" ); + // restore target mime type for the network links + if (NetworkLinkMapOutputFormat.KML_MIME_TYPE.equals(request.getFormat())) { + request.setFormat(KMLMapOutputFormat.MIME_TYPE); + } else { + request.setFormat(KMZMapOutputFormat.MIME_TYPE); + } + + if (isStandAlone()) + { + start( "kml" ); + } start( "Folder" ); String kmltitle = (String) mapContext.getRequest().getFormatOptions().get("kmltitle"); @@ -101,7 +112,11 @@ encodeLookAt( request ); end( "Folder" ); - end( "kml" ); + + if (isStandAlone()) + { + end( "kml" ); + } } protected void encodeAsSuperOverlay(GetMapRequest request) {