Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package com.quadient.migration.example.common.mapping

import com.quadient.migration.api.Migration
import com.quadient.migration.api.dto.migrationmodel.ParagraphStyleDefinition
import com.quadient.migration.api.dto.migrationmodel.ParagraphStyleRef
import com.quadient.migration.example.common.util.Csv
import com.quadient.migration.example.common.util.Mapping

Expand Down Expand Up @@ -36,16 +35,9 @@ static void run(Migration migration, Path exportFilePath) {
def builder = new StringBuilder()
builder << "${Csv.serialize(style.id)},"
builder << "${Csv.serialize(style.name)},"

if (definition instanceof ParagraphStyleDefinition) {
builder << "," // targetId (empty)
builder << serializeDefinition(definition)
builder << ",${Csv.serialize(style.originLocations)}"
} else if (definition instanceof ParagraphStyleRef){
builder << "${Csv.serialize(definition.id)}," // targetId
builder << serializeDefinition(null)
builder << ",${Csv.serialize(style.originLocations)}"
}
builder << "${Csv.serialize(style.targetId?.id)},"
builder << serializeDefinition(definition)
builder << ",${Csv.serialize(style.originLocations)}"

writer.writeLine(builder.toString())
}
Expand All @@ -68,4 +60,4 @@ static StringBuilder serializeDefinition(ParagraphStyleDefinition definition) {
builder << "${Csv.serialize(definition?.pdfTaggingRule)}"

return builder
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,15 @@ package com.quadient.migration.example.common.mapping

import com.quadient.migration.api.Migration
import com.quadient.migration.api.dto.migrationmodel.MappingItem
import com.quadient.migration.api.dto.migrationmodel.ParagraphStyle
import com.quadient.migration.api.dto.migrationmodel.ParagraphStyleDefinition
import com.quadient.migration.api.dto.migrationmodel.ParagraphStyleRef
import com.quadient.migration.api.dto.migrationmodel.builder.ParagraphStyleBuilder
import com.quadient.migration.api.dto.migrationmodel.builder.ParagraphStyleDefinitionBuilder
import com.quadient.migration.example.common.util.Csv
import com.quadient.migration.example.common.util.Mapping
import com.quadient.migration.shared.Alignment
import com.quadient.migration.shared.LineSpacing
import com.quadient.migration.shared.ParagraphPdfTaggingRule
import com.quadient.migration.shared.Size

import java.lang.reflect.Field
import java.lang.reflect.Modifier
import java.nio.file.Path

import static com.quadient.migration.example.common.util.InitMigration.initMigration
Expand All @@ -34,100 +31,42 @@ static void run(Migration migration, Path path) {
def file = path.toFile().readLines()
def columnNames = Csv.parseColumnNames(file.removeFirst()).collect { Mapping.normalizeHeader(it) }

def definitionFields = ParagraphStyleDefinition.declaredFields.findAll { !it.synthetic && !Modifier.isStatic(it.getModifiers()) }
for (line in file) {
def values = Csv.getCells(line, columnNames)
def id = values.get("id")

def existingStyle = migration.paragraphStyleRepository.find(values.get("id"))
def styleRefId = values.get("targetId")

def existingStyle = migration.paragraphStyleRepository.find(id)
if (existingStyle == null) {
createNewStyle(migration, styleRefId, values, definitionFields)
} else {
mapStyle(migration, existingStyle, styleRefId, values, definitionFields)
}
}
}

static void mapStyle(Migration migration, ParagraphStyle existingStyle, String styleRefId, Map<String, String> values, List<Field> definitionFields) {
def mapping = migration.mappingRepository.getParagraphStyleMapping(existingStyle.id)
def name = Csv.deserialize(values.get("name"), String.class)
Mapping.mapProp(mapping, existingStyle, "name", name)
def existingDefinition = existingStyle.definition

if (styleRefId.empty) {
MappingItem.ParagraphStyle.Def mappingDefinition
if (!(mapping.definition instanceof MappingItem.ParagraphStyle.Def)) {
mappingDefinition = new MappingItem.ParagraphStyle.Def(null, null, null, null, null, null, null, null, null, null, null)
} else {
mappingDefinition = mapping.definition as MappingItem.ParagraphStyle.Def
migration.paragraphStyleRepository.upsert(
new ParagraphStyleBuilder(id)
.definition(new ParagraphStyleDefinitionBuilder().build())
.build()
)
}

if (existingDefinition instanceof ParagraphStyleDefinition) {
for (field in definitionFields) {
mapDefinitionField(existingDefinition, mappingDefinition, field, values)
}
} else {
for (field in definitionFields) {
updateDefinitionField(mappingDefinition, field, values)
}
}

if (mappingDefinition != mapping.definition) {
mapping.definition = mappingDefinition
}
} else {
if (existingDefinition instanceof ParagraphStyleDefinition || (existingDefinition instanceof ParagraphStyleRef && existingDefinition.id != styleRefId)) {
mapping.definition = new MappingItem.ParagraphStyle.Ref(styleRefId)
}
def mapping = toMapping(values)
migration.mappingRepository.upsert(id, mapping)
migration.mappingRepository.applyParagraphStyleMapping(id)
}

migration.mappingRepository.upsert(existingStyle.id, mapping)
migration.mappingRepository.applyParagraphStyleMapping(existingStyle.id)
}

static void createNewStyle(Migration migration, String styleRefId, Map<String, String> values, List<Field> definitionFields) {
def style
if (styleRefId.empty) {
def definition = new ParagraphStyleDefinitionBuilder().build()
for (field in definitionFields) {
updateDefinitionField(definition, field, values)
}
style = new ParagraphStyleBuilder(Csv.deserialize(values.get("id"), String.class))
.name(Csv.deserialize(values.get("name"), String.class))
.definition(definition)
.build()
} else {
style = new ParagraphStyleBuilder(Csv.deserialize(values.get("id"), String.class))
.name(Csv.deserialize(values.get("name"), String.class))
.styleRef(styleRefId)
.build()
}
migration.paragraphStyleRepository.upsert(style)
}

private static void updateDefinitionField(Object paraStyleDefinition, Field definitionField, Map<String, String> values) {
if (definitionField.name == "lineSpacing") {
def lineSpacingType = values.get("lineSpacingType")
def lineSpacingValue = values.get("lineSpacingValue")
def lineSpacing = createLineSpacingInstance(lineSpacingType, lineSpacingValue)

paraStyleDefinition.lineSpacing = lineSpacing
} else {
paraStyleDefinition."${definitionField.name}" = Csv.deserialize(values.get(definitionField.name), definitionField.type)
}
}

private static void mapDefinitionField(ParagraphStyleDefinition paraStyleDefinition, MappingItem.ParagraphStyle.Def mapping, Field definitionField, Map<String, String> values) {
if (definitionField.name == "lineSpacing") {
def lineSpacingType = values.get("lineSpacingType")
def lineSpacingValue = values.get("lineSpacingValue")
def lineSpacing = createLineSpacingInstance(lineSpacingType, lineSpacingValue)

Mapping.mapProp(mapping, paraStyleDefinition, "lineSpacing", lineSpacing)
} else {
Mapping.mapProp(mapping, paraStyleDefinition, definitionField.name, Csv.deserialize(values.get(definitionField.name), definitionField.type))
}
private static MappingItem.ParagraphStyle toMapping(Map<String, String> values) {
def name = Csv.deserialize(values.get("name"), String.class)
def targetId = Csv.deserialize(values.get("targetId"), String.class)

return new MappingItem.ParagraphStyle(name, targetId, new MappingItem.ParagraphStyle.Def(
Csv.deserialize(values.get("leftIndent"), Size.class),
Csv.deserialize(values.get("rightIndent"), Size.class),
Csv.deserialize(values.get("defaultTabSize"), Size.class),
Csv.deserialize(values.get("spaceBefore"), Size.class),
Csv.deserialize(values.get("spaceAfter"), Size.class),
Csv.deserialize(values.get("alignment"), Alignment.class),
Csv.deserialize(values.get("firstLineIndent"), Size.class),
createLineSpacingInstance(values.get("lineSpacingType"), values.get("lineSpacingValue")),
Csv.deserialize(values.get("keepWithNextParagraph"), Boolean.class),
null,
Csv.deserialize(values.get("pdfTaggingRule"), ParagraphPdfTaggingRule.class),
))
}

static LineSpacing createLineSpacingInstance(String type, String value) {
Expand All @@ -141,4 +80,5 @@ static LineSpacing createLineSpacingInstance(String type, String value) {
case "ExactFromPrevious" -> new LineSpacing.ExactFromPrevious(value ? Size.fromString(value) : null)
default -> throw new IllegalArgumentException("Unknown line spacing type: $type")
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@
package com.quadient.migration.example.common.mapping

import com.quadient.migration.api.Migration
import com.quadient.migration.api.dto.migrationmodel.TextStyleDefinition
import com.quadient.migration.api.dto.migrationmodel.TextStyleRef
import com.quadient.migration.example.common.util.Csv
import com.quadient.migration.example.common.util.Mapping
import com.quadient.migration.shared.Size
import groovy.transform.Field

import java.nio.file.Path
Expand Down Expand Up @@ -49,28 +46,13 @@ static void run(Migration migration, Path dstPath) {
def builder = new StringBuilder()
builder << "${Csv.serialize(style.id)},"
builder << "${Csv.serialize(style.name)},"

if (definition instanceof TextStyleDefinition) {
builder << "," // targetId (empty)
builder << definitionOrder.collect {
Csv.serialize(definition?."$it", getUnit(it))
}.join(",")
builder << ",${Csv.serialize(style.originLocations)}"
} else if (definition instanceof TextStyleRef) {
builder << "${Csv.serialize(definition.id)}," // targetId
builder << definitionOrder.collect { "" }.join(",")
builder << ",${Csv.serialize(style.originLocations)}"
}
builder << "${Csv.serialize(style.targetId?.id)},"
builder << definitionOrder.collect {
Csv.serialize(definition?."$it")
}.join(",")
builder << ",${Csv.serialize(style.originLocations)}"

writer.writeLine(builder.toString())
}
}
}

static Size.Unit getUnit(String name) {
if (name == "size") {
return Size.Unit.Points
} else {
return Size.Unit.Millimeters
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,13 @@ package com.quadient.migration.example.common.mapping

import com.quadient.migration.api.Migration
import com.quadient.migration.api.dto.migrationmodel.MappingItem
import com.quadient.migration.api.dto.migrationmodel.TextStyle
import com.quadient.migration.api.dto.migrationmodel.TextStyleDefinition
import com.quadient.migration.api.dto.migrationmodel.TextStyleRef
import com.quadient.migration.api.dto.migrationmodel.builder.TextStyleBuilder
import com.quadient.migration.api.dto.migrationmodel.builder.TextStyleDefinitionBuilder
import com.quadient.migration.example.common.util.Csv
import com.quadient.migration.example.common.util.Mapping
import com.quadient.migration.shared.Size
import com.quadient.migration.shared.SuperOrSubscript

import java.lang.reflect.Field
import java.lang.reflect.Modifier
import java.nio.file.Path

import static com.quadient.migration.example.common.util.InitMigration.initMigration
Expand All @@ -25,89 +23,45 @@ def migration = initMigration(this.binding)

def exportFilePath = Mapping.csvPath(binding, migration.projectConfig.name, "text-styles")

run(migration, exportFilePath )
run(migration, exportFilePath)

static void run(Migration migration, Path path) {
def file = path.toFile().readLines()
def columnNames = Csv.parseColumnNames(file.removeFirst()).collect { Mapping.normalizeHeader(it) }
def definitionFields = TextStyleDefinition.declaredFields.findAll { !it.synthetic && !Modifier.isStatic(it.getModifiers()) }

for (line in file) {
def values = Csv.getCells(line, columnNames)
def id = values.get("id")

def existingStyle = migration.textStyleRepository.find(values.get("id"))
def styleRefId = values.get("targetId")

def existingStyle = migration.textStyleRepository.find(id)
if (existingStyle == null) {
createNewStyle(migration, styleRefId, values, definitionFields)
} else {
mapStyle(migration, existingStyle, styleRefId, values, definitionFields)
migration.textStyleRepository.upsert(
new TextStyleBuilder(id)
.definition(new TextStyleDefinitionBuilder().build())
.build()
)
}

def mapping = toMapping(values)
migration.mappingRepository.upsert(id, mapping)
migration.mappingRepository.applyTextStyleMapping(id)
}
}

static void mapStyle(Migration migration, TextStyle existingStyle, String styleRefId, Map<String, String> values, List<Field> definitionFields) {
def mapping = migration.mappingRepository.getTextStyleMapping(existingStyle.id)
private static MappingItem.TextStyle toMapping(Map<String, String> values) {
def name = Csv.deserialize(values.get("name"), String.class)
Mapping.mapProp(mapping, existingStyle, "name", name)
def existingDefinition = existingStyle.definition

if (styleRefId.empty) {
def mappingDefinition
if (!(mapping.definition instanceof MappingItem.TextStyle.Def)) {
mappingDefinition = new MappingItem.TextStyle.Def(null, null, null, null, null, null, null, null, null)
} else {
mappingDefinition = mapping.definition
}

if (existingDefinition instanceof TextStyleDefinition) {
for (field in definitionFields) {
Mapping.mapProp(mappingDefinition, existingDefinition, field.name, Csv.deserialize(values.get(field.name), field.type))
}
} else {
for (field in definitionFields) {
def value = Csv.deserialize(values.get(field.name), field.type)
if (value != null && value != "") {
mappingDefinition[field.name] = value
}
}
}

if (mappingDefinition != mapping.definition) {
mapping.definition = mappingDefinition
}
} else {
if (existingDefinition instanceof TextStyleDefinition
|| (existingDefinition instanceof TextStyleRef && existingDefinition.id != styleRefId)) {
mapping.definition = new MappingItem.TextStyle.Ref(styleRefId)
}
}

migration.mappingRepository.upsert(existingStyle.id, mapping)
migration.mappingRepository.applyTextStyleMapping(existingStyle.id)
def targetId = Csv.deserialize(values.get("targetId"), String.class)

return new MappingItem.TextStyle(name, targetId, new MappingItem.TextStyle.Def(
Csv.deserialize(values.get("fontFamily"), String.class),
Csv.deserialize(values.get("foregroundColor"), com.quadient.migration.shared.Color.class),
Csv.deserialize(values.get("size"), Size.class),
Csv.deserialize(values.get("bold"), Boolean.class),
Csv.deserialize(values.get("italic"), Boolean.class),
Csv.deserialize(values.get("underline"), Boolean.class),
Csv.deserialize(values.get("strikethrough"), Boolean.class),
Csv.deserialize(values.get("superOrSubscript"), SuperOrSubscript.class),
Csv.deserialize(values.get("interspacing"), Size.class),
))
}

static void createNewStyle(Migration migration, String styleRefId, Map<String, String> values, List<Field> definitionFields) {
def style
if (styleRefId.empty) {
style = new TextStyleBuilder(Csv.deserialize(values.get("id"), String.class))
.definition {
for (field in definitionFields) {
it."$field.name"(Csv.deserialize(values.get(field.name), field.type))
}
it
}
def name = Csv.deserialize(values.get("name"), String.class)
if (name != null && name != "") {
style.name(name)
}
} else {
style = new TextStyleBuilder(Csv.deserialize(values.get("id"), String.class))
.styleRef(styleRefId)
def name = Csv.deserialize(values.get("name"), String.class)
if (name != null && name != "") {
style.name(name)
}
}
migration.textStyleRepository.upsert(style.build())
}
Loading
Loading