From 95c9f47e63182db69dcd68f4c3c1473f4b4c609c Mon Sep 17 00:00:00 2001
From: Hannes Janetzek <hannes.janetzek@gmail.com>
Date: Sat, 10 May 2014 19:55:43 +0200
Subject: [PATCH] refactor: hide backend Adapter handles

- static methods for backend adapters
---
 .../oscim/android/canvas/AndroidGraphics.java | 13 +++----
 .../src/org/oscim/android/AndroidAssets.java  |  2 +-
 .../oscim/android/canvas/AndroidGraphics.java | 12 +++---
 .../src/org/oscim/awt/AwtGraphics.java        | 13 +++----
 vtm-gdx/src/org/oscim/gdx/GdxAssets.java      |  2 +-
 .../src/org/oscim/layers/JeoTileSource.java   |  2 +-
 .../src/org/oscim/test/SpriteManager.java     |  2 +-
 .../src/org/oscim/test/ThemeTest.java         |  4 +-
 .../test/renderer/SymbolRenderLayer.java      |  2 +-
 vtm-themes/src/org/oscim/theme/VtmThemes.java |  2 +-
 .../org/oscim/gdx/client/GwtGdxGraphics.java  | 14 +++----
 vtm/src/org/oscim/backend/AssetAdapter.java   | 20 ++++++----
 vtm/src/org/oscim/backend/CanvasAdapter.java  | 38 +++++++++++++++----
 vtm/src/org/oscim/renderer/GLShader.java      |  2 +-
 .../oscim/renderer/elements/TextLayer.java    |  2 +-
 .../oscim/renderer/elements/TextureItem.java  |  2 +-
 vtm/src/org/oscim/theme/XmlThemeBuilder.java  |  4 +-
 vtm/src/org/oscim/theme/styles/TextStyle.java |  4 +-
 .../source/bitmap/BitmapTileSource.java       |  2 +-
 19 files changed, 84 insertions(+), 58 deletions(-)

