You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/12/17 12:26:13 UTC

svn commit: r891647 - in /labs/magma/trunk/beans-map: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/magma/ src/main/java/org/apache/magma/beans/ src/main/java/org/apache/magma/conversion/ src/mai...

Author: simoneg
Date: Thu Dec 17 11:26:11 2009
New Revision: 891647

URL: http://svn.apache.org/viewvc?rev=891647&view=rev
Log:
LABS-503 : new map support bean

Added:
    labs/magma/trunk/beans-map/pom.xml
    labs/magma/trunk/beans-map/src/
    labs/magma/trunk/beans-map/src/main/
    labs/magma/trunk/beans-map/src/main/java/
    labs/magma/trunk/beans-map/src/main/java/org/
    labs/magma/trunk/beans-map/src/main/java/org/apache/
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MagMapBean.java
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapCoordinate.java
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapShape.java
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/conversion/
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/conversion/map/
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/conversion/map/MapBeanToStringConverter.java
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/InferConsiderOnMagMapValidated.aj
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MagMap.java
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MapBeanValidator.java
    labs/magma/trunk/beans-map/src/main/resources/
    labs/magma/trunk/beans-map/src/main/resources/META-INF/
    labs/magma/trunk/beans-map/src/main/resources/META-INF/magma.default.properties
    labs/magma/trunk/beans-map/src/test/
    labs/magma/trunk/beans-map/src/test/java/
    labs/magma/trunk/beans-map/src/test/resources/

