├── .gitignore ├── src ├── main │ └── java │ │ └── com │ │ └── github │ │ └── miemiedev │ │ └── mybatis │ │ └── callable │ │ ├── handler │ │ ├── CallableResultHandler.java │ │ └── SimpleResultHandler.java │ │ ├── CallableConvertInterceptor.java │ │ └── support │ │ └── PropertiesHelper.java └── test │ ├── resources │ ├── logback.xml │ ├── mybatis-config.xml │ └── User.mbts.xml │ └── java │ └── com │ └── github │ └── miemiedev │ └── mybatis │ └── callable │ ├── SimulateBaseDao.java │ └── CallableTester.java ├── README.md └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml -------------------------------------------------------------------------------- /src/main/java/com/github/miemiedev/mybatis/callable/handler/CallableResultHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.miemiedev.mybatis.callable.handler; 2 | 3 | import org.apache.ibatis.mapping.ParameterMapping; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | /** 9 | * 结果处理器 10 | * Created by limiemie on 2014/3/26. 11 | */ 12 | public interface CallableResultHandler { 13 | public Object proceed(List parameterMappings, Map result); 14 | } 15 | -------------------------------------------------------------------------------- /src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 支持Mybatis的版本 >= 3.1 2 | 3 | 使用方法 --> [CallableTester.java](https://github.com/miemiedev/mybatis-callable/blob/master/src/test/java/com/github/miemiedev/mybatis/callable/CallableTester.java) 和 [User.mbts.xml](https://github.com/miemiedev/mybatis-callable/blob/master/src/test/resources/User.mbts.xml) 4 | 5 | 插件配置 --> [mybatis-config.xml](https://github.com/miemiedev/mybatis-callable/blob/master/src/test/resources/mybatis-config.xml) 6 | 7 | Downloading from the Maven central repository 8 | ```xml 9 | 10 | ... 11 | 12 | com.github.miemiedev 13 | mybatis-callable 14 | 1.0 15 | 16 | ... 17 | 18 | ``` -------------------------------------------------------------------------------- /src/test/java/com/github/miemiedev/mybatis/callable/SimulateBaseDao.java: -------------------------------------------------------------------------------- 1 | package com.github.miemiedev.mybatis.callable; 2 | 3 | import org.apache.ibatis.io.Resources; 4 | import org.apache.ibatis.session.SqlSession; 5 | import org.apache.ibatis.session.SqlSessionFactory; 6 | import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 | import org.junit.After; 8 | import org.junit.Before; 9 | 10 | import java.io.IOException; 11 | import java.io.InputStream; 12 | 13 | /** 14 | * @author miemiedev 15 | */ 16 | public class SimulateBaseDao { 17 | 18 | private SqlSessionFactory sqlSessionFactory; 19 | 20 | @Before 21 | public void init() throws IOException { 22 | String resource = "mybatis-config.xml"; 23 | InputStream inputStream = Resources.getResourceAsStream(resource); 24 | sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 25 | 26 | } 27 | 28 | @After 29 | public void close(){ 30 | 31 | } 32 | 33 | public SqlSession getSqlSession(){ 34 | return sqlSessionFactory.openSession(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/test/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/test/resources/User.mbts.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 21 | 22 | 23 | 32 | 33 | 34 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/main/java/com/github/miemiedev/mybatis/callable/handler/SimpleResultHandler.java: -------------------------------------------------------------------------------- 1 | package com.github.miemiedev.mybatis.callable.handler; 2 | 3 | import org.apache.ibatis.mapping.ParameterMapping; 4 | import org.apache.ibatis.mapping.ParameterMode; 5 | import org.apache.ibatis.type.JdbcType; 6 | 7 | import java.sql.ResultSet; 8 | import java.util.ArrayList; 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | /** 14 | * 单游标结果集 15 | * Created by limiemie on 2014/3/26. 16 | */ 17 | public class SimpleResultHandler implements CallableResultHandler { 18 | public Object proceed(List parameterMappings, Map result) { 19 | List list = new ArrayList(); 20 | Map map = new HashMap(); 21 | for (ParameterMapping parameterMapping : parameterMappings){ 22 | if(ParameterMode.OUT.equals(parameterMapping.getMode()) || ParameterMode.INOUT.equals(parameterMapping.getMode())){ 23 | list.add(result.get(parameterMapping.getProperty())); 24 | map.put(parameterMapping.getProperty(),result.get(parameterMapping.getProperty())); 25 | } 26 | } 27 | if(list.size() == 1){ 28 | Object value = list.get(0); 29 | if(value instanceof List){ 30 | return value; 31 | } 32 | return list; 33 | } 34 | list.clear(); 35 | list.add(map); 36 | return list; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/test/java/com/github/miemiedev/mybatis/callable/CallableTester.java: -------------------------------------------------------------------------------- 1 | package com.github.miemiedev.mybatis.callable; 2 | import org.apache.ibatis.session.ResultContext; 3 | import org.apache.ibatis.session.ResultHandler; 4 | import org.apache.ibatis.session.SqlSession; 5 | import org.junit.Test; 6 | 7 | import java.io.IOException; 8 | import java.util.HashMap; 9 | import java.util.List; 10 | import java.util.Map; 11 | 12 | /** 13 | * @author miemiedev 14 | */ 15 | 16 | public class CallableTester extends SimulateBaseDao{ 17 | 18 | @Test 19 | public void controllerMethod() { 20 | Map map = query("yhfl_nbyh", "QLJNWS0102"); 21 | System.out.println(map); 22 | } 23 | 24 | public Map query(String userType, String branchCode){ 25 | SqlSession session = null; 26 | try{ 27 | session = getSqlSession(); 28 | Map params = new HashMap(); 29 | params.put("userType",userType); 30 | params.put("branchCode",branchCode); 31 | //存储过程返回多个参数,则使用selectOne返回Map 32 | //key为返回参数名,value为返回值 33 | Map value = session.selectOne("db.table.user.query", params); 34 | return value; 35 | }finally { 36 | session.close(); 37 | } 38 | } 39 | 40 | @Test 41 | public void controllerMethod2() { 42 | List> list = query2("yhfl_nbyh", "QLJNWS0102"); 43 | System.out.println(list); 44 | } 45 | 46 | public List> query2(String userType, String branchCode){ 47 | SqlSession session = null; 48 | try{ 49 | session = getSqlSession(); 50 | Map params = new HashMap(); 51 | params.put("userType",userType); 52 | params.put("branchCode",branchCode); 53 | //存储过程只返回一个游标,则使用selectList返回List 54 | List> value = session.selectList("db.table.user.query2", params); 55 | return value; 56 | }finally { 57 | session.close(); 58 | } 59 | } 60 | 61 | @Test 62 | public void controllerMethod3() { 63 | Integer returnCode = query3("yhfl_nbyh", "QLJNWS0102"); 64 | System.out.println(returnCode); 65 | } 66 | 67 | public Integer query3(String userType, String branchCode){ 68 | SqlSession session = null; 69 | try{ 70 | session = getSqlSession(); 71 | Map params = new HashMap(); 72 | params.put("userType",userType); 73 | params.put("branchCode",branchCode); 74 | //存储过程只有一个返回值,并且不是游标,则使用selectOne 75 | Integer value = session.selectOne("db.table.user.query3", params); 76 | return value; 77 | }finally { 78 | session.close(); 79 | } 80 | } 81 | 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/com/github/miemiedev/mybatis/callable/CallableConvertInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.github.miemiedev.mybatis.callable; 2 | 3 | import com.github.miemiedev.mybatis.callable.handler.CallableResultHandler; 4 | import com.github.miemiedev.mybatis.callable.handler.SimpleResultHandler; 5 | import com.github.miemiedev.mybatis.callable.support.PropertiesHelper; 6 | import org.apache.ibatis.executor.Executor; 7 | import org.apache.ibatis.mapping.*; 8 | import org.apache.ibatis.plugin.*; 9 | import org.apache.ibatis.session.ResultHandler; 10 | import org.apache.ibatis.session.RowBounds; 11 | import org.slf4j.Logger; 12 | import org.slf4j.LoggerFactory; 13 | 14 | import java.util.*; 15 | 16 | /** 17 | * 存储过程调用规则 18 | * Created by limiemie on 2014/3/26. 19 | */ 20 | @Intercepts({@Signature( 21 | type= Executor.class, 22 | method = "query", 23 | args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})}) 24 | public class CallableConvertInterceptor implements Interceptor { 25 | private static Logger logger = LoggerFactory.getLogger(CallableConvertInterceptor.class); 26 | static int MAPPED_STATEMENT_INDEX = 0; 27 | static int PARAMETER_INDEX = 1; 28 | static int ROWBOUNDS_INDEX = 2; 29 | static int RESULT_HANDLER_INDEX = 3; 30 | 31 | CallableResultHandler callableResultHandler = new SimpleResultHandler(); 32 | 33 | public Object intercept(Invocation invocation) throws Throwable { 34 | final Executor executor = (Executor) invocation.getTarget(); 35 | final Object[] queryArgs = invocation.getArgs(); 36 | final MappedStatement ms = (MappedStatement)queryArgs[MAPPED_STATEMENT_INDEX]; 37 | final Object parameter = queryArgs[PARAMETER_INDEX]; 38 | 39 | if(!ms.getStatementType().equals(StatementType.CALLABLE)){ 40 | return invocation.proceed(); 41 | } 42 | 43 | BoundSql boundSql = ms.getBoundSql(parameter); 44 | List parameterMappings = boundSql.getParameterMappings(); 45 | 46 | Map parameterMap = new HashMap(); 47 | if(parameter instanceof Map){ 48 | parameterMap = (Map)parameter; 49 | }else{ 50 | for (ParameterMapping parameterMapping : parameterMappings) { 51 | if(parameterMapping.getMode().equals(ParameterMode.IN) || parameterMapping.getMode().equals(ParameterMode.INOUT)){ 52 | parameterMap.put(parameterMapping.getProperty(),parameter); 53 | } 54 | } 55 | } 56 | 57 | for (ParameterMapping parameterMapping : parameterMappings) { 58 | if(parameterMapping.getMode().equals(ParameterMode.OUT)){ 59 | parameterMap.put(parameterMapping.getProperty(),null); 60 | } 61 | } 62 | 63 | queryArgs[PARAMETER_INDEX] = parameterMap; 64 | 65 | invocation.proceed(); 66 | 67 | return callableResultHandler.proceed(parameterMappings, parameterMap); 68 | } 69 | 70 | public Object plugin(Object target) { 71 | return Plugin.wrap(target, this); 72 | } 73 | 74 | public void setProperties(Properties properties) { 75 | PropertiesHelper propertiesHelper = new PropertiesHelper(properties); 76 | String dialectClass = propertiesHelper.getProperty("resultHandler","com.github.miemiedev.mybatis.callable.handler.SimpleResultHandler"); 77 | try { 78 | setResultHandler((CallableResultHandler) Class.forName(dialectClass).newInstance()); 79 | } catch (Exception e) { 80 | throw new RuntimeException("cannot create resultHandler instance by resultHandler:"+dialectClass,e); 81 | } 82 | } 83 | 84 | public void setResultHandler(CallableResultHandler resultHandler) { 85 | logger.debug("resultHandler: {} ", resultHandler.getClass().getName()); 86 | this.callableResultHandler = resultHandler; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.sonatype.oss 8 | oss-parent 9 | 7 10 | 11 | 12 | com.github.miemiedev 13 | mybatis-callable 14 | 1.0 15 | jar 16 | mybatis-callable 17 | A Mybatis plugin, implementation of database query Stored Procedure 18 | https://github.com/miemiedev/mybatis-callable 19 | 20 | 21 | The Apache Software License, Version 2.0 22 | http://www.apache.org/licenses/LICENSE-2.0.txt 23 | repo 24 | 25 | 26 | 27 | scm:git:git@github.com:miemiedev/mybatis-callable.git 28 | scm:git:git@github.com:miemiedev/mybatis-callable.git 29 | git@github.com:miemiedev/mybatis-callable.git 30 | 31 | 32 | 33 | miemiedev 34 | Bin Li 35 | dev@miemie.li 36 | 37 | 38 | 39 | 40 | UTF-8 41 | 42 | 43 | 44 | 45 | 46 | org.apache.maven.plugins 47 | maven-compiler-plugin 48 | 3.0 49 | 50 | 1.5 51 | 1.5 52 | 53 | 54 | 55 | org.apache.maven.plugins 56 | maven-gpg-plugin 57 | 58 | 59 | sign-artifacts 60 | verify 61 | 62 | sign 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | org.mybatis 74 | mybatis 75 | 3.1.0 76 | 77 | 78 | org.slf4j 79 | slf4j-api 80 | 1.7.2 81 | 82 | 83 | ch.qos.logback 84 | logback-classic 85 | 1.0.10 86 | provided 87 | 88 | 89 | 90 | junit 91 | junit 92 | 4.11 93 | test 94 | 95 | 96 | com.oracle 97 | ojdbc6 98 | 11.2.0.2.0 99 | test 100 | 101 | 102 | mysql 103 | mysql-connector-java 104 | 5.1.25 105 | test 106 | 107 | 108 | -------------------------------------------------------------------------------- /src/main/java/com/github/miemiedev/mybatis/callable/support/PropertiesHelper.java: -------------------------------------------------------------------------------- 1 | package com.github.miemiedev.mybatis.callable.support; 2 | 3 | import java.io.*; 4 | import java.util.*; 5 | import java.util.Map.Entry; 6 | 7 | /** 8 | * Properties的操作的工具类,为Properties提供一个代理增加相关工具方法如 getRequiredString(),getInt(),getBoolean()等方法 9 | * 并可以通过systemPropertiesMode属性指定是否搜索System.getProperty()及System.getenv()来查找值. 10 | * 默认不搜索系统属性 11 | * 12 | *
 13 |  * 使用1:
 14 |  * public class ConnectionUtils {
 15 |  *     static Properties properties = new Properties(); 
 16 |  *     // ... do load properties 
 17 |  *     
 18 |  *     // delegate to properties
 19 |  * 	   static PropertiesHelper props = new PropertiesHelper(properties);
 20 |  *     public static Connection getConnection() {
 21 |  *     		// use getRequiredProperty() 
 22 |  *     		DriverManager.getConnection(props.getRequiredString("jdbc.url"));
 23 |  *     }
 24 |  * }
 25 |  * 指定是否搜索系统属性:
 26 |  * new PropertiesHelper(properties,PropertiesHelper.SYSTEM_PROPERTIES_MODE_OVERRIDE)
 27 |  * 
28 | * @author badqiu 29 | */ 30 | public class PropertiesHelper { 31 | /** Never check system properties. */ 32 | public static final int SYSTEM_PROPERTIES_MODE_NEVER = 0; 33 | 34 | /** 35 | * Check system properties if not resolvable in the specified properties. 36 | * This is the default. 37 | */ 38 | public static final int SYSTEM_PROPERTIES_MODE_FALLBACK = 1; 39 | 40 | /** 41 | * Check system properties first, before trying the specified properties. 42 | * This allows system properties to override any other property source. 43 | */ 44 | public static final int SYSTEM_PROPERTIES_MODE_OVERRIDE = 2; 45 | 46 | private int systemPropertiesMode = SYSTEM_PROPERTIES_MODE_NEVER; 47 | private Properties p; 48 | 49 | public PropertiesHelper(Properties p) { 50 | setProperties(p); 51 | } 52 | 53 | public PropertiesHelper(Properties p, int systemPropertiesMode) { 54 | setProperties(p); 55 | if(systemPropertiesMode != SYSTEM_PROPERTIES_MODE_NEVER && systemPropertiesMode != SYSTEM_PROPERTIES_MODE_FALLBACK && systemPropertiesMode != SYSTEM_PROPERTIES_MODE_OVERRIDE) { 56 | throw new IllegalArgumentException("error systemPropertiesMode mode:"+systemPropertiesMode); 57 | } 58 | this.systemPropertiesMode = systemPropertiesMode; 59 | } 60 | 61 | public Properties getProperties() { 62 | return p; 63 | } 64 | 65 | public void setProperties(Properties props) { 66 | if(props == null) throw new IllegalArgumentException("properties must be not null"); 67 | this.p = props; 68 | } 69 | 70 | public String getRequiredString(String key) { 71 | String value = getProperty(key); 72 | if(isBlankString(value)) { 73 | throw new IllegalStateException("required property is blank by key="+key); 74 | } 75 | return value; 76 | } 77 | 78 | public String getNullIfBlank(String key) { 79 | String value = getProperty(key); 80 | if(isBlankString(value)) { 81 | return null; 82 | } 83 | return value; 84 | } 85 | 86 | public String getNullIfEmpty(String key) { 87 | String value = getProperty(key); 88 | if(value == null || "".equals(value)) { 89 | return null; 90 | } 91 | return value; 92 | } 93 | 94 | /** 95 | * 尝试从System.getProperty(key)及System.getenv(key)得到值 96 | * @return 97 | */ 98 | public String getAndTryFromSystem(String key) { 99 | String value = getProperty(key); 100 | if(isBlankString(value)) { 101 | value = getSystemProperty(key); 102 | } 103 | return value; 104 | } 105 | 106 | private String getSystemProperty(String key) { 107 | String value; 108 | value = System.getProperty(key); 109 | if(isBlankString(value)) { 110 | value = System.getenv(key); 111 | } 112 | return value; 113 | } 114 | 115 | public Integer getInteger(String key) { 116 | String v = getProperty(key); 117 | if(v == null){ 118 | return null; 119 | } 120 | return Integer.parseInt(v); 121 | } 122 | 123 | public int getInt(String key,int defaultValue) { 124 | if(getProperty(key) == null) { 125 | return defaultValue; 126 | } 127 | return Integer.parseInt(getRequiredString(key)); 128 | } 129 | 130 | public int getRequiredInt(String key) { 131 | return Integer.parseInt(getRequiredString(key)); 132 | } 133 | 134 | public Long getLong(String key) { 135 | if(getProperty(key) == null) { 136 | return null; 137 | } 138 | return Long.parseLong(getRequiredString(key)); 139 | } 140 | 141 | public long getLong(String key,long defaultValue) { 142 | if(getProperty(key) == null) { 143 | return defaultValue; 144 | } 145 | return Long.parseLong(getRequiredString(key)); 146 | } 147 | 148 | public Long getRequiredLong(String key) { 149 | return Long.parseLong(getRequiredString(key)); 150 | } 151 | 152 | public Boolean getBoolean(String key) { 153 | if(getProperty(key) == null) { 154 | return null; 155 | } 156 | return Boolean.parseBoolean(getRequiredString(key)); 157 | } 158 | 159 | public boolean getBoolean(String key,boolean defaultValue) { 160 | if(getProperty(key) == null) { 161 | return defaultValue; 162 | } 163 | return Boolean.parseBoolean(getRequiredString(key)); 164 | } 165 | 166 | public boolean getRequiredBoolean(String key) { 167 | return Boolean.parseBoolean(getRequiredString(key)); 168 | } 169 | 170 | public Float getFloat(String key) { 171 | if(getProperty(key) == null) { 172 | return null; 173 | } 174 | return Float.parseFloat(getRequiredString(key)); 175 | } 176 | 177 | public float getFloat(String key,float defaultValue) { 178 | if(getProperty(key) == null) { 179 | return defaultValue; 180 | } 181 | return Float.parseFloat(getRequiredString(key)); 182 | } 183 | 184 | public Float getRequiredFloat(String key) { 185 | return Float.parseFloat(getRequiredString(key)); 186 | } 187 | 188 | public Double getDouble(String key) { 189 | if(getProperty(key) == null) { 190 | return null; 191 | } 192 | return Double.parseDouble(getRequiredString(key)); 193 | } 194 | 195 | public double getDouble(String key,double defaultValue) { 196 | if(getProperty(key) == null) { 197 | return defaultValue; 198 | } 199 | return Double.parseDouble(getRequiredString(key)); 200 | } 201 | 202 | public Double getRequiredDouble(String key) { 203 | return Double.parseDouble(getRequiredString(key)); 204 | } 205 | 206 | /** setProperty(String key,int value) ... start */ 207 | 208 | public Object setProperty(String key,int value) { 209 | return setProperty(key, String.valueOf(value)); 210 | } 211 | 212 | public Object setProperty(String key,long value) { 213 | return setProperty(key, String.valueOf(value)); 214 | } 215 | 216 | public Object setProperty(String key,float value) { 217 | return setProperty(key, String.valueOf(value)); 218 | } 219 | 220 | public Object setProperty(String key,double value) { 221 | return setProperty(key, String.valueOf(value)); 222 | } 223 | 224 | public Object setProperty(String key,boolean value) { 225 | return setProperty(key, String.valueOf(value)); 226 | } 227 | 228 | public String[] getStringArray(String key) { 229 | String v = getProperty(key); 230 | if(v == null) { 231 | return new String[0]; 232 | }else { 233 | return tokenizeToStringArray(v, ", \t\n\r\f"); 234 | } 235 | } 236 | 237 | public int[] getIntArray(String key) { 238 | return toIntArray(getStringArray(key)); 239 | } 240 | 241 | public Properties getStartsWithProperties(String prefix) { 242 | if(prefix == null) throw new IllegalArgumentException("'prefix' must be not null"); 243 | 244 | Properties props = getProperties(); 245 | Properties result = new Properties(); 246 | for(Entry entry : props.entrySet()) { 247 | String key = (String)entry.getKey(); 248 | if(key != null && key.startsWith(prefix)) { 249 | result.put(key.substring(prefix.length()), entry.getValue()); 250 | } 251 | } 252 | return result; 253 | } 254 | 255 | /** delegate method start */ 256 | 257 | public String getProperty(String key, String defaultValue) { 258 | String value = getProperty(key); 259 | if(isBlankString(value)) { 260 | return defaultValue; 261 | } 262 | return value; 263 | } 264 | 265 | public String getProperty(String key) { 266 | String propVal = null; 267 | if (systemPropertiesMode == SYSTEM_PROPERTIES_MODE_OVERRIDE) { 268 | propVal = getSystemProperty(key); 269 | } 270 | if (propVal == null) { 271 | propVal = p.getProperty(key); 272 | } 273 | if (propVal == null && systemPropertiesMode == SYSTEM_PROPERTIES_MODE_FALLBACK) { 274 | propVal = getSystemProperty(key); 275 | } 276 | return propVal; 277 | } 278 | 279 | public Object setProperty(String key,String value) { 280 | return p.setProperty(key, value); 281 | } 282 | 283 | public void clear() { 284 | p.clear(); 285 | } 286 | 287 | public Set> entrySet() { 288 | return p.entrySet(); 289 | } 290 | 291 | public Enumeration propertyNames() { 292 | return p.propertyNames(); 293 | } 294 | 295 | public boolean contains(Object value) { 296 | return p.contains(value); 297 | } 298 | 299 | public boolean containsKey(Object key) { 300 | return p.containsKey(key); 301 | } 302 | 303 | public boolean containsValue(Object value) { 304 | return p.containsValue(value); 305 | } 306 | 307 | public Enumeration elements() { 308 | return p.elements(); 309 | } 310 | 311 | public Object get(Object key) { 312 | return p.get(key); 313 | } 314 | 315 | public boolean isEmpty() { 316 | return p.isEmpty(); 317 | } 318 | 319 | public Enumeration keys() { 320 | return p.keys(); 321 | } 322 | 323 | public Set keySet() { 324 | return p.keySet(); 325 | } 326 | 327 | public void list(PrintStream out) { 328 | p.list(out); 329 | } 330 | 331 | public void list(PrintWriter out) { 332 | p.list(out); 333 | } 334 | 335 | public void load(InputStream inStream) throws IOException { 336 | p.load(inStream); 337 | } 338 | 339 | public void loadFromXML(InputStream in) throws IOException, 340 | InvalidPropertiesFormatException { 341 | p.loadFromXML(in); 342 | } 343 | 344 | public Object put(Object key, Object value) { 345 | return p.put(key, value); 346 | } 347 | 348 | public void putAll(Map t) { 349 | p.putAll(t); 350 | } 351 | 352 | public Object remove(Object key) { 353 | return p.remove(key); 354 | } 355 | 356 | /** @deprecated */ 357 | public void save(OutputStream out, String comments) { 358 | p.save(out, comments); 359 | } 360 | 361 | public int size() { 362 | return p.size(); 363 | } 364 | 365 | public void store(OutputStream out, String comments) throws IOException { 366 | p.store(out, comments); 367 | } 368 | 369 | public void storeToXML(OutputStream os, String comment, String encoding) 370 | throws IOException { 371 | p.storeToXML(os, comment, encoding); 372 | } 373 | 374 | public void storeToXML(OutputStream os, String comment) throws IOException { 375 | p.storeToXML(os, comment); 376 | } 377 | 378 | public Collection values() { 379 | return p.values(); 380 | } 381 | 382 | public String toString() { 383 | return p.toString(); 384 | } 385 | 386 | private static boolean isBlankString(String value) { 387 | return value == null || "".equals(value.trim()); 388 | } 389 | 390 | private static String[] tokenizeToStringArray(String str,String seperators) { 391 | StringTokenizer tokenlizer = new StringTokenizer(str,seperators); 392 | List result = new ArrayList(); 393 | 394 | while(tokenlizer.hasMoreElements()) { 395 | Object s = tokenlizer.nextElement(); 396 | result.add(s); 397 | } 398 | return (String[])result.toArray(new String[result.size()]); 399 | } 400 | 401 | private static int[] toIntArray(String[] array) { 402 | int[] result = new int[array.length]; 403 | for(int i = 0; i < array.length; i++) { 404 | result[i] = Integer.parseInt(array[i]); 405 | } 406 | return result; 407 | } 408 | } 409 | --------------------------------------------------------------------------------