Index: MultiShapeSymbol.java
===================================================================
--- MultiShapeSymbol.java	(revision 43509)
+++ MultiShapeSymbol.java	(revision 43510)
@@ -50,6 +50,7 @@
 import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.style.IMask;
 import org.gvsig.tools.ToolsLocator;
 import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.NotYetImplemented;
 import org.gvsig.tools.persistence.PersistenceManager;
 import org.gvsig.tools.persistence.PersistentState;
 import org.gvsig.tools.persistence.exception.PersistenceException;
@@ -174,30 +175,27 @@
 	    }
 	}
 	
+    @Override
 	public boolean isOneDotOrPixel(Geometry geom,
 			double[] positionOfDotOrPixel, ViewPort viewPort, int dpi) {
-		switch (geom.getType()) {
-		case Geometry.TYPES.POINT: //Tipo punto
+		
+        GeometryType geomType = geom.getGeometryType();
+        if( geomType.isSubTypeOf(Geometry.TYPES.POINT) ) {
            	if (marker != null) {
 				return marker.isOneDotOrPixel(geom, positionOfDotOrPixel, viewPort, dpi);
 			}
-			break;
-		case Geometry.TYPES.CURVE:
-		case Geometry.TYPES.ARC:
-		case Geometry.TYPES.SPLINE:
-		if (line != null) {
-				return line.isOneDotOrPixel(geom, positionOfDotOrPixel, viewPort, dpi);
+
+        } else if( geomType.isSubTypeOf(Geometry.TYPES.CURVE) ) {
+            if (line != null) {
+                return line.isOneDotOrPixel(geom, positionOfDotOrPixel, viewPort, dpi);
 			}
-			break;
-
-		case Geometry.TYPES.SURFACE:
-        case Geometry.TYPES.ELLIPSE:
-		case Geometry.TYPES.CIRCLE:
+            
+        } else if( geomType.isSubTypeOf(Geometry.TYPES.SURFACE) ) {
 			if (fill != null) {
 				return fill.isOneDotOrPixel(geom, positionOfDotOrPixel, viewPort, dpi);
 			}
-			break;
-		}
+            
+        }
 		if (!geom.isSimple()){
 			Aggregate aggregate = (Aggregate)geom;			
 			for (int i=0 ; i<aggregate.getPrimitivesNumber() ; i++){
@@ -332,34 +330,28 @@
 		}
 	}
 
-//	public String getClassName() {
-//		return getClass().getName();
-//	}
-
+    @Override
 	public void print(Graphics2D g, AffineTransform at, Geometry geom, PrintAttributes properties) {
-		switch (geom.getType()) {
-		case Geometry.TYPES.POINT: //Tipo punto
+        GeometryType geomType = geom.getGeometryType();
+        if( geomType.isTypeOf(Geometry.TYPES.POINT) ) {
            	if (marker != null) {
 				marker.print(g, at, geom, properties);
 			}
-			break;
-		case Geometry.TYPES.CURVE:
-		case Geometry.TYPES.ARC:
+
+        } else if( geomType.isTypeOf(Geometry.TYPES.CURVE) ) {
 			if (line != null) {
 				line.print(g, at, geom, properties);
 			}
-			break;
 
-		case Geometry.TYPES.SURFACE:
-		case Geometry.TYPES.ELLIPSE:
-        case Geometry.TYPES.CIRCLE:
+        } else if( geomType.isTypeOf(Geometry.TYPES.SURFACE) ) {
 			if (fill != null) {
 				fill.print(g, at, geom, properties);
 			}
-			break;
-		}
+
+        }
 	}
 
+    @Override
 	public double getRotation() {
 		if (marker != null) {
 			return marker.getRotation();
@@ -459,6 +451,7 @@
 		}
 	}
 
+    @Override
 	public int getUnit() {
 		if (marker != null) {
 			return marker.getUnit();
@@ -469,109 +462,114 @@
 		return -1;
 	}
 
+    @Override
 	public void setMask(IMask mask) {
-		// TODO Implement it
-		throw new Error("Not yet implemented!");
+		throw new NotYetImplemented();
 
 	}
 
+    @Override
 	public int getReferenceSystem() {
 		return this.referenceSystem;
 	}
 
+    @Override
 	public void setReferenceSystem(int system) {
 		this.referenceSystem = system;
 
 	}
 
+    @Override
 	public double toCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
-		switch (geom.getType()) {
-		case Geometry.TYPES.POINT: //Tipo punto
+        GeometryType geomType = geom.getGeometryType();
+        if( geomType.isTypeOf(Geometry.TYPES.POINT) ) {
         	if (marker != null) {
 				return marker.toCartographicSize(viewPort, dpi, geom);
 			}
-		case Geometry.TYPES.CURVE:
-		case Geometry.TYPES.ARC:
+
+        } else if( geomType.isTypeOf(Geometry.TYPES.CURVE) ) {
 			if (line != null) {
 				return line.toCartographicSize(viewPort, dpi, geom);
 			}
-		case Geometry.TYPES.SURFACE:
-		case Geometry.TYPES.ELLIPSE:
-		case Geometry.TYPES.CIRCLE:
+
+        } else if( geomType.isTypeOf(Geometry.TYPES.SURFACE) ) {
 			LOG.warn("Cartographic size does not have any sense for fill symbols");
 
-		}
+        }
 		return -1;
 	}
 
+    @Override
 	public void setCartographicSize(double cartographicSize, Geometry geom) {
-		switch (geom.getType()) {
-		case Geometry.TYPES.POINT: //Tipo punto
+        GeometryType geomType = geom.getGeometryType();
+        if( geomType.isTypeOf(Geometry.TYPES.POINT) ) {
         	if (marker != null) {
 				marker.setCartographicSize(cartographicSize, null);
 			}
-        	break;
-		case Geometry.TYPES.CURVE:
-		case Geometry.TYPES.ARC:
+
+        } else if( geomType.isTypeOf(Geometry.TYPES.CURVE) ) {
 			if (line != null) {
 				line.setCartographicSize(cartographicSize, null);
 			}
-        	break;
-		case Geometry.TYPES.SURFACE:
-		case Geometry.TYPES.ELLIPSE:
-	    case Geometry.TYPES.CIRCLE:
+
+        } else if( geomType.isTypeOf(Geometry.TYPES.SURFACE) ) {
 	    	LOG.warn("Cartographic size does not have any sense for fill symbols");
-		}
+
+        }
 	}
 
 
+    @Override
 	public double getCartographicSize(ViewPort viewPort, double dpi, Geometry geom) {
-		switch (geom.getType()) {
-		case Geometry.TYPES.POINT: //Tipo punto
-        	return CartographicSupportToolkit.
-			getCartographicLength(marker,
-								  getSize(),
-								  viewPort,
-								  dpi);
-		case Geometry.TYPES.CURVE:
-		case Geometry.TYPES.ARC:
-			return CartographicSupportToolkit.
-			getCartographicLength(line,
-								  getSize(),
-								  viewPort,
-								  dpi);
-		case Geometry.TYPES.SURFACE:
-     	case Geometry.TYPES.ELLIPSE:
-	    case Geometry.TYPES.CIRCLE:
+        GeometryType geomType = geom.getGeometryType();
+        if( geomType.isTypeOf(Geometry.TYPES.POINT) ) {
+        	return CartographicSupportToolkit.getCartographicLength(
+                marker, getSize(), viewPort, dpi
+            );
+
+        } else if( geomType.isTypeOf(Geometry.TYPES.CURVE) ) {
+			return CartographicSupportToolkit.getCartographicLength(
+                line, getSize(), viewPort, dpi
+            );
+
+        } else if( geomType.isTypeOf(Geometry.TYPES.SURFACE) ) {
 	    	LOG.warn("Cartographic size does not have any sense for fill symbols");
-		}
+
+        }
 		return -1;
 	}
 
+    @Override
 	public IMarkerSymbol getMarkerSymbol() {
 		return marker;
 	}
 
+    @Override
 	public ILineSymbol getLineSymbol() {
 		return line;
 	}
 
+    @Override
 	public IFillSymbol getFillSymbol() {
 		return fill;
 	}
 
+    @Override
 	public void setMarkerSymbol(IMarkerSymbol markerSymbol) {
 		this.marker = markerSymbol;
 	}
 
+    @Override
 	public void setLineSymbol(ILineSymbol lineSymbol) {
 		this.line = lineSymbol;
 	}
 
+    @Override
 	public void setFillSymbol(IFillSymbol fillFillSymbol) {
 		this.fill = fillFillSymbol;
 	}
 
+    @Override
 	public boolean hasFill() {
 	if (fill == null) {
 		return false;
@@ -579,23 +577,24 @@
 	return fill.hasFill();
 	}
 
+    @Override
 	public void setHasFill(boolean hasFill) {
 		if (fill != null) {
 			fill.setHasFill(hasFill);
-//			this.hasFill = hasFill;
 		}
 	}
 
+    @Override
 	public boolean hasOutline() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
+    @Override
 	public void setHasOutline(boolean hasOutline) {
-		// TODO Auto-generated method stub
 
 	}
 
+    @Override
 	public Object clone() throws CloneNotSupportedException {
 		MultiShapeSymbol copy = (MultiShapeSymbol) super.clone();
 
@@ -622,6 +621,7 @@
 		return copy;
 	}
 
+    @Override
 	public void loadFromState(PersistentState state)
 			throws PersistenceException {
 		setDescription(state.getString(FIELD_DESCRIPTION));
@@ -630,6 +630,7 @@
 		setLineSymbol((ILineSymbol) state.get(FIELD_LINE));
 	}
 
+    @Override
 	public void saveToState(PersistentState state) throws PersistenceException {
 		state.set(FIELD_DESCRIPTION, getDescription());
 		state.set(FIELD_FILL, getFillSymbol());
@@ -639,6 +640,7 @@
 
 	public static class RegisterPersistence implements Callable {
 
+        @Override
 		public Object call() throws Exception {
 			PersistenceManager manager = ToolsLocator.getPersistenceManager();
 			if( manager.getDefinition(MULTI_SHAPE_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
@@ -665,6 +667,7 @@
 
 	public static class RegisterSymbol implements Callable {
 
+        @Override
 		public Object call() throws Exception {
 	        int[] shapeTypes;
 	        SymbolManager manager = MapContextLocator.getSymbolManager();
