text: /**
   * Copyright 2010-2015 Axel Fontaine
   * <p/>
   * 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
   * <p/>
   * http://www.apache.org/licenses/LICENSE-2.0
   * <p/>
   * 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.contrastsecurity.cassandra.migration.resolver;
  
  import com.contrastsecurity.cassandra.migration.CassandraMigrationException;
  import com.contrastsecurity.cassandra.migration.info.MigrationVersion;
  import com.contrastsecurity.cassandra.migration.utils.Pair;
  
  /**
   * Parsing support for migrations that use the standard Flyway version + description embedding in their name. These
   * migrations have names like 1_2__Description .
   */
  public class MigrationInfoHelper {
      /**
       * Prevents instantiation.
       */
      private MigrationInfoHelper() {
          //Do nothing.
      }
  
      /**
       * Extracts the schema version and the description from a migration name formatted as 1_2__Description.
       *
       * @param migrationName The migration name to parse. Should not contain any folders or packages.
       * @param prefix        The migration prefix.
       * @param separator     The migration separator.
       * @param suffix        The migration suffix.
       * @return The extracted schema version.
       * @throws CassandraMigrationException if the migration name does not follow the standard conventions.
       */
      public static Pair<MigrationVersion, String> extractVersionAndDescription(String migrationName,
                                                                                String prefix, String separator, String suffix) {
          String cleanMigrationName = migrationName.substring(prefix.length(), migrationName.length() - suffix.length());
  
          // Handle the description
          int descriptionPos = cleanMigrationName.indexOf(separator);
          if (descriptionPos < 0) {
              throw new CassandraMigrationException("Wrong migration name format: " + migrationName
                      + "(It should look like this: " + prefix + "1_2" + separator + "Description" + suffix + ")");
          }
  
          String version = cleanMigrationName.substring(0, descriptionPos);
          String description = cleanMigrationName.substring(descriptionPos + separator.length()).replaceAll("_", " ");
          return Pair.of(MigrationVersion.fromVersion(version), description);
      }
  }
  