diff --git a/vtm-android-gdx/src/org/oscim/android/canvas/AndroidGraphics.java b/vtm-android-gdx/src/org/oscim/android/canvas/AndroidGraphics.java
index a3b312f7..86df550e 100644
--- a/vtm-android-gdx/src/org/oscim/android/canvas/AndroidGraphics.java
+++ b/vtm-android-gdx/src/org/oscim/android/canvas/AndroidGraphics.java
@@ -33,10 +33,9 @@ import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 
 public final class AndroidGraphics extends CanvasAdapter {
-	public static final AndroidGraphics INSTANCE = new AndroidGraphics();
 
 	public static void init() {
-		g = INSTANCE;
+		CanvasAdapter.init(new AndroidGraphics());
 	}
 
 	//	public static android.graphics.Bitmap getAndroidBitmap(Bitmap bitmap) {
@@ -52,22 +51,22 @@ public final class AndroidGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Bitmap decodeBitmap(InputStream inputStream) {
+	public Bitmap decodeBitmapImpl(InputStream inputStream) {
 		return new AndroidBitmap(inputStream);
 	}
 
 	@Override
-	public Paint getPaint() {
+	public Paint newPaintImpl() {
 		return new AndroidPaint();
 	}
 
 	@Override
-	public Bitmap getBitmap(int width, int height, int format) {
+	public Bitmap newBitmapImpl(int width, int height, int format) {
 		return new AndroidBitmap(width, height, format);
 	}
 
 	@Override
-	public Canvas getCanvas() {
+	public Canvas newCanvasImpl() {
 		return new AndroidCanvas();
 	}
 
@@ -100,7 +99,7 @@ public final class AndroidGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Bitmap loadBitmapAsset(String fileName) {
+	public Bitmap loadBitmapAssetImpl(String fileName) {
 		try {
 			return createBitmap(fileName);
 		} catch (IOException e) {
diff --git a/vtm-android/src/org/oscim/android/AndroidAssets.java b/vtm-android/src/org/oscim/android/AndroidAssets.java
index 2db22bee..4d1b44a4 100644
--- a/vtm-android/src/org/oscim/android/AndroidAssets.java
+++ b/vtm-android/src/org/oscim/android/AndroidAssets.java
@@ -27,7 +27,7 @@ public class AndroidAssets extends AssetAdapter {
 	Context mContext;
 
 	public static void init(Context ctx) {
-		g = new AndroidAssets(ctx);
+		AssetAdapter.init(new AndroidAssets(ctx));
 	}
 
 	private AndroidAssets(Context ctx) {
diff --git a/vtm-android/src/org/oscim/android/canvas/AndroidGraphics.java b/vtm-android/src/org/oscim/android/canvas/AndroidGraphics.java
index abe2388c..35afc489 100644
--- a/vtm-android/src/org/oscim/android/canvas/AndroidGraphics.java
+++ b/vtm-android/src/org/oscim/android/canvas/AndroidGraphics.java
@@ -34,7 +34,7 @@ import android.graphics.drawable.Drawable;
 public final class AndroidGraphics extends CanvasAdapter {
 
 	public static void init() {
-		g = new AndroidGraphics();
+		CanvasAdapter.init(new AndroidGraphics());
 	}
 
 	public static android.graphics.Paint getAndroidPaint(Paint paint) {
@@ -46,12 +46,12 @@ public final class AndroidGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Bitmap decodeBitmap(InputStream inputStream) {
+	public Bitmap decodeBitmapImpl(InputStream inputStream) {
 		return new AndroidBitmap(inputStream);
 	}
 
 	@Override
-	public Bitmap loadBitmapAsset(String fileName) {
+	public Bitmap loadBitmapAssetImpl(String fileName) {
 		try {
 			return createBitmap(fileName);
 		} catch (IOException e) {
@@ -61,17 +61,17 @@ public final class AndroidGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Paint getPaint() {
+	public Paint newPaintImpl() {
 		return new AndroidPaint();
 	}
 
 	@Override
-	public Bitmap getBitmap(int width, int height, int format) {
+	public Bitmap newBitmapImpl(int width, int height, int format) {
 		return new AndroidBitmap(width, height, format);
 	}
 
 	@Override
-	public Canvas getCanvas() {
+	public Canvas newCanvasImpl() {
 		return new AndroidCanvas();
 	}
 
diff --git a/vtm-desktop/src/org/oscim/awt/AwtGraphics.java b/vtm-desktop/src/org/oscim/awt/AwtGraphics.java
index 3bc57172..97a404a6 100644
--- a/vtm-desktop/src/org/oscim/awt/AwtGraphics.java
+++ b/vtm-desktop/src/org/oscim/awt/AwtGraphics.java
@@ -30,10 +30,9 @@ import org.oscim.backend.canvas.Canvas;
 import org.oscim.backend.canvas.Paint;
 
 public class AwtGraphics extends CanvasAdapter {
-	private static final AwtGraphics INSTANCE = new AwtGraphics();
 
 	public static void init() {
-		g = INSTANCE;
+		CanvasAdapter.init(new AwtGraphics());
 	}
 
 	private AwtGraphics() {
@@ -41,17 +40,17 @@ public class AwtGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Paint getPaint() {
+	public Paint newPaintImpl() {
 		return new AwtPaint();
 	}
 
 	@Override
-	public Bitmap getBitmap(int width, int height, int format) {
+	public Bitmap newBitmapImpl(int width, int height, int format) {
 		return new AwtBitmap(width, height, format);
 	}
 
 	@Override
-	public Canvas getCanvas() {
+	public Canvas newCanvasImpl() {
 		return new AwtCanvas();
 	}
 
@@ -87,7 +86,7 @@ public class AwtGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Bitmap decodeBitmap(InputStream inputStream) {
+	public Bitmap decodeBitmapImpl(InputStream inputStream) {
 		try {
 			return new AwtBitmap(inputStream);
 		} catch (IOException e) {
@@ -97,7 +96,7 @@ public class AwtGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Bitmap loadBitmapAsset(String fileName) {
+	public Bitmap loadBitmapAssetImpl(String fileName) {
 		try {
 			return createBitmap(fileName);
 		} catch (IOException e) {
diff --git a/vtm-gdx/src/org/oscim/gdx/GdxAssets.java b/vtm-gdx/src/org/oscim/gdx/GdxAssets.java
index 3a58118d..41b5f582 100644
--- a/vtm-gdx/src/org/oscim/gdx/GdxAssets.java
+++ b/vtm-gdx/src/org/oscim/gdx/GdxAssets.java
@@ -46,6 +46,6 @@ public class GdxAssets extends AssetAdapter {
 	}
 
 	public static void init(String path) {
-		g = new GdxAssets(path);
+		AssetAdapter.init(new GdxAssets(path));
 	}
 }
diff --git a/vtm-jeo/src/org/oscim/layers/JeoTileSource.java b/vtm-jeo/src/org/oscim/layers/JeoTileSource.java
index 68a2bedb..25a7654d 100644
--- a/vtm-jeo/src/org/oscim/layers/JeoTileSource.java
+++ b/vtm-jeo/src/org/oscim/layers/JeoTileSource.java
@@ -47,7 +47,7 @@ public class JeoTileSource extends TileSource {
 						sink.completed(TILE_NOT_FOUND);
 						return;
 					}
-					Bitmap b = CanvasAdapter.g.decodeBitmap(new ByteArrayInputStream(t.getData()));
+					Bitmap b = CanvasAdapter.decodeBitmap(new ByteArrayInputStream(t.getData()));
 					sink.setTileImage(b);
 					log.debug("success {}", tile);
 					sink.completed(SUCCESS);
diff --git a/vtm-playground/src/org/oscim/test/SpriteManager.java b/vtm-playground/src/org/oscim/test/SpriteManager.java
index 9de446da..47224595 100644
--- a/vtm-playground/src/org/oscim/test/SpriteManager.java
+++ b/vtm-playground/src/org/oscim/test/SpriteManager.java
@@ -48,7 +48,7 @@ public abstract class SpriteManager<T> {
 
 	Sprite items;
 
-	protected final Canvas mCanvas = CanvasAdapter.g.getCanvas();
+	protected final Canvas mCanvas = CanvasAdapter.newCanvas();
 	protected TextureItem mTexture;
 
 	public SpriteManager() {
diff --git a/vtm-playground/src/org/oscim/test/ThemeTest.java b/vtm-playground/src/org/oscim/test/ThemeTest.java
index 1e449853..7c0be1c5 100644
--- a/vtm-playground/src/org/oscim/test/ThemeTest.java
+++ b/vtm-playground/src/org/oscim/test/ThemeTest.java
@@ -18,7 +18,7 @@ public class ThemeTest {
 
 	public static void main(String[] args) {
 		AwtGraphics.init();
-		AssetAdapter.g = new AssetAdapter() {
+		AssetAdapter.init(new AssetAdapter() {
 			@Override
 			public InputStream openFileAsStream(String name) {
 				try {
@@ -29,7 +29,7 @@ public class ThemeTest {
 					return null;
 				}
 			}
-		};
+		});
 
 		IRenderTheme t = ThemeLoader.load(VtmThemes.DEFAULT);
 
diff --git a/vtm-playground/src/org/oscim/test/renderer/SymbolRenderLayer.java b/vtm-playground/src/org/oscim/test/renderer/SymbolRenderLayer.java
index 306aedbb..e736cb5f 100644
--- a/vtm-playground/src/org/oscim/test/renderer/SymbolRenderLayer.java
+++ b/vtm-playground/src/org/oscim/test/renderer/SymbolRenderLayer.java
@@ -33,7 +33,7 @@ public class SymbolRenderLayer extends ElementRenderer {
 		it.billboard = false;
 
 		try {
-			it.bitmap = CanvasAdapter.g.loadBitmapAsset("jar:symbols/cafe.png");
+			it.bitmap = CanvasAdapter.getBitmapAsset("jar:symbols/cafe.png");
 		} catch (Exception e) {
 			e.printStackTrace();
 
diff --git a/vtm-themes/src/org/oscim/theme/VtmThemes.java b/vtm-themes/src/org/oscim/theme/VtmThemes.java
index 325376b6..ff04a389 100644
--- a/vtm-themes/src/org/oscim/theme/VtmThemes.java
+++ b/vtm-themes/src/org/oscim/theme/VtmThemes.java
@@ -39,6 +39,6 @@ public enum VtmThemes implements ThemeFile {
 
 	@Override
 	public InputStream getRenderThemeAsStream() {
-		return AssetAdapter.g.openFileAsStream(mPath);
+		return AssetAdapter.readFileAsStream(mPath);
 	}
 }
diff --git a/vtm-web/src/org/oscim/gdx/client/GwtGdxGraphics.java b/vtm-web/src/org/oscim/gdx/client/GwtGdxGraphics.java
index f6940eb8..36f16723 100644
--- a/vtm-web/src/org/oscim/gdx/client/GwtGdxGraphics.java
+++ b/vtm-web/src/org/oscim/gdx/client/GwtGdxGraphics.java
@@ -30,7 +30,6 @@ public class GwtGdxGraphics extends CanvasAdapter {
 
 	public static boolean NO_STROKE_TEXT = false;
 
-	public static final GwtGdxGraphics INSTANCE = new GwtGdxGraphics();
 	static final Context2d ctx;
 
 	static {
@@ -47,33 +46,32 @@ public class GwtGdxGraphics extends CanvasAdapter {
 	}
 
 	@Override
-	public Bitmap decodeBitmap(InputStream in) {
+	public Bitmap decodeBitmapImpl(InputStream in) {
 		//ImageData data = new ImageData();
 		return null;
 	}
 
 	@Override
-	public Bitmap loadBitmapAsset(String fileName) {
+	public Bitmap loadBitmapAssetImpl(String fileName) {
 		return new GwtBitmap(fileName);
 	}
 
 	@Override
-	public Paint getPaint() {
+	public Paint newPaintImpl() {
 		return new GwtPaint();
 	}
 
 	@Override
-	public Bitmap getBitmap(int width, int height, int format) {
+	public Bitmap newBitmapImpl(int width, int height, int format) {
 		return new GwtBitmap(width, height, format);
 	}
 
 	@Override
-	public org.oscim.backend.canvas.Canvas getCanvas() {
+	public org.oscim.backend.canvas.Canvas newCanvasImpl() {
 		return new GwtCanvas();
 	}
 
 	public static void init() {
-		g = INSTANCE;
+		CanvasAdapter.init(new GwtGdxGraphics());
 	}
-
 }
diff --git a/vtm/src/org/oscim/backend/AssetAdapter.java b/vtm/src/org/oscim/backend/AssetAdapter.java
index 7b89302e..8235568c 100644
--- a/vtm/src/org/oscim/backend/AssetAdapter.java
+++ b/vtm/src/org/oscim/backend/AssetAdapter.java
@@ -27,20 +27,21 @@ import java.io.InputStreamReader;
 public abstract class AssetAdapter {
 
 	/** The instance provided by backend */
-	public static AssetAdapter g;
+	static AssetAdapter g;
 
 	/**
 	 * Open file from asset path as stream.
-	 * 
-	 * @param name the name
-	 * @return the input stream
 	 */
-	public abstract InputStream openFileAsStream(String name);
+	protected abstract InputStream openFileAsStream(String file);
 
-	public String openTextFile(String name) {
+	public static InputStream readFileAsStream(String file) {
+		return g.openFileAsStream(file);
+	}
+
+	public static String readTextFile(String file) {
 		StringBuilder sb = new StringBuilder();
 
-		InputStream is = g.openFileAsStream(name);
+		InputStream is = g.openFileAsStream(file);
 		if (is == null)
 			return null;
 
@@ -55,5 +56,10 @@ public abstract class AssetAdapter {
 		}
 
 		return sb.toString();
+
+	}
+
+	public static void init(AssetAdapter adapter) {
+		g = adapter;
 	}
 }
diff --git a/vtm/src/org/oscim/backend/CanvasAdapter.java b/vtm/src/org/oscim/backend/CanvasAdapter.java
index 5e8a3f85..411b962e 100644
--- a/vtm/src/org/oscim/backend/CanvasAdapter.java
+++ b/vtm/src/org/oscim/backend/CanvasAdapter.java
@@ -29,7 +29,7 @@ import org.oscim.backend.canvas.Paint;
 public abstract class CanvasAdapter {
 
 	/** The instance provided by backend */
-	public static CanvasAdapter g;
+	static CanvasAdapter g;
 
 	/** The dpi. */
 	public static float dpi = 240;
@@ -42,14 +42,22 @@ public abstract class CanvasAdapter {
 	 * 
 	 * @return the canvas
 	 */
-	public abstract Canvas getCanvas();
+	protected abstract Canvas newCanvasImpl();
+
+	public static Canvas newCanvas() {
+		return g.newCanvasImpl();
+	}
 
 	/**
 	 * Create Paint.
 	 * 
 	 * @return the paint
 	 */
-	public abstract Paint getPaint();
+	protected abstract Paint newPaintImpl();
+
+	public static Paint newPaint() {
+		return g.newPaintImpl();
+	}
 
 	/**
 	 * Create {@link Bitmap} with given dimensions.
@@ -59,7 +67,11 @@ public abstract class CanvasAdapter {
 	 * @param format the format
 	 * @return the bitmap
 	 */
-	public abstract Bitmap getBitmap(int width, int height, int format);
+	protected abstract Bitmap newBitmapImpl(int width, int height, int format);
+
+	public static Bitmap newBitmap(int width, int height, int format) {
+		return g.newBitmapImpl(width, height, format);
+	}
 
 	/**
 	 * Create {@link Bitmap} from InputStream.
@@ -67,7 +79,11 @@ public abstract class CanvasAdapter {
 	 * @param inputStream the input stream
 	 * @return the bitmap
 	 */
-	public abstract Bitmap decodeBitmap(InputStream inputStream);
+	protected abstract Bitmap decodeBitmapImpl(InputStream inputStream);
+
+	public static Bitmap decodeBitmap(InputStream inputStream) {
+		return g.decodeBitmapImpl(inputStream);
+	}
 
 	/**
 	 * Create {@link Bitmap} from bundled assets.
@@ -75,7 +91,11 @@ public abstract class CanvasAdapter {
 	 * @param fileName the file name
 	 * @return the bitmap
 	 */
-	public abstract Bitmap loadBitmapAsset(String fileName);
+	protected abstract Bitmap loadBitmapAssetImpl(String fileName);
+
+	public static Bitmap getBitmapAsset(String fileName) {
+		return g.loadBitmapAssetImpl(fileName);
+	}
 
 	protected static Bitmap createBitmap(String src) throws IOException {
 		if (src == null || src.length() == 0) {
@@ -89,8 +109,12 @@ public abstract class CanvasAdapter {
 			return null;
 		}
 
-		Bitmap bitmap = CanvasAdapter.g.decodeBitmap(inputStream);
+		Bitmap bitmap = decodeBitmap(inputStream);
 		inputStream.close();
 		return bitmap;
 	}
+
+	protected static void init(CanvasAdapter adapter) {
+		g = adapter;
+	}
 }
diff --git a/vtm/src/org/oscim/renderer/GLShader.java b/vtm/src/org/oscim/renderer/GLShader.java
index 13c2aefe..6ef2eb62 100644
--- a/vtm/src/org/oscim/renderer/GLShader.java
+++ b/vtm/src/org/oscim/renderer/GLShader.java
@@ -45,7 +45,7 @@ public abstract class GLShader {
 
 	public static int loadShader(String file) {
 		String path = "shaders/" + file + ".glsl";
-		String vs = AssetAdapter.g.openTextFile(path);
+		String vs = AssetAdapter.readTextFile(path);
 
 		if (vs == null)
 			throw new IllegalArgumentException("shader file not found: " + path);
diff --git a/vtm/src/org/oscim/renderer/elements/TextLayer.java b/vtm/src/org/oscim/renderer/elements/TextLayer.java
index 06f8568b..c08acb36 100644
--- a/vtm/src/org/oscim/renderer/elements/TextLayer.java
+++ b/vtm/src/org/oscim/renderer/elements/TextLayer.java
@@ -42,7 +42,7 @@ public class TextLayer extends TextureLayer {
 
 	public TextLayer() {
 		super(RenderElement.SYMBOL);
-		mCanvas = CanvasAdapter.g.getCanvas();
+		mCanvas = CanvasAdapter.newCanvas();
 		fixed = true;
 	}
 
diff --git a/vtm/src/org/oscim/renderer/elements/TextureItem.java b/vtm/src/org/oscim/renderer/elements/TextureItem.java
index 09ceeeae..3bd2178f 100644
--- a/vtm/src/org/oscim/renderer/elements/TextureItem.java
+++ b/vtm/src/org/oscim/renderer/elements/TextureItem.java
@@ -186,7 +186,7 @@ public class TextureItem extends Inlist<TextureItem> {
 			synchronized (mBitmaps) {
 				int size = mBitmaps.size();
 				if (size == 0)
-					t.bitmap = CanvasAdapter.g.getBitmap(mWidth, mHeight, 0);
+					t.bitmap = CanvasAdapter.newBitmap(mWidth, mHeight, 0);
 				else {
 					t.bitmap = mBitmaps.remove(size - 1);
 					t.bitmap.eraseColor(Color.TRANSPARENT);
diff --git a/vtm/src/org/oscim/theme/XmlThemeBuilder.java b/vtm/src/org/oscim/theme/XmlThemeBuilder.java
index 15c29eb8..f0399e27 100644
--- a/vtm/src/org/oscim/theme/XmlThemeBuilder.java
+++ b/vtm/src/org/oscim/theme/XmlThemeBuilder.java
@@ -531,7 +531,7 @@ public class XmlThemeBuilder extends DefaultHandler {
 
 		if (src != null) {
 			try {
-				Bitmap bitmap = CanvasAdapter.g.loadBitmapAsset(src);
+				Bitmap bitmap = CanvasAdapter.getBitmapAsset(src);
 				if (bitmap != null)
 					b.texture = new TextureItem(bitmap, true);
 			} catch (Exception e) {
@@ -566,7 +566,7 @@ public class XmlThemeBuilder extends DefaultHandler {
 		}
 		validateExists("img", img, elementName);
 
-		Bitmap bitmap = CanvasAdapter.g.loadBitmapAsset(IMG_PATH + img);
+		Bitmap bitmap = CanvasAdapter.getBitmapAsset(IMG_PATH + img);
 		mTextureAtlas = new TextureAtlas(bitmap);
 	}
 
diff --git a/vtm/src/org/oscim/theme/styles/TextStyle.java b/vtm/src/org/oscim/theme/styles/TextStyle.java
index d5726b5c..e315d2cb 100644
--- a/vtm/src/org/oscim/theme/styles/TextStyle.java
+++ b/vtm/src/org/oscim/theme/styles/TextStyle.java
@@ -165,7 +165,7 @@ public final class TextStyle extends RenderStyle {
 		this.priority = tb.priority;
 		this.texture = tb.texture;
 
-		paint = CanvasAdapter.g.getPaint();
+		paint = CanvasAdapter.newPaint();
 		paint.setTextAlign(Align.CENTER);
 		paint.setTypeface(tb.fontFamily, tb.fontStyle);
 
@@ -173,7 +173,7 @@ public final class TextStyle extends RenderStyle {
 		paint.setTextSize(tb.fontSize);
 
 		if (tb.strokeWidth > 0) {
-			stroke = CanvasAdapter.g.getPaint();
+			stroke = CanvasAdapter.newPaint();
 			stroke.setStyle(Paint.Style.STROKE);
 			stroke.setTextAlign(Align.CENTER);
 			stroke.setTypeface(tb.fontFamily, tb.fontStyle);
diff --git a/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java b/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
index b932c824..5fe51c1e 100644
--- a/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
@@ -72,7 +72,7 @@ public class BitmapTileSource extends UrlTileSource {
 		public boolean decode(Tile tile, ITileDataSink sink, InputStream is)
 		        throws IOException {
 
-			Bitmap bitmap = CanvasAdapter.g.decodeBitmap(is);
+			Bitmap bitmap = CanvasAdapter.decodeBitmap(is);
 			if (!bitmap.isValid()) {
 				log.debug("{} invalid bitmap", tile);
 				return false;