PackageHelper.java
5.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
* 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);
}
}