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
+