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;
}
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;
}
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);
}
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();
}
Aggregations