/*
* 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.geotoolkit.se.xml.v110.OnlineResourceType;
import org.geotoolkit.sld.xml.v110.UseSLDLibrary;
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;
/**
* Transform a GT SLD in a jaxb SLD v1.1.0 object
*
* @author Johann Sorel (Geomatys)
* @module
*/
public class GTtoSLD110Transformer extends GTtoSE110Transformer implements SLDVisitor {
private final org.geotoolkit.sld.xml.v110.ObjectFactory sld_factory;
private final org.geotoolkit.se.xml.v110.ObjectFactory se_factory;
public GTtoSLD110Transformer() {
this.sld_factory = new org.geotoolkit.sld.xml.v110.ObjectFactory();
this.se_factory = new org.geotoolkit.se.xml.v110.ObjectFactory();
}
@Override
public org.geotoolkit.sld.xml.v110.StyledLayerDescriptor visit(final StyledLayerDescriptor sld, final Object data) {
final org.geotoolkit.sld.xml.v110.StyledLayerDescriptor versionned = sld_factory.createStyledLayerDescriptor();
versionned.setName(sld.getName());
// versionned.setVersion(sld.getVersion());
versionned.setDescription( visit(sld.getDescription(), null));
for(final SLDLibrary lib : sld.libraries()){
versionned.getUseSLDLibrary().add( visit(lib,null) );
}
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 UseSLDLibrary visit(final SLDLibrary library, final Object data) {
final UseSLDLibrary lib = sld_factory.createUseSLDLibrary();
final OnlineResourceType online = visit(library.getOnlineResource(), null);
lib.setOnlineResource(online);
return lib;
}
@Override
public org.geotoolkit.sld.xml.v110.NamedLayer visit(final NamedLayer layer, final Object data) {
final org.geotoolkit.sld.xml.v110.NamedLayer named = sld_factory.createNamedLayer();
named.setName(layer.getName());
named.setDescription( visit(layer.getDescription(), null));
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.v110.UserLayer visit(final UserLayer layer, final Object data) {
final org.geotoolkit.sld.xml.v110.UserLayer user = sld_factory.createUserLayer();
user.setName(layer.getName());
user.setDescription( visit(layer.getDescription(),null) );
if(layer.getConstraints() instanceof LayerFeatureConstraints){
final LayerFeatureConstraints cons = (LayerFeatureConstraints) layer.getConstraints();
user.setLayerFeatureConstraints( visit(cons,null) );
}else if(layer.getConstraints() instanceof LayerCoverageConstraints){
final LayerCoverageConstraints cons = (LayerCoverageConstraints) layer.getConstraints();
user.setLayerCoverageConstraints( visit(cons,null) );
}
if(layer.getSource() instanceof RemoteOWS){
final RemoteOWS remote = (RemoteOWS) layer.getSource();
user.setRemoteOWS( visit(remote,null) );
}else if(layer.getSource() instanceof InlineFeature){
final InlineFeature feature = (InlineFeature) layer.getSource();
user.setInlineFeature( visit(feature,null) );
}
for(final Style style : layer.styles()){
user.getUserStyle().add( visit(style,null) );
}
return user;
}
@Override
public org.geotoolkit.sld.xml.v110.NamedStyle visit(final NamedStyle style, final Object data) {
final org.geotoolkit.sld.xml.v110.NamedStyle named = sld_factory.createNamedStyle();
named.setName(style.getName());
named.setDescription( visit(style.getDescription(), null));
return named;
}
@Override
public org.geotoolkit.sld.xml.v110.LayerCoverageConstraints visit(final LayerCoverageConstraints constraints, final Object data) {
final org.geotoolkit.sld.xml.v110.LayerCoverageConstraints cons = sld_factory.createLayerCoverageConstraints();
for(final CoverageConstraint fc : constraints.constraints() ){
cons.getCoverageConstraint().add( visit(fc,null) );
}
return cons;
}
@Override
public org.geotoolkit.sld.xml.v110.LayerFeatureConstraints visit(final LayerFeatureConstraints constraints, final Object data) {
final org.geotoolkit.sld.xml.v110.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) {
final org.geotoolkit.sld.xml.v110.CoverageConstraint ftc = sld_factory.createCoverageConstraint();
ftc.setCoverageName(constraint.getCoverageName());
ftc.setCoverageExtent( visit(constraint.getCoverageExtent(),null) );
return ftc;
}
@Override
public org.geotoolkit.sld.xml.v110.FeatureTypeConstraint visit(final FeatureTypeConstraint constraint, final Object data) {
final org.geotoolkit.sld.xml.v110.FeatureTypeConstraint ftc = sld_factory.createFeatureTypeConstraint();
ftc.setFeatureTypeName( visitName((org.opengis.util.GenericName) constraint.getFeatureTypeName()));
ftc.setFilter( visit(constraint.getFilter()));
for(final Extent ext : constraint.getExtent()){
ftc.getExtent().add( visit(ext,null) );
}
return ftc;
}
@Override
public org.geotoolkit.sld.xml.v110.CoverageExtent visit(final CoverageExtent extent, final Object data) {
final org.geotoolkit.sld.xml.v110.CoverageExtent ce = sld_factory.createCoverageExtent();
if(extent.getTimePeriod() != null){
ce.setTimePeriod(extent.getTimePeriod());
}else if( extent.rangeAxis() != null ){
for(final RangeAxis axe : extent.rangeAxis()){
ce.getRangeAxis().add( visit(axe,null) );
}
}
return ce;
}
@Override
public org.geotoolkit.sld.xml.v110.Extent visit(final Extent extent, final Object data) {
final org.geotoolkit.sld.xml.v110.Extent ext = sld_factory.createExtent();
ext.setName(extent.getName());
ext.setValue(extent.getValue());
return ext;
}
@Override
public org.geotoolkit.sld.xml.v110.RangeAxis visit(final RangeAxis axi, final Object data) {
final org.geotoolkit.sld.xml.v110.RangeAxis axe = sld_factory.createRangeAxis();
axe.setName(axi.getName());
axe.setValue(axi.getValue());
return axe;
}
@Override
public org.geotoolkit.sld.xml.v110.RemoteOWS visit(final RemoteOWS ows, final Object data) {
final org.geotoolkit.sld.xml.v110.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;
}
}