From 256fcdba3d9d65622583219a230971c915da5651 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 8 Nov 2018 19:01:55 +0000 Subject: [PATCH] Bugfixes for Exporters, Exporter for Note assets git-svn-id: https://svn.libreccm.org/ccm/trunk@5731 8810af33-2d31-482b-a856-94f89814c4df --- .../librecms/assets/FileAssetsExporter.java | 161 ++++++++++++++++-- .../assets/FileAttachmentsExporter.java | 22 ++- .../ItemImageAttachmentInitializer.java | 4 + .../assets/ImageAttachmentListsExporter.java | 33 ++++ .../assets/ImageAttachmentsExporter.java | 12 +- .../SideNoteAttachmentListsExporter.java | 32 ++++ .../assets/SideNoteAttachmentsExporter.java | 122 +++++++++++++ .../librecms/assets/SideNotesExporter.java | 56 ++++++ .../AbstractBinaryAssetsExporter.java | 1 + .../librecms/lifecycle/PhasesExporter.java | 2 +- 10 files changed, 411 insertions(+), 34 deletions(-) create mode 100644 ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentListsExporter.java create mode 100644 ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentListsExporter.java create mode 100644 ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentsExporter.java create mode 100644 ccm-cms-assets-notes/src/org/librecms/assets/SideNotesExporter.java diff --git a/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAssetsExporter.java b/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAssetsExporter.java index 4e45f664c..d619229b1 100644 --- a/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAssetsExporter.java +++ b/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAssetsExporter.java @@ -1,44 +1,169 @@ package org.librecms.assets; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.FileAsset; import com.arsdigita.cms.contentassets.FileAttachment; +import com.arsdigita.kernel.KernelConfig; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; -import org.librecms.contentsection.AbstractBinaryAssetsExporter; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; +import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; /** * * @author Jens Pelzetter */ -public class FileAssetsExporter - extends AbstractBinaryAssetsExporter { +public class FileAssetsExporter + extends AbstractDomainObjectsExporter { @Override - protected void exportBinaryAssetProperties( - final FileAttachment asset, - final JsonGenerator jsonGenerator) - throws IOException { - - // Nothing - } - - @Override - public Class exportsType() { - - return FileAttachment.class; + public Class exportsType() { + return ContentItem.class; } @Override public String exportsBaseDataObjectType() { - - return FileAttachment.BASE_DATA_OBJECT_TYPE; + return ContentItem.BASE_DATA_OBJECT_TYPE; } @Override public String convertsToType() { - return "org.librecms.assets.FileAsset"; } + @Override + protected boolean includeSubTypes() { + return true; + } + + + + @Override + protected List exportDomainObject( + final ContentItem item, + final Path targetDir) { + + final DataCollection fileAttachments = FileAttachment + .getAttachments(item); + + final List uuids = new ArrayList<>(); + while (fileAttachments.next()) { + + final String uuid = exportFileAsset( + fileAttachments.getDataObject(), + targetDir); + uuids.add(uuid); + } + + return uuids; + } + + private String exportFileAsset(final DataObject dataObj, + final Path targetDir) { + + final FileAttachment fileAttachment = new FileAttachment(dataObj); + final String uuid = generateFileAssetUuid(fileAttachment); + + final Path targetFilePath = generateTargetFilePath(targetDir, uuid); + final File targetFile = targetFilePath.toFile(); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("objectId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + jsonGenerator.writeStringField("displayName", + fileAttachment.getDisplayName()); + + jsonGenerator.writeObjectFieldStart("description"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + fileAttachment.getDescription()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeStringField( + "mimeType", + fileAttachment.getMimeType().toString()); + + jsonGenerator.writeStringField("fileName", + fileAttachment.getName()); + + jsonGenerator.writeObjectFieldStart("title"); + jsonGenerator.writeStringField( + KernelConfig.getConfig().getDefaultLanguage(), + fileAttachment.getName()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeBinaryField("data", fileAttachment.getContent()); + + jsonGenerator.writeNumberField("size", fileAttachment.getSize()); + + jsonGenerator.writeEndObject(); + + } catch (IOException ex) { + throw new UncheckedWrapperException(ex); + } + + return uuid; + } + + protected static String generateFileAssetUuid( + final FileAttachment fileAttachment) { + + final byte[] uuidSource = String.format( + "%s/files/%s", + WebConfig.getInstanceOf().getSiteName(), + fileAttachment.getOID().toString()) + .getBytes(StandardCharsets.UTF_8); + final String uuid = UUID.nameUUIDFromBytes(uuidSource).toString(); + + return uuid; + } + +// extends AbstractBinaryAssetsExporter { +// +// @Override +// protected void exportBinaryAssetProperties( +// final FileAttachment asset, +// final JsonGenerator jsonGenerator) +// throws IOException { +// +// // Nothing +// } +// +// @Override +// public Class exportsType() { +// +// return FileAttachment.class; +// } +// +// @Override +// public String exportsBaseDataObjectType() { +// +// return FileAttachment.BASE_DATA_OBJECT_TYPE; +// } +// +// @Override +// public String convertsToType() { +// +// return "org.librecms.assets.FileAsset"; +// } } diff --git a/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAttachmentsExporter.java b/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAttachmentsExporter.java index cbe4bbf0e..86a50d05a 100644 --- a/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAttachmentsExporter.java +++ b/ccm-cms-assets-fileattachment/src/org/librecms/assets/FileAttachmentsExporter.java @@ -43,7 +43,7 @@ public class FileAttachmentsExporter public String convertsToType() { return "org.librecms.contentsection.ItemAttachment"; } - + @Override protected boolean includeSubTypes() { return true; @@ -65,28 +65,32 @@ public class FileAttachmentsExporter while (fileAttachments.next()) { sortKey++; - final String uuid = exportFileAttachment(fileAttachments - .getDataObject(), - listUuid, - sortKey, - targetDir); + final String uuid = exportFileAttachment( + item, + fileAttachments.getDataObject(), + listUuid, + sortKey, + targetDir); attachmentUuids.add(uuid); } return attachmentUuids; } - private String exportFileAttachment(final DataObject dataObj, + private String exportFileAttachment(final ContentItem item, + final DataObject dataObj, final String listUuid, final long sortKey, final Path targetDir) { final FileAttachment fileAttachment = new FileAttachment(dataObj); - final String fileAssetUuid = generateUuid(fileAttachment); + final String fileAssetUuid = FileAssetsExporter + .generateFileAssetUuid(fileAttachment); final byte[] uuidSource = String.format( - "%s/files/%s", + "%s/%s/files/%s", WebConfig.getInstanceOf().getSiteName(), + item.getOID().toString(), fileAttachment.getOID().toString()) .getBytes(StandardCharsets.UTF_8); final String uuid = UUID.nameUUIDFromBytes(uuidSource).toString(); diff --git a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java index 28fde1d29..b9227d1f2 100755 --- a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java +++ b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java @@ -30,6 +30,7 @@ import com.arsdigita.persistence.DataObject; import com.arsdigita.runtime.DomainInitEvent; import org.libreccm.export.ExportManager; +import org.librecms.assets.ImageAttachmentListsExporter; import org.librecms.assets.ImageAttachmentsExporter; /** @@ -79,6 +80,9 @@ public class ItemImageAttachmentInitializer extends ContentAssetInitializer { ExportManager .getInstance() .registerExporter(new ImageAttachmentsExporter()); + ExportManager + .getInstance() + .registerExporter(new ImageAttachmentListsExporter()); } diff --git a/ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentListsExporter.java b/ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentListsExporter.java new file mode 100644 index 000000000..0036886b4 --- /dev/null +++ b/ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentListsExporter.java @@ -0,0 +1,33 @@ +package org.librecms.assets; + +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.contentassets.ItemImageAttachment; +import com.arsdigita.persistence.DataCollection; + +import org.librecms.contentsection.AbstractAttachmentListsExporter; + +/** + * + * @author Jens Pelzetter + */ +public class ImageAttachmentListsExporter + extends AbstractAttachmentListsExporter { + + @Override + protected String getListName() { + return "images"; + } + + @Override + protected boolean hasList(final ContentItem contentItem) { + + final DataCollection images = ItemImageAttachment + .getImageAttachments(contentItem); + + final boolean result = images.next(); + images.close(); + + return result; + } + +} diff --git a/ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentsExporter.java b/ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentsExporter.java index bfc7ed874..ca1b744b7 100644 --- a/ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentsExporter.java +++ b/ccm-cms-assets-imagestep/src/org/librecms/assets/ImageAttachmentsExporter.java @@ -70,11 +70,11 @@ public class ImageAttachmentsExporter while (imageAttachments.next()) { sortKey++; - final String uuid = exportImageAttachment(imageAttachments - .getDataObject(), - listUuid, - sortKey, - targetDir); + final String uuid = exportImageAttachment( + imageAttachments.getDataObject(), + listUuid, + sortKey, + targetDir); attachmentsUuids.add(uuid); } @@ -122,7 +122,7 @@ public class ImageAttachmentsExporter throw new UncheckedWrapperException(ex); } - + return uuid; } diff --git a/ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentListsExporter.java b/ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentListsExporter.java new file mode 100644 index 000000000..84b43c731 --- /dev/null +++ b/ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentListsExporter.java @@ -0,0 +1,32 @@ +package org.librecms.assets; + +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.contentassets.Note; +import com.arsdigita.persistence.DataCollection; + +import org.librecms.contentsection.AbstractAttachmentListsExporter; + +/** + * + * @author Jens Pelzetter + */ +public class SideNoteAttachmentListsExporter + extends AbstractAttachmentListsExporter { + + @Override + protected String getListName() { + return "notes"; + } + + @Override + protected boolean hasList(final ContentItem item) { + + final DataCollection attachments = Note.getNotes(item); + + final boolean result = attachments.next(); + attachments.close(); + + return result; + } + +} diff --git a/ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentsExporter.java b/ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentsExporter.java new file mode 100644 index 000000000..964bdc241 --- /dev/null +++ b/ccm-cms-assets-notes/src/org/librecms/assets/SideNoteAttachmentsExporter.java @@ -0,0 +1,122 @@ +package org.librecms.assets; + + +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.contentassets.Note; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.WebConfig; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.export.AbstractDomainObjectsExporter; +import org.libreccm.export.IdSequence; +import org.librecms.contentsection.AbstractAttachmentListsExporter; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Jens Pelzetter + */ +public class SideNoteAttachmentsExporter +extends AbstractDomainObjectsExporter{ + + @Override + public Class exportsType() { + return ContentItem.class; + } + + @Override + public String exportsBaseDataObjectType() { + return ContentItem.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.librecms.contentsection.ItemAttachment"; + } + + @Override + protected boolean includeSubTypes() { + return true; + } + + + @Override + protected List exportDomainObject(final ContentItem item, + final Path targetDir) { + + final String listUuid = AbstractAttachmentListsExporter + .generateListUuid(item, "notes"); + + final List attachmentsUuids = new ArrayList<>(); + + final DataCollection noteAttachments = Note.getNotes(item); + + long sortKey = 0; + while(noteAttachments.next()) { + + sortKey++; + final String uuid = exportNoteAttachment( + noteAttachments.getDataObject(), + listUuid, + sortKey, + targetDir); + } + + return attachmentsUuids; + } + + private String exportNoteAttachment(final DataObject dataObj, + final String listUuid, + final long sortKey, + final Path targetDir) { + + final Note note = new Note(dataObj); + final String noteUuid = generateUuid(note); + + final byte[] uuidSource = String.format( + "%s/notes/%s", + WebConfig.getInstanceOf().getSiteName(), + note.getOID().toString()) + .getBytes(StandardCharsets.UTF_8); + final String uuid = UUID.nameUUIDFromBytes(uuidSource).toString(); + + final Path targetFilePath = generateTargetFilePath(targetDir, uuid); + final File targetFile = targetFilePath.toFile(); + + final JsonFactory jsonFactory = new JsonFactory(); + try (JsonGenerator jsonGenerator = jsonFactory + .createGenerator(targetFile, JsonEncoding.UTF8)) { + + jsonGenerator.writeStartObject(); + + jsonGenerator.writeNumberField("attachmentId", + IdSequence.getInstance().nextId()); + jsonGenerator.writeStringField("uuid", uuid); + + jsonGenerator.writeStringField("attachmentList", listUuid); + jsonGenerator.writeStringField("asset", noteUuid); + + jsonGenerator.writeNumberField("sortKey", sortKey); + + jsonGenerator.writeEndObject(); + + } catch(IOException ex) { + + throw new UncheckedWrapperException(ex); + } + + return noteUuid; + } + +} diff --git a/ccm-cms-assets-notes/src/org/librecms/assets/SideNotesExporter.java b/ccm-cms-assets-notes/src/org/librecms/assets/SideNotesExporter.java new file mode 100644 index 000000000..2fde7d9cb --- /dev/null +++ b/ccm-cms-assets-notes/src/org/librecms/assets/SideNotesExporter.java @@ -0,0 +1,56 @@ +package org.librecms.assets; + +import com.arsdigita.cms.contentassets.Note; +import com.arsdigita.util.UncheckedWrapperException; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.libreccm.core.AbstractCcmObjectsExporter; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class SideNotesExporter + extends AbstractCcmObjectsExporter { + + @Override + public Class exportsType() { + return Note.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Note.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.librecms.assets.SideNote"; + } + + @Override + protected void exportObjectProperties(final Note note, + final JsonGenerator jsonGenerator) + throws IOException { + + jsonGenerator.writeObjectFieldStart("title"); + jsonGenerator.writeStringField( + note.getOwner().getLanguage(), + note.getDisplayName()); + jsonGenerator.writeEndObject(); + + jsonGenerator.writeObjectFieldStart("text"); + jsonGenerator.writeStringField( + note.getOwner().getLanguage(), + note.getContent()); + jsonGenerator.writeEndObject(); + } + +} diff --git a/ccm-cms/src/org/librecms/contentsection/AbstractBinaryAssetsExporter.java b/ccm-cms/src/org/librecms/contentsection/AbstractBinaryAssetsExporter.java index 092fbe34a..7bb527c35 100644 --- a/ccm-cms/src/org/librecms/contentsection/AbstractBinaryAssetsExporter.java +++ b/ccm-cms/src/org/librecms/contentsection/AbstractBinaryAssetsExporter.java @@ -11,6 +11,7 @@ import java.io.IOException; /** * * @author Jens Pelzetter + * @param */ public abstract class AbstractBinaryAssetsExporter extends AbstractAssetsExporter{ diff --git a/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java b/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java index 49d107fc4..9d1bee67c 100644 --- a/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java +++ b/ccm-cms/src/org/librecms/lifecycle/PhasesExporter.java @@ -36,7 +36,7 @@ public class PhasesExporter extends AbstractDomainObjectsExporter { @Override public String convertsToType() { - return "org.librcms.lifecycle.Phase"; + return "org.librecms.lifecycle.Phase"; } @Override