in core/src/main/java/org/apache/sling/cms/core/usergenerated/impl/ApproveUGCOperation.java [53:118]
public void run(SlingHttpServletRequest request, PostResponse response, SlingPostProcessor[] processors) {
log.trace("run");
try {
// calculate the paths
String path = request.getResource().getPath();
response.setPath(path);
log.debug("Approving UGC {}", path);
response.setParentLocation(request.getResource().getParent().getPath());
final List<Modification> changes = new ArrayList<>();
// perform the approval
String targetPath = request.getResource().getValueMap().get("targetpath", String.class);
APPROVE_ACTION action = APPROVE_ACTION
.valueOf(request.getResource().getValueMap().get("approveaction", String.class));
if (action == APPROVE_ACTION.MOVE) {
ResourceUtil.getOrCreateResource(request.getResourceResolver(), targetPath,
Collections.singletonMap(JcrConstants.JCR_PRIMARYTYPE, JcrResourceConstants.NT_SLING_FOLDER),
JcrResourceConstants.NT_SLING_FOLDER, false);
for (Resource resource : request.getResource().getChildren()) {
log.debug("Moving {} to {}", resource.getPath(), targetPath);
changes.add(Modification.onMoved(resource.getPath(), targetPath));
request.getResourceResolver().move(resource.getPath(), targetPath);
}
changes.add(Modification.onDeleted(request.getResource().getPath()));
request.getResourceResolver().delete(request.getResource());
} else {
ModifiableValueMap mvm = request.getResource().adaptTo(ModifiableValueMap.class);
mvm.put("published", true);
changes.add(Modification.onModified(request.getResource().getPath()));
}
// invoke processors
if (processors != null) {
for (SlingPostProcessor processor : processors) {
processor.process(request, changes);
}
}
// check modifications for remaining postfix and store the base path
final Map<String, String> modificationSourcesContainingPostfix = new HashMap<>();
final Set<String> allModificationSources = new HashSet<>(changes.size());
for (final Modification modification : changes) {
final String source = modification.getSource();
if (source != null) {
allModificationSources.add(source);
final int atIndex = source.indexOf('@');
if (atIndex > 0) {
modificationSourcesContainingPostfix.put(source.substring(0, atIndex), source);
}
}
}
request.getResourceResolver().commit();
} catch (
Exception e) {
log.error("Exception during response processing.", e);
response.setError(e);
}
}