diff --git a/ccm-cms/src/org/librecms/contentsection/ContentSectionsExporter.java b/ccm-cms/src/org/librecms/contentsection/ContentSectionsExporter.java index 71e4810eb..f600dc0e2 100644 --- a/ccm-cms/src/org/librecms/contentsection/ContentSectionsExporter.java +++ b/ccm-cms/src/org/librecms/contentsection/ContentSectionsExporter.java @@ -6,6 +6,7 @@ import com.arsdigita.cms.ContentTypeCollection; import com.arsdigita.cms.Folder; import com.arsdigita.cms.lifecycle.LifecycleDefinition; import com.arsdigita.cms.lifecycle.LifecycleDefinitionCollection; +import com.arsdigita.kernel.KernelConfig; import com.arsdigita.kernel.Role; import com.arsdigita.kernel.RoleCollection; import com.arsdigita.workflow.simple.Task; @@ -62,18 +63,25 @@ public class ContentSectionsExporter jsonGenerator.writeStringField("xmlGeneratorClass", section.getXMLGeneratorClassName()); - jsonGenerator.writeArrayFieldStart("roles"); - final RoleCollection roles = section.getGroup().getRoles(); - while (roles.next()) { + if (section.getGroup() != null) { + jsonGenerator.writeArrayFieldStart("roles"); + final RoleCollection roles = section.getGroup().getRoles(); + while (roles.next()) { - final Role role = roles.getRole(); - final String roleUuid = generateUuid(role); - jsonGenerator.writeString(roleUuid); + final Role role = roles.getRole(); + final String roleUuid = generateUuid(role); + jsonGenerator.writeString(roleUuid); + } + jsonGenerator.writeEndArray(); } - jsonGenerator.writeEndArray(); - jsonGenerator.writeStringField("defaultLocale", - section.getDefaultLocale().toString()); + if (section.getDefaultLocale() == null) { + jsonGenerator.writeStringField( + "defaultLocale", KernelConfig.getConfig().getDefaultLanguage()); + } else { + jsonGenerator.writeStringField( + "defaultLocale", section.getDefaultLocale().toString()); + } jsonGenerator.writeArrayFieldStart("contentTypes"); final ContentTypeCollection types = section.getContentTypes(); diff --git a/ccm-cms/src/org/librecms/contentsection/FoldersExporter.java b/ccm-cms/src/org/librecms/contentsection/FoldersExporter.java index 4ccfe877e..a3e910634 100644 --- a/ccm-cms/src/org/librecms/contentsection/FoldersExporter.java +++ b/ccm-cms/src/org/librecms/contentsection/FoldersExporter.java @@ -24,8 +24,10 @@ public class FoldersExporter extends AbstractCcmObjectsExporter { jsonGenerator.writeStringField("name", folder.getName()); final ContentSection section = folder.getContentSection(); - final String sectionUuid = generateUuid(section); - jsonGenerator.writeStringField("contentSection", sectionUuid); + if (section != null) { + final String sectionUuid = generateUuid(section); + jsonGenerator.writeStringField("contentSection", sectionUuid); + } jsonGenerator.writeObjectFieldStart("title"); jsonGenerator.writeStringField( @@ -37,9 +39,11 @@ public class FoldersExporter extends AbstractCcmObjectsExporter { jsonGenerator.writeBooleanField("visible", true); jsonGenerator.writeBooleanField("abstractCategory", true); - jsonGenerator.writeStringField( - "parentCategory", - generateUuid(folder.getParent())); + if (folder.getParent() != null) { + jsonGenerator.writeStringField( + "parentCategory", + generateUuid(folder.getParent())); + } } diff --git a/ccm-cms/src/org/librecms/lifecycle/LifecyclesExporter.java b/ccm-cms/src/org/librecms/lifecycle/LifecyclesExporter.java index e433c4ea8..15f06692d 100644 --- a/ccm-cms/src/org/librecms/lifecycle/LifecyclesExporter.java +++ b/ccm-cms/src/org/librecms/lifecycle/LifecyclesExporter.java @@ -31,9 +31,7 @@ public class LifecyclesExporter extends AbstractDomainObjectsExporter final String uuid = generateUuid(lifecycle); - final Path targetFilePath = targetDir - .resolve("org.libreccm.lifecycle.Lifecycle") - .resolve(String.format("%s.json", uuid)); + final Path targetFilePath = generateTargetFilePath(targetDir, uuid); final File targetFile = targetFilePath.toFile(); final JsonFactory jsonFactory = new JsonFactory(); @@ -41,7 +39,7 @@ public class LifecyclesExporter extends AbstractDomainObjectsExporter .createGenerator(targetFile, JsonEncoding.UTF8)) { setPrettyPrinter(jsonGenerator); - + jsonGenerator.writeStartObject(); jsonGenerator.writeNumberField("lifecycleId", @@ -57,12 +55,14 @@ public class LifecyclesExporter extends AbstractDomainObjectsExporter LocalDateTime.ofInstant( lifecycle.getStartDate().toInstant(), ZoneId.systemDefault()))); - jsonGenerator.writeStringField( - "endDateTime", - dateTimeFormatter.format( - LocalDateTime.ofInstant( - lifecycle.getEndDate().toInstant(), - ZoneId.systemDefault()))); + if (lifecycle.getEndDate() != null) { + jsonGenerator.writeStringField( + "endDateTime", + dateTimeFormatter.format( + LocalDateTime.ofInstant( + lifecycle.getEndDate().toInstant(), + ZoneId.systemDefault()))); + } jsonGenerator.writeStringField("listener", lifecycle.getListenerClassName()); @@ -80,7 +80,7 @@ public class LifecyclesExporter extends AbstractDomainObjectsExporter jsonGenerator.writeString(generateUuid(phases.getPhase())); } jsonGenerator.writeEndArray(); - + jsonGenerator.writeEndObject(); } catch (IOException ex) { @@ -108,4 +108,5 @@ public class LifecyclesExporter extends AbstractDomainObjectsExporter return "org.librecms.lifecycle.Lifecycle"; } -} \ No newline at end of file + +} diff --git a/ccm-cms/src/org/librecms/lifecycle/PhaseDefinitionsExporter.java b/ccm-cms/src/org/librecms/lifecycle/PhaseDefinitionsExporter.java index 23c108f48..d7bf5ecab 100644 --- a/ccm-cms/src/org/librecms/lifecycle/PhaseDefinitionsExporter.java +++ b/ccm-cms/src/org/librecms/lifecycle/PhaseDefinitionsExporter.java @@ -53,7 +53,7 @@ public class PhaseDefinitionsExporter .createGenerator(targetFile, JsonEncoding.UTF8)) { setPrettyPrinter(jsonGenerator); - + jsonGenerator.writeStartObject(); jsonGenerator.writeNumberField("definitionId", @@ -74,8 +74,11 @@ public class PhaseDefinitionsExporter jsonGenerator.writeNumberField("defaultDelay", phaseDefinition.getDefaultDelay()); - jsonGenerator.writeNumberField("defaultDuration", - phaseDefinition.getDefaultDuration()); + if (phaseDefinition.getDefaultDuration() != null) { + jsonGenerator.writeNumberField( + "defaultDuration", + phaseDefinition.getDefaultDuration()); + } jsonGenerator.writeStringField("defaultListener", phaseDefinition.getDefaultListener()); diff --git a/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java b/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java index f66123262..48ea6d643 100644 --- a/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java +++ b/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java @@ -44,9 +44,7 @@ public class PhasesExporter extends AbstractDomainObjectsExporter { final Path targetDir) { final String uuid = generateUuid(phase); - final Path targetFilePath = targetDir - .resolve("org.librecms.lifecycle.Phase") - .resolve(String.format("%s.json", uuid)); + final Path targetFilePath = generateTargetFilePath(targetDir, uuid); final File targetFile = targetFilePath.toFile(); final JsonFactory jsonFactory = new JsonFactory(); diff --git a/ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java b/ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java index 3d702bd46..2fa36f3a1 100644 --- a/ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java +++ b/ccm-core/src/org/libreccm/core/AbstractResourcesExporter.java @@ -21,6 +21,7 @@ public abstract class AbstractResourcesExporter * * @param resource The {@link Resource} to export. * @param jsonGenerator The {@link JsonGenerator} to use. + * * @throws java.io.IOException */ @Override @@ -33,21 +34,23 @@ public abstract class AbstractResourcesExporter KernelConfig.getConfig().getDefaultLanguage(), resource.getTitle()); jsonGenerator.writeEndObject(); - + jsonGenerator.writeObjectFieldStart("description"); jsonGenerator.writeStringField( KernelConfig.getConfig().getDefaultLanguage(), resource.getDescription()); jsonGenerator.writeEndObject(); - + final ResourceType type = resource.getResourceType(); final String typeUuid = generateUuid(type); jsonGenerator.writeStringField("resourceType", typeUuid); - + final Resource parent = resource.getParentResource(); - final String parentUuid = generateUuid(parent); - jsonGenerator.writeStringField("parent", parentUuid); - + if (parent != null) { + final String parentUuid = generateUuid(parent); + jsonGenerator.writeStringField("parent", parentUuid); + } + exportResourceProperties(resource, jsonGenerator); } diff --git a/ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java b/ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java index 162910ef8..b20393daf 100644 --- a/ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java +++ b/ccm-core/src/org/libreccm/export/AbstractDomainObjectsExporter.java @@ -15,6 +15,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.UUID; /** @@ -94,6 +95,8 @@ public abstract class AbstractDomainObjectsExporter { */ protected final String generateUuid(final DomainObject forDomainObject) { + Objects.requireNonNull(forDomainObject); + final String uuidSource = String.format( "%s/%s", webConfig.getSiteName(),