KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > performance > simulate > type > SimulatedMap


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tctest.performance.simulate.type;
5
6 import java.lang.reflect.Constructor JavaDoc;
7 import java.util.Arrays JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.Map JavaDoc;
10 import java.util.Set JavaDoc;
11
12 final class SimulatedMap extends AbstractSimulatedType {
13
14   private Map JavaDoc masterCopy;
15
16   /**
17    * @param Map - key and value entries must be of type: {@link SimulatedType}
18    */

19   SimulatedMap(Map JavaDoc map) {
20     Set JavaDoc entries = map.entrySet();
21     Map.Entry JavaDoc entry;
22     for (Iterator JavaDoc iter = entries.iterator(); iter.hasNext();) {
23       entry = (Map.Entry JavaDoc) iter.next();
24       if (!(entry.getKey() instanceof SimulatedType)) throw new RuntimeException JavaDoc("Keys must be of type: "
25                                                                                  + SimulatedType.class.getName());
26       if (!(entry.getValue() instanceof SimulatedType)) throw new RuntimeException JavaDoc("Values must be of type: "
27                                                                                    + SimulatedType.class.getName());
28     }
29     this.masterCopy = map;
30   }
31
32   public Class JavaDoc getType() {
33     return masterCopy.getClass();
34   }
35
36   public Object JavaDoc cloneUnique() {
37     try {
38       Constructor JavaDoc constructor = masterCopy.getClass().getConstructor(new Class JavaDoc[0]);
39       Map JavaDoc clone = (Map JavaDoc) constructor.newInstance(new Object JavaDoc[0]);
40       Set JavaDoc entries = masterCopy.entrySet();
41       Map.Entry JavaDoc entry;
42       Object JavaDoc keyClone;
43       Object JavaDoc valueClone;
44       for (Iterator JavaDoc iter = entries.iterator(); iter.hasNext();) {
45         entry = (Map.Entry JavaDoc) iter.next();
46         keyClone = ((SimulatedType) entry.getKey()).cloneUnique();
47         valueClone = ((SimulatedType) entry.getValue()).cloneUnique();
48         clone.put(keyClone, valueClone);
49       }
50       return clone;
51     } catch (Exception JavaDoc e) {
52       throw new RuntimeException JavaDoc(e);
53     }
54   }
55
56   public Object JavaDoc clone() {
57     try {
58       Constructor JavaDoc constructor = masterCopy.getClass().getConstructor(new Class JavaDoc[0]);
59       Map JavaDoc clone = (Map JavaDoc) constructor.newInstance(new Object JavaDoc[0]);
60       Set JavaDoc entries = masterCopy.entrySet();
61       Map.Entry JavaDoc entry;
62       Object JavaDoc keyClone;
63       Object JavaDoc valueClone;
64       for (Iterator JavaDoc iter = entries.iterator(); iter.hasNext();) {
65         entry = (Map.Entry JavaDoc) iter.next();
66         keyClone = ((SimulatedType) entry.getKey()).clone();
67         valueClone = ((SimulatedType) entry.getValue()).clone();
68         clone.put(keyClone, valueClone);
69       }
70       return clone;
71     } catch (Exception JavaDoc e) {
72       throw new RuntimeException JavaDoc(e);
73     }
74   }
75
76   public String JavaDoc toString() {
77     return "{type=" + masterCopy.getClass().getName() + " keys=" + Arrays.asList(masterCopy.entrySet().toArray()) + "}";
78   }
79 }
80
Popular Tags