Search in sources :

Example 6 with ExtraDatas

use of com.enonic.xp.content.ExtraDatas in project xp by enonic.

the class ContentDataSerializer method toCreateNodeData.

public PropertyTree toCreateNodeData(final CreateContentTranslatorParams params) {
    final PropertyTree propertyTree = new PropertyTree();
    final PropertySet contentAsData = propertyTree.getRoot();
    contentAsData.addBoolean(VALID, params.isValid());
    addValidationErrors(params.getValidationErrors(), contentAsData);
    contentAsData.ifNotNull().addString(DISPLAY_NAME, params.getDisplayName());
    contentAsData.ifNotNull().addString(TYPE, params.getType() != null ? params.getType().toString() : null);
    contentAsData.ifNotNull().addInstant(CREATED_TIME, params.getCreatedTime());
    contentAsData.ifNotNull().addString(CREATOR, params.getCreator().toString());
    contentAsData.ifNotNull().addString(MODIFIER, params.getModifier().toString());
    contentAsData.ifNotNull().addInstant(MODIFIED_TIME, params.getModifiedTime());
    contentAsData.ifNotNull().addString(OWNER, PrincipalKey.ofAnonymous().equals(params.getOwner()) || params.getOwner() == null ? null : params.getOwner().toString());
    contentAsData.ifNotNull().addString(LANGUAGE, params.getLanguage() != null ? params.getLanguage().toLanguageTag() : null);
    contentAsData.addSet(DATA, params.getData().getRoot().copy(contentAsData.getTree()));
    addPublishInfo(contentAsData, params.getContentPublishInfo());
    addWorkflowInfo(contentAsData, params.getWorkflowInfo());
    final ExtraDatas extraData = params.getExtraDatas();
    if (extraData != null && !extraData.isEmpty()) {
        extraDataSerializer.toData(extraData, contentAsData);
    }
    if (params.getCreateAttachments() != null) {
        addAttachmentInfoToDataset(params.getCreateAttachments(), contentAsData);
    }
    addProcessedReferences(contentAsData, params.getProcessedIds());
    return propertyTree;
}
Also used : PropertyTree(com.enonic.xp.data.PropertyTree) PropertySet(com.enonic.xp.data.PropertySet) ExtraDatas(com.enonic.xp.content.ExtraDatas)

Example 7 with ExtraDatas

use of com.enonic.xp.content.ExtraDatas in project xp by enonic.

the class ContentDataSerializer method toNodeData.

public PropertyTree toNodeData(final Content content) {
    final PropertyTree propertyTree = new PropertyTree();
    final PropertySet contentAsData = propertyTree.getRoot();
    addMetadata(contentAsData, content, content.getModifier());
    contentAsData.addSet(DATA, content.getData().getRoot().copy(contentAsData.getTree()));
    final ExtraDatas extraData = content.getAllExtraData();
    if (extraData != null && !extraData.isEmpty()) {
        extraDataSerializer.toData(extraData, contentAsData);
    }
    if (content.getPage() != null) {
        pageDataSerializer.toData(content.getPage(), contentAsData);
    }
    if (content.getAttachments() != null) {
        applyAttachmentsAsData(content.getAttachments(), contentAsData);
    }
    addProcessedReferences(contentAsData, content.getProcessedReferences());
    return propertyTree;
}
Also used : PropertyTree(com.enonic.xp.data.PropertyTree) PropertySet(com.enonic.xp.data.PropertySet) ExtraDatas(com.enonic.xp.content.ExtraDatas)

Example 8 with ExtraDatas

use of com.enonic.xp.content.ExtraDatas in project xp by enonic.

the class ImageContentProcessor method processUpdate.

