[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