diff --git a/Backend/services/core/src/main/java/org/edu_sharing/repository/server/jobs/helper/NodeCustomClasses.java b/Backend/services/core/src/main/java/org/edu_sharing/repository/server/jobs/helper/NodeCustomClasses.java new file mode 100644 index 0000000000..f177d52c2c --- /dev/null +++ b/Backend/services/core/src/main/java/org/edu_sharing/repository/server/jobs/helper/NodeCustomClasses.java @@ -0,0 +1,51 @@ +package org.edu_sharing.repository.server.jobs.helper; + +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.StoreRef; +import org.apache.log4j.Logger; +import org.edu_sharing.repository.client.tools.CCConstants; +import org.edu_sharing.repository.server.jobs.quartz.BulkEditNodesJob; +import org.edu_sharing.repository.server.tools.HttpQueryTool; +import org.edu_sharing.service.nodeservice.NodeServiceFactory; +import org.edu_sharing.service.nodeservice.NodeServiceHelper; + +import java.io.InputStream; +import java.util.function.Consumer; + +/** + * to be used with @BulkEditNodesJob + */ +public class NodeCustomClasses { + public static class ImportExternalThumbnail implements Consumer { + @Override + public void accept(NodeRef nodeRef) { + String thumbUrl = NodeServiceHelper.getProperty(nodeRef, CCConstants.CCM_PROP_IO_THUMBNAILURL); + if (thumbUrl == null) { + Logger.getLogger(BulkEditNodesJob.class).info(nodeRef + " has no " + CCConstants.CCM_PROP_IO_THUMBNAILURL + ", skipping..."); + return; + } + try { + HttpQueryTool.Callback callback = new HttpQueryTool.Callback() { + @Override + public void handle(InputStream is) { + try { + NodeServiceFactory.getLocalService().writeContent(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeRef.getId(), is, + "image/jpeg", null, CCConstants.CCM_PROP_IO_USERDEFINED_PREVIEW); + } catch (Exception e) { + Logger.getLogger(BulkEditNodesJob.class).warn("Thumb fetching failed for " + nodeRef + " " + thumbUrl); + } + } + }; + new HttpQueryTool().queryStream(thumbUrl, callback); + if (callback.getResult() != null) { + Logger.getLogger(BulkEditNodesJob.class).warn("Thumb fetching failed for " + nodeRef + " " + thumbUrl + ": " + callback.getResult()); + } else { + NodeServiceHelper.removeProperty(nodeRef, CCConstants.CCM_PROP_IO_THUMBNAILURL); + Logger.getLogger(BulkEditNodesJob.class).info(nodeRef + " thumb imported: " + thumbUrl); + } + } catch (Throwable t) { + Logger.getLogger(BulkEditNodesJob.class).warn("Thumb fetching failed for " + nodeRef + " " + thumbUrl); + } + } + } +} diff --git a/Backend/services/core/src/main/java/org/edu_sharing/service/nodeservice/NodeServiceImpl.java b/Backend/services/core/src/main/java/org/edu_sharing/service/nodeservice/NodeServiceImpl.java index 3fe43489ef..315e2ca86c 100644 --- a/Backend/services/core/src/main/java/org/edu_sharing/service/nodeservice/NodeServiceImpl.java +++ b/Backend/services/core/src/main/java/org/edu_sharing/service/nodeservice/NodeServiceImpl.java @@ -708,7 +708,9 @@ public void updateNodeNative(StoreRef store, String nodeId, Map _prop logger.warn("Error while calling interceptor " + i.getClass().getName() + ": " + e.toString()); } } - Map propsStore = propsFinal.entrySet().stream().collect( + Map propsStore = propsFinal.entrySet().stream(). + filter(e -> e.getValue() != null). + collect( HashMap::new, (m,entry)-> m.put(QName.createQName(entry.getKey()), (Serializable) entry.getValue()), HashMap::putAll