PackageHelper.java 5.72 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.jcr.vault.fs.api.Filter
 *  com.day.jcr.vault.fs.api.FilterSet
 *  com.day.jcr.vault.fs.api.PathFilterSet
 *  com.day.jcr.vault.fs.api.ProgressTrackerListener
 *  com.day.jcr.vault.fs.api.ProgressTrackerListener$Mode
 *  com.day.jcr.vault.fs.api.WorkspaceFilter
 *  com.day.jcr.vault.fs.config.DefaultWorkspaceFilter
 *  com.day.jcr.vault.fs.filter.DefaultPathFilter
 *  com.day.jcr.vault.packaging.JcrPackage
 *  com.day.jcr.vault.packaging.JcrPackageDefinition
 *  com.day.jcr.vault.packaging.JcrPackageManager
 *  com.day.jcr.vault.packaging.Packaging
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  org.apache.sling.commons.json.JSONArray
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.mobile.appcache.impl;

import com.day.jcr.vault.fs.api.Filter;
import com.day.jcr.vault.fs.api.FilterSet;
import com.day.jcr.vault.fs.api.PathFilterSet;
import com.day.jcr.vault.fs.api.ProgressTrackerListener;
import com.day.jcr.vault.fs.api.WorkspaceFilter;
import com.day.jcr.vault.fs.config.DefaultWorkspaceFilter;
import com.day.jcr.vault.fs.filter.DefaultPathFilter;
import com.day.jcr.vault.packaging.JcrPackage;
import com.day.jcr.vault.packaging.JcrPackageDefinition;
import com.day.jcr.vault.packaging.JcrPackageManager;
import com.day.jcr.vault.packaging.Packaging;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.sling.commons.json.JSONArray;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PackageHelper
implements ProgressTrackerListener {
    private static final Logger LOGGER = LoggerFactory.getLogger(PackageHelper.class);
    private static final String PACKAGES_ROOT = "/etc/packages";
    private static final String PACKAGE_GROUP_MOBILE_APP_UPDATES = "mobileapp/update";
    private Packaging packagingService;

    public PackageHelper(Packaging packagingService) {
        this.packagingService = packagingService;
    }

    public String createZipPackage(Session session, String packageName, Node cacheMetadataNode, Node zipCacheNode) throws Exception {
        String targetZipPath = null;
        try {
            String packageDestFolderPath = "/etc/packages/mobileapp/update";
            targetZipPath = packageDestFolderPath + "/" + this.getPackageZipName(packageName);
            JcrPackageManager packageManager = this.packagingService.getPackageManager(session);
            JcrPackage cqPackage = null;
            if (!session.nodeExists(targetZipPath)) {
                LOGGER.info("Creating CQ Package for mobile app cache mobileapp/update:" + packageName);
                cqPackage = packageManager.create("mobileapp/update", packageName);
            } else {
                LOGGER.info("Updating CQ Package for mobile app cache mobileapp/update:" + packageName);
                Node packageNode = session.getNode(targetZipPath);
                cqPackage = packageManager.open(packageNode);
            }
            JSONArray filterList = new JSONArray();
            JSONObject filter = new JSONObject();
            LOGGER.debug("Adding filter: " + cacheMetadataNode.getPath());
            filter.put("root", (Object)cacheMetadataNode.getPath());
            filter.put("rules", (Object)new JSONArray());
            filterList.put((Object)filter);
            filter = new JSONObject();
            LOGGER.debug("Adding filter: " + zipCacheNode.getPath());
            filter.put("root", (Object)zipCacheNode.getPath());
            filter.put("rules", (Object)new JSONArray());
            filterList.put((Object)filter);
            PackageHelper.updateFilter(cqPackage.getDefinition(), filterList);
            packageManager.assemble(cqPackage, (ProgressTrackerListener)this);
        }
        catch (RepositoryException ex) {
            throw new Exception("Failed to create package for replication", (Throwable)ex);
        }
        return targetZipPath;
    }

    private String getPackageZipName(String packageName) throws RepositoryException {
        return packageName + ".zip";
    }

    private static void updateFilter(JcrPackageDefinition def, JSONArray filterList) throws JSONException {
        DefaultWorkspaceFilter packFilter = new DefaultWorkspaceFilter();
        for (int i = 0; i < filterList.length(); ++i) {
            JSONObject filter = filterList.getJSONObject(i);
            String root = filter.getString("root");
            PathFilterSet filterSet = new PathFilterSet(root);
            JSONArray rules = filter.getJSONArray("rules");
            for (int j = 0; j < rules.length(); ++j) {
                JSONObject rule = rules.getJSONObject(j);
                String pattern = rule.getString("pattern");
                String modifier = rule.getString("modifier");
                if (modifier.equals("include")) {
                    filterSet.addInclude((Filter)new DefaultPathFilter(pattern));
                    continue;
                }
                if (!modifier.equals("exclude")) continue;
                filterSet.addExclude((Filter)new DefaultPathFilter(pattern));
            }
            packFilter.add(filterSet);
        }
        def.setFilter((WorkspaceFilter)packFilter, false);
    }

    public void onMessage(ProgressTrackerListener.Mode mode, String s, String s2) {
        LOGGER.debug(String.valueOf((Object)mode) + ":" + s + ":" + s2);
    }

    public void onError(ProgressTrackerListener.Mode mode, String s, Exception ex) {
        LOGGER.error(String.valueOf((Object)mode) + ":" + s, (Throwable)ex);
    }
}