From 9bca50dfed28af63aaf6c062b4bc3fdd32d48bae Mon Sep 17 00:00:00 2001
From: Hannes Janetzek <hannes.janetzek@gmail.com>
Date: Wed, 2 Apr 2014 22:29:20 +0200
Subject: [PATCH] some modification suggested by pmd:

- move fields before method
- chain StringBuilder appends
---
 vtm/src/org/oscim/backend/AssetAdapter.java   |  3 +-
 vtm/src/org/oscim/backend/canvas/Color.java   |  6 +-
 vtm/src/org/oscim/core/BoundingBox.java       | 42 ++++++-------
 vtm/src/org/oscim/core/GeoPoint.java          | 14 ++---
 vtm/src/org/oscim/core/GeometryBuffer.java    |  2 +-
 vtm/src/org/oscim/core/Tag.java               |  2 +-
 vtm/src/org/oscim/core/Tile.java              | 18 +++---
 .../org/oscim/layers/tile/TileManager.java    | 37 +++++------
 .../layers/tile/s3db/S3DBTileLoader.java      |  2 +-
 vtm/src/org/oscim/map/Animator.java           | 20 +++---
 vtm/src/org/oscim/renderer/GridRenderer.java  | 16 ++---
 .../renderer/elements/ElementLayers.java      | 44 ++++++-------
 .../oscim/renderer/elements/PolygonLayer.java | 12 ++--
 vtm/src/org/oscim/theme/XmlThemeBuilder.java  | 12 +---
 vtm/src/org/oscim/tiling/TileSource.java      | 14 ++---
 vtm/src/org/oscim/tiling/source/LwHttp.java   |  6 +-
 .../source/mapfile/QueryParameters.java       | 50 +++++++--------
 .../mapfile/header/SubFileParameter.java      | 62 +++++++++----------
 vtm/src/org/oscim/utils/IOUtils.java          | 12 ++++
 19 files changed, 192 insertions(+), 182 deletions(-)

diff --git a/vtm/src/org/oscim/backend/AssetAdapter.java b/vtm/src/org/oscim/backend/AssetAdapter.java
index ce6fa3f7..7b89302e 100644
--- a/vtm/src/org/oscim/backend/AssetAdapter.java
+++ b/vtm/src/org/oscim/backend/AssetAdapter.java
@@ -48,8 +48,7 @@ public abstract class AssetAdapter {
 		String line;
 		try {
 			while ((line = r.readLine()) != null) {
-				sb.append(line);
-				sb.append('\n');
+				sb.append(line).append('\n');
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
diff --git a/vtm/src/org/oscim/backend/canvas/Color.java b/vtm/src/org/oscim/backend/canvas/Color.java
index cc36cf72..7f33bfc3 100644
--- a/vtm/src/org/oscim/backend/canvas/Color.java
+++ b/vtm/src/org/oscim/backend/canvas/Color.java
@@ -19,7 +19,7 @@ package org.oscim.backend.canvas;
 
 import org.oscim.utils.FastMath;
 
-public class Color {
+public final class Color {
 
 	public static int fadePremul(int color, double alpha) {
 		alpha = FastMath.clamp(alpha, 0, 1);
@@ -238,4 +238,8 @@ public class Color {
 		}
 		return fallBackColor;
 	}
+
+	private Color() {
+		/* Singleton */
+	}
 }
diff --git a/vtm/src/org/oscim/core/BoundingBox.java b/vtm/src/org/oscim/core/BoundingBox.java
index e89da4eb..d9050739 100644
--- a/vtm/src/org/oscim/core/BoundingBox.java
+++ b/vtm/src/org/oscim/core/BoundingBox.java
@@ -55,7 +55,7 @@ public class BoundingBox {
 	/**
 	 * The hash code of this object.
 	 */
-	private transient int hashCodeValue;
+	private final int hashCodeValue;
 
 	/**
 	 * @param minLatitudeE6
@@ -163,29 +163,29 @@ public class BoundingBox {
 
 	@Override
 	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("BoundingBox [minLat=");
-		sb.append(minLatitudeE6);
-		sb.append(", minLon=");
-		sb.append(minLongitudeE6);
-		sb.append(", maxLat=");
-		sb.append(maxLatitudeE6);
-		sb.append(", maxLon=");
-		sb.append(maxLongitudeE6);
-		sb.append("]");
-		return sb.toString();
+		return new StringBuilder()
+		    .append("BoundingBox [minLat=")
+		    .append(minLatitudeE6)
+		    .append(", minLon=")
+		    .append(minLongitudeE6)
+		    .append(", maxLat=")
+		    .append(maxLatitudeE6)
+		    .append(", maxLon=")
+		    .append(maxLongitudeE6)
+		    .append("]")
+		    .toString();
 	}
 
 	public String format() {
-		StringBuilder sb = new StringBuilder();
-		sb.append(minLatitudeE6 / CONVERSION_FACTOR);
-		sb.append(',');
-		sb.append(minLongitudeE6 / CONVERSION_FACTOR);
-		sb.append(',');
-		sb.append(maxLatitudeE6 / CONVERSION_FACTOR);
-		sb.append(',');
-		sb.append(maxLongitudeE6 / CONVERSION_FACTOR);
-		return sb.toString();
+		return new StringBuilder()
+		    .append(minLatitudeE6 / CONVERSION_FACTOR)
+		    .append(',')
+		    .append(minLongitudeE6 / CONVERSION_FACTOR)
+		    .append(',')
+		    .append(maxLatitudeE6 / CONVERSION_FACTOR)
+		    .append(',')
+		    .append(maxLongitudeE6 / CONVERSION_FACTOR)
+		    .toString();
 	}
 
 	/**
diff --git a/vtm/src/org/oscim/core/GeoPoint.java b/vtm/src/org/oscim/core/GeoPoint.java
index 82979d28..1c342182 100644
--- a/vtm/src/org/oscim/core/GeoPoint.java
+++ b/vtm/src/org/oscim/core/GeoPoint.java
@@ -134,13 +134,13 @@ public class GeoPoint implements Comparable<GeoPoint> {
 
 	@Override
 	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append("GeoPoint [lat=");
-		sb.append(this.getLatitude());
-		sb.append(", lon=");
-		sb.append(this.getLongitude());
-		sb.append("]");
-		return sb.toString();
+		return new StringBuilder()
+		    .append("GeoPoint [lat=")
+		    .append(this.getLatitude())
+		    .append(", lon=")
+		    .append(this.getLongitude())
+		    .append("]")
+		    .toString();
 	}
 
 	/**
diff --git a/vtm/src/org/oscim/core/GeometryBuffer.java b/vtm/src/org/oscim/core/GeometryBuffer.java
index 71ce291e..8cd5487d 100644
--- a/vtm/src/org/oscim/core/GeometryBuffer.java
+++ b/vtm/src/org/oscim/core/GeometryBuffer.java
@@ -328,7 +328,7 @@ public class GeometryBuffer {
 			for (int j = 0; j < index[i]; j += 2) {
 				sb.append('[')
 				    .append(points[o + j])
-				    .append(",")
+				    .append(',')
 				    .append(points[o + j + 1])
 				    .append(']');
 			}
diff --git a/vtm/src/org/oscim/core/Tag.java b/vtm/src/org/oscim/core/Tag.java
index 421a97b1..5ad022e6 100644
--- a/vtm/src/org/oscim/core/Tag.java
+++ b/vtm/src/org/oscim/core/Tag.java
@@ -148,7 +148,7 @@ public class Tag {
 	 *            the textual representation of the tag.
 	 */
 	public static Tag parse(String tag) {
-		int splitPosition = tag.indexOf("=");
+		int splitPosition = tag.indexOf('=');
 		if (splitPosition < 0) {
 			return new Tag(tag, "");
 		}
diff --git a/vtm/src/org/oscim/core/Tile.java b/vtm/src/org/oscim/core/Tile.java
index 5c77bac9..93deb8af 100644
--- a/vtm/src/org/oscim/core/Tile.java
+++ b/vtm/src/org/oscim/core/Tile.java
@@ -60,15 +60,15 @@ public class Tile {
 
 	@Override
 	public String toString() {
-		StringBuilder stringBuilder = new StringBuilder();
-		stringBuilder.append("[X:");
-		stringBuilder.append(this.tileX);
-		stringBuilder.append(", Y:");
-		stringBuilder.append(this.tileY);
-		stringBuilder.append(", Z:");
-		stringBuilder.append(this.zoomLevel);
-		stringBuilder.append("]");
-		return stringBuilder.toString();
+		return new StringBuilder()
+		    .append("[X:")
+		    .append(this.tileX)
+		    .append(", Y:")
+		    .append(this.tileY)
+		    .append(", Z:")
+		    .append(this.zoomLevel)
+		    .append("]")
+		    .toString();
 	}
 
 	@Override
diff --git a/vtm/src/org/oscim/layers/tile/TileManager.java b/vtm/src/org/oscim/layers/tile/TileManager.java
index d6036fe3..8ca2f5b7 100644
--- a/vtm/src/org/oscim/layers/tile/TileManager.java
+++ b/vtm/src/org/oscim/layers/tile/TileManager.java
@@ -47,23 +47,14 @@ public class TileManager {
 
 	public final static Event TILE_LOADED = new Event();
 	public final static Event TILE_REMOVED = new Event();
-	public final EventDispatcher<Listener, MapTile> events = new EventDispatcher<Listener, MapTile>() {
 
-		@Override
-		public void tell(Listener l, Event event, MapTile tile) {
-			l.onTileManagerEvent(event, tile);
-		}
-	};
-
-	public interface Listener extends EventListener {
-		void onTileManagerEvent(Event event, MapTile tile);
-	};
-
-	private int mCacheLimit;
+	private final int mCacheLimit;
 	private int mCacheReduce;
 
-	private int mMinZoom;
-	private int mMaxZoom;
+	private final int mMinZoom;
+	private final int mMaxZoom;
+
+	private int[] mZoomTable;
 
 	/**
 	 * limit number tiles with new data not uploaded to GL
@@ -105,6 +96,8 @@ public class TileManager {
 	/* job queue filled in TileManager and polled by TileLoaders */
 	private final JobQueue jobQueue;
 
+	private final float[] mMapPlane = new float[8];
+
 	private final QuadTree<TileNode, MapTile> mIndex = new QuadTree<TileNode, MapTile>() {
 
 		@Override
@@ -124,7 +117,17 @@ public class TileManager {
 		}
 	};
 
-	private final float[] mMapPlane = new float[8];
+	public final EventDispatcher<Listener, MapTile> events = new EventDispatcher<Listener, MapTile>() {
+
+		@Override
+		public void tell(Listener l, Event event, MapTile tile) {
+			l.onTileManagerEvent(event, tile);
+		}
+	};
+
+	public interface Listener extends EventListener {
+		void onTileManagerEvent(Event event, MapTile tile);
+	};
 
 	public TileManager(Map map, int minZoom, int maxZoom, int cacheLimit) {
 		mMap = map;
@@ -144,8 +147,6 @@ public class TileManager {
 		mUpdateSerial = 0;
 	}
 
-	private int[] mZoomTable;
-
 	public void setZoomTable(int[] zoomLevel) {
 		mZoomTable = zoomLevel;
 
@@ -524,7 +525,7 @@ public class TileManager {
 				if (!success || tile.state == CANCEL) {
 
 					log.debug("loading {}: {}",
-					          (!success ? "failed" : "canceled"),
+					          (success ? "canceled" : "failed"),
 					          tile);
 					tile.clear();
 					return;
diff --git a/vtm/src/org/oscim/layers/tile/s3db/S3DBTileLoader.java b/vtm/src/org/oscim/layers/tile/s3db/S3DBTileLoader.java
index 92c1abc8..59534e7b 100644
--- a/vtm/src/org/oscim/layers/tile/s3db/S3DBTileLoader.java
+++ b/vtm/src/org/oscim/layers/tile/s3db/S3DBTileLoader.java
@@ -22,7 +22,7 @@ class S3DBTileLoader extends TileLoader {
 	static final Logger log = LoggerFactory.getLogger(S3DBTileLoader.class);
 
 	/** current TileDataSource used by this MapTileLoader */
-	private ITileDataSource mTileDataSource;
+	private final ITileDataSource mTileDataSource;
 
 	private ExtrusionLayer mLayers;
 	private ExtrusionLayer mRoofs;
diff --git a/vtm/src/org/oscim/map/Animator.java b/vtm/src/org/oscim/map/Animator.java
index 6dd9d94d..c4180483 100644
--- a/vtm/src/org/oscim/map/Animator.java
+++ b/vtm/src/org/oscim/map/Animator.java
@@ -35,16 +35,12 @@ public class Animator {
 
 	//static final Logger log = LoggerFactory.getLogger(MapAnimator.class);
 
-	public Animator(Map map) {
-		mMap = map;
-	}
-
-	private final int ANIM_NONE = 0;
-	private final int ANIM_MOVE = 1 << 0;
-	private final int ANIM_SCALE = 1 << 1;
-	private final int ANIM_ROTATE = 1 << 2;
-	private final int ANIM_TILT = 1 << 3;
-	private final int ANIM_FLING = 1 << 4;
+	private final static int ANIM_NONE = 0;
+	private final static int ANIM_MOVE = 1 << 0;
+	private final static int ANIM_SCALE = 1 << 1;
+	private final static int ANIM_ROTATE = 1 << 2;
+	private final static int ANIM_TILT = 1 << 3;
+	private final static int ANIM_FLING = 1 << 4;
 
 	private final Map mMap;
 
@@ -61,6 +57,10 @@ public class Animator {
 
 	private int mState = ANIM_NONE;
 
+	public Animator(Map map) {
+		mMap = map;
+	}
+
 	public synchronized void animateTo(long duration, BoundingBox bbox) {
 		mMap.getMapPosition(mStartPos);
 		/* TODO for large distance first scale out, then in
diff --git a/vtm/src/org/oscim/renderer/GridRenderer.java b/vtm/src/org/oscim/renderer/GridRenderer.java
index 93da94d9..fa1cdd8a 100644
--- a/vtm/src/org/oscim/renderer/GridRenderer.java
+++ b/vtm/src/org/oscim/renderer/GridRenderer.java
@@ -32,7 +32,7 @@ public class GridRenderer extends ElementRenderer {
 	private final TextStyle mText;
 	private final LineLayer mLineLayer;
 	private final GeometryBuffer mLines;
-	private final StringBuffer mStringBuffer;
+	private final StringBuilder mStringBuffer;
 
 	private int mCurX, mCurY, mCurZ;
 
@@ -77,7 +77,7 @@ public class GridRenderer extends ElementRenderer {
 		mLineLayer = layers.addLineLayer(0, lineStyle);
 		mLineLayer.addLine(mLines);
 
-		mStringBuffer = new StringBuffer(32);
+		mStringBuffer = new StringBuilder(32);
 	}
 
 	private void addLabels(int x, int y, int z) {
@@ -86,17 +86,17 @@ public class GridRenderer extends ElementRenderer {
 		TextLayer tl = mTextLayer;
 		tl.clear();
 
-		StringBuffer sb = mStringBuffer;
+		StringBuilder sb = mStringBuffer;
 
 		for (int yy = -2; yy < 2; yy++) {
 			for (int xx = -2; xx < 2; xx++) {
 
 				sb.setLength(0);
-				sb.append(x + xx);
-				sb.append(" / ");
-				sb.append(y + yy);
-				sb.append(" / ");
-				sb.append(z);
+				sb.append(x + xx)
+				    .append(" / ")
+				    .append(y + yy)
+				    .append(" / ")
+				    .append(z);
 
 				TextItem ti = TextItem.pool.get();
 				ti.set(s * xx + s / 2, s * yy + s / 2, sb.toString(), mText);
diff --git a/vtm/src/org/oscim/renderer/elements/ElementLayers.java b/vtm/src/org/oscim/renderer/elements/ElementLayers.java
index 7b2ba56b..1c087ea8 100644
--- a/vtm/src/org/oscim/renderer/elements/ElementLayers.java
+++ b/vtm/src/org/oscim/renderer/elements/ElementLayers.java
@@ -40,18 +40,16 @@ public class ElementLayers extends TileData {
 
 	static final Logger log = LoggerFactory.getLogger(ElementLayers.class);
 
-	public static void initRenderer(GL20 gl) {
-		RenderElement.GL = gl;
+	public final static int[] VERTEX_SHORT_CNT = {
+	        4, // LINE_VERTEX
+	        6, // TEXLINE_VERTEX
+	        2, // POLY_VERTEX
+	        2, // MESH_VERTEX
+	        4, // EXTRUSION_VERTEX
+	};
 
-		LineLayer.Renderer.init();
-		LineTexLayer.Renderer.init();
-		PolygonLayer.Renderer.init();
-		TextureLayer.Renderer.init();
-		BitmapLayer.Renderer.init();
-		MeshLayer.Renderer.init();
-
-		TextureItem.init(gl);
-	}
+	private final static int TEXTURE_VERTEX_SHORTS = 6;
+	private final static int SHORT_BYTES = 2;
 
 	/** mixed Polygon- and LineLayer */
 	private RenderElement baseLayers;
@@ -269,17 +267,6 @@ public class ElementLayers extends TileData {
 		return layer;
 	}
 
-	public final static int[] VERTEX_SHORT_CNT = {
-	        4, // LINE_VERTEX
-	        6, // TEXLINE_VERTEX
-	        2, // POLY_VERTEX
-	        2, // MESH_VERTEX
-	        4, // EXTRUSION_VERTEX
-	};
-
-	private final static int TEXTURE_VERTEX_SHORTS = 6;
-	private final static int SHORT_BYTES = 2;
-
 	// TODO move to specific layer implementation
 	public int getSize() {
 		int size = 0;
@@ -399,4 +386,17 @@ public class ElementLayers extends TileData {
 		clear();
 	}
 
+	public static void initRenderer(GL20 gl) {
+		RenderElement.GL = gl;
+
+		LineLayer.Renderer.init();
+		LineTexLayer.Renderer.init();
+		PolygonLayer.Renderer.init();
+		TextureLayer.Renderer.init();
+		BitmapLayer.Renderer.init();
+		MeshLayer.Renderer.init();
+
+		TextureItem.init(gl);
+	}
+
 }
diff --git a/vtm/src/org/oscim/renderer/elements/PolygonLayer.java b/vtm/src/org/oscim/renderer/elements/PolygonLayer.java
index 7fa68e42..01efd6b8 100644
--- a/vtm/src/org/oscim/renderer/elements/PolygonLayer.java
+++ b/vtm/src/org/oscim/renderer/elements/PolygonLayer.java
@@ -400,12 +400,12 @@ public final class PolygonLayer extends RenderElement {
 			// TODO true could be avoided when same shader and vbo
 			setShader(polyShader, v, true);
 
-			if (color != 0) {
-				GLUtils.setColor(polyShader.uColor, color, alpha);
-				GLState.blend(true);
-			} else {
+			if (color == 0) {
 				/* disable drawing to framebuffer (will be re-enabled in fill) */
 				GL.glColorMask(false, false, false, false);
+			} else {
+				GLUtils.setColor(polyShader.uColor, color, alpha);
+				GLState.blend(true);
 			}
 
 			// TODO always pass stencil test: <-- only if not proxy?
@@ -460,5 +460,9 @@ public final class PolygonLayer extends RenderElement {
 		//
 		//	GLUtils.checkGlError("draw debug");
 		//}
+
+		private Renderer() {
+			/* Singleton */
+		}
 	}
 }
diff --git a/vtm/src/org/oscim/theme/XmlThemeBuilder.java b/vtm/src/org/oscim/theme/XmlThemeBuilder.java
index 2a6de087..67b63970 100644
--- a/vtm/src/org/oscim/theme/XmlThemeBuilder.java
+++ b/vtm/src/org/oscim/theme/XmlThemeBuilder.java
@@ -119,16 +119,8 @@ public class XmlThemeBuilder extends DefaultHandler {
 	 */
 	public static void logUnknownAttribute(String element, String name,
 	        String value, int attributeIndex) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("unknown attribute in element ");
-		sb.append(element);
-		sb.append(" (");
-		sb.append(attributeIndex);
-		sb.append("): ");
-		sb.append(name);
-		sb.append('=');
-		sb.append(value);
-		log.debug(sb.toString());
+		log.debug("unknown attribute in element {} () : {} = {}",
+		          element, attributeIndex, name, value);
 	}
 
 	private final ArrayList<RuleBuilder> mRulesList = new ArrayList<RuleBuilder>();
diff --git a/vtm/src/org/oscim/tiling/TileSource.java b/vtm/src/org/oscim/tiling/TileSource.java
index a6b6f6c5..ee12528c 100644
--- a/vtm/src/org/oscim/tiling/TileSource.java
+++ b/vtm/src/org/oscim/tiling/TileSource.java
@@ -131,13 +131,13 @@ public abstract class TileSource {
 
 		@Override
 		public String toString() {
-			StringBuilder stringBuilder = new StringBuilder();
-			stringBuilder.append("FileOpenResult [success=");
-			stringBuilder.append(this.success);
-			stringBuilder.append(", errorMessage=");
-			stringBuilder.append(this.errorMessage);
-			stringBuilder.append("]");
-			return stringBuilder.toString();
+			return new StringBuilder()
+			    .append("FileOpenResult [success=")
+			    .append(this.success)
+			    .append(", errorMessage=")
+			    .append(this.errorMessage)
+			    .append("]")
+			    .toString();
 		}
 	}
 }
diff --git a/vtm/src/org/oscim/tiling/source/LwHttp.java b/vtm/src/org/oscim/tiling/source/LwHttp.java
index 66f959d9..385a4bdf 100644
--- a/vtm/src/org/oscim/tiling/source/LwHttp.java
+++ b/vtm/src/org/oscim/tiling/source/LwHttp.java
@@ -29,6 +29,7 @@ import java.util.Map.Entry;
 
 import org.oscim.core.Tile;
 import org.oscim.utils.ArrayUtils;
+import org.oscim.utils.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -408,10 +409,7 @@ public class LwHttp {
 		if (mSocket == null)
 			return;
 
-		try {
-			mSocket.close();
-		} catch (IOException e) {
-		}
+		IOUtils.closeQuietly(mSocket);
 		mSocket = null;
 		mCommandStream = null;
 		mResponseStream = null;
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/QueryParameters.java b/vtm/src/org/oscim/tiling/source/mapfile/QueryParameters.java
index a1948788..22a0813b 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/QueryParameters.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/QueryParameters.java
@@ -31,30 +31,30 @@ class QueryParameters {
 
 	@Override
 	public String toString() {
-		StringBuilder stringBuilder = new StringBuilder();
-		stringBuilder.append("QueryParameters [fromBaseTileX=");
-		stringBuilder.append(this.fromBaseTileX);
-		stringBuilder.append(", fromBaseTileY=");
-		stringBuilder.append(this.fromBaseTileY);
-		stringBuilder.append(", fromBlockX=");
-		stringBuilder.append(this.fromBlockX);
-		stringBuilder.append(", fromBlockY=");
-		stringBuilder.append(this.fromBlockY);
-		stringBuilder.append(", queryTileBitmask=");
-		stringBuilder.append(this.queryTileBitmask);
-		stringBuilder.append(", queryZoomLevel=");
-		stringBuilder.append(this.queryZoomLevel);
-		stringBuilder.append(", toBaseTileX=");
-		stringBuilder.append(this.toBaseTileX);
-		stringBuilder.append(", toBaseTileY=");
-		stringBuilder.append(this.toBaseTileY);
-		stringBuilder.append(", toBlockX=");
-		stringBuilder.append(this.toBlockX);
-		stringBuilder.append(", toBlockY=");
-		stringBuilder.append(this.toBlockY);
-		stringBuilder.append(", useTileBitmask=");
-		stringBuilder.append(this.useTileBitmask);
-		stringBuilder.append("]");
-		return stringBuilder.toString();
+		return new StringBuilder()
+		    .append("QueryParameters [fromBaseTileX=")
+		    .append(this.fromBaseTileX)
+		    .append(", fromBaseTileY=")
+		    .append(this.fromBaseTileY)
+		    .append(", fromBlockX=")
+		    .append(this.fromBlockX)
+		    .append(", fromBlockY=")
+		    .append(this.fromBlockY)
+		    .append(", queryTileBitmask=")
+		    .append(this.queryTileBitmask)
+		    .append(", queryZoomLevel=")
+		    .append(this.queryZoomLevel)
+		    .append(", toBaseTileX=")
+		    .append(this.toBaseTileX)
+		    .append(", toBaseTileY=")
+		    .append(this.toBaseTileY)
+		    .append(", toBlockX=")
+		    .append(this.toBlockX)
+		    .append(", toBlockY=")
+		    .append(this.toBlockY)
+		    .append(", useTileBitmask=")
+		    .append(this.useTileBitmask)
+		    .append("]")
+		    .toString();
 	}
 }
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/header/SubFileParameter.java b/vtm/src/org/oscim/tiling/source/mapfile/header/SubFileParameter.java
index 0a3ac796..bb975260 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/header/SubFileParameter.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/header/SubFileParameter.java
@@ -177,37 +177,37 @@ public class SubFileParameter {
 
 	@Override
 	public String toString() {
-		StringBuilder stringBuilder = new StringBuilder();
-		stringBuilder.append("SubFileParameter [baseZoomLevel=");
-		stringBuilder.append(this.baseZoomLevel);
-		stringBuilder.append(", blockEntriesTableSize=");
-		stringBuilder.append(this.blockEntriesTableSize);
-		stringBuilder.append(", blocksHeight=");
-		stringBuilder.append(this.blocksHeight);
-		stringBuilder.append(", blocksWidth=");
-		stringBuilder.append(this.blocksWidth);
-		stringBuilder.append(", boundaryTileBottom=");
-		stringBuilder.append(this.boundaryTileBottom);
-		stringBuilder.append(", boundaryTileLeft=");
-		stringBuilder.append(this.boundaryTileLeft);
-		stringBuilder.append(", boundaryTileRight=");
-		stringBuilder.append(this.boundaryTileRight);
-		stringBuilder.append(", boundaryTileTop=");
-		stringBuilder.append(this.boundaryTileTop);
-		stringBuilder.append(", indexStartAddress=");
-		stringBuilder.append(this.indexStartAddress);
-		stringBuilder.append(", numberOfBlocks=");
-		stringBuilder.append(this.numberOfBlocks);
-		stringBuilder.append(", startAddress=");
-		stringBuilder.append(this.startAddress);
-		stringBuilder.append(", subFileSize=");
-		stringBuilder.append(this.subFileSize);
-		stringBuilder.append(", zoomLevelMax=");
-		stringBuilder.append(this.zoomLevelMax);
-		stringBuilder.append(", zoomLevelMin=");
-		stringBuilder.append(this.zoomLevelMin);
-		stringBuilder.append("]");
-		return stringBuilder.toString();
+		return new StringBuilder()
+		    .append("SubFileParameter [baseZoomLevel=")
+		    .append(this.baseZoomLevel)
+		    .append(", blockEntriesTableSize=")
+		    .append(this.blockEntriesTableSize)
+		    .append(", blocksHeight=")
+		    .append(this.blocksHeight)
+		    .append(", blocksWidth=")
+		    .append(this.blocksWidth)
+		    .append(", boundaryTileBottom=")
+		    .append(this.boundaryTileBottom)
+		    .append(", boundaryTileLeft=")
+		    .append(this.boundaryTileLeft)
+		    .append(", boundaryTileRight=")
+		    .append(this.boundaryTileRight)
+		    .append(", boundaryTileTop=")
+		    .append(this.boundaryTileTop)
+		    .append(", indexStartAddress=")
+		    .append(this.indexStartAddress)
+		    .append(", numberOfBlocks=")
+		    .append(this.numberOfBlocks)
+		    .append(", startAddress=")
+		    .append(this.startAddress)
+		    .append(", subFileSize=")
+		    .append(this.subFileSize)
+		    .append(", zoomLevelMax=")
+		    .append(this.zoomLevelMax)
+		    .append(", zoomLevelMin=")
+		    .append(this.zoomLevelMin)
+		    .append("]")
+		    .toString();
 	}
 
 	/**
diff --git a/vtm/src/org/oscim/utils/IOUtils.java b/vtm/src/org/oscim/utils/IOUtils.java
index d2e6cb21..00a7ea70 100644
--- a/vtm/src/org/oscim/utils/IOUtils.java
+++ b/vtm/src/org/oscim/utils/IOUtils.java
@@ -18,6 +18,7 @@ package org.oscim.utils;
 
 import java.io.Closeable;
 import java.io.IOException;
+import java.net.Socket;
 import java.util.logging.Level;
 
 /**
@@ -43,6 +44,17 @@ public final class IOUtils {
 		}
 	}
 
+	/* for old java versions */
+	public static void closeQuietly(Socket closeable) {
+		try {
+			if (closeable != null) {
+				closeable.close();
+			}
+		} catch (IOException e) {
+			//log.debug(e.getMessage() + " " + e);
+		}
+	}
+
 	private IOUtils() {
 	}
 }