EMMA Coverage Report (generated Thu May 22 12:08:10 CDT 2014)
[all classes][org.springframework.batch.support]

COVERAGE SUMMARY FOR SOURCE FILE [DatabaseType.java]

nameclass, %method, %block, %line, %
DatabaseType.java100% (1/1)100% (7/7)99%  (218/221)97%  (31/32)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class DatabaseType100% (1/1)100% (7/7)99%  (218/221)97%  (31/32)
fromMetaData (DataSource): DatabaseType 100% (1/1)92%  (35/38)91%  (10/11)
<static initializer> 100% (1/1)100% (140/140)100% (14/14)
DatabaseType (String, int, String): void 100% (1/1)100% (8/8)100% (3/3)
fromProductName (String): DatabaseType 100% (1/1)100% (23/23)100% (3/3)
getProductName (): String 100% (1/1)100% (3/3)100% (1/1)
valueOf (String): DatabaseType 100% (1/1)100% (5/5)100% (1/1)
values (): DatabaseType [] 100% (1/1)100% (4/4)100% (1/1)

1/*
2 * Copyright 2006-2007 the original author or authors.
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 
17package org.springframework.batch.support;
18 
19import org.springframework.jdbc.support.JdbcUtils;
20import org.springframework.jdbc.support.MetaDataAccessException;
21import org.springframework.util.StringUtils;
22 
23import javax.sql.DataSource;
24import java.util.HashMap;
25import java.util.Map;
26 
27 
28/**
29 * Enum representing a database type, such as DB2 or oracle.  The type also
30 * contains a product name, which is expected to be the same as the product name
31 * provided by the database driver's metadata.
32 * 
33 * @author Lucas Ward
34 * @since 2.0
35 */
36public enum DatabaseType {
37 
38        DERBY("Apache Derby"), 
39        DB2("DB2"), 
40        DB2ZOS("DB2ZOS"), 
41        HSQL("HSQL Database Engine"),
42        SQLSERVER("Microsoft SQL Server"),
43        MYSQL("MySQL"),
44        ORACLE("Oracle"),
45        POSTGRES("PostgreSQL"),
46        SYBASE("Sybase"), H2("H2");
47        
48        private static final Map<String, DatabaseType> nameMap;
49        
50        static{
51                nameMap = new HashMap<String, DatabaseType>();
52                for(DatabaseType type: values()){
53                        nameMap.put(type.getProductName(), type);
54                }
55        }
56        //A description is necessary due to the nature of database descriptions
57        //in metadata.
58        private final String productName;
59        
60        private DatabaseType(String productName) {
61                this.productName = productName;
62        }
63        
64        public String getProductName() {
65                return productName;
66        }
67        
68        /**
69         * Static method to obtain a DatabaseType from the provided product name.
70         * 
71         * @param productName
72         * @return DatabaseType for given product name.
73         * @throws IllegalArgumentException if none is found.
74         */
75        public static DatabaseType fromProductName(String productName){
76                if(!nameMap.containsKey(productName)){
77                        throw new IllegalArgumentException("DatabaseType not found for product name: [" + 
78                                        productName + "]");
79                }
80                else{
81                        return nameMap.get(productName);
82                }
83        }
84        
85        /**
86         * Convenience method that pulls a database product name from the DataSource's metadata.
87         * 
88         * @param dataSource
89         * @return DatabaseType
90         * @throws MetaDataAccessException
91         */
92        public static DatabaseType fromMetaData(DataSource dataSource) throws MetaDataAccessException {
93                String databaseProductName =
94                                JdbcUtils.extractDatabaseMetaData(dataSource, "getDatabaseProductName").toString();
95                if (StringUtils.hasText(databaseProductName) && !databaseProductName.equals("DB2/Linux") && databaseProductName.startsWith("DB2")) {
96                        String databaseProductVersion =
97                                        JdbcUtils.extractDatabaseMetaData(dataSource, "getDatabaseProductVersion").toString();
98                        if (!databaseProductVersion.startsWith("SQL")) {
99                                databaseProductName = "DB2ZOS";
100                        }
101                        else {
102                                databaseProductName = JdbcUtils.commonDatabaseName(databaseProductName);
103                        }
104                }
105                else {
106                        databaseProductName = JdbcUtils.commonDatabaseName(databaseProductName);
107                }
108                return fromProductName(databaseProductName);
109        }
110}

[all classes][org.springframework.batch.support]
EMMA 2.0.5312 (C) Vladimir Roubtsov