Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/raster/PaletteManager.java @ 438:7399bb8f83ea
Added manager to handle several levels of palette subdivsions.
Added parameter ids to identify the palette associated with a parameter
gnv-artifacts/trunk@486 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 28 Dec 2009 11:50:27 +0000 |
parents | |
children | f42ed4f10b79 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/PaletteManager.java Mon Dec 28 11:50:27 2009 +0000 @@ -0,0 +1,63 @@ +package de.intevation.gnv.raster; + +import java.util.HashMap; + +import java.lang.ref.SoftReference; + +/** + * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) + */ +public class PaletteManager +{ + protected Palette base; + + protected String description; + protected String name; + + protected HashMap<Integer, SoftReference<Palette>> levels; + + public PaletteManager() { + } + + public PaletteManager( + String name, + String description, + Palette base + ) { + this.name = name; + this.description = description; + this.base = base; + levels = new HashMap<Integer, SoftReference<Palette>>(); + } + + public String getDescription() { + return description; + } + + public Palette getLevel(int n) { + if (n < 2) { + return base; + } + + Integer N = Integer.valueOf(n); + + Palette palette; + + synchronized (levels) { + SoftReference<Palette> ref = levels.get(N); + + if (ref != null && (palette = ref.get()) != null) { + return palette; + } + + palette = base.subdivide(n); + + ref = new SoftReference(palette); + + levels.put(N, ref); + } + + return palette; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: