package nl.gertontenham.magnolia.templating.tools.form.action; import info.magnolia.cms.core.Path; import info.magnolia.jcr.util.NodeUtil; import info.magnolia.ui.form.EditorCallback; import info.magnolia.ui.form.EditorValidator; import info.magnolia.ui.form.action.SaveFormAction; import info.magnolia.ui.form.action.SaveFormActionDefinition; import info.magnolia.ui.vaadin.integration.jcr.JcrNewNodeAdapter; import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter; import org.apache.commons.lang.StringUtils; import javax.jcr.Node; import javax.jcr.RepositoryException; /** * Save action for content tags and folders */ public class SaveTagFormAction extends SaveFormAction { public SaveTagFormAction(SaveFormActionDefinition definition, JcrNodeAdapter item, EditorCallback callback, EditorValidator validator) { super(definition, item, callback, validator); } @Override protected void setNodeName(Node node, JcrNodeAdapter item) throws RepositoryException { JcrNodeAdapter itemChanged = item; // Set the Node Composite Name if (itemChanged instanceof JcrNewNodeAdapter || !node.getName().startsWith(defineNodeName(node))) { final String newNodeName = generateUniqueNodeNameForTag(node); itemChanged.setNodeName(newNodeName); NodeUtil.renameNode(node, newNodeName); } } /** * Create a new Node Unique NodeName. */ private String generateUniqueNodeNameForTag(final Node node) throws RepositoryException { String newNodeName = defineNodeName(node); return Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), newNodeName); } /** * Define the Node Name. */ private String defineNodeName(final Node node) throws RepositoryException { String parentPathName = node.getParent().getName(); String nodeName = node.getProperty("name").getString().trim(); StringBuilder newLabel = new StringBuilder(parentPathName.replaceAll("[aeiou]\\B", "").toLowerCase()). append(StringUtils.isNotBlank(parentPathName) ? "-" : ""). append(nodeName.replaceAll("\\s+", "-").toLowerCase()); return Path.getValidatedLabel(newLabel.toString()); } }