Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

GenericClassMap.java

Go to the documentation of this file.
00001 
00057 package com.arcle.rmt.j2se.util;
00058 
00059 import java.util.Map;
00060 import java.util.Iterator;
00061 import com.arcle.rmt.xplat.util.MutableReference;
00062 
00181 public abstract class GenericClassMap {
00182 
00187     public boolean visitClasses(ClassMapVisitor v) {
00188         boolean wantsMore = true;
00189         Iterator iter = getMappings().entrySet().iterator();
00190         while (iter.hasNext() && wantsMore) {
00191             Map.Entry entry = (Map.Entry) iter.next();
00192             wantsMore = v.visitClassMap((Class) entry.getKey(),
00193                 entry.getValue());
00194         }
00195 
00196         // when wantsMore is true, iteration is stopped because the iterator
00197         // does not have more elements.
00198         return wantsMore;
00199     }
00200 
00208     public Object findFirstInstance(final Object key) {
00209         final MutableReference ref = new MutableReference(null);
00210         ClassMapVisitor visitor = new ClassMapVisitor() {
00211             public boolean visitClassMap(Class cls, Object obj) {
00212                 if (cls.isInstance(key)) {
00213                     ref.value = obj;
00214                     return false;
00215                 }
00216                 return true;
00217             }
00218         };
00219         visitClasses(visitor);
00220         return ref.value;
00221     }
00222 
00229     public Object getMappedObject(Class key) {
00230         return getMappings().get(key);
00231     }
00232 
00237     protected abstract Map createMappings();
00238 
00242     protected Map getMappings() {
00243         if (_mappings == null) {
00244             _mappings = createMappings();
00245         };
00246         return _mappings;
00247     }
00248 
00252     private Map _mappings;
00253 }

Generated on Fri Jun 18 19:51:21 2004 for Arcle Rambutan by doxygen 1.3.5