Skip to content
This repository was archived by the owner on Jul 22, 2020. It is now read-only.

Commit cbefa3f

Browse files
committed
Various small refactoring that has been pending from past PR
Additional info: - Added lateinit for late-bound properties - Refactored various `compareTo` method body - Removed fully-qualified package name from variable declarations
1 parent 484b84b commit cbefa3f

19 files changed

+268
-154
lines changed

src/main/java/com/builtamont/cassandra/migration/CassandraMigration.kt

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,17 @@ import com.builtamont.cassandra.migration.api.MigrationVersion
2424
import com.builtamont.cassandra.migration.api.configuration.CassandraMigrationConfiguration
2525
import com.builtamont.cassandra.migration.api.configuration.MigrationConfigs
2626
import com.builtamont.cassandra.migration.api.resolver.MigrationResolver
27+
import com.builtamont.cassandra.migration.config.Keyspace
2728
import com.builtamont.cassandra.migration.internal.command.Initialize
2829
import com.builtamont.cassandra.migration.internal.command.Migrate
2930
import com.builtamont.cassandra.migration.internal.command.Validate
31+
import com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO
3032
import com.builtamont.cassandra.migration.internal.info.MigrationInfoServiceImpl
3133
import com.builtamont.cassandra.migration.internal.resolver.CompositeMigrationResolver
3234
import com.builtamont.cassandra.migration.internal.util.ScriptsLocations
35+
import com.builtamont.cassandra.migration.internal.util.VersionPrinter
3336
import com.builtamont.cassandra.migration.internal.util.logging.LogFactory
37+
import com.datastax.driver.core.Cluster
3438
import com.datastax.driver.core.Metadata
3539
import com.datastax.driver.core.Session
3640
import sun.reflect.generics.reflectiveObjects.NotImplementedException
@@ -50,7 +54,7 @@ class CassandraMigration : CassandraMigrationConfiguration {
5054
/**
5155
* The Cassandra keyspace to connect to.
5256
*/
53-
var keyspace: com.builtamont.cassandra.migration.config.Keyspace? = null
57+
lateinit var keyspace: Keyspace
5458

5559
/**
5660
* The Cassandra migration configuration.
@@ -61,7 +65,7 @@ class CassandraMigration : CassandraMigrationConfiguration {
6165
* CassandraMigration initialization.
6266
*/
6367
init {
64-
this.keyspace = com.builtamont.cassandra.migration.config.Keyspace()
68+
this.keyspace = Keyspace()
6569
this.configs = MigrationConfigs()
6670
}
6771

@@ -74,12 +78,18 @@ class CassandraMigration : CassandraMigrationConfiguration {
7478
fun migrate(): Int {
7579
return execute(object : Action<Int> {
7680
override fun execute(session: Session): Int {
77-
Initialize().run(session, keyspace!!, MigrationVersion.CURRENT.table)
81+
Initialize().run(session, keyspace, MigrationVersion.CURRENT.table)
7882

7983
val migrationResolver = createMigrationResolver()
80-
val schemaVersionDAO = com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO(session, keyspace, MigrationVersion.CURRENT.table)
81-
val migrate = Migrate(migrationResolver, configs.target, schemaVersionDAO, session,
82-
keyspace!!.cluster.username, configs.isAllowOutOfOrder)
84+
val schemaVersionDAO = SchemaVersionDAO(session, keyspace, MigrationVersion.CURRENT.table)
85+
val migrate = Migrate(
86+
migrationResolver,
87+
configs.target,
88+
schemaVersionDAO,
89+
session,
90+
keyspace.cluster.username,
91+
configs.isAllowOutOfOrder
92+
)
8393

8494
return migrate.run()
8595
}
@@ -96,7 +106,7 @@ class CassandraMigration : CassandraMigrationConfiguration {
96106
return execute(object : Action<MigrationInfoService> {
97107
override fun execute(session: Session): MigrationInfoService? {
98108
val migrationResolver = createMigrationResolver()
99-
val schemaVersionDAO = com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO(session, keyspace, MigrationVersion.CURRENT.table)
109+
val schemaVersionDAO = SchemaVersionDAO(session, keyspace, MigrationVersion.CURRENT.table)
100110
val migrationInfoService = MigrationInfoServiceImpl(migrationResolver, schemaVersionDAO, configs.target, false, true)
101111
migrationInfoService.refresh()
102112

@@ -118,7 +128,7 @@ class CassandraMigration : CassandraMigrationConfiguration {
118128
val validationError = execute(object : Action<String?> {
119129
override fun execute(session: Session): String? {
120130
val migrationResolver = createMigrationResolver()
121-
val schemaVersionDao = com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO(session, keyspace, MigrationVersion.CURRENT.table)
131+
val schemaVersionDao = SchemaVersionDAO(session, keyspace, MigrationVersion.CURRENT.table)
122132
val validate = Validate(migrationResolver, configs.target, schemaVersionDao, true, false)
123133
return validate.run()
124134
}
@@ -147,23 +157,22 @@ class CassandraMigration : CassandraMigrationConfiguration {
147157
internal fun <T> execute(action: Action<T>): T {
148158
val result: T
149159

150-
com.builtamont.cassandra.migration.internal.util.VersionPrinter.printVersion(classLoader)
160+
VersionPrinter.printVersion(classLoader)
151161

152-
var cluster: com.datastax.driver.core.Cluster? = null
162+
var cluster: Cluster? = null
153163
var session: Session? = null
154164
try {
155165
if (null == keyspace)
156166
throw IllegalArgumentException("Unable to establish Cassandra session. Keyspace is not configured.")
157167

158-
if (null == keyspace!!.cluster)
168+
if (null == keyspace.cluster)
159169
throw IllegalArgumentException("Unable to establish Cassandra session. Cluster is not configured.")
160170

161-
val builder = com.datastax.driver.core.Cluster.Builder()
162-
builder.addContactPoints(*keyspace!!.cluster.contactpoints).withPort(keyspace!!.cluster.port)
163-
if (null != keyspace!!.cluster.username && !keyspace!!.cluster.username.trim { it <= ' ' }.isEmpty()) {
164-
if (null != keyspace!!.cluster.password && !keyspace!!.cluster.password.trim { it <= ' ' }.isEmpty()) {
165-
builder.withCredentials(keyspace!!.cluster.username,
166-
keyspace!!.cluster.password)
171+
val builder = Cluster.Builder()
172+
builder.addContactPoints(*keyspace.cluster.contactpoints).withPort(keyspace.cluster.port)
173+
if (null != keyspace.cluster.username && !keyspace.cluster.username.trim { it <= ' ' }.isEmpty()) {
174+
if (null != keyspace.cluster.password && !keyspace.cluster.password.trim { it <= ' ' }.isEmpty()) {
175+
builder.withCredentials(keyspace.cluster.username, keyspace.cluster.password)
167176
} else {
168177
throw IllegalArgumentException("Password must be provided with username.")
169178
}
@@ -174,18 +183,19 @@ class CassandraMigration : CassandraMigrationConfiguration {
174183
LOG.info(getConnectionInfo(metadata))
175184

176185
session = cluster.newSession()
177-
if (null == keyspace!!.name || keyspace!!.name.trim { it <= ' ' }.length == 0)
186+
if (null == keyspace.name || keyspace.name.trim { it <= ' ' }.length == 0)
178187
throw IllegalArgumentException("Keyspace not specified.")
188+
179189
val keyspaces = metadata.keyspaces
180190
var keyspaceExists = false
181191
for (keyspaceMetadata in keyspaces) {
182-
if (keyspaceMetadata.name.equals(keyspace!!.name, ignoreCase = true))
192+
if (keyspaceMetadata.name.equals(keyspace.name, ignoreCase = true))
183193
keyspaceExists = true
184194
}
185195
if (keyspaceExists)
186-
session!!.execute("USE " + keyspace!!.name)
196+
session!!.execute("USE " + keyspace.name)
187197
else
188-
throw CassandraMigrationException("Keyspace: " + keyspace!!.name + " does not exist.")
198+
throw CassandraMigrationException("Keyspace: " + keyspace.name + " does not exist.")
189199

190200
result = action.execute(session)!!
191201
} finally {

src/main/java/com/builtamont/cassandra/migration/CommandLine.kt

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package com.builtamont.cassandra.migration
2020

21+
import com.builtamont.cassandra.migration.config.Keyspace
2122
import com.builtamont.cassandra.migration.internal.util.logging.Log
2223
import com.builtamont.cassandra.migration.internal.util.logging.LogFactory
2324
import com.builtamont.cassandra.migration.internal.util.logging.console.ConsoleLog
@@ -42,7 +43,7 @@ object CommandLine {
4243
/**
4344
* Logging support.
4445
*/
45-
private var LOG: Log? = null
46+
lateinit private var LOG: Log
4647

4748
/**
4849
* Main method body.
@@ -62,7 +63,7 @@ object CommandLine {
6263
val operation = operations[0]
6364

6465
val cm = CassandraMigration()
65-
val ks = com.builtamont.cassandra.migration.config.Keyspace()
66+
val ks = Keyspace()
6667
cm.keyspace = ks
6768
if (MIGRATE.equals(operation, ignoreCase = true)) {
6869
cm.migrate()
@@ -113,20 +114,20 @@ object CommandLine {
113114
* Print command line runner info.
114115
*/
115116
private fun printUsage() {
116-
LOG!!.info("********")
117-
LOG!!.info("* Usage")
118-
LOG!!.info("********")
119-
LOG!!.info("")
120-
LOG!!.info("cassandra-migration [options] command")
121-
LOG!!.info("")
122-
LOG!!.info("Commands")
123-
LOG!!.info("========")
124-
LOG!!.info("migrate : Migrates the database")
125-
LOG!!.info("validate : Validates the applied migrations against the available ones")
126-
LOG!!.info("")
127-
LOG!!.info("Add -X to print debug output")
128-
LOG!!.info("Add -q to suppress all output, except for errors and warnings")
129-
LOG!!.info("")
117+
LOG.info("********")
118+
LOG.info("* Usage")
119+
LOG.info("********")
120+
LOG.info("")
121+
LOG.info("cassandra-migration [options] command")
122+
LOG.info("")
123+
LOG.info("Commands")
124+
LOG.info("========")
125+
LOG.info("migrate : Migrates the database")
126+
LOG.info("validate : Validates the applied migrations against the available ones")
127+
LOG.info("")
128+
LOG.info("Add -X to print debug output")
129+
LOG.info("Add -q to suppress all output, except for errors and warnings")
130+
LOG.info("")
130131
}
131132

132133
}

src/main/java/com/builtamont/cassandra/migration/api/MigrationVersion.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ class MigrationVersion : Comparable<MigrationVersion?> {
3131
* The version in one of the following formats: 6, 6.0, 005, 1.2.3.4, 201004200021.
3232
* {@code null} means that this version refers to an empty schema.
3333
*/
34-
private var versionParts: List<BigInteger>? = null
34+
lateinit private var versionParts: List<BigInteger>
3535

3636
/**
3737
* The alternative text to display instead of the version number.
3838
*/
39-
private var displayText: String? = null
39+
lateinit private var displayText: String
4040

4141
/**
4242
* Creates a Version using this version string.
@@ -83,14 +83,14 @@ class MigrationVersion : Comparable<MigrationVersion?> {
8383
* @return The textual representation of the version instance.
8484
*/
8585
override fun toString(): String {
86-
return displayText!!
86+
return displayText
8787
}
8888

8989
/**
9090
* @return The computed version instance hash value.
9191
*/
9292
override fun hashCode(): Int {
93-
return if (versionParts == null) 0 else versionParts!!.hashCode()
93+
return versionParts.hashCode()
9494
}
9595

9696
/**
@@ -137,7 +137,7 @@ class MigrationVersion : Comparable<MigrationVersion?> {
137137

138138
val elements1 = versionParts
139139
val elements2 = other?.versionParts
140-
val largestNumberOfElements = Math.max(elements1!!.size, elements2!!.size)
140+
val largestNumberOfElements = Math.max(elements1.size, elements2!!.size)
141141

142142
// Iterate through the version parts to compare version numbers
143143
for (i in 0..largestNumberOfElements - 1) {

src/main/java/com/builtamont/cassandra/migration/api/configuration/MigrationConfigs.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package com.builtamont.cassandra.migration.api.configuration
2020

2121
import com.builtamont.cassandra.migration.api.MigrationVersion
22+
import com.builtamont.cassandra.migration.internal.util.StringUtils
2223

2324
/**
2425
* Main Cassandra migration configuration.
@@ -94,7 +95,7 @@ class MigrationConfigs {
9495

9596
val locationsProp = System.getProperty(MigrationProperty.SCRIPTS_LOCATIONS.prefix)
9697
if (locationsProp != null && locationsProp.trim { it <= ' ' }.length != 0) {
97-
scriptsLocations = com.builtamont.cassandra.migration.internal.util.StringUtils.tokenizeToStringArray(locationsProp, ",")
98+
scriptsLocations = StringUtils.tokenizeToStringArray(locationsProp, ",")
9899
}
99100

100101
val allowOutOfOrderProp = System.getProperty(MigrationProperty.ALLOW_OUTOFORDER.prefix)

src/main/java/com/builtamont/cassandra/migration/internal/command/Initialize.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package com.builtamont.cassandra.migration.internal.command
2020

21+
import com.builtamont.cassandra.migration.config.Keyspace
22+
import com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO
2123
import com.datastax.driver.core.Session
2224

2325
/**
@@ -32,8 +34,8 @@ class Initialize {
3234
* @param keyspace The Cassandra keyspace to connect to.
3335
* @param migrationVersionTableName The Cassandra migration version table name.
3436
*/
35-
fun run(session: Session, keyspace: com.builtamont.cassandra.migration.config.Keyspace, migrationVersionTableName: String) {
36-
val dao = com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO(session, keyspace, migrationVersionTableName)
37+
fun run(session: Session, keyspace: Keyspace, migrationVersionTableName: String) {
38+
val dao = SchemaVersionDAO(session, keyspace, migrationVersionTableName)
3739
dao.createTablesIfNotExist()
3840
}
3941

src/main/java/com/builtamont/cassandra/migration/internal/command/Migrate.kt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@ import com.builtamont.cassandra.migration.api.MigrationInfo
2323
import com.builtamont.cassandra.migration.api.MigrationState
2424
import com.builtamont.cassandra.migration.api.MigrationVersion
2525
import com.builtamont.cassandra.migration.api.resolver.MigrationResolver
26+
import com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO
2627
import com.builtamont.cassandra.migration.internal.info.MigrationInfoImpl
2728
import com.builtamont.cassandra.migration.internal.info.MigrationInfoServiceImpl
2829
import com.builtamont.cassandra.migration.internal.metadatatable.AppliedMigration
30+
import com.builtamont.cassandra.migration.internal.util.StopWatch
31+
import com.builtamont.cassandra.migration.internal.util.TimeFormat
2932
import com.builtamont.cassandra.migration.internal.util.logging.LogFactory
3033
import com.datastax.driver.core.Session
3134

@@ -40,12 +43,12 @@ import com.datastax.driver.core.Session
4043
* @param allowOutOfOrder True to allow migration to be run "out of order".
4144
*/
4245
class Migrate(
43-
private val migrationResolver: MigrationResolver,
44-
private val migrationTarget: MigrationVersion,
45-
private val schemaVersionDAO: com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO,
46-
private val session: Session,
47-
private val user: String,
48-
private val allowOutOfOrder: Boolean
46+
private val migrationResolver: MigrationResolver,
47+
private val migrationTarget: MigrationVersion,
48+
private val schemaVersionDAO: SchemaVersionDAO,
49+
private val session: Session,
50+
private val user: String,
51+
private val allowOutOfOrder: Boolean
4952
) {
5053

5154
/** Keyspace name lensing */
@@ -59,7 +62,7 @@ class Migrate(
5962
*/
6063
@Throws(CassandraMigrationException::class)
6164
fun run(): Int {
62-
val stopWatch = com.builtamont.cassandra.migration.internal.util.StopWatch()
65+
val stopWatch = StopWatch()
6366
stopWatch.start()
6467

6568
var migrationSuccessCount = 0
@@ -177,7 +180,7 @@ class Migrate(
177180
val oooLogMsg = if (isOutOfOrder) " (out of order)" else ""
178181
LOG.info("$logMsg - ${migration.description}$oooLogMsg")
179182

180-
val stopWatch = com.builtamont.cassandra.migration.internal.util.StopWatch()
183+
val stopWatch = StopWatch()
181184
stopWatch.start()
182185

183186
var isMigrationSuccess = false
@@ -216,7 +219,7 @@ class Migrate(
216219
* @return The migration success log message.
217220
*/
218221
fun successLogMsg(): String {
219-
return "Successfully applied $count migration to keyspace $keyspaceName (execution time ${com.builtamont.cassandra.migration.internal.util.TimeFormat.format(executionTime)})"
222+
return "Successfully applied $count migration to keyspace $keyspaceName (execution time ${TimeFormat.format(executionTime)})"
220223
}
221224

222225
when (count) {

src/main/java/com/builtamont/cassandra/migration/internal/command/Validate.kt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ package com.builtamont.cassandra.migration.internal.command
2020

2121
import com.builtamont.cassandra.migration.api.MigrationVersion
2222
import com.builtamont.cassandra.migration.api.resolver.MigrationResolver
23+
import com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO
2324
import com.builtamont.cassandra.migration.internal.info.MigrationInfoServiceImpl
25+
import com.builtamont.cassandra.migration.internal.util.StopWatch
26+
import com.builtamont.cassandra.migration.internal.util.TimeFormat
2427
import com.builtamont.cassandra.migration.internal.util.logging.LogFactory
2528

2629
/**
@@ -34,11 +37,11 @@ import com.builtamont.cassandra.migration.internal.util.logging.LogFactory
3437
* @param pendingOrFuture True to allow pending or Future<T> migration to be run.
3538
*/
3639
class Validate(
37-
private val migrationResolver: MigrationResolver,
38-
private val migrationTarget: MigrationVersion,
39-
private val schemaVersionDAO: com.builtamont.cassandra.migration.internal.dbsupport.SchemaVersionDAO,
40-
private val outOfOrder: Boolean,
41-
private val pendingOrFuture: Boolean
40+
private val migrationResolver: MigrationResolver,
41+
private val migrationTarget: MigrationVersion,
42+
private val schemaVersionDAO: SchemaVersionDAO,
43+
private val outOfOrder: Boolean,
44+
private val pendingOrFuture: Boolean
4245
) {
4346

4447
/**
@@ -47,7 +50,7 @@ class Validate(
4750
* @return The validation error, if any.
4851
*/
4952
fun run(): String? {
50-
val stopWatch = com.builtamont.cassandra.migration.internal.util.StopWatch()
53+
val stopWatch = StopWatch()
5154
stopWatch.start()
5255

5356
val infoService = MigrationInfoServiceImpl(migrationResolver, schemaVersionDAO, migrationTarget, outOfOrder, pendingOrFuture)
@@ -69,7 +72,7 @@ class Validate(
6972
* @param executionTime The total time taken to perform this migration run (in ms).
7073
*/
7174
private fun logSummary(count: Int, executionTime: Long) {
72-
LOG.info("Validated %d migrations (execution time %s)".format(count, com.builtamont.cassandra.migration.internal.util.TimeFormat.format(executionTime)))
75+
LOG.info("Validated %d migrations (execution time %s)".format(count, TimeFormat.format(executionTime)))
7376
}
7477

7578
/**

0 commit comments

Comments
 (0)