/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.core.db.schema.impl.flyway; import org.flywaydb.core.api.FlywayException; import org.flywaydb.core.internal.util.Location; import org.flywaydb.core.internal.util.scanner.Resource; import java.io.File; import static java.lang.String.format; /** * Creates new {@link SqlScript} instance from given resource. * * @author Yevhenii Voevodin */ class SqlScriptCreator { /** * Create a new instance of script based on location and resource. * * @param location * root location of the given resource * @param resource * script resource * @return a new instance of sql script based on location and resource * @throws FlywayException * when script can't be created from the resource */ SqlScript createScript(Location location, Resource resource) { final String separator = location.isClassPath() ? "/" : File.separator; // '/root-location/5.0.0-M7/v1__init.sql' -> '5.0.0-M7/v1__init.sql' final String relLocation = resource.getLocation().substring(location.getPath().length() + 1); final String[] paths = relLocation.split(separator); // 5.0.0-M1/v1__init.sql if (paths.length == 2) { return new SqlScript(resource, location, paths[0], null, paths[1]); } // 5.0.0-M1/postgresql/v1__init.sql if (paths.length == 3) { return new SqlScript(resource, location, paths[0], paths[1], paths[2]); } throw new FlywayException(format("Sql script location must be either in 'location-root/version-dir' " + "or in 'location-root/version-dir/provider-name', but script '%s' is not in root '%s'", resource.getLocation(), location.getPath())); } }