use of org.apache.sling.distribution.SimpleDistributionRequest in project sling by apache.
the class KryoContentSerializerTest method testExtract.
@Test
public void testExtract() throws Exception {
KryoContentSerializer kryoContentSerializer = new KryoContentSerializer("kryo");
DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/libs");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
NavigableMap<String, List<String>> nodeFilters = new TreeMap<String, List<String>>();
NavigableMap<String, List<String>> propertyFilters = new TreeMap<String, List<String>>();
try {
DistributionExportFilter filter = DistributionExportFilter.createFilter(request, nodeFilters, propertyFilters);
kryoContentSerializer.exportToStream(resourceResolver, new DistributionExportOptions(request, filter), outputStream);
byte[] bytes = outputStream.toByteArray();
assertNotNull(bytes);
assertTrue(bytes.length > 0);
} finally {
outputStream.close();
}
}
use of org.apache.sling.distribution.SimpleDistributionRequest in project sling by apache.
the class VltUtils method sanitizeRequest.
public static DistributionRequest sanitizeRequest(DistributionRequest request) {
DistributionRequestType requestType = request.getRequestType();
if (!DistributionRequestType.ADD.equals(requestType) && !DistributionRequestType.DELETE.equals(requestType)) {
return request;
}
Set<String> deepPaths = new HashSet<String>();
List<String> paths = new ArrayList<String>();
Map<String, String[]> filters = new HashMap<String, String[]>();
for (String path : request.getPaths()) {
if (VltUtils.findParent(path, "rep:policy") != null) {
if (DistributionRequestType.DELETE.equals(requestType)) {
// vlt cannot properly install delete of rep:policy subnodes
throw new IllegalArgumentException("cannot distribute DELETE node " + path);
} else if (DistributionRequestType.ADD.equals(requestType)) {
String newPath = VltUtils.findParent(path, "rep:policy") + "/rep:policy";
paths.add(newPath);
deepPaths.add(newPath);
log.debug("changed distribution path {} to deep path {}", path, newPath);
}
} else if (request.isDeep(path)) {
paths.add(path);
deepPaths.add(path);
} else {
paths.add(path);
}
filters.put(path, request.getFilters(path));
}
return new SimpleDistributionRequest(requestType, paths.toArray(new String[paths.size()]), deepPaths, filters);
}
use of org.apache.sling.distribution.SimpleDistributionRequest in project sling by apache.
the class KryoContentSerializerTest method testBuildAndInstallOnMultipleShallowPaths.
@Test
public void testBuildAndInstallOnMultipleShallowPaths() throws Exception {
String type = "kryo";
DistributionContentSerializer contentSerializer = new KryoContentSerializer(type);
String tempFilesFolder = "target";
String[] nodeFilters = new String[0];
String[] propertyFilters = new String[0];
DistributionPackageBuilder packageBuilder = new FileDistributionPackageBuilder(type, contentSerializer, tempFilesFolder, null, nodeFilters, propertyFilters);
DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/libs/sub", "/libs/sameLevel");
DistributionPackage distributionPackage = packageBuilder.createPackage(resourceResolver, request);
Resource resource = resourceResolver.getResource("/libs/sub");
resourceResolver.delete(resource);
resource = resourceResolver.getResource("/libs/sameLevel");
resourceResolver.delete(resource);
resourceResolver.commit();
assertTrue(packageBuilder.installPackage(resourceResolver, distributionPackage));
assertNotNull(resourceResolver.getResource("/libs"));
assertNotNull(resourceResolver.getResource("/libs/sub"));
assertNotNull(resourceResolver.getResource("/libs/sameLevel"));
}
use of org.apache.sling.distribution.SimpleDistributionRequest in project sling by apache.
the class VltUtilsTest method testEmptyFilter.
@Test
public void testEmptyFilter() throws Exception {
DistributionRequest request = new SimpleDistributionRequest(ADD, true, "/foo");
NavigableMap<String, List<String>> nodeFilters = new TreeMap<String, List<String>>();
NavigableMap<String, List<String>> propFilters = new TreeMap<String, List<String>>();
WorkspaceFilter filter = VltUtils.createFilter(request, nodeFilters, propFilters);
assertNotNull(filter);
assertNotNull(filter.getPropertyFilterSets());
List<PathFilterSet> propFilterSet = filter.getPropertyFilterSets();
assertEquals(1, propFilterSet.size());
PathFilterSet propFilter = propFilterSet.get(0);
assertTrue(propFilter.getEntries().isEmpty());
assertEquals("/", propFilter.getRoot());
assertNotNull(filter.getFilterSets());
List<PathFilterSet> nodeFilterSet = filter.getFilterSets();
assertEquals(1, nodeFilterSet.size());
PathFilterSet nodeFilter = nodeFilterSet.get(0);
assertTrue(nodeFilter.getEntries().isEmpty());
assertEquals("/foo", nodeFilter.getRoot());
}
use of org.apache.sling.distribution.SimpleDistributionRequest in project sling by apache.
the class PlumberImpl method persist.
/**
* Persists pipe change if big enough, or ended, and eventually distribute changes
* @param resolver
* @param pipe
* @param paths
* @param currentResource if running, null if ended
* @throws PersistenceException
*/
protected void persist(ResourceResolver resolver, Pipe pipe, Set<String> paths, Resource currentResource) throws Exception {
if (pipe.modifiesContent() && resolver.hasChanges() && !pipe.isDryRun()) {
if (currentResource == null || paths.size() % bufferSize == 0) {
log.info("[{}] saving changes...", pipe.getName());
writeStatus(pipe, currentResource == null ? STATUS_FINISHED : currentResource.getPath());
resolver.commit();
}
if (currentResource == null && distributor != null && StringUtils.isNotBlank(pipe.getDistributionAgent())) {
log.info("a distribution agent is configured, will try to distribute the changes");
DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, true, paths.toArray(new String[paths.size()]));
DistributionResponse response = distributor.distribute(pipe.getDistributionAgent(), resolver, request);
log.info("distribution response : {}", response);
}
}
}
Aggregations