1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.springframework.batch.item.database.support;
17
18 import static org.springframework.batch.support.DatabaseType.DB2;
19 import static org.springframework.batch.support.DatabaseType.DB2ZOS;
20 import static org.springframework.batch.support.DatabaseType.DERBY;
21 import static org.springframework.batch.support.DatabaseType.H2;
22 import static org.springframework.batch.support.DatabaseType.HSQL;
23 import static org.springframework.batch.support.DatabaseType.MYSQL;
24 import static org.springframework.batch.support.DatabaseType.ORACLE;
25 import static org.springframework.batch.support.DatabaseType.POSTGRES;
26 import static org.springframework.batch.support.DatabaseType.SQLSERVER;
27 import static org.springframework.batch.support.DatabaseType.SYBASE;
28
29 import java.util.ArrayList;
30 import java.util.List;
31
32 import javax.sql.DataSource;
33
34 import org.springframework.batch.support.DatabaseType;
35 import org.springframework.jdbc.support.incrementer.DB2MainframeSequenceMaxValueIncrementer;
36 import org.springframework.jdbc.support.incrementer.DB2SequenceMaxValueIncrementer;
37 import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
38 import org.springframework.jdbc.support.incrementer.DerbyMaxValueIncrementer;
39 import org.springframework.jdbc.support.incrementer.H2SequenceMaxValueIncrementer;
40 import org.springframework.jdbc.support.incrementer.HsqlMaxValueIncrementer;
41 import org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer;
42 import org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer;
43 import org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer;
44 import org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer;
45 import org.springframework.jdbc.support.incrementer.SybaseMaxValueIncrementer;
46
47
48
49
50
51
52
53
54 public class DefaultDataFieldMaxValueIncrementerFactory implements DataFieldMaxValueIncrementerFactory {
55
56 private DataSource dataSource;
57
58 private String incrementerColumnName = "ID";
59
60
61
62
63
64
65
66
67
68 public void setIncrementerColumnName(String incrementerColumnName) {
69 this.incrementerColumnName = incrementerColumnName;
70 }
71
72 public DefaultDataFieldMaxValueIncrementerFactory(DataSource dataSource) {
73 this.dataSource = dataSource;
74 }
75
76 @Override
77 public DataFieldMaxValueIncrementer getIncrementer(String incrementerType, String incrementerName) {
78 DatabaseType databaseType = DatabaseType.valueOf(incrementerType.toUpperCase());
79
80 if (databaseType == DB2) {
81 return new DB2SequenceMaxValueIncrementer(dataSource, incrementerName);
82 }
83 else if (databaseType == DB2ZOS) {
84 return new DB2MainframeSequenceMaxValueIncrementer(dataSource, incrementerName);
85 }
86 else if (databaseType == DERBY) {
87 return new DerbyMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName);
88 }
89 else if (databaseType == HSQL) {
90 return new HsqlMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName);
91 }
92 else if (databaseType == H2) {
93 return new H2SequenceMaxValueIncrementer(dataSource, incrementerName);
94 }
95 else if (databaseType == MYSQL) {
96 return new MySQLMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName);
97 }
98 else if (databaseType == ORACLE) {
99 return new OracleSequenceMaxValueIncrementer(dataSource, incrementerName);
100 }
101 else if (databaseType == POSTGRES) {
102 return new PostgreSQLSequenceMaxValueIncrementer(dataSource, incrementerName);
103 }
104 else if (databaseType == SQLSERVER) {
105 return new SqlServerMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName);
106 }
107 else if (databaseType == SYBASE) {
108 return new SybaseMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName);
109 }
110 throw new IllegalArgumentException("databaseType argument was not on the approved list");
111
112 }
113
114 @Override
115 public boolean isSupportedIncrementerType(String incrementerType) {
116 for (DatabaseType type : DatabaseType.values()) {
117 if (type.name().equals(incrementerType.toUpperCase())) {
118 return true;
119 }
120 }
121
122 return false;
123 }
124
125 @Override
126 public String[] getSupportedIncrementerTypes() {
127
128 List<String> types = new ArrayList<String>();
129
130 for (DatabaseType type : DatabaseType.values()) {
131 types.add(type.name());
132 }
133
134 return types.toArray(new String[types.size()]);
135 }
136 }