1 25 package org.jresearch.gossip.dao.drivers.keygen; 26 27 import java.sql.SQLException ; 28 import java.util.ArrayList ; 29 30 import org.jresearch.gossip.configuration.Configurator; 31 32 38 public class KeyGeneratorFactory { 39 private KeyGeneratorFactory() { 40 } 41 42 46 static ArrayList generators = new ArrayList (); 47 48 static Configurator conf = Configurator.getInstance(); 49 50 static class KeyGeneratorEntry { 51 String name; 52 53 KeyGenerator keyGenerator; 54 55 KeyGeneratorEntry(String name, KeyGenerator keyGenerator) { 56 this.name = name; 57 this.keyGenerator = keyGenerator; 58 } 59 } 60 61 static interface KeyGeneratorCreator { 62 KeyGenerator create(); 63 } 64 65 66 private static KeyGeneratorCreator[] keyGenerators = new KeyGeneratorCreator[] { 67 new KeyGeneratorCreator() { 68 public KeyGenerator create() { 69 return new HighLowKeyGenerator(); 70 } 71 72 public String toString() { 73 return "highlow"; 74 } 75 }, new KeyGeneratorCreator() { 76 public KeyGenerator create() { 77 return new SequenceKeyGenerator(); 78 } 79 80 public String toString() { 81 return "sequence"; 82 } 83 } }; 84 85 93 private static KeyGenerator addKeyGenerator(String name) 94 throws SQLException { 95 KeyGenerator generator = null; 96 for (int i = 0; i < keyGenerators.length; i++) { 97 if (name.equals(keyGenerators[i].toString())) { 98 generator = keyGenerators[i].create(); 99 generators.add(new KeyGeneratorEntry(keyGenerators[i] 100 .toString(), generator)); 101 return generator; 102 } 103 } 104 return null; 105 } 106 107 114 private static KeyGenerator getKeyGeneratorIntern(String name) 115 throws SQLException { 116 KeyGeneratorEntry entry = null; 117 int size = generators.size(); 118 for (int i = 0; i < size; i++) { 119 entry = (KeyGeneratorEntry) generators.get(i); 120 if (entry.name.equals(name)) 121 return entry.keyGenerator; 122 } 123 return null; 124 } 125 126 131 public synchronized static KeyGenerator getKeyGenerator(String name) 132 throws SQLException { 133 String low = name.toLowerCase(); 134 KeyGenerator generator = getKeyGeneratorIntern(low); 135 if (generator != null) 136 return generator; 137 138 generator = addKeyGenerator(low); 139 if (generator != null) 140 return generator; 141 142 throw new SQLException ("mapping.keyGenNotFound", name); 143 144 } 145 146 } 147 | Popular Tags |