diff --git a/migration-examples/layout/index.html b/migration-examples/layout/index.html
index a7082ef6..31a3b21b 100644
--- a/migration-examples/layout/index.html
+++ b/migration-examples/layout/index.html
@@ -954,11 +954,11 @@
baseRows.push([
baseTemplateId, baseTemplateName, basePageId, basePageName,
- pageWidthMm, pageHeightMm,
- String(areaGroupIndex),
- flowName, String(flowToNextPage),
+ "Base", "",
+ flowName, String(flowToNextPage), String(areaGroupIndex),
`${draft.position.x}mm`, `${draft.position.y}mm`, `${draft.position.w}mm`, `${draft.position.h}mm`,
- "Base", "", "",
+ pageWidthMm, pageHeightMm,
+ "",
]);
});
@@ -997,7 +997,7 @@
const rows = currentCsvRows.map(row => [...row]);
const typeIdx = ensureCsvColumn(headers, rows, "type");
- const targetIdIdx = ensureCsvColumn(headers, rows, "targetId");
+ const targetIdIdx = ensureCsvColumn(headers, rows, "baseTemplateTargetId");
const flowNameIdx = ensureCsvColumn(headers, rows, "interactiveFlowName");
const { baseRows, overridesByPageIndex } = computeBaseTemplateData(currentData, currentViewModel, currentAnalysis);
@@ -1027,10 +1027,10 @@
baseRows.forEach(baseRow => {
const byLogicalName = {
templateId: baseRow[0], templateName: baseRow[1], pageId: baseRow[2], pageName: baseRow[3],
- pageWidth: baseRow[4], pageHeight: baseRow[5], areaIndex: baseRow[6],
- interactiveFlowName: baseRow[7], flowToNextPage: baseRow[8],
+ type: baseRow[4], baseTemplateTargetId: baseRow[5],
+ interactiveFlowName: baseRow[6], flowToNextPage: baseRow[7], areaIndex: baseRow[8],
x: baseRow[9], y: baseRow[10], width: baseRow[11], height: baseRow[12],
- type: baseRow[13], targetId: baseRow[14], contentPreview: baseRow[15],
+ pageWidth: baseRow[13], pageHeight: baseRow[14], contentPreview: baseRow[15],
};
const row = headers.map(h => byLogicalName[normalizeHeaderName(h)] ?? "");
rows.push(row);
diff --git a/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutExport.groovy b/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutExport.groovy
index 01d686a2..12289238 100644
--- a/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutExport.groovy
+++ b/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutExport.groovy
@@ -44,17 +44,17 @@ static void run(Migration migration, Path path) {
Mapping.displayHeader("templateName", true),
Mapping.displayHeader("pageId", false),
Mapping.displayHeader("pageName", true),
- Mapping.displayHeader("pageWidth", true),
- Mapping.displayHeader("pageHeight", true),
- Mapping.displayHeader("areaIndex", true),
+ Mapping.displayHeader("type", false),
+ Mapping.displayHeader("baseTemplateTargetId", false),
Mapping.displayHeader("interactiveFlowName", false),
Mapping.displayHeader("flowToNextPage", false),
+ Mapping.displayHeader("areaIndex", true),
Mapping.displayHeader("x", true),
Mapping.displayHeader("y", true),
Mapping.displayHeader("width", true),
Mapping.displayHeader("height", true),
- Mapping.displayHeader("type", false),
- Mapping.displayHeader("targetId", false),
+ Mapping.displayHeader("pageWidth", true),
+ Mapping.displayHeader("pageHeight", true),
Mapping.displayHeader("contentPreview", true),
]
writer.writeLine(headers.join(","))
@@ -107,19 +107,18 @@ static String buildArea(Migration migration, Number idx, Area area, DocumentObje
builder.append(Csv.serialize(template?.name) + ",")
builder.append(Csv.serialize(page?.id) + ",")
builder.append(Csv.serialize(page?.name) + ",")
- def pageOptions = page?.options instanceof PageOptions ? page.options as PageOptions : null
- builder.append(Csv.serialize(pageOptions?.width) + ",")
- builder.append(Csv.serialize(pageOptions?.height) + ",")
- builder.append(Csv.serialize(idx) + ",")
+ builder.append("Standard,")
+ builder.append(Csv.serialize(page?.baseTemplate ?: template?.baseTemplate) + ",")
builder.append(Csv.serialize(area.interactiveFlowName) + ",")
builder.append(Csv.serialize(area.flowToNextPage) + ",")
+ builder.append(Csv.serialize(idx) + ",")
builder.append(Csv.serialize(area.position.x) + ",")
builder.append(Csv.serialize(area.position.y) + ",")
builder.append(Csv.serialize(area.position.width) + ",")
builder.append(Csv.serialize(area.position.height) + ",")
-
- builder.append("Standard,")
- builder.append(Csv.serialize(page?.baseTemplate ?: template?.baseTemplate) + ",")
+ def pageOptions = page?.options instanceof PageOptions ? page.options as PageOptions : null
+ builder.append(Csv.serialize(pageOptions?.width) + ",")
+ builder.append(Csv.serialize(pageOptions?.height) + ",")
builder.append(Csv.serialize(migration.previewProvider.buildDocumentContentListPreview(area.content)))
@@ -132,18 +131,17 @@ static String buildBaseTemplateArea(BaseTemplate baseTemplate, String pageId, Ba
builder.append(Csv.serialize(baseTemplate.name) + ",")
builder.append(Csv.serialize(pageId) + ",")
builder.append(Csv.serialize(page.name) + ",")
- builder.append(Csv.serialize(page.pageWidth) + ",")
- builder.append(Csv.serialize(page.pageHeight) + ",")
- builder.append(Csv.serialize(idx) + ",")
+ builder.append("Base,")
+ builder.append(Csv.serialize(null) + ",")
builder.append(Csv.serialize(area.interactiveFlowName) + ",")
builder.append(Csv.serialize(area.flowToNextPage) + ",")
+ builder.append(Csv.serialize(idx) + ",")
builder.append(Csv.serialize(area.position?.x) + ",")
builder.append(Csv.serialize(area.position?.y) + ",")
builder.append(Csv.serialize(area.position?.width) + ",")
builder.append(Csv.serialize(area.position?.height) + ",")
-
- builder.append("Base,")
- builder.append(Csv.serialize(null) + ",")
+ builder.append(Csv.serialize(page.pageWidth) + ",")
+ builder.append(Csv.serialize(page.pageHeight) + ",")
builder.append(Csv.serialize(null))
diff --git a/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutImport.groovy b/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutImport.groovy
index d6b0352f..4cc4568e 100644
--- a/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutImport.groovy
+++ b/migration-examples/src/main/groovy/com/quadient/migration/example/common/mapping/LayoutImport.groovy
@@ -70,13 +70,13 @@ static void run(Migration migration, Path path) {
def flowToNextPage = Csv.deserialize(values.get("flowToNextPage"), Boolean.class)
areaMapping.flowToNextPage[areaIndex] = flowToNextPage ?: false
- def targetId = Csv.deserialize(values.get("targetId"), String.class)
- if (targetId) {
+ def baseTemplateTargetId = Csv.deserialize(values.get("baseTemplateTargetId"), String.class)
+ if (baseTemplateTargetId) {
if (pageId && !docObjectsToTargetIds.containsKey(pageId)) {
- docObjectsToTargetIds[pageId] = targetId
+ docObjectsToTargetIds[pageId] = baseTemplateTargetId
}
if (templateId && !docObjectsToTargetIds.containsKey(templateId)) {
- docObjectsToTargetIds[templateId] = targetId
+ docObjectsToTargetIds[templateId] = baseTemplateTargetId
}
}
}
diff --git a/migration-examples/src/test/groovy/LayoutExportTest.groovy b/migration-examples/src/test/groovy/LayoutExportTest.groovy
index b0156e8c..04a86599 100644
--- a/migration-examples/src/test/groovy/LayoutExportTest.groovy
+++ b/migration-examples/src/test/groovy/LayoutExportTest.groovy
@@ -48,12 +48,12 @@ class LayoutExportTest {
LayoutExport.run(migration, mappingFile)
def expected = """\
- templateId,templateName (read-only),pageId,pageName (read-only),pageWidth (read-only),pageHeight (read-only),areaIndex (read-only),interactiveFlowName,flowToNextPage,x (read-only),y (read-only),width (read-only),height (read-only),type,targetId,contentPreview (read-only)
- full tmpl,,full page,,,,0,test flow2,false,0mm,0mm,0mm,0mm,Standard,,
- full tmpl,,full page,,,,1,test flow3,true,0mm,0mm,0mm,0mm,Standard,,
- full tmpl,,full page,,,,2,,false,0mm,0mm,0mm,0mm,Standard,,
- full tmpl,,full page,,,,3,test flow5,false,0mm,0mm,0mm,0mm,Standard,,
- ,,unreferenced page,,,,0,test flow,true,0mm,0mm,0mm,0mm,Standard,,
+ templateId,templateName (read-only),pageId,pageName (read-only),type,baseTemplateTargetId,interactiveFlowName,flowToNextPage,areaIndex (read-only),x (read-only),y (read-only),width (read-only),height (read-only),pageWidth (read-only),pageHeight (read-only),contentPreview (read-only)
+ full tmpl,,full page,,Standard,,test flow2,false,0,0mm,0mm,0mm,0mm,,,
+ full tmpl,,full page,,Standard,,test flow3,true,1,0mm,0mm,0mm,0mm,,,
+ full tmpl,,full page,,Standard,,,false,2,0mm,0mm,0mm,0mm,,,
+ full tmpl,,full page,,Standard,,test flow5,false,3,0mm,0mm,0mm,0mm,,,
+ ,,unreferenced page,,Standard,,test flow,true,0,0mm,0mm,0mm,0mm,,,
""".stripIndent()
Assertions.assertEquals(expected, mappingFile.toFile().text.replaceAll("\\r\\n|\\r", "\n"))
}
@@ -71,10 +71,10 @@ class LayoutExportTest {
LayoutExport.run(migration, mappingFile)
def expected = """\
- templateId,templateName (read-only),pageId,pageName (read-only),pageWidth (read-only),pageHeight (read-only),areaIndex (read-only),interactiveFlowName,flowToNextPage,x (read-only),y (read-only),width (read-only),height (read-only),type,targetId,contentPreview (read-only)
- tmpl with areas,,,,,,0,Address Content,false,0mm,0mm,0mm,0mm,Standard,,
- tmpl with areas,,,,,,1,,true,0mm,0mm,0mm,0mm,Standard,,
- tmpl with areas,,,,,,2,Footer,false,0mm,0mm,0mm,0mm,Standard,,
+ templateId,templateName (read-only),pageId,pageName (read-only),type,baseTemplateTargetId,interactiveFlowName,flowToNextPage,areaIndex (read-only),x (read-only),y (read-only),width (read-only),height (read-only),pageWidth (read-only),pageHeight (read-only),contentPreview (read-only)
+ tmpl with areas,,,,Standard,,Address Content,false,0,0mm,0mm,0mm,0mm,,,
+ tmpl with areas,,,,Standard,,,true,1,0mm,0mm,0mm,0mm,,,
+ tmpl with areas,,,,Standard,,Footer,false,2,0mm,0mm,0mm,0mm,,,
""".stripIndent()
Assertions.assertEquals(expected, mappingFile.toFile().text.replaceAll("\\r\\n|\\r", "\n"))
}
@@ -97,8 +97,8 @@ class LayoutExportTest {
LayoutExport.run(migration, mappingFile)
def expected = """\
- templateId,templateName (read-only),pageId,pageName (read-only),pageWidth (read-only),pageHeight (read-only),areaIndex (read-only),interactiveFlowName,flowToNextPage,x (read-only),y (read-only),width (read-only),height (read-only),type,targetId,contentPreview (read-only)
- tmpl with base,,page with own base,,,,0,test flow,false,0mm,0mm,0mm,0mm,Standard,\$G1,
+ templateId,templateName (read-only),pageId,pageName (read-only),type,baseTemplateTargetId,interactiveFlowName,flowToNextPage,areaIndex (read-only),x (read-only),y (read-only),width (read-only),height (read-only),pageWidth (read-only),pageHeight (read-only),contentPreview (read-only)
+ tmpl with base,,page with own base,,Standard,\$G1,test flow,false,0,0mm,0mm,0mm,0mm,,,
""".stripIndent()
Assertions.assertEquals(expected, mappingFile.toFile().text.replaceAll("\\r\\n|\\r", "\n"))
}
@@ -123,10 +123,10 @@ class LayoutExportTest {
LayoutExport.run(migration, mappingFile)
def expected = """\
- templateId,templateName (read-only),pageId,pageName (read-only),pageWidth (read-only),pageHeight (read-only),areaIndex (read-only),interactiveFlowName,flowToNextPage,x (read-only),y (read-only),width (read-only),height (read-only),type,targetId,contentPreview (read-only)
- bt-1,Base template 1,page-1,Page 1,210mm,297mm,0,address,false,1cm,1cm,190mm,20mm,Base,,
- bt-1,Base template 1,page-1,Page 1,210mm,297mm,1,Area 2,true,1cm,30mm,190mm,50mm,Base,,
- bt-1,Base template 1,page-2,Page 2,210mm,99mm,0,Area 1,false,0mm,0mm,210mm,99mm,Base,,
+ templateId,templateName (read-only),pageId,pageName (read-only),type,baseTemplateTargetId,interactiveFlowName,flowToNextPage,areaIndex (read-only),x (read-only),y (read-only),width (read-only),height (read-only),pageWidth (read-only),pageHeight (read-only),contentPreview (read-only)
+ bt-1,Base template 1,page-1,Page 1,Base,,address,false,0,1cm,1cm,190mm,20mm,210mm,297mm,
+ bt-1,Base template 1,page-1,Page 1,Base,,Area 2,true,1,1cm,30mm,190mm,50mm,210mm,297mm,
+ bt-1,Base template 1,page-2,Page 2,Base,,Area 1,false,0,0mm,0mm,210mm,99mm,210mm,99mm,
""".stripIndent()
Assertions.assertEquals(expected, mappingFile.toFile().text.replaceAll("\\r\\n|\\r", "\n"))
}
@@ -154,8 +154,8 @@ class LayoutExportTest {
LayoutExport.run(migration, mappingFile)
def expected = """\
- templateId,templateName (read-only),pageId,pageName (read-only),pageWidth (read-only),pageHeight (read-only),areaIndex (read-only),interactiveFlowName,flowToNextPage,x (read-only),y (read-only),width (read-only),height (read-only),type,targetId,contentPreview (read-only)
- ,,page with preview,,,,0,test flow,false,0mm,0mm,0mm,0mm,Standard,,docRef: Block One;imageRef: Image One;docRef: Block Two;(+2 more)
+ templateId,templateName (read-only),pageId,pageName (read-only),type,baseTemplateTargetId,interactiveFlowName,flowToNextPage,areaIndex (read-only),x (read-only),y (read-only),width (read-only),height (read-only),pageWidth (read-only),pageHeight (read-only),contentPreview (read-only)
+ ,,page with preview,,Standard,,test flow,false,0,0mm,0mm,0mm,0mm,,,docRef: Block One;imageRef: Image One;docRef: Block Two;(+2 more)
""".stripIndent()
Assertions.assertEquals(expected, mappingFile.toFile().text.replaceAll("\\r\\n|\\r", "\n"))
}
diff --git a/migration-examples/src/test/groovy/LayoutImportTest.groovy b/migration-examples/src/test/groovy/LayoutImportTest.groovy
index 837bb358..66abc78f 100644
--- a/migration-examples/src/test/groovy/LayoutImportTest.groovy
+++ b/migration-examples/src/test/groovy/LayoutImportTest.groovy
@@ -142,7 +142,7 @@ class LayoutImportTest {
givenPageExists("page1", ["flow1", "flow2"], [false, false])
def input = """\
- templateId,templateName,pageId,pageName,areaIndex,interactiveFlowName,flowToNextPage,x,y,width,height,type,targetId,contentPreview
+ templateId,templateName,pageId,pageName,areaIndex,interactiveFlowName,flowToNextPage,x,y,width,height,type,baseTemplateTargetId,contentPreview
tmpl1,,page1,,0,flow1,false,0.0mm,0.0mm,0.0mm,0.0mm,Standard,\$G1,
tmpl1,,page1,,1,flow2,false,0.0mm,0.0mm,0.0mm,0.0mm,Standard,\$G1,
""".stripIndent()
@@ -173,7 +173,7 @@ class LayoutImportTest {
when(migration.mappingRepository.getBaseTemplateMapping("G1")).thenReturn(new MappingItem.BaseTemplate(null, null, []))
def input = """\
- templateId,templateName,pageId,pageName,pageWidth,pageHeight,areaIndex,interactiveFlowName,flowToNextPage,x,y,width,height,type,targetId,contentPreview
+ templateId,templateName,pageId,pageName,pageWidth,pageHeight,areaIndex,interactiveFlowName,flowToNextPage,x,y,width,height,type,baseTemplateTargetId,contentPreview
tmpl1,,page1,,,,0,flow1,false,0.0mm,0.0mm,0.0mm,0.0mm,Standard,\$G1,
G1,Base template 1,G1-P1,Page group 1,210mm,297mm,1,G1-P1.Area2,true,1cm,30mm,190mm,50mm,Base,,
G1,Base template 1,G1-P1,Page group 1,210mm,297mm,0,G1-P1.Area1,false,1cm,1cm,190mm,20mm,Base,,
@@ -205,7 +205,7 @@ class LayoutImportTest {
when(migration.mappingRepository.getBaseTemplateMapping("G1")).thenReturn(new MappingItem.BaseTemplate(null, null, []))
def input = """\
- templateId,templateName,pageId,pageName,pageWidth,pageHeight,areaIndex,interactiveFlowName,flowToNextPage,x,y,width,height,type,targetId,contentPreview
+ templateId,templateName,pageId,pageName,pageWidth,pageHeight,areaIndex,interactiveFlowName,flowToNextPage,x,y,width,height,type,baseTemplateTargetId,contentPreview
G1,,G1-P1,Page group 1,210mm,297mm,0,G1-P1.Area1,false,1cm,1cm,190mm,20mm,Base,,
""".stripIndent()
mappingFile.toFile().write(input)
diff --git a/migration-library/src/main/kotlin/com/quadient/migration/service/DeployPhaseUtils.kt b/migration-library/src/main/kotlin/com/quadient/migration/service/DeployPhaseUtils.kt
index 84f17300..97f721fb 100644
--- a/migration-library/src/main/kotlin/com/quadient/migration/service/DeployPhaseUtils.kt
+++ b/migration-library/src/main/kotlin/com/quadient/migration/service/DeployPhaseUtils.kt
@@ -1,22 +1,16 @@
package com.quadient.migration.service
-import com.quadient.migration.api.ProjectConfig
import com.quadient.migration.api.dto.migrationmodel.Attachment
import com.quadient.migration.api.dto.migrationmodel.AttachmentRef
-import com.quadient.migration.api.dto.migrationmodel.BaseTemplate
-import com.quadient.migration.api.dto.migrationmodel.BaseTemplateRef
-import com.quadient.migration.api.dto.migrationmodel.BaseTemplateLocation
import com.quadient.migration.api.dto.migrationmodel.DisplayRule
import com.quadient.migration.api.dto.migrationmodel.DocumentContent
import com.quadient.migration.api.dto.migrationmodel.Image
import com.quadient.migration.api.dto.migrationmodel.ImageRef
-import com.quadient.migration.api.dto.migrationmodel.LiteralBaseTemplatePath
import com.quadient.migration.api.dto.migrationmodel.ResourceRef
import com.quadient.migration.api.repository.Repository
import com.quadient.migration.shared.IcmPath
import com.quadient.migration.shared.ImageType
import com.quadient.migration.shared.isNullOrBlank
-import com.quadient.migration.shared.toIcmPath
import org.slf4j.LoggerFactory
import java.lang.invoke.MethodHandles
@@ -63,33 +57,6 @@ fun resolveTargetDir(defaultTargetFolder: IcmPath? = null, specificTargetFolder:
}
}
-fun getBaseTemplateFullPath(
- config: ProjectConfig,
- documentObjectBaseTemplate: BaseTemplateLocation?,
- resourcePathProvider: ResourcePathProvider,
- findBaseTemplate: (String) -> BaseTemplate,
-): IcmPath {
- val literalPath = when (documentObjectBaseTemplate) {
- is LiteralBaseTemplatePath -> documentObjectBaseTemplate.path
-
- is BaseTemplateRef -> {
- val baseTemplate = findBaseTemplate(documentObjectBaseTemplate.id)
- val baseTemplatePath = resourcePathProvider.getBaseTemplatePath(baseTemplate)
- logger.info(
- "Base template '$baseTemplatePath' will not be used because referencing base templates by id is not yet supported during deployment. The project config default base template will be used instead."
- )
- config.baseTemplatePath
- }
-
- null -> config.baseTemplatePath
- }
-
- val path = literalPath.toIcmPath()
- if (path.isAbsolute()) return path
-
- return resourcePathProvider.getBaseTemplatePath(literalPath)
-}
-
fun DisplayRule.resolveTarget(findRule: (String) -> DisplayRule): DisplayRule {
val targetId = this.targetId ?: return this
diff --git a/migration-library/src/main/kotlin/com/quadient/migration/service/ResourcePathProvider.kt b/migration-library/src/main/kotlin/com/quadient/migration/service/ResourcePathProvider.kt
index 32346f26..a3c8cbdd 100644
--- a/migration-library/src/main/kotlin/com/quadient/migration/service/ResourcePathProvider.kt
+++ b/migration-library/src/main/kotlin/com/quadient/migration/service/ResourcePathProvider.kt
@@ -3,15 +3,23 @@ package com.quadient.migration.service
import com.quadient.migration.api.ProjectConfig
import com.quadient.migration.api.dto.migrationmodel.Attachment
import com.quadient.migration.api.dto.migrationmodel.BaseTemplate
+import com.quadient.migration.api.dto.migrationmodel.BaseTemplateLocation
+import com.quadient.migration.api.dto.migrationmodel.BaseTemplateRef
import com.quadient.migration.api.dto.migrationmodel.DisplayRule
import com.quadient.migration.api.dto.migrationmodel.DocumentObject
import com.quadient.migration.api.dto.migrationmodel.Image
+import com.quadient.migration.api.dto.migrationmodel.LiteralBaseTemplatePath
import com.quadient.migration.service.inspirebuilder.appendExtensionIfMissing
import com.quadient.migration.shared.AttachmentType
import com.quadient.migration.shared.DocumentObjectType
import com.quadient.migration.shared.IcmPath
import com.quadient.migration.shared.ImageType
import com.quadient.migration.shared.orDefault
+import com.quadient.migration.shared.toIcmPath
+import org.slf4j.LoggerFactory
+import java.lang.invoke.MethodHandles
+
+private val logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass())
interface ResourcePathProvider {
fun getDocumentObjectPath(nameOrId: String, type: DocumentObjectType, targetFolder: IcmPath?): IcmPath
@@ -54,6 +62,32 @@ interface ResourcePathProvider {
fun getFontRootFolder(): IcmPath
}
+fun ResourcePathProvider.getBaseTemplateFullPath(
+ config: ProjectConfig,
+ documentObjectBaseTemplate: BaseTemplateLocation?,
+ findBaseTemplate: (String) -> BaseTemplate,
+): IcmPath {
+ val literalPath = when (documentObjectBaseTemplate) {
+ is LiteralBaseTemplatePath -> documentObjectBaseTemplate.path
+
+ is BaseTemplateRef -> {
+ val baseTemplate = findBaseTemplate(documentObjectBaseTemplate.id)
+ val baseTemplatePath = getBaseTemplatePath(baseTemplate)
+ val message =
+ "Base template '$baseTemplatePath' cannot be used because referencing base templates by id is not yet supported during deployment."
+ logger.error(message)
+ error(message)
+ }
+
+ null -> config.baseTemplatePath
+ }
+
+ val path = literalPath.toIcmPath()
+ if (path.isAbsolute()) return path
+
+ return getBaseTemplatePath(literalPath)
+}
+
class DesignerResourcePathProvider(private val projectConfig: ProjectConfig) : ResourcePathProvider {
override fun getDocumentObjectPath(nameOrId: String, type: DocumentObjectType, targetFolder: IcmPath?): IcmPath {
val fileName = "$nameOrId.wfd"
diff --git a/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/EvolveDeployClient.kt b/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/EvolveDeployClient.kt
index 85025091..e0146880 100644
--- a/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/EvolveDeployClient.kt
+++ b/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/EvolveDeployClient.kt
@@ -19,8 +19,8 @@ import com.quadient.migration.api.repository.VariableStructureRepository
import com.quadient.migration.service.Storage
import com.quadient.migration.service.deploy.utility.MetadataValidatorImpl
import com.quadient.migration.service.deploy.utility.PostProcessImpl
-import com.quadient.migration.service.getBaseTemplateFullPath
import com.quadient.migration.service.ResourcePathProvider
+import com.quadient.migration.service.getBaseTemplateFullPath
import com.quadient.migration.service.deploy.utility.ConflictDetectorImpl
import com.quadient.migration.service.deploy.utility.DeployOrderImpl
import com.quadient.migration.service.deploy.utility.ProgressReporterImpl
@@ -98,8 +98,8 @@ class EvolveDeployClient(
val ipsMemLocation = "memory://${UUID.randomUUID()}"
try {
val runCommandType = obj.type.toRunCommandType()
- val baseTemplatePath = getBaseTemplateFullPath(
- projectConfig, obj.baseTemplate, resourcePathProvider
+ val baseTemplatePath = resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, obj.baseTemplate
) { baseTemplateRepository.findOrFail(it) }
val deployResult = ipsService.deployJld(
baseTemplate = baseTemplatePath,
@@ -220,8 +220,8 @@ class EvolveDeployClient(
}
val resolvedFolder = resolveTargetDir(projectConfig.defaultTargetFolder, rule.targetFolder?.toIcmPath())
- val baseTemplatePath = getBaseTemplateFullPath(
- projectConfig, rule.baseTemplate, resourcePathProvider
+ val baseTemplatePath = resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, rule.baseTemplate
) { baseTemplateRepository.findOrFail(it) }
val result = caClient.createRuleDraft(rule.nameOrId(), resolvedFolder, baseTemplatePath, data)
if (result !is HttpResult.Success) return result.toOperationResult()
diff --git a/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/InteractiveDeployClient.kt b/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/InteractiveDeployClient.kt
index 28f4805a..b52330b2 100644
--- a/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/InteractiveDeployClient.kt
+++ b/migration-library/src/main/kotlin/com/quadient/migration/service/deploy/InteractiveDeployClient.kt
@@ -34,8 +34,8 @@ import com.quadient.migration.service.deploy.utility.MetadataValidatorImpl
import com.quadient.migration.service.deploy.utility.PostProcessImpl
import com.quadient.migration.service.deploy.utility.ResourceType
import com.quadient.migration.service.deploy.utility.ResultTracker
-import com.quadient.migration.service.getBaseTemplateFullPath
import com.quadient.migration.service.ResourcePathProvider
+import com.quadient.migration.service.getBaseTemplateFullPath
import com.quadient.migration.service.deploy.utility.ConflictDetectorImpl
import com.quadient.migration.service.deploy.utility.DeployOrderImpl
import com.quadient.migration.service.deploy.utility.ProgressReporterImpl
@@ -159,8 +159,8 @@ open class InteractiveDeployClient(
override fun uploadDocumentObject(obj: DocumentObject, targetPath: IcmPath, wfdXml: String): OperationResult {
val runCommandType = obj.type.toRunCommandType()
return ipsService.deployJld(
- baseTemplate = getBaseTemplateFullPath(
- projectConfig, obj.baseTemplate, resourcePathProvider
+ baseTemplate = resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, obj.baseTemplate
) { baseTemplateRepository.findOrFail(it) },
type = runCommandType,
moduleName = "DocumentLayout",
@@ -285,8 +285,8 @@ open class InteractiveDeployClient(
continue
}
- val baseTemplatePath = getBaseTemplateFullPath(
- projectConfig, rule.baseTemplate, resourcePathProvider
+ val baseTemplatePath = resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, rule.baseTemplate
) { baseTemplateRepository.findOrFail(it) }.toMapInteractive(projectConfig.interactiveTenant)
val jrd = Jrd.fromDisplayRule(rule, baseTemplatePath, variableStructure, findVar)
diff --git a/migration-library/src/main/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilder.kt b/migration-library/src/main/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilder.kt
index 8ba119c4..01da4100 100644
--- a/migration-library/src/main/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilder.kt
+++ b/migration-library/src/main/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilder.kt
@@ -96,8 +96,8 @@ class InteractiveDocumentObjectBuilder(
}
- val baseTemplatePath = getBaseTemplateFullPath(
- projectConfig, documentObject.baseTemplate, resourcePathProvider
+ val baseTemplatePath = resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, documentObject.baseTemplate
) { baseTemplateRepository.findOrFail(it) }
val currentBaseTemplateData = icmDataCache.getOrLoadBaseTemplateData(baseTemplatePath)
?: error("Unable to deploy document object ${documentObject.id}. Base template '$baseTemplatePath' does not exist.")
diff --git a/migration-library/src/test/kotlin/com/quadient/migration/service/DeployPhaseUtilsTest.kt b/migration-library/src/test/kotlin/com/quadient/migration/service/DeployPhaseUtilsTest.kt
index e30d2458..3ddd9f52 100644
--- a/migration-library/src/test/kotlin/com/quadient/migration/service/DeployPhaseUtilsTest.kt
+++ b/migration-library/src/test/kotlin/com/quadient/migration/service/DeployPhaseUtilsTest.kt
@@ -19,7 +19,7 @@ class DeployPhaseUtilsTest {
@Test
fun `project config base template is used and normalized`() {
- val result = getBaseTemplateFullPath(projectConfig, null, resourcePathProvider, findBaseTemplate).toString()
+ val result = resourcePathProvider.getBaseTemplateFullPath(projectConfig, null, findBaseTemplate).toString()
result.shouldBeEqualTo("icm://Interactive/StandardPackage/BaseTemplates/BaseTemplate.wfd")
}
@@ -27,8 +27,8 @@ class DeployPhaseUtilsTest {
@Test
fun `specific base template path is preferred over the project config one`() {
val baseTemplatePath = "icm://Interactive/Vital/BaseTemplates/MyBaseTemplate.wfd"
- val result = getBaseTemplateFullPath(
- projectConfig, LiteralBaseTemplatePath(baseTemplatePath), resourcePathProvider, findBaseTemplate
+ val result = resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, LiteralBaseTemplatePath(baseTemplatePath), findBaseTemplate
).toString()
result.shouldBeEqualTo(baseTemplatePath)
@@ -36,8 +36,8 @@ class DeployPhaseUtilsTest {
@Test
fun `path not starting with icm is handled as relative`() {
- val result = getBaseTemplateFullPath(
- projectConfig, LiteralBaseTemplatePath("/projectA/AddressBT.wfd"), resourcePathProvider, findBaseTemplate
+ val result = resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, LiteralBaseTemplatePath("/projectA/AddressBT.wfd"), findBaseTemplate
).toString()
result.shouldBeEqualTo("icm://Interactive/${projectConfig.interactiveTenant}/BaseTemplates/projectA/AddressBT.wfd")
@@ -46,33 +46,38 @@ class DeployPhaseUtilsTest {
@Test
fun `only base template name in project config is correctly translated to full path`() {
val config = aProjectConfig("myBT.wfd", interactiveTenant = "StandardPackage")
- val result = getBaseTemplateFullPath(
- config, null, InteractiveResourcePathProvider(config), findBaseTemplate
+ val result = InteractiveResourcePathProvider(config).getBaseTemplateFullPath(
+ config, null, findBaseTemplate
).toString()
result.shouldBeEqualTo("icm://Interactive/StandardPackage/BaseTemplates/myBT.wfd")
}
@Test
- fun `base template referenced by id is looked up and resolved via resource path provider, but project config default is used instead`() {
+ fun `base template referenced by id fails because it is not yet supported`() {
val baseTemplate = BaseTemplate(
id = "bt-1",
name = "AddressBaseTemplate",
customFields = CustomFieldMap(),
)
- val result = getBaseTemplateFullPath(
- projectConfig, BaseTemplateRef(baseTemplate.id), resourcePathProvider
- ) { id -> if (id == baseTemplate.id) baseTemplate else error("Unexpected id '$id'") }.toString()
-
- result.shouldBeEqualTo("icm://Interactive/StandardPackage/BaseTemplates/BaseTemplate.wfd")
+ try {
+ resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, BaseTemplateRef(baseTemplate.id)
+ ) { id -> if (id == baseTemplate.id) baseTemplate else error("Unexpected id '$id'") }
+ error("Expected an exception to be thrown")
+ } catch (e: IllegalStateException) {
+ e.message.shouldBeEqualTo(
+ "Base template 'icm://Interactive/StandardPackage/BaseTemplates/AddressBaseTemplate.wfd' cannot be used because referencing base templates by id is not yet supported during deployment."
+ )
+ }
}
@Test
fun `base template referenced by id fails if it cannot be found`() {
try {
- getBaseTemplateFullPath(
- projectConfig, BaseTemplateRef("missing"), resourcePathProvider
+ resourcePathProvider.getBaseTemplateFullPath(
+ projectConfig, BaseTemplateRef("missing")
) { error("Record 'missing' not found") }
error("Expected an exception to be thrown")
} catch (e: IllegalStateException) {
diff --git a/migration-library/src/test/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilderTest.kt b/migration-library/src/test/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilderTest.kt
index b98ae8f1..aed6c918 100644
--- a/migration-library/src/test/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilderTest.kt
+++ b/migration-library/src/test/kotlin/com/quadient/migration/service/inspirebuilder/InteractiveDocumentObjectBuilderTest.kt
@@ -937,7 +937,7 @@ class InteractiveDocumentObjectBuilderTest {
}
every {
- ipsService.wfd2xml(getBaseTemplateFullPath(config, null, resourcePathProvider) { baseTemplateRepository.findOrFail(it) })
+ ipsService.wfd2xml(resourcePathProvider.getBaseTemplateFullPath(config, null) { baseTemplateRepository.findOrFail(it) })
} returns """
@@ -1659,7 +1659,7 @@ class InteractiveDocumentObjectBuilderTest {
val emailDoc = EmailObjectBuilder("E_1").string("Email content").build().mock()
val template = DocumentObjectBuilder("T_1", Template).documentObjectRef(emailDoc).build()
- every { ipsService.wfd2xml(getBaseTemplateFullPath(config, null, resourcePathProvider) { baseTemplateRepository.findOrFail(it) }) } returns """
+ every { ipsService.wfd2xml(resourcePathProvider.getBaseTemplateFullPath(config, null) { baseTemplateRepository.findOrFail(it) }) } returns """
@@ -1718,7 +1718,7 @@ class InteractiveDocumentObjectBuilderTest {
val smsDoc = SmsObjectBuilder("S_1").string("SMS content").build().mock()
val template = DocumentObjectBuilder("T_1", Template).documentObjectRef(smsDoc).build()
- every { ipsService.wfd2xml(getBaseTemplateFullPath(config, null, resourcePathProvider) { baseTemplateRepository.findOrFail(it) }) } returns """
+ every { ipsService.wfd2xml(resourcePathProvider.getBaseTemplateFullPath(config, null) { baseTemplateRepository.findOrFail(it) }) } returns """
@@ -1774,7 +1774,7 @@ class InteractiveDocumentObjectBuilderTest {
.build().mock()
val template = DocumentObjectBuilder("T_1", Template).documentObjectRef(emailDoc).build()
- every { ipsService.wfd2xml(getBaseTemplateFullPath(config, null, resourcePathProvider) { baseTemplateRepository.findOrFail(it) }) } returns """
+ every { ipsService.wfd2xml(resourcePathProvider.getBaseTemplateFullPath(config, null) { baseTemplateRepository.findOrFail(it) }) } returns """
@@ -1850,7 +1850,7 @@ class InteractiveDocumentObjectBuilderTest {
.build().mock()
val template = DocumentObjectBuilder("T_1", Template).documentObjectRef(smsDoc).build()
- every { ipsService.wfd2xml(getBaseTemplateFullPath(config, null, resourcePathProvider) { baseTemplateRepository.findOrFail(it) }) } returns """
+ every { ipsService.wfd2xml(resourcePathProvider.getBaseTemplateFullPath(config, null) { baseTemplateRepository.findOrFail(it) }) } returns """