class SqlScriptCreator {

  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()));
  }

}