12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*
- * Created on Jan 7, 2005
- *
- * @author Mohan Radhakrishnan
- */
- //package com.blueprint.ui.util;
-
- import java.lang.ref.ReferenceQueue;
- import java.lang.ref.SoftReference;
- import java.util.AbstractMap;
- import java.util.HashMap;
- import java.util.LinkedHashSet;
- import java.util.Map;
- import java.util.Set;
- /*
- * Undo/redo for each shape. This can be used to maintain
- * a list of changes to rollback. Since the calls to the
- * model tier are direct and the reverse calls to update the
- * UI are Commands, this list is for the latter.
- */
-
- public class ShapeCommandMap<K,V> extends AbstractMap<K,V> {
-
- private final Map<K, SoftReference<V>> internalMap = new HashMap<K, SoftReference<V>>();
-
- private final ReferenceQueue<V> queue = new ReferenceQueue<V>();
-
- public V put( K key, V value ){
- //remove stale entries
- SoftReference<V> ref = new SoftReference<V>( value, queue );
- SoftReference<V> s = internalMap.put( key, ref );
- return ( s != null ? s.get() : null );
- }
-
- /*public V get( K key ){
- //remove stale entries
- SoftReference<V> value = internalMap.get( key );
- return ( value != null ? value.get() : null );
- }*/
-
- public Set<Entry<K,V>> entrySet(){
- Set<Entry<K,V>> commands = new LinkedHashSet<Entry<K,V>>();
- for( final Entry<K,SoftReference<V>> entry : internalMap.entrySet() ){
- final V value = entry.getValue().get();
- commands.add( new Entry<K,V>(){
- public K getKey(){
- return entry.getKey();
- }
- public V getValue(){
- return value;
- }
- public V setValue( V v ){
- entry.setValue(
- new SoftReference<V>( v, queue ) );
- return value;
- }
- });
- }
- return commands;
- }
- }
-
- aspect TriggerBug {
-
- public void foo() {
- ShapeCommandMap<String,String> map = new ShapeCommandMap<String,String>();
- map.put("hi","there");
- }
-
- before() : execution(* getValue(..)) {
- System.out.println("a matching call");
- }
- }
|