From 756fa738c8cc39e2a88309ff14297be3a3f9e78d Mon Sep 17 00:00:00 2001 From: Larry L Date: Tue, 23 Apr 2024 09:29:28 -0500 Subject: [PATCH] update extractor workflow for manual triggering - update pom for asset share commons --- all/pom.xml | 12 +++++ .../mcaps/core/workflows/ScormExtractor.java | 51 ++++++++++++------- ui.content/pom.xml | 6 +++ 3 files changed, 51 insertions(+), 18 deletions(-) diff --git a/all/pom.xml b/all/pom.xml index 31583c8..3191002 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -94,6 +94,12 @@ zip /apps/mcaps-site-vendor-packages/application/install + + com.adobe.aem.commons + assetshare.all + zip + /apps/mcaps-site-packages/container/install + @@ -212,5 +218,11 @@ core.wcm.components.config zip + + com.adobe.aem.commons + assetshare.all + 3.8.0 + zip + diff --git a/core/src/main/java/com/mcaps/core/workflows/ScormExtractor.java b/core/src/main/java/com/mcaps/core/workflows/ScormExtractor.java index b023c81..22515ba 100644 --- a/core/src/main/java/com/mcaps/core/workflows/ScormExtractor.java +++ b/core/src/main/java/com/mcaps/core/workflows/ScormExtractor.java @@ -6,17 +6,12 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import javax.jcr.AccessDeniedException; -import javax.jcr.Node; -import javax.jcr.RepositoryException; -import javax.jcr.lock.LockException; -import javax.jcr.nodetype.ConstraintViolationException; -import javax.jcr.version.VersionException; - -import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.osgi.framework.Constants; @@ -35,9 +30,9 @@ import com.day.cq.dam.api.AssetManager; import com.day.cq.search.QueryBuilder; @Component(property = { - Constants.SERVICE_DESCRIPTION + "=Extracts a SCORM content package and puts it somewhere", + Constants.SERVICE_DESCRIPTION + "=Extracts a SCORM wrapped course package and puts it somewhere", Constants.SERVICE_VENDOR + "=Slalom LLC", - "process.label" + "=Extracts a SCORM content package" + "process.label" + "=001 Extract SCORM Course Package" }) public class ScormExtractor implements WorkflowProcess { private static final Logger log = LoggerFactory.getLogger(ScormExtractor.class); @@ -54,13 +49,21 @@ public class ScormExtractor implements WorkflowProcess { log.warn("SCORM WORKFLOW: MetaDataMap args: " + mdm.get("PROCESS_ARGS", "string").toString()); String[] params = mdm.get("PROCESS_ARGS", "string").toString().split(","); - //String excludePath = params[0]; - //String saveToLocation = params[1]; + + /* Initially created for Workflow Launcher + String excludePath = params[0]; + String saveToLocation = params[1]; String payloadPath = wi.getContentPath().replace("/jcr:content/renditions/original",""); - //unzipFile(payloadPath, saveToLocation); + unzipFile(payloadPath, saveToLocation); String nodePath = wi.getContentPath().replace(".zip/jcr:content/renditions/original",""); cleanup(nodePath, resourceResolver); + */ + + /* Created for manually triggered workflows */ + String payloadPath = wi.getContentPath().replace("/jcr:content/renditions/original",""); + String[] fileExtensions = params; + unzipFile(payloadPath, fileExtensions); } private void cleanup(String path, ResourceResolver resourceResolver) { @@ -77,9 +80,12 @@ public class ScormExtractor implements WorkflowProcess { }*/ } - private void unzipFile(String filePath, String outputFolder) { + private void unzipFile(String filePath, String[] validFileExtensions) {//, String outputFolder) { + String nodePath = filePath.replaceAll("(?:.[^/]+).zip(/jcr:content/renditions/original)?",""); + Pattern p = Pattern.compile("(?:.[^/]+).("+String.join("|", validFileExtensions)+")(/jcr:content/renditions/original)?"); // the pattern to search for + log.warn("SCORM WORKFLOW: inside unzipFile: filePath - " + filePath); - log.warn("SCORM WORKFLOW: inside unzipFile: outputFolder - " + outputFolder); + log.warn("SCORM WORKFLOW: inside unzipFile: nodePath - " + nodePath); Resource zipfile = resourceResolver.getResource(filePath); AssetManager am = resourceResolver.adaptTo(AssetManager.class); @@ -91,10 +97,19 @@ public class ScormExtractor implements WorkflowProcess { try (ZipInputStream zipIn = new ZipInputStream(is)) { ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { - String zipFilePath = outputFolder + File.separator + entry.getName(); - log.warn("SCORM WORKFLOW: zipFilePath - " + zipFilePath); + Matcher m = p.matcher(entry.getName()); + String matchedString = m.find()?m.group(0):"no match"; + log.warn("SCORM WORKFLOW: matcher - " + matchedString); + + String[] fileName = entry.getName().split("\\."); + String zipFilePath = nodePath + matchedString; + String zipFileExtension = fileName.length >= 2 ? fileName[fileName.length-1]:"none"; + boolean extensionIsValid = Arrays.stream(validFileExtensions).anyMatch(zipFileExtension::equals); + // Extract file - if (!entry.isDirectory()) { + if (!entry.isDirectory() && extensionIsValid) { + log.warn("SCORM WORKFLOW: zipFilePath - " + zipFilePath); + log.warn("SCORM WORKFLOW: zipFileExtension - " + zipFileExtension); File f = new File(entry.getName()); try (FileOutputStream fos = new FileOutputStream(f)) { byte[] buffer = new byte[1024]; diff --git a/ui.content/pom.xml b/ui.content/pom.xml index 6cd365b..3a61da6 100644 --- a/ui.content/pom.xml +++ b/ui.content/pom.xml @@ -102,5 +102,11 @@ uber-jar apis + + com.adobe.aem.commons + assetshare.all + 3.8.0 + zip +