Added: labs/magma/trunk/beans-map/pom.xml
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/pom.xml?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/pom.xml (added)
+++ labs/magma/trunk/beans-map/pom.xml Thu Dec 17 11:26:11 2009
@@ -0,0 +1,25 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>magma-parent</artifactId>
+    <groupId>org.apache.magma</groupId>
+    <version>3</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.magma</groupId>
+  <artifactId>beans-map</artifactId>
+  <name>Magma Beans Map</name>
+  <version>0.0.3-SNAPSHOT</version>
+  <packaging>magma</packaging>  
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.magma</groupId>
+      <artifactId>foundation-beans</artifactId>
+      <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.magma</groupId>
+      <artifactId>foundation-validation</artifactId>
+      <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MagMapBean.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MagMapBean.java?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MagMapBean.java (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MagMapBean.java Thu Dec 17 11:26:11 2009
@@ -0,0 +1,123 @@
+package org.apache.magma.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * Holder for geographic coordinates.
+ * 
+ * This type can contain not only a pair of coordinates,
+ * but a full range of geographic data.
+ * 
+ * It contains groups of points (markers), shapes (lines or polygons) and
+ * routes (points connected using existing streets).
+ * 
+ * This data can be contained in a single string. In that case,
+ * the format is as follows :
+ * <ul>
+ * 	<li>Each shape is a string is followed by the ">" character</li>
+ *  <li>The shape string is subdivided in parts, using the "!" character</li>
+ *  <li>The first part is the preambol, and contains only the type, which can be "point", "line", "poly" or "route"</li>
+ *  <li>The second part are the coordinates, subdivided by ";", and in the format long,lat where long and lat are floating point numbers, eventually negative, using "." as the decimal separator.</li>
+ *  <li>The third part is optional, currently used only by the route type. For routes it contains the polyline for the route, as returned by the underlying map system.</li>
+ * </ul>
+ * 
+ *
+ * @author Simone Gianni <si...@apache.org>
+ */
+public class MagMapBean {
+
+	/**
+	 * The stringified value of all the shapes in this map.
+	 */
+	private String value;
+	/**
+	 * Becomes true is this map is modified, to avoid reserialization of data from the converter
+	 */
+	private boolean modified = false;
+	
+	/**
+	 * Optional center of the map, if not specified map will be designed to contain all shapes.
+	 */
+	private MapCoordinate center = null;
+	/**
+	 * Optional map scale, in pixel per meter, if not specified map will be designed to contain all shapes.
+	 */
+	private int ppm = 0;
+	
+	/**
+	 * Shapes in this map.
+	 */
+	private List<MapShape> shapes = null;
+	
+	
+	public String getValue() {
+		if (this.modified) serialize();
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	public void parse() {
+		this.modified = false;
+		if (this.value == null) return;
+		this.shapes = new ArrayList<MapShape>();
+		String[] shapeStrings = this.value.split(">");
+		for (String shapestr : shapeStrings) {
+			MapShape sh = new MapShape();
+			sh.parse(shapestr);
+			this.shapes.add(sh);
+		}
+	}
+	
+	public void serialize() {
+		this.modified = false;
+		this.value = "";
+		if (this.shapes == null) return;
+		for (MapShape shape : this.shapes) {
+			this.value += shape.serialize();
+			this.value += ">";
+		}
+	}
+	
+	public void addShape(MapShape shape) {
+		this.modified = true;
+		if (this.shapes == null) parse();
+		if (this.shapes == null) this.shapes = new ArrayList<MapShape>();
+		this.shapes.add(shape);
+	}
+
+	public List<MapShape> getShapes() {
+		if (this.shapes == null) parse();
+		return shapes;
+	}
+	public void setShapes(List<MapShape> shapes) {
+		this.modified = true;		
+		this.shapes = shapes;
+	}
+	
+	public List<MapShape> findShapes(String type) {
+		if (this.shapes == null) parse();
+		List<MapShape> ret = new ArrayList<MapShape>();
+		if (this.shapes == null) return ret;
+		for (MapShape mapShape : this.shapes) {
+			if (mapShape.getType().equals(type)) ret.add(mapShape);
+		}
+		return ret;		
+	}
+
+	@Override
+	public int hashCode() {
+		return new HashCodeBuilder(51, 15)
+			.append(this.center)
+			.append(this.ppm)
+			.append(this.getValue())
+			.toHashCode();
+	}
+	
+	
+}

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapCoordinate.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapCoordinate.java?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapCoordinate.java (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapCoordinate.java Thu Dec 17 11:26:11 2009
@@ -0,0 +1,30 @@
+package org.apache.magma.beans;
+
+public class MapCoordinate {
+
+	private float latitude;
+	private float longitude;
+	
+	
+	public float getLatitude() {
+		return latitude;
+	}
+	public void setLatitude(float latitude) {
+		this.latitude = latitude;
+	}
+	public float getLongitude() {
+		return longitude;
+	}
+	public void setLongitude(float longitude) {
+		this.longitude = longitude;
+	}
+	public void parse(String string) {
+		String[] split = string.split(",");
+		this.latitude = Float.parseFloat(split[0]);
+		this.longitude = Float.parseFloat(split[1]);
+	}
+	public String serialize() {
+		return Float.toString(this.latitude) + "," + Float.toString(this.longitude);
+	}
+	
+}

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapShape.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapShape.java?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapShape.java (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapShape.java Thu Dec 17 11:26:11 2009
@@ -0,0 +1,84 @@
+package org.apache.magma.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MapShape {
+
+	public static String 
+	TYPE_POINT = "point",
+	TYPE_LINE = "line",
+	TYPE_POLY = "poly",
+	TYPE_ROUTE = "route";
+	
+	private String type;
+	private List<MapCoordinate> coordinates = new ArrayList<MapCoordinate>();
+	private String extra;
+
+	public String getType() {
+		return type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	public void addCoordinates(MapCoordinate... coordinates) {
+		for (MapCoordinate coord : coordinates) {
+			this.coordinates.add(coord);
+		}
+	}
+
+	public List<MapCoordinate> getCoordinates() {
+		return coordinates;
+	}
+	public void setCoordinates(List<MapCoordinate> coordinates) {
+		this.coordinates = coordinates;
+	}
+	public String getExtra() {
+		return extra;
+	}
+	public void setExtra(String extra) {
+		this.extra = extra;
+	}
+	public void parse(String shapestr) {
+		this.coordinates.clear();
+		String[] parts = shapestr.split("\\!");
+		this.type = parts[0];
+		if (parts.length > 1) {
+			this.parseCoordinates(parts[1]);
+		}
+		if (parts.length > 2) {
+			this.extra = parts[2];
+		}
+	}
+	private void parseCoordinates(String string) {
+		if (string.length() == 0) return;
+		String[] split = string.split(";");
+		for (String coordstr : split) {
+			if (coordstr.length() == 0) continue;
+			MapCoordinate coord = new MapCoordinate();
+			coord.parse(string);
+			this.coordinates.add(coord);
+		}
+	}
+	public String serialize() {
+		StringBuilder ret = new StringBuilder();
+		ret.append(this.type);
+		ret.append('!');
+		if (this.coordinates != null) {
+			for (MapCoordinate coord : this.coordinates) {
+				ret.append(coord.serialize());
+				ret.append(';');
+			}
+		}
+		ret.append('!');
+		if (this.extra != null) {
+			ret.append(this.extra);
+		}
+		return ret.toString();
+	}
+	
+	
+	
+	
+}

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/conversion/map/MapBeanToStringConverter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/conversion/map/MapBeanToStringConverter.java?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/conversion/map/MapBeanToStringConverter.java (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/conversion/map/MapBeanToStringConverter.java Thu Dec 17 11:26:11 2009
@@ -0,0 +1,40 @@
+package org.apache.magma.conversion.map;
+
+import org.apache.magma.beans.MagMapBean;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.PropertyAwareConverter;
+import org.apache.magma.conversion.string.BaseConverter;
+
+public class MapBeanToStringConverter extends BaseConverter<MagMapBean> implements PropertyAwareConverter {
+
+
+	public MapBeanToStringConverter() {
+		super(MagMapBean.class);
+	}
+
+	/**
+	 * Always returns a new instance, cause being a {@link PropertyAwareConverter} means this class is not thread safe. 
+	 */
+	@Override
+	public Converter<MagMapBean> build(Class<? extends MagMapBean> clazz) {
+		return new MapBeanToStringConverter();
+	}
+
+	public MagMapBean from(String value) {
+		if (value == null) return null;
+		MagMapBean map = new MagMapBean();
+		map.setValue(value);
+		return map;
+	}
+
+	public int getMaximumStringSize() {
+		return -1;
+	}
+
+	public String to(MagMapBean value) {
+		if (value == null) return null;
+		return value.getValue();
+	}
+
+}

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/InferConsiderOnMagMapValidated.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/InferConsiderOnMagMapValidated.aj?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/InferConsiderOnMagMapValidated.aj (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/InferConsiderOnMagMapValidated.aj Thu Dec 17 11:26:11 2009
@@ -0,0 +1,13 @@
+package org.apache.magma.validation.validators;
+
+import org.apache.magma.beans.Consider;
+import org.apache.magma.beans.MagMapBean;
+import org.apache.magma.beans.MagmaBeanSupport;
+
+public aspect InferConsiderOnMagMapValidated {
+
+	// TODO worked around for AspectJ bug
+	declare @method : (@MagMap !@Consider public * org.apache.magma.beans.*agmaBeanSupport+.get*()) : @Consider(MagMapBean.class);
+	declare @method : (@MagMap !@Consider public void org.apache.magma.beans.*agmaBeanSupport+.set*(..)) : @Consider(MagMapBean.class);
+	
+}

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MagMap.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MagMap.java?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MagMap.java (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MagMap.java Thu Dec 17 11:26:11 2009
@@ -0,0 +1,21 @@
+package org.apache.magma.validation.validators;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.magma.validation.ValidationAnnotation;
+
+@ValidationAnnotation
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MagMap {
+
+	public boolean permitMarkers() default true;
+	public boolean permitLines() default true;
+	public boolean permitPolygons() default true;
+	public boolean permitRoutes() default true;
+	public int maxShapes() default Integer.MAX_VALUE;
+	
+}

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MapBeanValidator.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MapBeanValidator.java?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MapBeanValidator.java (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/validation/validators/MapBeanValidator.java Thu Dec 17 11:26:11 2009
@@ -0,0 +1,84 @@
+package org.apache.magma.validation.validators;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.beans.MagMapBean;
+import org.apache.magma.beans.MapShape;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.validation.Validator;
+
+public class MapBeanValidator implements Validator<MagMapBean>{
+
+	private boolean permitMarkers = true;
+	private boolean permitLines = true;
+	private boolean permitPolygons = true;
+	private boolean permitRoutes = true;
+	private int maxShapes = Integer.MAX_VALUE;
+	
+	
+	public int maxCharacterLength() {
+		return -1;
+	}
+
+	
+	
+	public List<LocalizableString> validate(Object bean, PropertyInfo property, MagMapBean value) {
+		if (value == null) return null;
+		List<LocalizableString> ret = new ArrayList<LocalizableString>();
+		if (!permitMarkers) ret = check(value, MapShape.TYPE_POINT, "points", ret);
+		if (!permitLines) ret = check(value, MapShape.TYPE_LINE, "lines", ret);
+		if (!permitPolygons) ret = check(value, MapShape.TYPE_POLY, "polygons", ret);
+		if (!permitRoutes) ret = check(value, MapShape.TYPE_ROUTE, "routes", ret);
+		if (maxShapes != Integer.MAX_VALUE) {
+			if (maxShapes < value.getShapes().size()) {
+				ret.add(new LocalizableString("You are limited to {0} elements in this map", maxShapes));
+			}
+		}
+		return ret;
+	}
+	
+	protected List<LocalizableString> check(MagMapBean value, String type, String name, List<LocalizableString> ret) {
+		if (value.findShapes(type).size() > 0) {
+			ret.add(new LocalizableString("You cannot use " + name + " in this map"));
+		}		
+		return ret;
+	}
+
+	public boolean isPermitMarkers() {
+		return permitMarkers;
+	}
+	public void setPermitMarkers(boolean permitMarkers) {
+		this.permitMarkers = permitMarkers;
+	}
+
+	public boolean isPermitLines() {
+		return permitLines;
+	}
+	public void setPermitLines(boolean permitLines) {
+		this.permitLines = permitLines;
+	}
+
+	public boolean isPermitPolygons() {
+		return permitPolygons;
+	}
+	public void setPermitPolygons(boolean permitPolygons) {
+		this.permitPolygons = permitPolygons;
+	}
+
+	public boolean isPermitRoutes() {
+		return permitRoutes;
+	}
+	public void setPermitRoutes(boolean permitRoutes) {
+		this.permitRoutes = permitRoutes;
+	}
+
+	public int getMaxShapes() {
+		return maxShapes;
+	}
+	public void setMaxShapes(int maxShapes) {
+		this.maxShapes = maxShapes;
+	}
+
+}

Added: labs/magma/trunk/beans-map/src/main/resources/META-INF/magma.default.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/resources/META-INF/magma.default.properties?rev=891647&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/resources/META-INF/magma.default.properties (added)
+++ labs/magma/trunk/beans-map/src/main/resources/META-INF/magma.default.properties Thu Dec 17 11:26:11 2009
@@ -0,0 +1,16 @@
+#Licensed to the Apache Software Foundation (ASF) under one or more
+#contributor license agreements.  See the NOTICE file distributed with
+#this work for additional information regarding copyright ownership.
+#The ASF licenses this file to You under the Apache License, Version 2.0
+#(the "License"); you may not use this file except in compliance with
+#the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing, software
+#distributed under the License is distributed on an "AS IS" BASIS,
+#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#See the License for the specific language governing permissions and
+#limitations under the License.
+
+org.apache.magma.conversion.Converter.map=org.apache.magma.conversion.map.MapBeanToStringConverter



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org