diff --git a/pom.xml b/pom.xml
index 3579563..41edfdd 100755
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,12 @@
com.datastax.cassandra
cassandra-driver-core
3.0.0
+
+
+ com.google.guava
+ guava
+
+
junit
@@ -124,8 +130,7 @@
com.google.guava
guava
- 18.0
- test
+ 19.0
diff --git a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/CompositeMigrationResolver.java b/src/main/java/com/contrastsecurity/cassandra/migration/resolver/CompositeMigrationResolver.java
index d4295dc..2177a0b 100644
--- a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/CompositeMigrationResolver.java
+++ b/src/main/java/com/contrastsecurity/cassandra/migration/resolver/CompositeMigrationResolver.java
@@ -20,13 +20,8 @@
import com.contrastsecurity.cassandra.migration.config.ScriptsLocations;
import com.contrastsecurity.cassandra.migration.info.ResolvedMigration;
import com.contrastsecurity.cassandra.migration.resolver.cql.CqlMigrationResolver;
-import com.contrastsecurity.cassandra.migration.resolver.java.ExternalJavaMigrationResolver;
import com.contrastsecurity.cassandra.migration.resolver.java.JavaMigrationResolver;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.util.*;
/**
@@ -59,11 +54,6 @@ public CompositeMigrationResolver(ClassLoader classLoader, ScriptsLocations loca
for (ScriptsLocation location : locations.getLocations()) {
migrationResolvers.add(new CqlMigrationResolver(classLoader, location, encoding));
migrationResolvers.add(new JavaMigrationResolver(classLoader, location));
- try {
- migrationResolvers.add(new ExternalJavaMigrationResolver(new URLClassLoader(new URL[]{new File(location.getPath()).toURI().toURL()}, this.getClass().getClassLoader()), location));
- } catch (MalformedURLException e) {
- throw new CassandraMigrationException("Unable to add external url for classes migrations in location: " + location, e);
- }
}
migrationResolvers.addAll(Arrays.asList(customMigrationResolvers));
diff --git a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/CommonJavaResolver.java b/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/CommonJavaResolver.java
deleted file mode 100644
index ef0ff42..0000000
--- a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/CommonJavaResolver.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.contrastsecurity.cassandra.migration.resolver.java;
-
-import com.contrastsecurity.cassandra.migration.CassandraMigrationException;
-import com.contrastsecurity.cassandra.migration.api.JavaMigration;
-import com.contrastsecurity.cassandra.migration.api.MigrationChecksumProvider;
-import com.contrastsecurity.cassandra.migration.api.MigrationInfoProvider;
-import com.contrastsecurity.cassandra.migration.config.MigrationType;
-import com.contrastsecurity.cassandra.migration.config.ScriptsLocation;
-import com.contrastsecurity.cassandra.migration.info.MigrationVersion;
-import com.contrastsecurity.cassandra.migration.info.ResolvedMigration;
-import com.contrastsecurity.cassandra.migration.resolver.MigrationInfoHelper;
-import com.contrastsecurity.cassandra.migration.utils.ClassUtils;
-import com.contrastsecurity.cassandra.migration.utils.Pair;
-import com.contrastsecurity.cassandra.migration.utils.StringUtils;
-import com.contrastsecurity.cassandra.migration.utils.scanner.Scanner;
-
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Created by Adam Król on 06.04.2017.
- *
- * @author Adam Król
- */
-class CommonJavaResolver {
-
- List loadJavaMigrationFiles(ClassLoader classLoader, ScriptsLocation location) {
- try {
- Class>[] classes = new Scanner(classLoader).scanForClasses(location, JavaMigration.class);
- List migrations = new LinkedList<>();
- for (Class> clazz : classes) {
- JavaMigration javaMigration = ClassUtils.instantiate(clazz.getName(), classLoader);
-
- ResolvedMigration migrationInfo = extractMigrationInfo(javaMigration);
- migrationInfo.setPhysicalLocation(ClassUtils.getLocationOnDisk(clazz));
- migrationInfo.setExecutor(new JavaMigrationExecutor(javaMigration));
-
- migrations.add(migrationInfo);
- }
- return migrations;
- } catch (Exception e) {
- throw new CassandraMigrationException("Unable to resolve Java migrations in location: " + location, e);
- }
- }
-
- /**
- * Extracts the migration info from this migration.
- *
- * @param javaMigration The migration to analyse.
- * @return The migration info.
- */
- ResolvedMigration extractMigrationInfo(JavaMigration javaMigration) {
- Integer checksum = null;
- if (javaMigration instanceof MigrationChecksumProvider) {
- MigrationChecksumProvider checksumProvider = (MigrationChecksumProvider) javaMigration;
- checksum = checksumProvider.getChecksum();
- }
-
- MigrationVersion version;
- String description;
- if (javaMigration instanceof MigrationInfoProvider) {
- MigrationInfoProvider infoProvider = (MigrationInfoProvider) javaMigration;
- version = infoProvider.getVersion();
- description = infoProvider.getDescription();
- if (!StringUtils.hasText(description)) {
- throw new CassandraMigrationException("Missing description for migration " + version);
- }
- } else {
- Pair info =
- MigrationInfoHelper.extractVersionAndDescription(
- ClassUtils.getShortName(javaMigration.getClass()), "V", "__", "");
- version = info.getLeft();
- description = info.getRight();
- }
-
- String script = javaMigration.getClass().getName();
-
-
- ResolvedMigration resolvedMigration = new ResolvedMigration();
- resolvedMigration.setVersion(version);
- resolvedMigration.setDescription(description);
- resolvedMigration.setScript(script);
- resolvedMigration.setChecksum(checksum);
- resolvedMigration.setType(MigrationType.JAVA_DRIVER);
- return resolvedMigration;
- }
-}
diff --git a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/ExternalJavaMigrationResolver.java b/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/ExternalJavaMigrationResolver.java
deleted file mode 100644
index df140c7..0000000
--- a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/ExternalJavaMigrationResolver.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Copyright 2010-2015 Axel Fontaine
- *
- * 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.contrastsecurity.cassandra.migration.resolver.java;
-
-import com.contrastsecurity.cassandra.migration.config.ScriptsLocation;
-import com.contrastsecurity.cassandra.migration.info.ResolvedMigration;
-import com.contrastsecurity.cassandra.migration.resolver.MigrationResolver;
-import com.contrastsecurity.cassandra.migration.resolver.ResolvedMigrationComparator;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Migration resolver for Java migrations. The classes must have a name like V1 or V1_1_3 or V1__Description
- * or V1_1_3__Description.
- */
-public class ExternalJavaMigrationResolver extends CommonJavaResolver implements MigrationResolver {
- /**
- * The base package on the classpath where to migrations are located.
- */
- private final ScriptsLocation location;
-
- /**
- * The ClassLoader to use.
- */
- private ClassLoader classLoader;
-
- /**
- * Creates a new instance.
- *
- * @param location The base package on the classpath where to migrations are located.
- * @param classLoader The ClassLoader for loading migrations on the classpath.
- */
- public ExternalJavaMigrationResolver(ClassLoader classLoader, ScriptsLocation location) {
- this.location = location;
- this.classLoader = classLoader;
- }
-
- public List resolveMigrations() {
-
- if (!location.isFileSystem()) {
- return Collections.emptyList();
- }
-
- List migrations = loadJavaMigrationFiles(classLoader, new ScriptsLocation(""));
-
- Collections.sort(migrations, new ResolvedMigrationComparator());
- return migrations;
- }
-}
diff --git a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/JavaMigrationResolver.java b/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/JavaMigrationResolver.java
index ab50ba4..c85c430 100644
--- a/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/JavaMigrationResolver.java
+++ b/src/main/java/com/contrastsecurity/cassandra/migration/resolver/java/JavaMigrationResolver.java
@@ -15,10 +15,21 @@
*/
package com.contrastsecurity.cassandra.migration.resolver.java;
+import com.contrastsecurity.cassandra.migration.CassandraMigrationException;
+import com.contrastsecurity.cassandra.migration.api.MigrationChecksumProvider;
+import com.contrastsecurity.cassandra.migration.api.MigrationInfoProvider;
+import com.contrastsecurity.cassandra.migration.api.JavaMigration;
+import com.contrastsecurity.cassandra.migration.config.MigrationType;
import com.contrastsecurity.cassandra.migration.config.ScriptsLocation;
+import com.contrastsecurity.cassandra.migration.info.MigrationVersion;
import com.contrastsecurity.cassandra.migration.info.ResolvedMigration;
+import com.contrastsecurity.cassandra.migration.resolver.MigrationInfoHelper;
import com.contrastsecurity.cassandra.migration.resolver.MigrationResolver;
import com.contrastsecurity.cassandra.migration.resolver.ResolvedMigrationComparator;
+import com.contrastsecurity.cassandra.migration.utils.ClassUtils;
+import com.contrastsecurity.cassandra.migration.utils.Pair;
+import com.contrastsecurity.cassandra.migration.utils.StringUtils;
+import com.contrastsecurity.cassandra.migration.utils.scanner.Scanner;
import java.util.ArrayList;
import java.util.Collections;
@@ -28,7 +39,7 @@
* Migration resolver for Java migrations. The classes must have a name like V1 or V1_1_3 or V1__Description
* or V1_1_3__Description.
*/
-public class JavaMigrationResolver extends CommonJavaResolver implements MigrationResolver {
+public class JavaMigrationResolver implements MigrationResolver {
/**
* The base package on the classpath where to migrations are located.
*/
@@ -51,15 +62,70 @@ public JavaMigrationResolver(ClassLoader classLoader, ScriptsLocation location)
}
public List resolveMigrations() {
+ List migrations = new ArrayList();
+
if (!location.isClassPath()) {
- return Collections.emptyList();
+ return migrations;
}
- List migrations = loadJavaMigrationFiles(classLoader, location);
+ try {
+ Class>[] classes = new Scanner(classLoader).scanForClasses(location, JavaMigration.class);
+ for (Class> clazz : classes) {
+ JavaMigration javaMigration = ClassUtils.instantiate(clazz.getName(), classLoader);
+
+ ResolvedMigration migrationInfo = extractMigrationInfo(javaMigration);
+ migrationInfo.setPhysicalLocation(ClassUtils.getLocationOnDisk(clazz));
+ migrationInfo.setExecutor(new JavaMigrationExecutor(javaMigration));
+
+ migrations.add(migrationInfo);
+ }
+ } catch (Exception e) {
+ throw new CassandraMigrationException("Unable to resolve Java migrations in location: " + location, e);
+ }
Collections.sort(migrations, new ResolvedMigrationComparator());
return migrations;
}
+ /**
+ * Extracts the migration info from this migration.
+ *
+ * @param javaMigration The migration to analyse.
+ * @return The migration info.
+ */
+ ResolvedMigration extractMigrationInfo(JavaMigration javaMigration) {
+ Integer checksum = null;
+ if (javaMigration instanceof MigrationChecksumProvider) {
+ MigrationChecksumProvider checksumProvider = (MigrationChecksumProvider) javaMigration;
+ checksum = checksumProvider.getChecksum();
+ }
+
+ MigrationVersion version;
+ String description;
+ if (javaMigration instanceof MigrationInfoProvider) {
+ MigrationInfoProvider infoProvider = (MigrationInfoProvider) javaMigration;
+ version = infoProvider.getVersion();
+ description = infoProvider.getDescription();
+ if (!StringUtils.hasText(description)) {
+ throw new CassandraMigrationException("Missing description for migration " + version);
+ }
+ } else {
+ Pair info =
+ MigrationInfoHelper.extractVersionAndDescription(
+ ClassUtils.getShortName(javaMigration.getClass()), "V", "__", "");
+ version = info.getLeft();
+ description = info.getRight();
+ }
+ String script = javaMigration.getClass().getName();
+
+
+ ResolvedMigration resolvedMigration = new ResolvedMigration();
+ resolvedMigration.setVersion(version);
+ resolvedMigration.setDescription(description);
+ resolvedMigration.setScript(script);
+ resolvedMigration.setChecksum(checksum);
+ resolvedMigration.setType(MigrationType.JAVA_DRIVER);
+ return resolvedMigration;
+ }
}