Skip to content

Commit 4a971a0

Browse files
viviennes7fmbenhassine
authored andcommitted
Enhance switch statements
Issue #4365
1 parent 7460c5f commit 4a971a0

File tree

5 files changed

+53
-119
lines changed

5 files changed

+53
-119
lines changed

Diff for: spring-batch-core/src/main/java/org/springframework/batch/core/launch/support/CommandLineJobRunner.java

+5-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2006-2022 the original author or authors.
2+
* Copyright 2006-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -169,6 +169,7 @@
169169
* @author Dave Syer
170170
* @author Lucas Ward
171171
* @author Mahmoud Ben Hassine
172+
* @author Minsoo Kim
172173
* @since 1.0
173174
*/
174175
public class CommandLineJobRunner {
@@ -538,15 +539,9 @@ public static void main(String[] args) throws Exception {
538539
}
539540
else {
540541
switch (count) {
541-
case 0:
542-
jobPath = arg;
543-
break;
544-
case 1:
545-
jobIdentifier = arg;
546-
break;
547-
default:
548-
params.add(arg);
549-
break;
542+
case 0 -> jobPath = arg;
543+
case 1 -> jobIdentifier = arg;
544+
default -> params.add(arg);
550545
}
551546
count++;
552547
}

Diff for: spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java

+7-15
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
* @author David Turanski
6363
* @author Mahmoud Ben Hassine
6464
* @author Baris Cubukcuoglu
65+
* @author Minsoo Kim
6566
* @see StepExecutionDao
6667
*/
6768
public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implements StepExecutionDao, InitializingBean {
@@ -183,21 +184,12 @@ public void setValues(PreparedStatement ps, int i) throws SQLException {
183184
Integer[] parameterTypes = (Integer[]) parameters.get(1);
184185
for (int indx = 0; indx < parameterValues.length; indx++) {
185186
switch (parameterTypes[indx]) {
186-
case Types.INTEGER:
187-
ps.setInt(indx + 1, (Integer) parameterValues[indx]);
188-
break;
189-
case Types.VARCHAR:
190-
ps.setString(indx + 1, (String) parameterValues[indx]);
191-
break;
192-
case Types.TIMESTAMP:
193-
ps.setTimestamp(indx + 1, (Timestamp) parameterValues[indx]);
194-
break;
195-
case Types.BIGINT:
196-
ps.setLong(indx + 1, (Long) parameterValues[indx]);
197-
break;
198-
default:
199-
throw new IllegalArgumentException(
200-
"unsupported SQL parameter type for step execution field index " + i);
187+
case Types.INTEGER -> ps.setInt(indx + 1, (Integer) parameterValues[indx]);
188+
case Types.VARCHAR -> ps.setString(indx + 1, (String) parameterValues[indx]);
189+
case Types.TIMESTAMP -> ps.setTimestamp(indx + 1, (Timestamp) parameterValues[indx]);
190+
case Types.BIGINT -> ps.setLong(indx + 1, (Long) parameterValues[indx]);
191+
default -> throw new IllegalArgumentException(
192+
"unsupported SQL parameter type for step execution field index " + i);
201193
}
202194
}
203195
}

Diff for: spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java

+17-47
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
* @author Glenn Renfro
5252
* @author Drummond Dawson
5353
* @author Mahmoud Ben Hassine
54+
* @author Minsoo Kim
5455
* @since 4.0
5556
* @see JdbcPagingItemReader
5657
*/
@@ -334,53 +335,22 @@ protected PagingQueryProvider determineQueryProvider(DataSource dataSource) {
334335
try {
335336
DatabaseType databaseType = DatabaseType.fromMetaData(dataSource);
336337

337-
AbstractSqlPagingQueryProvider provider;
338-
339-
switch (databaseType) {
340-
341-
case DERBY:
342-
provider = new DerbyPagingQueryProvider();
343-
break;
344-
case DB2:
345-
case DB2VSE:
346-
case DB2ZOS:
347-
case DB2AS400:
348-
provider = new Db2PagingQueryProvider();
349-
break;
350-
case H2:
351-
provider = new H2PagingQueryProvider();
352-
break;
353-
case HANA:
354-
provider = new HanaPagingQueryProvider();
355-
break;
356-
case HSQL:
357-
provider = new HsqlPagingQueryProvider();
358-
break;
359-
case SQLSERVER:
360-
provider = new SqlServerPagingQueryProvider();
361-
break;
362-
case MYSQL:
363-
provider = new MySqlPagingQueryProvider();
364-
break;
365-
case MARIADB:
366-
provider = new MariaDBPagingQueryProvider();
367-
break;
368-
case ORACLE:
369-
provider = new OraclePagingQueryProvider();
370-
break;
371-
case POSTGRES:
372-
provider = new PostgresPagingQueryProvider();
373-
break;
374-
case SYBASE:
375-
provider = new SybasePagingQueryProvider();
376-
break;
377-
case SQLITE:
378-
provider = new SqlitePagingQueryProvider();
379-
break;
380-
default:
381-
throw new IllegalArgumentException(
382-
"Unable to determine PagingQueryProvider type " + "from database type: " + databaseType);
383-
}
338+
AbstractSqlPagingQueryProvider provider = switch (databaseType) {
339+
case DERBY -> new DerbyPagingQueryProvider();
340+
case DB2, DB2VSE, DB2ZOS, DB2AS400 -> new Db2PagingQueryProvider();
341+
case H2 -> new H2PagingQueryProvider();
342+
case HANA -> new HanaPagingQueryProvider();
343+
case HSQL -> new HsqlPagingQueryProvider();
344+
case SQLSERVER -> new SqlServerPagingQueryProvider();
345+
case MYSQL -> new MySqlPagingQueryProvider();
346+
case MARIADB -> new MariaDBPagingQueryProvider();
347+
case ORACLE -> new OraclePagingQueryProvider();
348+
case POSTGRES -> new PostgresPagingQueryProvider();
349+
case SYBASE -> new SybasePagingQueryProvider();
350+
case SQLITE -> new SqlitePagingQueryProvider();
351+
default -> throw new IllegalArgumentException(
352+
"Unable to determine PagingQueryProvider type " + "from database type: " + databaseType);
353+
};
384354

385355
provider.setSelectClause(this.selectClause);
386356
provider.setFromClause(this.fromClause);

Diff for: spring-batch-infrastructure/src/test/java/org/springframework/batch/item/avro/example/User.java

+17-34
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2021 the original author or authors.
2+
* Copyright 2019-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -129,33 +129,22 @@ public org.apache.avro.Schema getSchema() {
129129

130130
// Used by DatumWriter. Applications should not call.
131131
public Object get(int field$) {
132-
switch (field$) {
133-
case 0:
134-
return name;
135-
case 1:
136-
return favorite_number;
137-
case 2:
138-
return favorite_color;
139-
default:
140-
throw new org.apache.avro.AvroRuntimeException("Bad index");
141-
}
132+
return switch (field$) {
133+
case 0 -> name;
134+
case 1 -> favorite_number;
135+
case 2 -> favorite_color;
136+
default -> throw new org.apache.avro.AvroRuntimeException("Bad index");
137+
};
142138
}
143139

144140
// Used by DatumReader. Applications should not call.
145141
@SuppressWarnings(value = "unchecked")
146142
public void put(int field$, Object value$) {
147143
switch (field$) {
148-
case 0:
149-
name = (CharSequence) value$;
150-
break;
151-
case 1:
152-
favorite_number = (Integer) value$;
153-
break;
154-
case 2:
155-
favorite_color = (CharSequence) value$;
156-
break;
157-
default:
158-
throw new org.apache.avro.AvroRuntimeException("Bad index");
144+
case 0 -> name = (CharSequence) value$;
145+
case 1 -> favorite_number = (Integer) value$;
146+
case 2 -> favorite_color = (CharSequence) value$;
147+
default -> throw new org.apache.avro.AvroRuntimeException("Bad index");
159148
}
160149
}
161150

@@ -510,21 +499,17 @@ public void customDecode(org.apache.avro.io.ResolvingDecoder in) throws java.io.
510499
else {
511500
for (int i = 0; i < 3; i++) {
512501
switch (fieldOrder[i].pos()) {
513-
case 0:
514-
this.name = in.readString(this.name instanceof Utf8 ? (Utf8) this.name : null);
515-
break;
516-
517-
case 1:
502+
case 0 -> this.name = in.readString(this.name instanceof Utf8 ? (Utf8) this.name : null);
503+
case 1 -> {
518504
if (in.readIndex() != 0) {
519505
in.readNull();
520506
this.favorite_number = null;
521507
}
522508
else {
523509
this.favorite_number = in.readInt();
524510
}
525-
break;
526-
527-
case 2:
511+
}
512+
case 2 -> {
528513
if (in.readIndex() != 0) {
529514
in.readNull();
530515
this.favorite_color = null;
@@ -533,10 +518,8 @@ public void customDecode(org.apache.avro.io.ResolvingDecoder in) throws java.io.
533518
this.favorite_color = in.readString(
534519
this.favorite_color instanceof Utf8 ? (Utf8) this.favorite_color : null);
535520
}
536-
break;
537-
538-
default:
539-
throw new java.io.IOException("Corrupt ResolvingDecoder.");
521+
}
522+
default -> throw new java.io.IOException("Corrupt ResolvingDecoder.");
540523
}
541524
}
542525
}

Diff for: spring-batch-samples/src/test/java/org/springframework/batch/sample/domain/multiline/AggregateItemReaderTests.java

+7-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2008-2022 the original author or authors.
2+
* Copyright 2008-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -39,18 +39,12 @@ void setUp() {
3939
@Nullable
4040
@Override
4141
public AggregateItem<String> read() {
42-
switch (count++) {
43-
case 0:
44-
return AggregateItem.getHeader();
45-
case 1:
46-
case 2:
47-
case 3:
48-
return new AggregateItem<>("line");
49-
case 4:
50-
return AggregateItem.getFooter();
51-
default:
52-
return null;
53-
}
42+
return switch (count++) {
43+
case 0 -> AggregateItem.getHeader();
44+
case 1, 2, 3 -> new AggregateItem<>("line");
45+
case 4 -> AggregateItem.getFooter();
46+
default -> null;
47+
};
5448
}
5549

5650
};

0 commit comments

Comments
 (0)