/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2008 - 2009, Geomatys * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotoolkit.sld.xml; import org.opengis.sld.CoverageConstraint; import org.opengis.sld.CoverageExtent; import org.opengis.sld.Extent; import org.opengis.sld.FeatureTypeConstraint; import org.opengis.sld.InlineFeature; import org.opengis.sld.Layer; import org.opengis.sld.LayerCoverageConstraints; import org.opengis.sld.LayerFeatureConstraints; import org.opengis.sld.LayerStyle; import org.opengis.sld.NamedLayer; import org.opengis.sld.NamedStyle; import org.opengis.sld.RangeAxis; import org.opengis.sld.RemoteOWS; import org.opengis.sld.SLDLibrary; import org.opengis.sld.SLDVisitor; import org.opengis.sld.StyledLayerDescriptor; import org.opengis.sld.UserLayer; import org.opengis.style.Style; /** * * @author Johann Sorel (Geomatys) * @module */ public class GTtoSLD100Transformer extends GTtoSE100Transformer implements SLDVisitor { private final org.geotoolkit.sld.xml.v100.ObjectFactory sld_factory; public GTtoSLD100Transformer() { this.sld_factory = new org.geotoolkit.sld.xml.v100.ObjectFactory(); } @Override public org.geotoolkit.sld.xml.v100.StyledLayerDescriptor visit(final StyledLayerDescriptor sld, final Object data) { final org.geotoolkit.sld.xml.v100.StyledLayerDescriptor versionned = sld_factory.createStyledLayerDescriptor(); versionned.setName(sld.getName()); // versionned.setVersion(sld.getVersion()); if (sld.getDescription() != null) { if(sld.getDescription().getAbstract() != null) versionned.setAbstract(sld.getDescription().getAbstract().toString()); if(sld.getDescription().getAbstract() != null) versionned.setTitle(sld.getDescription().getTitle().toString()); } for(final Layer layer : sld.layers()){ if(layer instanceof NamedLayer){ final NamedLayer named = (NamedLayer) layer; versionned.getNamedLayerOrUserLayer().add( visit(named,null) ); }else if(layer instanceof UserLayer){ final UserLayer user = (UserLayer) layer; versionned.getNamedLayerOrUserLayer().add( visit(user,null) ); } } return versionned; } @Override public Object visit(final SLDLibrary library, final Object data) { throw new UnsupportedOperationException("SLD v1.0.0 doesnt have a xml tag to store SLD libraries."); } @Override public org.geotoolkit.sld.xml.v100.NamedLayer visit(final NamedLayer layer, final Object data) { final org.geotoolkit.sld.xml.v100.NamedLayer named = sld_factory.createNamedLayer(); named.setName(layer.getName()); named.setLayerFeatureConstraints( visit(layer.getConstraints(),null) ); for(final LayerStyle style : layer.styles()){ if(style instanceof NamedStyle){ final NamedStyle ns = (NamedStyle) style; named.getNamedStyleOrUserStyle().add( visit(ns,null) ); }else if(style instanceof Style){ final Style us = (Style) style; named.getNamedStyleOrUserStyle().add( visit(us,null) ); } } return named; } @Override public org.geotoolkit.sld.xml.v100.UserLayer visit(final UserLayer layer, final Object data) { final org.geotoolkit.sld.xml.v100.UserLayer user = sld_factory.createUserLayer(); user.setName(layer.getName()); if(layer.getConstraints() instanceof LayerFeatureConstraints){ final LayerFeatureConstraints cons = (LayerFeatureConstraints) layer.getConstraints(); user.setLayerFeatureConstraints( visit(cons,null) ); }else if(layer.getConstraints() instanceof LayerCoverageConstraints){ //SLD v1.0.0 doesnt handle coverage constraints } if(layer.getSource() instanceof RemoteOWS){ final RemoteOWS remote = (RemoteOWS) layer.getSource(); user.setRemoteOWS( visit(remote,null) ); }else if(layer.getSource() instanceof InlineFeature){ //SLD v1.0.0 doesnt handle inline feature } for(final Style style : layer.styles()){ user.getUserStyle().add( visit(style,null) ); } return user; } @Override public org.geotoolkit.sld.xml.v100.NamedStyle visit(final NamedStyle style, final Object data) { final org.geotoolkit.sld.xml.v100.NamedStyle named = sld_factory.createNamedStyle(); named.setName(style.getName()); return named; } @Override public Object visit(final LayerCoverageConstraints constraints, final Object data) { throw new UnsupportedOperationException("SLD v1.0.0 doesnt have a xml tag to store coverage constraints."); } @Override public org.geotoolkit.sld.xml.v100.LayerFeatureConstraints visit(final LayerFeatureConstraints constraints, final Object data) { final org.geotoolkit.sld.xml.v100.LayerFeatureConstraints cons = sld_factory.createLayerFeatureConstraints(); for(final FeatureTypeConstraint fc : constraints.constraints() ){ cons.getFeatureTypeConstraint().add( visit(fc,null) ); } return cons; } @Override public org.geotoolkit.sld.xml.v110.CoverageConstraint visit(final CoverageConstraint constraint, final Object data) { throw new UnsupportedOperationException("SLD v1.0.0 doesnt have a xml tag to store coverage constraints."); } @Override public org.geotoolkit.sld.xml.v100.FeatureTypeConstraint visit(final FeatureTypeConstraint constraint, final Object data) { final org.geotoolkit.sld.xml.v100.FeatureTypeConstraint ftc = sld_factory.createFeatureTypeConstraint(); ftc.setFeatureTypeName( visitName((org.opengis.util.GenericName) constraint.getFeatureTypeName()).toString() ); ftc.setFilter( visit(constraint.getFilter())); for(final Extent ext : constraint.getExtent()){ ftc.getExtent().add( visit(ext,null) ); } return ftc; } @Override public Object visit(final CoverageExtent extent, final Object data) { throw new UnsupportedOperationException("SLD v1.0.0 doesnt have a xml tag to store coverage extent."); } @Override public org.geotoolkit.sld.xml.v100.Extent visit(final Extent extent, final Object data) { final org.geotoolkit.sld.xml.v100.Extent ext = sld_factory.createExtent(); ext.setName(extent.getName()); ext.setValue(extent.getValue()); return ext; } @Override public Object visit(final RangeAxis axi, final Object data) { throw new UnsupportedOperationException("SLD v1.0.0 doesnt have a xml tag to store range axis"); } @Override public org.geotoolkit.sld.xml.v100.RemoteOWS visit(final RemoteOWS ows, final Object data) { final org.geotoolkit.sld.xml.v100.RemoteOWS remote = sld_factory.createRemoteOWS(); remote.setService(ows.getService()); remote.setOnlineResource( visit(ows.getOnlineResource(), null) ); return remote; } @Override public org.geotoolkit.sld.xml.v110.InlineFeature visit(final InlineFeature inline, final Object data) { //TODO handle this when GML will be ready return null; } }