GeolocItem.java
/*
* Copyright (c) 2002-2015, Mairie de Paris
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright notice
* and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice
* and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* License 1.0
*/
package fr.paris.lutece.plugins.leaflet.business;
import fr.paris.lutece.util.xml.XmlUtil;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;
/**
* A geoloc item with methods to translate to/from geojson and to XML
*/
@JsonAutoDetect( creatorVisibility = Visibility.NONE, fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE )
public class GeolocItem
{
public static final String PATH_TYPE = "type";
public static final String PATH_GEOMETRY = "geometry";
public static final String PATH_GEOMETRY_TYPE = "type";
public static final String PATH_GEOMETRY_COORDINATES = "coordinates";
public static final String PATH_PROPERTIES = "properties";
public static final String PATH_PROPERTIES_ADDRESS = "address";
public static final String PATH_PROPERTIES_ICON = "icon";
public static final String PATH_PROPERTIES_LAYER = "layer";
public static final String XML_ROOT = "geoloc";
public static final String XML_LON = "lon";
public static final String XML_LAT = "lat";
public static final String XML_ADDRESS = "address";
public static final String XML_ICON = "icon";
public static final String XML_LAYER = "layer";
public static final String VALUE_TYPE = "Feature";
public static final String VALUE_GEOMETRY_TYPE = "Point";
public static final String VALUE_GEOMETRY_TYPE_POLYGON = "Polygon";
public static final String VALUE_GEOMETRY_TYPE_POLYLINE = "Polyline";
private static final ObjectMapper _objectMapper;
static
{
_objectMapper = new ObjectMapper( );
_objectMapper.configure( DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false );
}
private List<Double> _lonlat;
private String _address;
private String _icon;
private String _layer;
private String _typegeometry;
private List<List<Double>> _polygonLonLoat;
//Example
//{"type":"Feature","geometry":{"type":"Point","coordinates":[2.31272,48.83632]},"properties":{"layer":"aco"}}
/**
* Sets the Geometry
*
* @param geometry the geometry
*/
@JsonProperty( PATH_GEOMETRY )
public void setGeometry( Map<String, Object> geometry )
{
_typegeometry = (String) geometry.get( PATH_GEOMETRY_TYPE );
if ( _typegeometry.equals( VALUE_GEOMETRY_TYPE ) )
{
_lonlat = (List<Double>) geometry.get( PATH_GEOMETRY_COORDINATES );
}
else if ( _typegeometry.equals( VALUE_GEOMETRY_TYPE_POLYGON ) || _typegeometry.equals( VALUE_GEOMETRY_TYPE_POLYLINE ) )
{
_polygonLonLoat = ( List<List<Double>> ) geometry.get( PATH_GEOMETRY_COORDINATES );
}
}
/**
* Sets the Properties
*
* @param properties the geometry
*/
@JsonProperty( PATH_PROPERTIES )
public void setProperties( Map<String, Object> properties )
{
_address = (String) properties.get( PATH_PROPERTIES_ADDRESS );
_icon = (String) properties.get( PATH_PROPERTIES_ICON );
_layer = (String) properties.get( PATH_PROPERTIES_LAYER );
}
/**
* Returns the Type
*
* @return The type
*/
@JsonProperty( PATH_TYPE )
public String getType( )
{
return VALUE_TYPE;
}
/**
* Returns the Properties
*
* @return The properties
*/
@JsonProperty( PATH_PROPERTIES )
public Map<String, Object> getProperties( )
{
HashMap<String, Object> properties = new HashMap<String, Object>( );
if ( _address != null )
{
properties.put( PATH_PROPERTIES_ADDRESS, _address );
}
if ( _icon != null )
{
properties.put( PATH_PROPERTIES_ICON, _icon );
}
if ( _layer != null )
{
properties.put( PATH_PROPERTIES_LAYER, _layer );
}
return properties;
}
/**
* Returns the Geometry
*
* @return The geometry
*/
@JsonProperty( PATH_GEOMETRY )
public Map<String, Object> getGeometry( )
{
HashMap<String, Object> geometry = new HashMap<String, Object>( );
geometry.put( PATH_GEOMETRY_TYPE, _typegeometry );
if ( _typegeometry.equals( VALUE_GEOMETRY_TYPE ) )
{
geometry.put( PATH_GEOMETRY_COORDINATES, _lonlat );
}
else if ( _typegeometry.equals( VALUE_GEOMETRY_TYPE_POLYGON ) || _typegeometry.equals( VALUE_GEOMETRY_TYPE_POLYLINE ) )
{
geometry.put( PATH_GEOMETRY_COORDINATES, _polygonLonLoat );
}
return geometry;
}
/**
* Returns the LonLat
*
* @return The LonLat
*/
public List<Double> getLonLat( )
{
return _lonlat;
}
/**
* Returns the Lon
*
* @return The Lon
*/
public double getLon( )
{
return _lonlat.get( 0 );
}
/**
* Returns the Lat
*
* @return The Lat
*/
public double getLat( )
{
return _lonlat.get( 1 );
}
/**
* Returns the Address
*
* @return The address
*/
public String getAddress( )
{
return _address;
}
/**
* Returns the Icon
*
* @return The icon
*/
public String getIcon( )
{
return _icon;
}
/**
* Returns the Layer
*
* @return The layer
*/
public String getLayer( )
{
return _layer;
}
/**
* Sets the Icon
*
* @param icon the icon
*/
public void setIcon( String icon )
{
_icon = icon;
}
/**
* Writes the geojson to a String
*
* @return The geojseon String
*/
public String toJSON( )
{
try
{
return _objectMapper.writeValueAsString( this );
}
catch ( IOException e )
{
// Writing to strings should not produce exceptions
throw new RuntimeException( e );
}
}
/**
* Writes the xml to a String. This is a non standard representation.
*
* @return The xml String
*/
public String toXML( )
{
StringBuffer stringBuffer = new StringBuffer( );
XmlUtil.beginElement( stringBuffer, XML_ROOT );
XmlUtil.addElement( stringBuffer, XML_LON, _lonlat.get( 0 ).toString( ) );
XmlUtil.addElement( stringBuffer, XML_LAT, _lonlat.get( 1 ).toString( ) );
if ( _address != null )
{
XmlUtil.addElementHtml( stringBuffer, XML_ADDRESS, _address );
}
if ( _icon != null )
{
XmlUtil.addElement( stringBuffer, XML_ICON, _icon );
}
if ( _layer != null )
{
XmlUtil.addElement( stringBuffer, XML_LAYER, _layer );
}
XmlUtil.endElement( stringBuffer, XML_ROOT );
return stringBuffer.toString( );
}
/**
* Parses a geojson string to build a GeolocItem Object.
*
* @return The geolocItem object
*/
public static GeolocItem fromJSON( String strJson )
throws JsonParseException, JsonMappingException, IOException
{
return _objectMapper.readValue( strJson, GeolocItem.class );
}
public String getTypegeometry() {
return _typegeometry;
}
public void setTypegeometry(String _typegeometry) {
this._typegeometry = _typegeometry;
}
}