View Javadoc
1   /*
2    *    Copyright 2010-2022 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    *       https://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  package org.apache.ibatis.migration.commands;
17  
18  import java.math.BigDecimal;
19  
20  import org.apache.ibatis.migration.MigrationException;
21  import org.apache.ibatis.migration.operations.VersionOperation;
22  import org.apache.ibatis.migration.options.SelectedOptions;
23  
24  public final class VersionCommand extends BaseCommand {
25    public VersionCommand(SelectedOptions options) {
26      super(options);
27    }
28  
29    @Override
30    public void execute(String... params) {
31      ensureParamsPassed(params);
32      ensureNumericParam(params);
33  
34      VersionOperation operation = new VersionOperation(new BigDecimal(params[0]));
35      operation.operate(getConnectionProvider(), getMigrationLoader(), getDatabaseOperationOption(), printStream,
36          createUpHook(), createDownHook());
37    }
38  
39    private void ensureParamsPassed(String... params) {
40      if (paramsEmpty(params)) {
41        throw new MigrationException("No target version specified for migration.");
42      }
43    }
44  
45    private void ensureNumericParam(String... params) {
46      try {
47        new BigDecimal(params[0]);
48      } catch (Exception e) {
49        throw new MigrationException("The version number must be a numeric integer.  " + e, e);
50      }
51    }
52  }