You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2019/11/19 03:50:55 UTC
[sling-org-apache-sling-app-cms] branch master updated (ff3631a ->
2fa5d3d)
This is an automated email from the ASF dual-hosted git repository.
dklco pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git.
from ff3631a Adding publish state to the grid actions
new 0bf5cdd Updating to make the static default to grid view
new af4426a Make the job view scroll
new 2fa5d3d Removing duplicate code from the File Metadata Extractor
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../core/internal/FileMetadataExtractorImpl.java | 2 -
.../internal/listeners/FileMetadataExtractor.java | 155 ---------------------
.../listeners/FileMetadataExtractorListener.java | 51 +++----
.../libs/sling-cms/components/jobs/view/view.jsp | 78 ++++++-----
.../libs/sling-cms/content/static/content.json | 3 +-
5 files changed, 63 insertions(+), 226 deletions(-)
delete mode 100644 core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractor.java
[sling-org-apache-sling-app-cms] 01/03: Updating to make the static
default to grid view
Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git
commit 0bf5cdd7e37f010efb20b6dbc3a2e2e7c10b6ca9
Author: Dan Klco <dk...@apache.org>
AuthorDate: Mon Nov 18 22:50:00 2019 -0500
Updating to make the static default to grid view
---
.../main/resources/jcr_root/libs/sling-cms/content/static/content.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
index 034d36e..1f2f122 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
@@ -10,6 +10,7 @@
"contentactions": {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "sling-cms/components/cms/contentactions",
+ "includeSwitcher": true,
"actions": {
"file": {
"jcr:primaryType": "nt:unstructured",
@@ -31,7 +32,7 @@
},
"contenttable": {
"jcr:primaryType": "nt:unstructured",
- "sling:resourceType": "sling-cms/components/cms/contenttable",
+ "sling:resourceType": "sling-cms/components/cms/contentlayout",
"columns": {
"jcr:primaryType": "nt:unstructured",
"name": {
[sling-org-apache-sling-app-cms] 02/03: Make the job view scroll
Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git
commit af4426afbb5c9c9a68b9ab00b7fdb3fee1085ddd
Author: Dan Klco <dk...@apache.org>
AuthorDate: Mon Nov 18 22:50:16 2019 -0500
Make the job view scroll
---
.../libs/sling-cms/components/jobs/view/view.jsp | 78 +++++++++++-----------
1 file changed, 40 insertions(+), 38 deletions(-)
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/jobs/view/view.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/jobs/view/view.jsp
index e8639f5..248e68e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/jobs/view/view.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/jobs/view/view.jsp
@@ -34,46 +34,48 @@
</ul>
</nav>
<h2><fmt:message key="${job.properties._titleKey}" /></h2>
-<dl>
- <dt><fmt:message key="slingcms.state" /></dt>
- <dd>${job.jobState}</dd>
- <c:if test="${not empty job.resultMessage}">
- <dt><fmt:message key="slingcms.jobs.resultmessage" /></dt>
- <dd>${sling:encode(job.resultMessage,'HTML')}</dd>
- </c:if>
- <dt><fmt:message key="slingcms.started" /></dt>
- <dd><fmt:formatDate value="${job.created.time}" type="both" dateStyle="long" timeStyle="long" /></dd>
- <c:if test="${job.finishedDate != null}">
- <dt><fmt:message key="slingcms.finished" /></dt>
- <dd>
- <fmt:formatDate value="${job.finishedDate.time}" type="both" dateStyle="long" timeStyle="long" />
- </dd>
- </c:if>
- <c:if test="${job.progressStepCount > 0}">
- <dt><fmt:message key="slingcms.jobs.progress" /></dt>
- <dd>
- ${job.finishedProgressStep} / ${job.progressStepCount}
- </dd>
- </c:if>
- <c:if test="${job.progressLog != null && fn:length(job.progressLog) > 0}">
- <dt><fmt:message key="slingcms.jobs.progresslog" /></dt>
+<div class="scroll-container">
+ <dl>
+ <dt><fmt:message key="slingcms.state" /></dt>
+ <dd>${job.jobState}</dd>
+ <c:if test="${not empty job.resultMessage}">
+ <dt><fmt:message key="slingcms.jobs.resultmessage" /></dt>
+ <dd>${sling:encode(job.resultMessage,'HTML')}</dd>
+ </c:if>
+ <dt><fmt:message key="slingcms.started" /></dt>
+ <dd><fmt:formatDate value="${job.created.time}" type="both" dateStyle="long" timeStyle="long" /></dd>
+ <c:if test="${job.finishedDate != null}">
+ <dt><fmt:message key="slingcms.finished" /></dt>
+ <dd>
+ <fmt:formatDate value="${job.finishedDate.time}" type="both" dateStyle="long" timeStyle="long" />
+ </dd>
+ </c:if>
+ <c:if test="${job.progressStepCount > 0}">
+ <dt><fmt:message key="slingcms.jobs.progress" /></dt>
+ <dd>
+ ${job.finishedProgressStep} / ${job.progressStepCount}
+ </dd>
+ </c:if>
+ <c:if test="${job.progressLog != null && fn:length(job.progressLog) > 0}">
+ <dt><fmt:message key="slingcms.jobs.progresslog" /></dt>
+ <dd>
+ <ul>
+ <c:forEach var="log" items="${job.progressLog}">
+ <li>${sling:encode(log,'HTML')}</li>
+ </c:forEach>
+ </ul>
+ </dd>
+ </c:if>
+ <dt><fmt:message key="slingcms.jobs.properties" /></dt>
<dd>
<ul>
- <c:forEach var="log" items="${job.progressLog}">
- <li>${sling:encode(log,'HTML')}</li>
+ <c:forEach var="el" items="${job.properties}">
+ <c:if test="${not fn:contains(el.key, ':') && not fn:startsWith(el.key, '_') && not fn:startsWith(el.key, 'event.job.')}">
+ <li><strong>${sling:encode(el.key,'HTML')}:</strong>
+ ${sling:encode(el.value,'HTML')}
+ </c:if>
</c:forEach>
</ul>
</dd>
- </c:if>
- <dt><fmt:message key="slingcms.jobs.properties" /></dt>
- <dd>
- <ul>
- <c:forEach var="el" items="${job.properties}">
- <c:if test="${not fn:contains(el.key, ':') && not fn:startsWith(el.key, '_') && not fn:startsWith(el.key, 'event.job.')}">
- <li><strong>${sling:encode(el.key,'HTML')}:</strong>
- ${sling:encode(el.value,'HTML')}
- </c:if>
- </c:forEach>
- </ul>
- </dd>
-</dl>
\ No newline at end of file
+ </dl>
+</div>
\ No newline at end of file
[sling-org-apache-sling-app-cms] 03/03: Removing duplicate code
from the File Metadata Extractor
Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git
commit 2fa5d3dfd0e7d96134b185f8ced1ee855e6e98ba
Author: Dan Klco <dk...@apache.org>
AuthorDate: Mon Nov 18 22:50:39 2019 -0500
Removing duplicate code from the File Metadata Extractor
---
.../core/internal/FileMetadataExtractorImpl.java | 2 -
.../internal/listeners/FileMetadataExtractor.java | 155 ---------------------
.../listeners/FileMetadataExtractorListener.java | 51 +++----
3 files changed, 21 insertions(+), 187 deletions(-)
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/FileMetadataExtractorImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/FileMetadataExtractorImpl.java
index fd0623f..5971438 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/FileMetadataExtractorImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/FileMetadataExtractorImpl.java
@@ -111,7 +111,6 @@ public class FileMetadataExtractorImpl implements FileMetadataExtractor {
log.warn("Content resource is null");
return;
}
-
Map<String, Object> properties = null;
Resource metadata = content.getChild(CMSConstants.NN_METADATA);
if (metadata != null) {
@@ -151,7 +150,6 @@ public class FileMetadataExtractorImpl implements FileMetadataExtractor {
putMetadata(properties, name, md);
}
return properties;
-
}
private void putMetadata(Map<String, Object> properties, String name, Metadata metadata) {
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractor.java b/core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractor.java
deleted file mode 100644
index d2b94a6..0000000
--- a/core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractor.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sling.cms.core.internal.listeners;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.util.Text;
-import org.apache.sling.api.resource.LoginException;
-import org.apache.sling.api.resource.ModifiableValueMap;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceResolverFactory;
-import org.apache.sling.api.resource.observation.ExternalResourceChangeListener;
-import org.apache.sling.api.resource.observation.ResourceChange;
-import org.apache.sling.api.resource.observation.ResourceChangeListener;
-import org.apache.sling.cms.File;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.Property;
-import org.apache.tika.parser.AutoDetectParser;
-import org.apache.tika.parser.ParseContext;
-import org.apache.tika.parser.Parser;
-import org.apache.tika.sax.BodyContentHandler;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-/**
- * A Resource Change Listener which extracts the metadata from sling:Files when
- * they are uploaded.
- */
-@Component(service = { FileMetadataExtractor.class, ResourceChangeListener.class,
- ExternalResourceChangeListener.class }, property = { ResourceChangeListener.CHANGES + "=ADDED",
- ResourceChangeListener.PATHS + "=/content",
- ResourceChangeListener.PATHS + "=/static" }, immediate = true)
-public class FileMetadataExtractor implements ResourceChangeListener, ExternalResourceChangeListener {
-
- public static final String NN_METADATA = "metadata";
- public static final String PN_X_PARSED_BY = "X-Parsed-By";
-
- @Reference
- private ResourceResolverFactory factory;
-
- private static final Logger log = LoggerFactory.getLogger(FileMetadataExtractor.class);
-
- public void extractMetadata(File file) throws IOException, SAXException, TikaException {
- extractMetadata(file.getResource());
- }
-
- public void extractMetadata(Resource resource) throws IOException, SAXException, TikaException {
-
- log.info("Extracting metadata from {}", resource.getPath());
- ResourceResolver resolver = resource.getResourceResolver();
- InputStream is = resource.adaptTo(InputStream.class);
- Resource content = resource.getChild(JcrConstants.JCR_CONTENT);
- if (content == null) {
- log.warn("Content resource is null");
- return;
- }
- Map<String, Object> properties = new HashMap<>();
- Resource metadata = content.getChild(NN_METADATA);
- if (metadata != null) {
- properties = metadata.adaptTo(ModifiableValueMap.class);
- } else {
- properties.put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- if (properties != null) {
- Parser parser = new AutoDetectParser();
- BodyContentHandler handler = new BodyContentHandler();
- Metadata md = new Metadata();
- ParseContext context = new ParseContext();
- parser.parse(is, handler, md, context);
- for (String name : md.names()) {
- updateProperty(properties, name, md);
- }
- if (metadata == null) {
- resolver.create(content, NN_METADATA, properties);
- }
- resolver.commit();
- log.info("Metadata extracted from {}", resource.getPath());
- } else {
- log.warn("Failed to update metadata for {}", resource.getPath());
- }
-
- }
-
- private void updateProperty(Map<String, Object> properties, String name, Metadata metadata) {
- log.trace("Updating property: {}", name);
- String filtered = Text.escapeIllegalJcrChars(name);
- Property property = Property.get(name);
- if (property != null) {
- if (metadata.isMultiValued(property)) {
- properties.put(filtered, metadata.getValues(property));
- } else if (metadata.getDate(property) != null) {
- Calendar cal = Calendar.getInstance();
- cal.setTime(metadata.getDate(property));
- properties.put(filtered, cal);
- } else if (metadata.getInt(property) != null) {
- properties.put(filtered, metadata.getInt(property));
- } else {
- properties.put(filtered, metadata.get(property));
- }
- } else {
- properties.put(filtered, metadata.get(name));
- }
- }
-
- @Override
- public void onChange(List<ResourceChange> changes) {
- Map<String, Object> serviceParams = new HashMap<>();
- serviceParams.put(ResourceResolverFactory.SUBSERVICE, "sling-cms-metadata");
- ResourceResolver serviceResolver = null;
- try {
- serviceResolver = factory.getServiceResourceResolver(serviceParams);
- for (ResourceChange rc : changes) {
- Resource changed = serviceResolver.getResource(rc.getPath());
- try {
- extractMetadata(changed);
- } catch (Throwable t) {
- log.warn("Failed to extract metadata due to exception", t);
- }
- }
- } catch (LoginException e) {
- log.error("Exception getting service user", e);
- } finally {
- if (serviceResolver != null) {
- serviceResolver.close();
- }
- }
-
- }
-
-}
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractorListener.java b/core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractorListener.java
index 008c81f..7d78b3b 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractorListener.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/listeners/FileMetadataExtractorListener.java
@@ -16,18 +16,17 @@
*/
package org.apache.sling.cms.core.internal.listeners;
-import java.io.IOException;
-import java.util.HashMap;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
-import java.util.Optional;
import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.observation.ExternalResourceChangeListener;
import org.apache.sling.api.resource.observation.ResourceChange;
import org.apache.sling.api.resource.observation.ResourceChangeListener;
+import org.apache.sling.cms.CMSConstants;
import org.apache.sling.cms.File;
import org.apache.sling.cms.FileMetadataExtractor;
import org.osgi.service.component.annotations.Component;
@@ -45,45 +44,37 @@ import org.slf4j.LoggerFactory;
ResourceChangeListener.PATHS + "=/static" }, immediate = true)
public class FileMetadataExtractorListener implements ResourceChangeListener, ExternalResourceChangeListener {
+ private static final Logger log = LoggerFactory.getLogger(FileMetadataExtractorListener.class);
+
@Reference
private FileMetadataExtractor extractor;
@Reference
private ResourceResolverFactory factory;
- private static final Logger log = LoggerFactory.getLogger(FileMetadataExtractorListener.class);
+ private void handleChange(Resource changed) {
+ if (CMSConstants.NT_FILE.equals(changed.getResourceType())) {
+ log.debug("Extracting metadata from changed resource: {}", changed);
+ try {
+ extractor.updateMetadata(changed.adaptTo(File.class), true);
+ } catch (Exception e) {
+ log.warn("Failed to extract metadata from change: {}", changed, e);
+ }
+ } else {
+ log.trace("Not extracting metadata from changed resource: {}", changed);
+ }
+ }
@Override
public void onChange(List<ResourceChange> changes) {
- Map<String, Object> serviceParams = new HashMap<>();
- serviceParams.put(ResourceResolverFactory.SUBSERVICE, "sling-cms-metadata");
- ResourceResolver serviceResolver = null;
- try {
- serviceResolver = factory.getServiceResourceResolver(serviceParams);
+ try (ResourceResolver serviceResolver = factory.getServiceResourceResolver(
+ Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, "sling-cms-metadata"))) {
for (ResourceChange rc : changes) {
- handleChange(serviceResolver, rc);
+ Resource changed = serviceResolver.getResource(rc.getPath());
+ handleChange(changed);
}
} catch (LoginException e) {
log.error("Exception getting service user", e);
- } finally {
- if (serviceResolver != null) {
- serviceResolver.close();
- }
- }
-
- }
-
- private void handleChange(ResourceResolver serviceResolver, ResourceChange rc) {
- File changed = Optional.ofNullable(serviceResolver.getResource(rc.getPath())).map(r -> r.adaptTo(File.class))
- .orElse(null);
- try {
- if (changed != null) {
- extractor.updateMetadata(changed);
- } else {
- log.warn("Failed to get File from: {}", rc.getPath());
- }
- } catch (IOException t) {
- log.warn("Failed to extract metadata due to exception", t);
}
}