1 4 package com.tctest.performance.simulate.type; 5 6 import java.lang.reflect.Constructor ; 7 import java.util.Arrays ; 8 import java.util.Iterator ; 9 import java.util.Map ; 10 import java.util.Set ; 11 12 final class SimulatedMap extends AbstractSimulatedType { 13 14 private Map masterCopy; 15 16 19 SimulatedMap(Map map) { 20 Set entries = map.entrySet(); 21 Map.Entry entry; 22 for (Iterator iter = entries.iterator(); iter.hasNext();) { 23 entry = (Map.Entry ) iter.next(); 24 if (!(entry.getKey() instanceof SimulatedType)) throw new RuntimeException ("Keys must be of type: " 25 + SimulatedType.class.getName()); 26 if (!(entry.getValue() instanceof SimulatedType)) throw new RuntimeException ("Values must be of type: " 27 + SimulatedType.class.getName()); 28 } 29 this.masterCopy = map; 30 } 31 32 public Class getType() { 33 return masterCopy.getClass(); 34 } 35 36 public Object cloneUnique() { 37 try { 38 Constructor constructor = masterCopy.getClass().getConstructor(new Class [0]); 39 Map clone = (Map ) constructor.newInstance(new Object [0]); 40 Set entries = masterCopy.entrySet(); 41 Map.Entry entry; 42 Object keyClone; 43 Object valueClone; 44 for (Iterator iter = entries.iterator(); iter.hasNext();) { 45 entry = (Map.Entry ) 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 e) { 52 throw new RuntimeException (e); 53 } 54 } 55 56 public Object clone() { 57 try { 58 Constructor constructor = masterCopy.getClass().getConstructor(new Class [0]); 59 Map clone = (Map ) constructor.newInstance(new Object [0]); 60 Set entries = masterCopy.entrySet(); 61 Map.Entry entry; 62 Object keyClone; 63 Object valueClone; 64 for (Iterator iter = entries.iterator(); iter.hasNext();) { 65 entry = (Map.Entry ) 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 e) { 72 throw new RuntimeException (e); 73 } 74 } 75 76 public String toString() { 77 return "{type=" + masterCopy.getClass().getName() + " keys=" + Arrays.asList(masterCopy.entrySet().toArray()) + "}"; 78 } 79 } 80 | Popular Tags |