@Override
public ProcessUpdateResult processUpdate(final ProcessUpdateParams params) {
    final CreateAttachments createAttachments = params.getCreateAttachments();
    final MediaInfo mediaInfo = params.getMediaInfo();
    final CreateAttachment sourceAttachment = createAttachments == null ? null : createAttachments.first();
    final ContentEditor editor;
    if (mediaInfo != null) {
        editor = editable -> {
            final Map<XDataName, ExtraData> extraDatas = editable.extraDatas.stream().collect(Collectors.toMap(ExtraData::getName, o -> o));
            final XDatas contentXDatas = getXDatas(params.getContentType().getName());
            extractMetadata(mediaInfo, contentXDatas, sourceAttachment).forEach(extraData -> extraDatas.put(extraData.getName(), extraData));
            editable.extraDatas = ExtraDatas.create().addAll(extraDatas.values()).build();
        };
    } else {
        editor = editable -> {
            if (!params.getContentType().getName().isDescendantOfMedia()) {
                return;
            }
            editable.extraDatas = updateImageMetadata(editable);
        };
    }
    return new ProcessUpdateResult(createAttachments, editor);
}
Also used : MediaInfo(com.enonic.xp.media.MediaInfo) Cropping(com.enonic.xp.image.Cropping) ContentTypeService(com.enonic.xp.schema.content.ContentTypeService) ContentEditor(com.enonic.xp.content.ContentEditor) MEDIA_INFO_BYTE_SIZE(com.enonic.xp.media.MediaInfo.MEDIA_INFO_BYTE_SIZE) Map(java.util.Map) CreateAttachment(com.enonic.xp.attachment.CreateAttachment) ImageIO(javax.imageio.ImageIO) GetContentTypeParams(com.enonic.xp.schema.content.GetContentTypeParams) XDataName(com.enonic.xp.schema.xdata.XDataName) Media(com.enonic.xp.content.Media) Property(com.enonic.xp.data.Property) IMAGE_INFO_PIXEL_SIZE(com.enonic.xp.media.MediaInfo.IMAGE_INFO_PIXEL_SIZE) BufferedImage(java.awt.image.BufferedImage) ImmutableMap(com.google.common.collect.ImmutableMap) Collection(java.util.Collection) ContentProcessor(com.enonic.xp.content.processor.ContentProcessor) IMAGE_INFO_IMAGE_WIDTH(com.enonic.xp.media.MediaInfo.IMAGE_INFO_IMAGE_WIDTH) ContentType(com.enonic.xp.schema.content.ContentType) Collectors(java.util.stream.Collectors) ExtraDatas(com.enonic.xp.content.ExtraDatas) EditableContent(com.enonic.xp.content.EditableContent) InputTypeName(com.enonic.xp.inputtype.InputTypeName) FormItem(com.enonic.xp.form.FormItem) IMAGE_INFO_IMAGE_HEIGHT(com.enonic.xp.media.MediaInfo.IMAGE_INFO_IMAGE_HEIGHT) ProcessUpdateResult(com.enonic.xp.content.processor.ProcessUpdateResult) CreateContentParams(com.enonic.xp.content.CreateContentParams) ContentService(com.enonic.xp.content.ContentService) IMAGE_INFO(com.enonic.xp.media.MediaInfo.IMAGE_INFO) ProcessCreateResult(com.enonic.xp.content.processor.ProcessCreateResult) HashMap(java.util.HashMap) Attachment(com.enonic.xp.attachment.Attachment) ContentTypeName(com.enonic.xp.schema.content.ContentTypeName) ProcessCreateParams(com.enonic.xp.content.processor.ProcessCreateParams) Component(org.osgi.service.component.annotations.Component) FormItemType(com.enonic.xp.form.FormItemType) CreateAttachments(com.enonic.xp.attachment.CreateAttachments) ExtraData(com.enonic.xp.content.ExtraData) XData(com.enonic.xp.schema.xdata.XData) Exceptions(com.enonic.xp.util.Exceptions) GeoPoint(com.enonic.xp.util.GeoPoint) ImmutableMultimap(com.google.common.collect.ImmutableMultimap) ByteSource(com.google.common.io.ByteSource) XDataService(com.enonic.xp.schema.xdata.XDataService) PropertyTree(com.enonic.xp.data.PropertyTree) ProcessUpdateParams(com.enonic.xp.content.processor.ProcessUpdateParams) XDatas(com.enonic.xp.schema.xdata.XDatas) IOException(java.io.IOException) ValueTypes(com.enonic.xp.data.ValueTypes) Preconditions(com.google.common.base.Preconditions) Input(com.enonic.xp.form.Input) Reference(org.osgi.service.component.annotations.Reference) InputStream(java.io.InputStream) CreateAttachments(com.enonic.xp.attachment.CreateAttachments) MediaInfo(com.enonic.xp.media.MediaInfo) CreateAttachment(com.enonic.xp.attachment.CreateAttachment) ContentEditor(com.enonic.xp.content.ContentEditor) XDatas(com.enonic.xp.schema.xdata.XDatas) ProcessUpdateResult(com.enonic.xp.content.processor.ProcessUpdateResult) ExtraData(com.enonic.xp.content.ExtraData) XDataName(com.enonic.xp.schema.xdata.XDataName)

