package edu.sc.seis.sod.status; import edu.sc.seis.fissuresUtil.map.OpenMap; import edu.sc.seis.fissuresUtil.map.colorizer.event.EventColorizer; import edu.sc.seis.fissuresUtil.map.layers.EventLayer; import edu.sc.seis.fissuresUtil.map.layers.ShapeLayerPropertiesHandler; import edu.sc.seis.fissuresUtil.map.layers.StationLayer; public class MapPool { public MapPool(int mapCount) { maps = new OpenMap[mapCount]; free = new boolean[mapCount]; for(int i = 0; i < maps.length; i++) { maps[i] = new OpenMap(ShapeLayerPropertiesHandler.getProperties()); maps[i].setEtopoLayer("edu/sc/seis/mapData"); maps[i].setStationLayer(new StationLayer()); maps[i].overrideProjChangedInOMLayers(true); free[i] = true; } } public OpenMap getMap(EventColorizer colorizer) { while(true) { for(int i = 0; i < maps.length; i++) { synchronized(free) { if(free[i]) { free[i] = false; maps[i].setEventLayer(new EventLayer(maps[i], colorizer)); return maps[i]; } } } try { Thread.sleep(1000); } catch(InterruptedException e) {} } } public void returnMap(OpenMap map) { clear(map); for(int i = 0; i < maps.length; i++) if(maps[i] == map) synchronized(free) { free[i] = true; } } private void clear(OpenMap map) { map.getEventLayer().eventDataCleared(); map.getStationLayer().stationDataCleared(); } public static MapPool getDefaultPool() { synchronized(MapPool.class) { if(defaultPool == null) { defaultPool = new MapPool(1); } return defaultPool; } } private static MapPool defaultPool; private boolean[] free; private OpenMap[] maps; }