All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.mvnmigrate.MigrationStatusCommand Maven / Gradle / Ivy

Go to download

Migration-plugin is a Apache Maven 2 plugin that aims to integrate into the maven life cycle, the myBatis 3 Migration tool. myBatis 3 Migration Schema is a tool that helps you to manage database schema changes.

There is a newer version: 1.1
Show newest version
/*
 *    Copyright 2010 The maven-migrate-plugin Team
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package com.googlecode.mvnmigrate;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.ibatis.migration.Change;
import org.apache.ibatis.migration.commands.StatusCommand;

/**
 * Extended {@link StatusCommand} class.
 *
 * Used for retrieve information about migration status.
 *
 * @version $Id: MigrationStatusCommand.java 132 2010-07-10 17:23:54Z marco.speranza79 $
 */
public class MigrationStatusCommand extends StatusCommand {

    /**
     * Extended Apache iBatis {@link StatusCommand}.
     *
     *
     * @param repository the ibatis migration repository path.
     * @param environment the string that represents the enviroment.
     * @param true to force the sql script exeution in case of error.
     */
    public MigrationStatusCommand(File repository, String environment,
            boolean force) {
        super(repository, environment, force);
    }

    /**
     * Return true if there is at last one pending script, false otherwise.
     *
     * @return true if there is at last one pending script, false otherwise.
     */
    public boolean checkPending() {
        final List merged = getMergedStatus();
        for (Change change : merged) {
            if (change.getAppliedTimestamp() == null) {
                return true;
            }
        }
        return false;
    }

    /**
     * Retrieves the current status of database and return a list of {@link Change}
     *
     * @return list of databese {@link Change}
     */
    @SuppressWarnings("unchecked")
    protected List getMergedStatus() {
        this.setDriverClassLoader(getClass().getClassLoader());

        List merged = new ArrayList();
        List migrations = getMigrations();
        if (changelogExists()) {
            List changelog = getChangelog();
            for (Change change : migrations) {
                int index = changelog.indexOf(change);
                if (index > -1) {
                    final Change c = changelog.get(index);
                    c.setFilename(change.getFilename());
                    merged.add(c);
                } else {
                    merged.add(change);
                }
            }
            Collections.sort(merged);
        } else {
            merged.addAll(migrations);
        }

        return merged;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy