How to delete rep:policy nodes from AUTHOR env under /content/ path ?
Hi,
Recently after migration from on prem to cloud, somehow rep:policy nodes are visible on author environments under /content/ path. This node is visible on many places under "content". its difficult to delete directly from CRX/DE, as its there on so many places, now i am trying to delete it programmatically, but this throwing error:
javax.jcr.nodetype.ConstraintViolationException: Item is protected.
i am using code as below:
@9944223
protected void doDelete(SlingHttpServletRequest request, SlingHttpServletResponse response) {
log.info("inside doDelete method");
String sirContentPath = "/content/sir";
try {
log.info("Runmode isAuthor {}", isAuthor());
adminSession = getAdminSession();
if (adminSession != null && isAuthor()) {
Node rootNode = adminSession.getNode(sirContentPath);
removePolicyNodesRecursively(rootNode);
//response.getWriter().write("rep:policy nodes removed successfully.");
} else {
log.info("Runmode isAuthor failed {}", isAuthor());
///response.getWriter().write("Session is null.");
}
} catch (RepositoryException e) {
log.error("RepositoryException: ", e);
//response.getWriter().write("Error occurred while removing re:policy nodes.");
}finally {
if (adminSession != null && adminSession.isLive()) {
adminSession.logout();
}
}
}
private void removePolicyNodesRecursively(Node node) throws RepositoryException {
if (node.hasNode("rep:policy")) {
Node policyNode = node.getNode("rep:policy");
log.info("Removed rep:policy node from {}", node.getPath());
if (policyNode != null) {
//try {
log.info("policyNode.getProperty:: {}", policyNode.getProperties().toString());
policyNode.remove();
//policyNode.setProperty("testValue", "true");
adminSession.save();
//policyNode.remove();
//policyNode.getSession().save();
log.info("rep:policy node Removed");
//} catch (RepositoryException e) {
//log.error("Exception while deleting node::{}", e);
//}
}
}
NodeIterator nodeIterator = node.getNodes();
while (nodeIterator.hasNext()) {
Node childNode = nodeIterator.nextNode();
removePolicyNodesRecursively(childNode);
}
}
private boolean isAuthor() {
return slingSettingsService.getRunModes().contains("author");
}
public Session getAdminSession() {
Session session = null;
log.info("Got the resolverFactory :::::::::::::::::::::: >>> {}", resolverFactory);
try {
Map<String, Object> param = new HashMap<>();
param.put(ResourceResolverFactory.SUBSERVICE, PRINCIPAL_SIR_SERVICE_USER);
//ResourceResolver resolver = resolverFactory.getServiceResourceResolver(param);
//log.debug("Success in getting the resolver: {}", resolver.getUserID());
ResourceResolver resolver = resolverFactory.getAdministrativeResourceResolver(null);
log.debug("resolver userID: {}", resolver.getUserID());
session = repository.loginAdministrative(null);
//session = resolver.adaptTo(Session.class);
} catch (Exception e) {
log.error("Error in getting the session {}", e.getMessage());
}
return session;
}
Appreciate your thoughts
Thanks
