sascha@438: package de.intevation.gnv.raster;
sascha@438: 
sascha@438: import java.util.HashMap;
sascha@438: 
sascha@438: import java.lang.ref.SoftReference;
sascha@438: 
sascha@438: /**
sascha@438:  * @author Sascha L. Teichmann (sascha.teichmann@intevation.de)
sascha@438:  */
sascha@438: public class PaletteManager
sascha@438: {
sascha@438:     protected Palette base;
sascha@438: 
sascha@438:     protected String  description;
sascha@438:     protected String  name;
sascha@438: 
sascha@438:     protected HashMap<Integer, SoftReference<Palette>> levels;
sascha@438: 
sascha@438:     public PaletteManager() {
sascha@438:     }
sascha@438: 
sascha@438:     public PaletteManager(
sascha@438:         String  name,
sascha@438:         String  description,
sascha@438:         Palette base
sascha@438:     ) {
sascha@438:         this.name        = name;
sascha@438:         this.description = description;
sascha@438:         this.base        = base;
sascha@438:         levels = new HashMap<Integer, SoftReference<Palette>>();
sascha@438:     }
sascha@438: 
sascha@438:     public String getDescription() {
sascha@438:         return description;
sascha@438:     }
sascha@438: 
sascha@445:     public String getName() {
sascha@445:         return name;
sascha@445:     }
sascha@445: 
sascha@445:     public Palette getBase() {
sascha@445:         return base;
sascha@445:     }
sascha@445: 
sascha@438:     public Palette getLevel(int n) {
sascha@438:         if (n < 2) {
sascha@438:             return base;
sascha@438:         }
sascha@438: 
sascha@438:         Integer N = Integer.valueOf(n);
sascha@438: 
sascha@438:         Palette palette;
sascha@438: 
sascha@438:         synchronized (levels) {
sascha@438:             SoftReference<Palette> ref = levels.get(N);
sascha@438: 
sascha@438:             if (ref != null && (palette = ref.get()) != null) {
sascha@438:                 return palette;
sascha@438:             }
sascha@438: 
sascha@438:             palette = base.subdivide(n);
sascha@438: 
sascha@438:             ref = new SoftReference(palette);
sascha@438: 
sascha@438:             levels.put(N, ref);
sascha@438:         }
sascha@438: 
sascha@438:         return palette;
sascha@438:     }
sascha@438: }
sascha@438: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: