From 9ea1b560159f398b6bd262799c7c236fc0171425 Mon Sep 17 00:00:00 2001 From: Larry L Date: Sat, 17 Feb 2024 00:06:10 +0000 Subject: [PATCH] Additional unzip code update pom.xml --- .vscode/settings.json | 3 + .../mcaps/core/workflows/ScormExtractor.java | 66 +++++++++++-------- pom.xml | 2 +- 3 files changed, 41 insertions(+), 30 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7b016a8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.compile.nullAnalysis.mode": "automatic" +} \ No newline at end of file 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 5698dc4..142e5dc 100644 --- a/core/src/main/java/com/mcaps/core/workflows/ScormExtractor.java +++ b/core/src/main/java/com/mcaps/core/workflows/ScormExtractor.java @@ -6,14 +6,11 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import javax.jcr.Node; -import javax.jcr.Session; - +import org.apache.sling.api.resource.Resource; +import org.apache.sling.api.resource.ResourceResolver; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; @@ -25,12 +22,9 @@ import com.adobe.granite.workflow.WorkflowSession; import com.adobe.granite.workflow.exec.WorkItem; import com.adobe.granite.workflow.exec.WorkflowProcess; import com.adobe.granite.workflow.metadata.MetaDataMap; - -import com.day.cq.search.PredicateGroup; -import com.day.cq.search.Query; +import com.day.cq.dam.api.Asset; +import com.day.cq.dam.api.AssetManager; import com.day.cq.search.QueryBuilder; -import com.day.cq.search.result.Hit; -import com.day.cq.search.result.SearchResult; @Component(property = { Constants.SERVICE_DESCRIPTION + "=Extracts a SCORM content package and puts it somewhere", @@ -40,51 +34,65 @@ import com.day.cq.search.result.SearchResult; public class ScormExtractor implements WorkflowProcess { private static final Logger log = LoggerFactory.getLogger(ScormExtractor.class); + ResourceResolver resourceResolver; + @Reference QueryBuilder queryBuilder; @Override - public void execute(WorkItem arg0, WorkflowSession arg1, MetaDataMap arg2) throws WorkflowException { + public void execute(WorkItem wi, WorkflowSession ws, MetaDataMap mdm) throws WorkflowException { - log.warn("SCORM WORKFLOW: MetaDataMap args: " + arg2.get("PROCESS_ARGS", "string").toString()); - String[] params = arg2.get("PROCESS_ARGS", "string").toString().split(","); - String attachmentsPath = params[0]; + resourceResolver = ws.adaptTo(ResourceResolver.class); + + log.warn("SCORM WORKFLOW: MetaDataMap args: " + mdm.get("PROCESS_ARGS", "string").toString()); + String[] params = mdm.get("PROCESS_ARGS", "string").toString().split(","); + //String attachmentsPath = params[0]; String saveToLocation = params[1]; - log.warn("SCORM WORKFLOW: payload path: " + arg0.getContentPath()); - String payloadPath = arg0.getWorkflowData().getPayload().toString(); - Map map = new HashMap (); - map.put("path", payloadPath + "/" + attachmentsPath); - unzipFile(saveToLocation, payloadPath); - //File saveLocationFolder = new File(saveToLocation); - //if (!saveLocationFolder.exists()) { - // saveLocationFolder.mkdirs(); - //} - - map.put("type", "nt:file"); - //throw new UnsupportedOperationException("Unimplemented method 'execute'"); + + log.warn("SCORM WORKFLOW: payload path: " + wi.getContentPath()); + String payloadPath = wi.getWorkflowData().getPayload().toString(); + unzipFile(payloadPath, saveToLocation); + } private void unzipFile(String filePath, String outputFolder) { - try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(filePath))) { + log.warn("SCORM WORKFLOW: inside unzipFile: filePath - " + filePath); + log.warn("SCORM WORKFLOW: inside unzipFile: outputFolder - " + outputFolder); + + Resource zipfile = resourceResolver.getResource(filePath); + AssetManager am = resourceResolver.adaptTo(AssetManager.class); + Asset a = zipfile.adaptTo(Asset.class); + log.warn("SCORM WORKFLOW: Asset - " + a); + InputStream is = a.getOriginal().getStream(); + //NOTE: for some reason 'a' is returning NULL + + 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); + // Extract file if (!entry.isDirectory()) { - try (FileOutputStream fos = new FileOutputStream(filePath)) { + File f = new File(entry.getName()); + try (FileOutputStream fos = new FileOutputStream(f)) { byte[] buffer = new byte[1024]; int length; while ((length = zipIn.read(buffer)) >= 0) { fos.write(buffer, 0, length); } + InputStream fis = new FileInputStream(f); + am.createAsset(zipFilePath, fis, null, true); + log.warn("SCORM WORKFLOW: file extracted: " + zipFilePath); } } + zipIn.closeEntry(); entry = zipIn.getNextEntry(); } } catch (FileNotFoundException e) { + log.error(e.getMessage()); e.printStackTrace(); } catch (IOException e) { + log.error(e.getMessage()); e.printStackTrace(); } } diff --git a/pom.xml b/pom.xml index 482307f..8b630a1 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ - localhost + 192.168.248.22 4502 localhost 4503