From: Florian L. <fle...@us...> - 2005-11-01 15:53:16
|
Update of /cvsroot/magicmap/magicmapserver/src/net/sf/magicmap/server/cache In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12089/src/net/sf/magicmap/server/cache Added Files: PositionCache.java Log Message: Implementation des Positioning-Caches --- NEW FILE: PositionCache.java --- package net.sf.magicmap.server.cache; import java.util.Collection; import java.util.Hashtable; import java.util.Iterator; import java.util.SortedMap; import java.util.TreeMap; import net.sf.magicmap.db.Map; import net.sf.magicmap.server.dto.PositionDTO; public class PositionCache extends Hashtable<Map,PositionCacheEntry>{ private static SortedMap timeMap; // Sigleton Hashtable private static PositionCache single_positionCache = null; public static PositionCache getPositionCache(){ if (single_positionCache == null) single_positionCache = new PositionCache(); return single_positionCache; } private PositionCache (){ //TODO: hohle daten aus der Datenbank } private void addMapHashtable(Map map) { this.put(map,new PositionCacheEntry()); } private boolean existsMapHashtable(Map map){ return this.containsKey(map); } private PositionCacheEntry getMapHashtable(Map map){ return this.get(map); } public void createOrUpdatePosition(Map map, PositionDTO position){ if(!existsMapHashtable(map)) addMapHashtable(map); if(getMapHashtable(map).existsPosition(position.getName())){ getMapHashtable(map).removePosition(position.getName()); } getMapHashtable(map).addPosition(position); } public PositionDTO[] getPositionsForMapSince(Map map,Long time){ if(!existsMapHashtable(map)) return new PositionDTO[0]; return getMapHashtable(map).getPositionsSince(time); } public PositionDTO getPositionForClientOnMap(Map map, String name){ if(!existsMapHashtable(map)) return null; return getMapHashtable(map).getPosition(name); } } class PositionCacheEntry { private Hashtable<String,PositionDTO> positionHash; private TreeMap<Long ,String> timeMap; protected PositionCacheEntry (){ positionHash = new Hashtable<String,PositionDTO>(40); timeMap = new TreeMap<Long ,String>(); } protected void addPosition(PositionDTO position){ positionHash.put(position.getName(),position); timeMap.put(position.getLastModified(),position.getName()); } protected boolean existsPosition(String name){ return positionHash.containsKey(name); } protected PositionDTO getPosition(String name){ return positionHash.get(name); } protected void removePosition(String name){ timeMap.remove(positionHash.get(name).getLastModified()); positionHash.remove(name); } protected PositionDTO[] getPositionsSince(Long time){ Collection<String> newPositions = timeMap.tailMap(time).values(); PositionDTO [] positions = new PositionDTO[newPositions.size()]; Iterator it = newPositions.iterator(); int i = 0; while(it.hasNext()){ positions[i++] = getPosition((String)it.next()); } return positions; } } |