1 /* *************************************************************************** 2 * Copyright (c) 2008 Brabenetz Harald, Austria. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 *****************************************************************************/ 17 package org.settings4j; 18 19 import java.util.List; 20 import java.util.Map; 21 22 23 /** 24 * SettingsInstance is used to get simply access to Application settings. 25 * 26 * @see Settings4j 27 * @author Harald.Brabenetz 28 */ 29 public interface Settings4jInstance { 30 31 /** 32 * return the found String-Value for the given key.<br /> 33 * The {@link Settings4jInstance} Instance iterates all his {@link Connector}s and return the first found Value. 34 * <p> 35 * Returns null if no connector found a Value for the given key<br /> 36 * 37 * @param key the Key for the configuration-property. e.g.: "com/mycompany/myapp/myParameterKey" 38 * @return the found String-Value for the given key 39 */ 40 String getString(String key); 41 42 /** 43 * return the found byte[]-Value for the given key.<br /> 44 * The {@link Settings4jInstance} Instance iterates all his {@link Connector}s and return the first found Value. 45 * <p> 46 * Returns null if no connector found a Value for the given key<br /> 47 * 48 * @param key the Key for the configuration-property. e.g.: "com/mycompany/myapp/myParameterKey" 49 * @return the found byte[]-Value for the given key 50 */ 51 byte[] getContent(String key); 52 53 /** 54 * return the found Object-Value for the given key.<br /> 55 * The {@link Settings4jInstance} iterates all his {@link Connector}s and return the first found Value. <br /> 56 * Returns null if no connector found a Value for the given key<br /> 57 * 58 * @param key the Key for the configuration-property. e.g.: "com/mycompany/myapp/myParameterKey" 59 * @return the found Object-Value for the given key 60 */ 61 Object getObject(String key); 62 63 /** 64 * Add a {@link Connector}.<br /> 65 * This method will be call, if you create a connector-ref to a connector configuration in your settings4j.xml 66 * 67 * <pre> 68 * Example configuration in settings4j.xml: 69 * -------------------------------------- 70 * <settings name="com.mycompany" > 71 * <connector-ref name="DBConnector" /> 72 * </settings> 73 * -------------------------------------- 74 * </pre> 75 * 76 * @param connector The connector to add. 77 */ 78 void addConnector(Connector connector); 79 80 /** 81 * Add a custom {@link Connector} to the right position in relation to the other connectors.<br /> 82 * This method can be used to add custom connectors into the {@link Settings4jInstance} 83 * <p> 84 * <h4>Example usage 1:</h4> 85 * 86 * <pre> 87 * -------------------------------------- 88 * Connector myConnector = ... 89 * addConnector(myConnector, {@link ConnectorPositions}.afterLast(SystemPropertyConnector.class)); 90 * -------------------------------------- 91 * </pre> 92 * 93 * <h4>Example usage 2:</h4> <br /> 94 * <code>{@link ConnectorPositions}.afterLast(SystemPropertyConnector.class)</code> will throw an exception if the 95 * {@link Settings4jInstance} doesn't have a SystemPropertyConnector. <br /> 96 * To prevent an Exception you can provide multiple ConnectorPositions as fallback: 97 * 98 * <pre> 99 * -------------------------------------- 100 * Connector myConnector = ... 101 * addConnector(myConnector, ConnectorPositions.firstValid(// 102 * ConnectorPositions.afterLast(SystemPropertyConnector.class), 103 * ConnectorPositions.atFirst() // fallback if no SystemPropertyConnector exists. 104 * ) 105 * ); 106 * -------------------------------------- 107 * </pre> 108 * 109 * <h4>Example usage 3:</h4> <br /> 110 * {@link #addConnector(Connector)} will throw an exception if a connector with the same name already exists. <br /> 111 * To prevent this Exception you should also check with {@link #getConnector(String)} if the Connector already 112 * exists: 113 * 114 * <pre> 115 * -------------------------------------- 116 * Connector myConnector = ... 117 * if(getConnector(myConnector.getName()) == null) { 118 * addConnector(myConnector, ConnectorPositions.firstValid(// 119 * ConnectorPositions.afterLast(SystemPropertyConnector.class), 120 * ConnectorPositions.atFirst() // fallback if no SystemPropertyConnector exists. 121 * ) 122 * ); 123 * } 124 * -------------------------------------- 125 * </pre> 126 * 127 * @param connector The connector to add. 128 * @param position The position where the connector should be added. 129 */ 130 void addConnector(Connector connector, ConnectorPosition position); 131 132 /** 133 * Remove all Settings. (Internal use only) 134 */ 135 void removeAllConnectors(); 136 137 /** 138 * The key mapping defined in settings4j.xml. 139 * <p> 140 * if some Sub-Modules of your App defines separated Keys for e.g. the DataSource, you can refer it to one unique 141 * Key: 142 * 143 * <pre> 144 * Example: 145 * <mapping name="defaultMapping"> 146 * <entry key="com/mycompany/moduleX/datasource" ref-key="global/datasource"/> 147 * <entry key="com/mycompany/moduleY/datasource" ref-key="global/datasource"/> 148 * </mapping> 149 * </pre> 150 * 151 * Settings4j.getXXX("com/mycompany/moduleX/datasource"); <br /> 152 * should return the configured value under "global/datasource" <br /> 153 * <br /> 154 * 155 * @return the Mappings of this Settings-Object (without inheritances) 156 */ 157 Map getMapping(); 158 159 /** 160 * Set the mapping for this Settings-Object without inheritance.<br /> 161 * This method will be call, if you create a mapping-ref to a mapping configuration in your settings4j.xml 162 * 163 * <pre> 164 * Example: 165 * <root mapping-ref="<b>defaultMapping</b>" > 166 * ... 167 * </root> 168 * 169 * <mapping name="<b>defaultMapping</b>"> 170 * <entry key="com/mycompany/moduleX/datasource" ref-key="global/datasource"/> 171 * <entry key="com/mycompany/moduleY/datasource" ref-key="global/datasource"/> 172 * </mapping> 173 * </pre> 174 * 175 * @param mapping The Mapping between available settings to used settings. 176 */ 177 void setMapping(Map mapping); 178 179 /** 180 * Return a List off {@link Connector} who can be used with this {@link Settings4jInstance} instance. 181 * 182 * @return a list off all Connectors who can be used with this {@link Settings4jInstance} instance 183 */ 184 List<Connector> getConnectors(); 185 186 /** 187 * Return the {@link Connector} for the given Name. 188 * 189 * @param connectorName The Connector Name. 190 * @return The {@link Connector} for the given Name. 191 */ 192 Connector getConnector(String connectorName); 193 }