Example 9 with ExtraDatas

use of com.enonic.xp.content.ExtraDatas in project xp by enonic.

the class ImageContentProcessor method extractMetadata.

private ExtraDatas extractMetadata(final MediaInfo mediaInfo, final XDatas xDatas, final CreateAttachment sourceAttachment) {
    final ExtraDatas.Builder extradatasBuilder = ExtraDatas.create();
    final Map<XDataName, ExtraData> metadataMap = new HashMap<>();
    final ExtraData geoData = extractGeoLocation(mediaInfo, xDatas);
    if (geoData != null) {
        metadataMap.put(MediaInfo.GPS_INFO_METADATA_NAME, geoData);
        extradatasBuilder.add(geoData);
    }
    for (Map.Entry<String, Collection<String>> entry : mediaInfo.getMetadata().asMap().entrySet()) {
        for (XData xData : xDatas) {
            final String formItemName = getConformityName(entry.getKey());
            final FormItem formItem = xData.getForm().getFormItems().getItemByName(formItemName);
            if (formItem == null) {
                continue;
            }
            ExtraData extraData = metadataMap.get(xData.getName());
            if (extraData == null) {
                extraData = new ExtraData(xData.getName(), new PropertyTree());
                metadataMap.put(xData.getName(), extraData);
                extradatasBuilder.add(extraData);
            }
            if (FormItemType.INPUT.equals(formItem.getType())) {
                Input input = (Input) formItem;
                if (InputTypeName.DATE_TIME.equals(input.getInputType())) {
                    extraData.getData().addLocalDateTime(formItemName, ValueTypes.LOCAL_DATE_TIME.convert(entry.getValue().toArray()[0]));
                } else if (InputTypeName.LONG.equals(input.getInputType())) {
                    final Long[] longValues = entry.getValue().stream().map(Long::parseLong).toArray(Long[]::new);
                    extraData.getData().addLongs(formItemName, longValues);
                } else {
                    extraData.getData().addStrings(formItemName, entry.getValue());
                }
            }
        }
    }
    fillComputedFormItems(metadataMap.values(), mediaInfo, sourceAttachment);
    return extradatasBuilder.build();
}
Also used : HashMap(java.util.HashMap) FormItem(com.enonic.xp.form.FormItem) ExtraData(com.enonic.xp.content.ExtraData) XDataName(com.enonic.xp.schema.xdata.XDataName) Input(com.enonic.xp.form.Input) PropertyTree(com.enonic.xp.data.PropertyTree) ExtraDatas(com.enonic.xp.content.ExtraDatas) Collection(java.util.Collection) XData(com.enonic.xp.schema.xdata.XData) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) HashMap(java.util.HashMap)

Aggregations

ExtraDatas (com.enonic.xp.content.ExtraDatas)9 PropertyTree (com.enonic.xp.data.PropertyTree)6 ExtraData (com.enonic.xp.content.ExtraData)5 PropertySet (com.enonic.xp.data.PropertySet)4 XDataName (com.enonic.xp.schema.xdata.XDataName)4 CreateAttachment (com.enonic.xp.attachment.CreateAttachment)3 CreateContentParams (com.enonic.xp.content.CreateContentParams)3 ImmutableMap (com.google.common.collect.ImmutableMap)3 Map (java.util.Map)3 ApplicationKey (com.enonic.xp.app.ApplicationKey)2 CreateAttachments (com.enonic.xp.attachment.CreateAttachments)2 ProcessCreateResult (com.enonic.xp.content.processor.ProcessCreateResult)2 FormItem (com.enonic.xp.form.FormItem)2 Input (com.enonic.xp.form.Input)2 MediaInfo (com.enonic.xp.media.MediaInfo)2 XData (com.enonic.xp.schema.xdata.XData)2 Collection (java.util.Collection)2 HashMap (java.util.HashMap)2 Attachment (com.enonic.xp.attachment.Attachment)1 Content (com.enonic.xp.content.Content)1