1 package org.naftulin.configmgr.content; 2 3 import java.util.LinkedList; 4 import java.util.List; 5 6 import org.naftulin.configmgr.ConfigurationManagerException; 7 import org.naftulin.configmgr.parsers.ConfigEntryParser; 8 import org.naftulin.configmgr.parsers.DbJndiParserImpl; 9 10 /*** 11 * Represents a db jndi entry, with it's key, name-value pairs and parser class. 12 * Intended to mirror master configuration rules for external configuration. 13 * The external configuraton xml is: 14 * <pre> 15 * <dbjndi key="the key" 16 initialContextFactory="optional contenxt factory" 17 jndiName="jdni name" 18 sql="sql that selects at least key and value columns from any table(s) or view with any static where condition" 19 keyColumnName="column name where the key is selected" 20 valueColumnName="column name where the value is selected" 21 * 22 * > 23 <param name="key1" value="value1" /> 24 ..... 25 <param name="keyn" value="valuen" /> 26 </dbjndi> 27 * </pre> 28 * 29 * @author Henry Henry 30 * @since 1.3 31 */ 32 public class DbJndiRecordImpl extends AbstractRecordImpl { 33 private String initialContextFactory; 34 private String jndiName; 35 private String sql; 36 private String keyColumnName; 37 private String valueColumnName; 38 private final List<NameValuePairImpl> nameValuePairs = new LinkedList<NameValuePairImpl>(); 39 private ConfigEntryParser parser; 40 41 42 43 public String getKeyColumnName() { 44 return keyColumnName; 45 } 46 47 public void setKeyColumnName(final String keyColumnName) { 48 this.keyColumnName = keyColumnName; 49 } 50 51 public List<NameValuePairImpl> getNameValuePairs() { 52 return nameValuePairs; 53 } 54 55 /*** 56 * Adds a name-value pair as it is read from the master configuration. 57 * @param nv the name value pair. 58 */ 59 public void addNameValuePair(final NameValuePairImpl nv) { 60 nameValuePairs.add(nv); 61 } 62 63 public String getInitialContextFactory() { 64 return initialContextFactory; 65 } 66 67 public void setInitialContextFactory(final String initialContextFactory) { 68 this.initialContextFactory = initialContextFactory; 69 } 70 71 public String getJndiName() { 72 return jndiName; 73 } 74 75 public void setJndiName(final String jndiName) { 76 this.jndiName = jndiName; 77 } 78 79 public String getSql() { 80 return sql; 81 } 82 83 public void setSql(final String sql) { 84 this.sql = sql; 85 } 86 87 88 89 public String getValueColumnName() { 90 return valueColumnName; 91 } 92 93 public void setValueColumnName(final String valueColumnName) { 94 this.valueColumnName = valueColumnName; 95 } 96 97 public synchronized ConfigEntryParser getParser() throws ConfigurationManagerException { 98 if (parser == null) { 99 parser = new DbJndiParserImpl(jndiName, initialContextFactory, sql, keyColumnName, valueColumnName, nameValuePairs); 100 } 101 return parser; 102 } 103 104 105 106 /*** 107 * Since it is not a file-based cofiguration, we need to overwrite the method. 108 * @return false 109 */ 110 public boolean isGetUrlForFile() { 111 return false; 112 } 113 114 public String getFileName() { 115 return "jndi name : " + jndiName + " initial Context Factory " + initialContextFactory + " sql " + sql; 116 } 117 }