Skip to content
1 change: 1 addition & 0 deletions migration-examples/gradle/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ project.dependencies {
testImplementation "org.junit.jupiter:junit-jupiter-engine"
testImplementation "org.postgresql:postgresql:42.2.27"
testImplementation "org.mockito:mockito-core:5.+"
testImplementation 'org.jetbrains.kotlinx:kotlinx-datetime:0.6.2'

testRuntimeOnly "org.junit.platform:junit-platform-launcher"
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ class Migration(public val config: MigConfig, public val projectConfig: ProjectC
private val projectName = projectConfig.name
private val ipsConfig = config.inspireConfig.ipsConfig
private val ipsService = IpsService(ipsConfig)
val repositories = mutableListOf<Repository<*, *>>()

val variableRepository: Repository<Variable, VariableModel>
val documentObjectRepository: Repository<DocumentObject, DocumentObjectModel>
val textStyleRepository: Repository<TextStyle, TextStyleModel>
val paragraphStyleRepository: Repository<ParagraphStyle, ParagraphStyleModel>
val variableStructureRepository: Repository<VariableStructure, VariableStructureModel>
val displayRuleRepository: Repository<DisplayRule, DisplayRuleModel>
val imageRepository: Repository<Image, ImageModel>
val fileRepository: Repository<File, FileModel>
val repositories = mutableListOf<Repository<*>>()

val variableRepository: Repository<Variable>
val documentObjectRepository: Repository<DocumentObject>
val textStyleRepository: Repository<TextStyle>
val paragraphStyleRepository: Repository<ParagraphStyle>
val variableStructureRepository: Repository<VariableStructure>
val displayRuleRepository: Repository<DisplayRule>
val imageRepository: Repository<Image>
val fileRepository: Repository<File>
val statusTrackingRepository = StatusTrackingRepository(projectName)
val mappingRepository: MappingRepository

Expand Down Expand Up @@ -66,24 +66,14 @@ class Migration(public val config: MigConfig, public val projectConfig: ProjectC
.load()
.migrate()

val documentObjectInternalRepository = DocumentObjectInternalRepository(DocumentObjectTable, projectName)
val imageInternalRepository = ImageInternalRepository(ImageTable, projectName)
val fileInternalRepository = FileInternalRepository(FileTable, projectName)
val displayRuleInternalRepository = DisplayRuleInternalRepository(DisplayRuleTable, projectName)
val variableInternalRepository = VariableInternalRepository(VariableTable, projectName)
val variableStructureInternalRepository =
VariableStructureInternalRepository(VariableStructureTable, projectName)
val textStyleInternalRepository = TextStyleInternalRepository(TextStyleTable, projectName)
val paragraphStyleInternalRepository = ParagraphStyleInternalRepository(ParagraphStyleTable, projectName)

val variableRepository = VariableRepository(variableInternalRepository)
val documentObjectRepository = DocumentObjectRepository(documentObjectInternalRepository)
val textStyleRepository = TextStyleRepository(textStyleInternalRepository)
val paragraphStyleRepository = ParagraphStyleRepository(paragraphStyleInternalRepository)
val variableStructureRepository = VariableStructureRepository(variableStructureInternalRepository)
val displayRuleRepository = DisplayRuleRepository(displayRuleInternalRepository)
val imageRepository = ImageRepository(imageInternalRepository)
val fileRepository = FileRepository(fileInternalRepository)
val variableRepository = VariableRepository(VariableTable, projectName)
val documentObjectRepository = DocumentObjectRepository(DocumentObjectTable, projectName)
val textStyleRepository = TextStyleRepository(TextStyleTable, projectName)
val paragraphStyleRepository = ParagraphStyleRepository(ParagraphStyleTable, projectName)
val variableStructureRepository = VariableStructureRepository(VariableStructureTable, projectName)
val displayRuleRepository = DisplayRuleRepository(DisplayRuleTable, projectName)
val imageRepository = ImageRepository(ImageTable, projectName)
val fileRepository = FileRepository(FileTable, projectName)

this.variableRepository = variableRepository
this.documentObjectRepository = documentObjectRepository
Expand Down Expand Up @@ -115,75 +105,75 @@ class Migration(public val config: MigConfig, public val projectConfig: ProjectC
repositories.add(fileRepository)

this.referenceValidator = ReferenceValidator(
documentObjectInternalRepository,
variableInternalRepository,
textStyleInternalRepository,
paragraphStyleInternalRepository,
variableStructureInternalRepository,
displayRuleInternalRepository,
imageInternalRepository,
fileInternalRepository,
documentObjectRepository,
variableRepository,
textStyleRepository,
paragraphStyleRepository,
variableStructureRepository,
displayRuleRepository,
imageRepository,
fileRepository,
)

val inspireDocumentObjectBuilder: InspireDocumentObjectBuilder
this.deployClient =
if (projectConfig.inspireOutput == InspireOutput.Interactive || projectConfig.inspireOutput == InspireOutput.Evolve) {
inspireDocumentObjectBuilder = InteractiveDocumentObjectBuilder(
documentObjectInternalRepository,
textStyleInternalRepository,
paragraphStyleInternalRepository,
variableInternalRepository,
variableStructureInternalRepository,
displayRuleInternalRepository,
imageInternalRepository,
fileInternalRepository,
documentObjectRepository,
textStyleRepository,
paragraphStyleRepository,
variableRepository,
variableStructureRepository,
displayRuleRepository,
imageRepository,
fileRepository,
projectConfig,
ipsService,
)

InteractiveDeployClient(
documentObjectInternalRepository,
imageInternalRepository,
fileInternalRepository,
documentObjectRepository,
imageRepository,
fileRepository,
statusTrackingRepository,
textStyleInternalRepository,
paragraphStyleInternalRepository,
textStyleRepository,
paragraphStyleRepository,
inspireDocumentObjectBuilder,
ipsService,
storage,
projectConfig
)
} else {
inspireDocumentObjectBuilder = DesignerDocumentObjectBuilder(
documentObjectInternalRepository,
textStyleInternalRepository,
paragraphStyleInternalRepository,
variableInternalRepository,
variableStructureInternalRepository,
displayRuleInternalRepository,
imageInternalRepository,
fileInternalRepository,
documentObjectRepository,
textStyleRepository,
paragraphStyleRepository,
variableRepository,
variableStructureRepository,
displayRuleRepository,
imageRepository,
fileRepository,
projectConfig,
ipsService,
)

DesignerDeployClient(
documentObjectInternalRepository,
imageInternalRepository,
fileInternalRepository,
documentObjectRepository,
imageRepository,
fileRepository,
statusTrackingRepository,
textStyleInternalRepository,
paragraphStyleInternalRepository,
textStyleRepository,
paragraphStyleRepository,
inspireDocumentObjectBuilder,
ipsService,
storage,
)
}

this.stylesValidator = StylesValidator(
documentObjectInternalRepository,
textStyleInternalRepository,
paragraphStyleInternalRepository,
documentObjectRepository,
textStyleRepository,
paragraphStyleRepository,
inspireDocumentObjectBuilder,
deployClient,
ipsService
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package com.quadient.migration.api.dto.migrationmodel

import com.quadient.migration.shared.DisplayRuleDefinition
import kotlinx.datetime.Instant

data class DisplayRule(
data class DisplayRule @JvmOverloads constructor(
override val id: String,
override var name: String?,
override var originLocations: List<String> = emptyList(),
override var customFields: CustomFieldMap,
var definition: DisplayRuleDefinition?
) : MigrationObject
var definition: DisplayRuleDefinition?,
override var created: Instant? = null,
override var lastUpdated: Instant? = null,
) : MigrationObject, RefValidatable {
override fun collectRefs(): List<Ref> {
return definition?.collectRefs() ?: emptyList()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.quadient.migration.api.dto.migrationmodel

import com.quadient.migration.data.DocumentObjectModel
import com.quadient.migration.shared.DocumentObjectOptions
import com.quadient.migration.shared.DocumentObjectType
import com.quadient.migration.shared.MetadataPrimitive
Expand All @@ -20,33 +19,19 @@ data class DocumentObject(
var variableStructureRef: VariableStructureRef? = null,
var baseTemplate: String? = null,
var options: DocumentObjectOptions? = null,
var created: Instant? = null,
var lastUpdated: Instant? = null,
override var created: Instant? = null,
override var lastUpdated: Instant? = null,
val metadata: Map<String, List<MetadataPrimitive>>,
val skip: SkipOptions,
val subject: String?,
) : MigrationObject {
companion object {
fun fromModel(model: DocumentObjectModel): DocumentObject {
return DocumentObject(
id = model.id,
name = model.name,
originLocations = model.originLocations,
customFields = CustomFieldMap(model.customFields.toMutableMap()),
type = model.type,
content = model.content.map { DocumentContent.fromModelContent(it) },
internal = model.internal,
targetFolder = model.targetFolder?.toString(),
displayRuleRef = model.displayRuleRef?.let(DisplayRuleRef::fromModel),
variableStructureRef = model.variableStructureRef?.let(VariableStructureRef::fromModel),
baseTemplate = model.baseTemplate,
options = model.options,
created = model.created,
lastUpdated = model.lastUpdated,
metadata = model.metadata,
skip = model.skip,
subject = model.subject,
)
) : MigrationObject, RefValidatable {
override fun collectRefs(): List<Ref> {
val contentRefs = content.flatMap {
when (it) {
is RefValidatable -> it.collectRefs()
else -> emptyList()
}
}
return contentRefs + listOfNotNull(displayRuleRef, variableStructureRef)
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.quadient.migration.api.dto.migrationmodel

import com.quadient.migration.data.FileModel
import com.quadient.migration.shared.FileType
import com.quadient.migration.shared.SkipOptions
import kotlinx.datetime.Instant

data class File(
data class File @JvmOverloads constructor(
override val id: String,
override var name: String?,
override var originLocations: List<String>,
Expand All @@ -13,19 +13,10 @@ data class File(
var targetFolder: String?,
var fileType: FileType,
val skip: SkipOptions,
) : MigrationObject {
companion object {
fun fromModel(model: FileModel): File {
return File(
id = model.id,
name = model.name,
originLocations = model.originLocations,
customFields = CustomFieldMap(model.customFields.toMutableMap()),
sourcePath = model.sourcePath,
targetFolder = model.targetFolder?.toString(),
fileType = model.fileType,
skip = model.skip,
)
}
override var created: Instant? = null,
override var lastUpdated: Instant? = null,
) : MigrationObject, RefValidatable {
override fun collectRefs(): List<Ref> {
return emptyList()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.quadient.migration.api.dto.migrationmodel

import com.quadient.migration.data.HyperlinkModel
import com.quadient.migration.persistence.migrationmodel.HyperlinkEntity

data class Hyperlink(
Expand All @@ -9,19 +8,13 @@ data class Hyperlink(
val alternateText: String? = null
) : TextContent {
companion object {
fun fromModel(model: HyperlinkModel) = Hyperlink(
url = model.url,
displayText = model.displayText,
alternateText = model.alternateText
fun fromDb(entity: HyperlinkEntity) = Hyperlink(
url = entity.url,
displayText = entity.displayText,
alternateText = entity.alternateText
)
}

fun toModel() = HyperlinkModel(
url = url,
displayText = displayText,
alternateText = alternateText
)

fun toDb() = HyperlinkEntity(
url = url,
displayText = displayText,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.quadient.migration.api.dto.migrationmodel

import com.quadient.migration.data.ImageModel
import com.quadient.migration.shared.ImageOptions
import com.quadient.migration.shared.ImageType
import com.quadient.migration.shared.MetadataPrimitive
import com.quadient.migration.shared.SkipOptions
import kotlinx.datetime.Instant

data class Image(
data class Image @JvmOverloads constructor(
override val id: String,
override var name: String?,
override var originLocations: List<String>,
Expand All @@ -18,22 +18,10 @@ data class Image(
val metadata: Map<String, List<MetadataPrimitive>>,
val skip: SkipOptions,
var alternateText: String? = null,
) : MigrationObject {
companion object {
fun fromModel(model: ImageModel): Image {
return Image(
id = model.id,
name = model.name,
originLocations = model.originLocations,
customFields = CustomFieldMap(model.customFields.toMutableMap()),
sourcePath = model.sourcePath,
options = model.options,
imageType = model.imageType,
targetFolder = model.targetFolder?.toString(),
metadata = model.metadata,
skip = model.skip,
alternateText = model.alternateText,
)
}
override var created: Instant? = null,
override var lastUpdated: Instant? = null,
) : MigrationObject, RefValidatable {
override fun collectRefs(): List<Ref> {
return emptyList()
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.quadient.migration.api.dto.migrationmodel

import kotlinx.datetime.Instant

interface MigrationObject {
val id: String
var name: String?
var originLocations: List<String>
var customFields: CustomFieldMap
val created: Instant?
val lastUpdated: Instant?

fun nameOrId(): String {
val name = name
Expand Down
Loading