[Schmitzm-commits] r1551 - trunk/schmitzm-core/src/main/java/de/schmitzm/lang

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Apr 7 23:10:10 CEST 2011


Author: alfonx
Date: 2011-04-07 23:10:10 +0200 (Thu, 07 Apr 2011)
New Revision: 1551

Added:
   trunk/schmitzm-core/src/main/java/de/schmitzm/lang/TimedHashMap.java
Log:
Renamed TimedHashmap to TimedHashMap like HashMap

Copied: trunk/schmitzm-core/src/main/java/de/schmitzm/lang/TimedHashMap.java (from rev 1550, trunk/schmitzm-core/src/main/java/de/schmitzm/lang/TimedHashmap.java)
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/lang/TimedHashmap.java	2011-04-06 08:51:43 UTC (rev 1550)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/lang/TimedHashMap.java	2011-04-07 21:10:10 UTC (rev 1551)
@@ -0,0 +1,88 @@
+package de.schmitzm.lang;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+
+import javax.swing.Timer;
+
+/**
+ * Erweiterung der {@link LimitedHashMap}. Erlaubt es in Millisekunden
+ * anzugeben, wie lange ein Eintrag gültig ist.
+ */
+public class TimedHashMap<K, V> extends HashMap<K, V> {
+
+	private final int timeout;
+
+	HashMap<K, Long> inputTimes = new HashMap<K, Long>();
+
+	Timer cleanTask;
+
+	/**
+	 * Erweiterung der {@link LimitedHashMap}. Erlaubt es in Millisekunden
+	 * anzugeben, wie lange ein Eintrag gültig ist.
+	 * 
+	 * @param timeout
+	 *            Anz. ms die Einträge gültig sind.
+	 */
+	public TimedHashMap(int timeout) {
+		this.timeout = timeout;
+	}
+
+	@Override
+	public V put(K key, V value) {
+
+		// Timeour ms Nach dem letzten put die komplette hashmap leeren. 
+		if (cleanTask != null) {
+			cleanTask.stop();
+		}
+
+		cleanTask = new Timer(timeout + 1, new ActionListener() {
+
+			@Override
+			public void actionPerformed(ActionEvent arg0) {
+				clear();
+				inputTimes.clear();
+				cleanTask.stop();
+				cleanTask = null;
+			}
+
+		});
+		cleanTask.setInitialDelay(timeout);
+		cleanTask.setRepeats(false);
+		cleanTask.start();
+
+		inputTimes.put(key, Long.valueOf(System.currentTimeMillis()));
+		return super.put(key, value);
+	}
+
+	@Override
+	public V get(Object key) {
+		V v = super.get(key);
+		if (v != null) {
+			Long inputTime = inputTimes.get(key);
+			if ((System.currentTimeMillis() - inputTime) >= timeout) {
+				remove(key);
+				inputTimes.remove(key);
+				return null;
+			}
+		}
+		return v;
+	}
+
+	/**
+	 * Liefert das eingestelte Timeout
+	 * 
+	 * @return
+	 */
+	public int getTimeout() {
+		return timeout;
+	}
+
+	
+	@Override
+	public void clear() {
+		super.clear();
+		if (cleanTask != null) cleanTask.stop();
+	}
+}


Property changes on: trunk/schmitzm-core/src/main/java/de/schmitzm/lang/TimedHashMap.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain



More information about the Schmitzm-commits mailing list