//$HeadURL$
/*----------------------------------------------------------------------------
This file is part of deegree, http://deegree.org/
Copyright (C) 2001-2010 by:
- Department of Geography, University of Bonn -
and
- lat/lon GmbH -
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.
You should have received a copy of the GNU Lesser General Public License
along with this library; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Contact information:
lat/lon GmbH
Aennchenstr. 19, 53177 Bonn
Germany
http://lat-lon.de/
Department of Geography, University of Bonn
Prof. Dr. Klaus Greve
Postfach 1147, 53001 Bonn
Germany
http://www.geographie.uni-bonn.de/deegree/
e-mail: info@deegree.org
----------------------------------------------------------------------------*/
package org.deegree.igeo.style.utils;
import org.deegree.datatypes.QualifiedName;
import org.deegree.framework.xml.XMLTools;
import org.deegree.graphics.sld.CssParameter;
import org.deegree.graphics.sld.ParameterValueType;
import org.deegree.graphics.sld.StyleFactory;
import org.deegree.model.filterencoding.ArithmeticExpression;
import org.deegree.model.filterencoding.Expression;
import org.deegree.model.filterencoding.PropertyName;
/**
* TODO add class documentation here
*
* @author <a href="mailto:buesching@lat-lon.de">Lyn Buesching</a>
* @author last edited by: $Author$
*
* @version $Revision$, $Date$
*/
public class SldCreatorUtils {
public static CssParameter getAsCssParameter( String name, PropertyName dynamic ) {
ParameterValueType pvt = StyleFactory.createParameterValueType( new Expression[] { dynamic } );
return new CssParameter( name, pvt );
}
public static CssParameter getAsCssParameter( String name, boolean isInPixel, QualifiedName dynamic, int add ) {
if ( !isInPixel ) {
ParameterValueType pvt = getParameterValueType( new PropertyName( dynamic ), add );
return new CssParameter( name, pvt );
} else {
PropertyName pn = new PropertyName( dynamic );
ParameterValueType pvt = StyleFactory.createParameterValueType( new Expression[] { pn } );
return new CssParameter( name, pvt );
}
}
public static CssParameter getAsCssParameter( String name, boolean isInPixel, QualifiedName dynamic ) {
if ( !isInPixel ) {
ParameterValueType pvt = getParameterValueType( new PropertyName( dynamic ) );
return new CssParameter( name, pvt );
} else {
PropertyName pn = new PropertyName( dynamic );
ParameterValueType pvt = StyleFactory.createParameterValueType( new Expression[] { pn } );
return new CssParameter( name, pvt );
}
}
public static CssParameter getAsCssParameter( String name, boolean isInPixel, double value ) {
if ( !isInPixel ) {
ParameterValueType paramValueType = getParameterValueType( value );
if ( paramValueType != null ) {
return new CssParameter( name, paramValueType );
}
}
return StyleFactory.createCssParameter( name, value );
}
public static ParameterValueType getParameterValueType( double value ) {
return getParameterValueType( ( (Double) value ).toString() );
}
public static ParameterValueType getParameterValueType( double value, int add ) {
return getParameterValueType( ( (Double) value ).toString(), add );
}
public static ParameterValueType getParameterValueType( String value ) {
String s = "<ogc:Div><ogc:Literal>" + value + "</ogc:Literal>" + "<ogc:PropertyName>$SCALE</ogc:PropertyName>"
+ "</ogc:Div>";
try {
Expression e = Expression.buildFromDOM( XMLTools.getStringFragmentAsElement( s ) );
return StyleFactory.createParameterValueType( new Expression[] { e } );
} catch ( Exception e ) {
e.printStackTrace();
}
return null;
}
public static ParameterValueType getParameterValueType( String value, int add ) {
String s = "<ogc:Add><ogc:Div><ogc:Literal>" + value + "</ogc:Literal>"
+ "<ogc:PropertyName>$SCALE</ogc:PropertyName>" + "</ogc:Div>" + "<ogc:Literal>" + add
+ "</ogc:Literal></ogc:Add>";
try {
Expression e = Expression.buildFromDOM( XMLTools.getStringFragmentAsElement( s ) );
return StyleFactory.createParameterValueType( new Expression[] { e } );
} catch ( Exception e ) {
e.printStackTrace();
}
return null;
}
public static ParameterValueType getParameterValueType( PropertyName pn ) {
String s = "<ogc:Div>" + pn.toXML() + "<ogc:PropertyName>$SCALE</ogc:PropertyName>" + "</ogc:Div>";
try {
Expression e = Expression.buildFromDOM( XMLTools.getStringFragmentAsElement( s ) );
return StyleFactory.createParameterValueType( new Expression[] { e } );
} catch ( Exception e ) {
e.printStackTrace();
}
return null;
}
public static ParameterValueType getParameterValueType( PropertyName pn, int add ) {
String s = "<ogc:Add><ogc:Div>" + pn.toXML() + "<ogc:PropertyName>$SCALE</ogc:PropertyName>" + "</ogc:Div>"
+ "<ogc:Literal>" + add + "</ogc:Literal></ogc:Add>";
try {
Expression e = Expression.buildFromDOM( XMLTools.getStringFragmentAsElement( s ) );
return StyleFactory.createParameterValueType( new Expression[] { e } );
} catch ( Exception e ) {
e.printStackTrace();
}
return null;
}
public static PropertyName getPropertyNameFromPvt( ParameterValueType pvt ) {
for ( Object component : pvt.getComponents() ) {
if ( component instanceof Expression ) {
return getAsPropertyName( (Expression) component );
}
}
return null;
}
private static PropertyName pn = new PropertyName( new QualifiedName( "$SCALE" ) );
private static PropertyName getAsPropertyName( Expression e ) {
if ( e instanceof ArithmeticExpression ) {
Expression firstExpression = ( (ArithmeticExpression) e ).getFirstExpression();
Expression secondExpression = ( (ArithmeticExpression) e ).getSecondExpression();
if ( firstExpression instanceof PropertyName && !pn.equals( (PropertyName) firstExpression ) ) {
return (PropertyName) firstExpression;
} else if ( secondExpression instanceof PropertyName && !pn.equals( (PropertyName) secondExpression ) ) {
return (PropertyName) secondExpression;
} else {
PropertyName asPropertyName = getAsPropertyName( firstExpression );
if ( asPropertyName != null && !pn.equals( asPropertyName ) ) {
return asPropertyName;
}
return getAsPropertyName( secondExpression );
}
} else if ( e instanceof PropertyName && !pn.equals( (PropertyName) e ) ) {
return (PropertyName) e;
}
return null;
}
}