Author: stefanegli Date: Thu Sep 5 14:19:08 2013 New Revision: 1520324 URL: http://svn.apache.org/r1520324 Log: SLING-2985 : improvements in the content-browser : creation of new node for more cases supported
Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java?rev=1520324&r1=1520323&r2=1520324&view=diff ============================================================================== --- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java (original) +++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java Thu Sep 5 14:19:08 2013 @@ -37,6 +37,7 @@ import org.eclipse.core.resources.IResou import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; @@ -182,6 +183,15 @@ public class GenericJcrRootFile extends return file; } + @Override + public void createChild(String nodeName) { + Element element = document.createElement(nodeName); + element.setAttribute("jcr:primaryType", "nt:unstructured"); + Node childDomNode = document.getFirstChild().appendChild(element); + JcrNode childNode = new JcrNode(this, childDomNode, null); + underlying.save(); + } + public void save() { try { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java?rev=1520324&r1=1520323&r2=1520324&view=diff ============================================================================== --- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java (original) +++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java Thu Sep 5 14:19:08 2013 @@ -16,6 +16,7 @@ */ package org.apache.sling.ide.eclipse.ui.nav.model; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Arrays; import java.util.Collection; @@ -43,8 +44,11 @@ import org.eclipse.core.resources.mappin import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IActionFilter; import org.eclipse.ui.IContributorResourceAdapter; import org.eclipse.ui.model.WorkbenchLabelProvider; @@ -554,11 +558,34 @@ public class JcrNode implements IAdaptab } public void createChild(String nodeName) { - Element element = domNode.getOwnerDocument().createElement(nodeName); - element.setAttribute("jcr:primaryType", "nt:unstructured"); - Node childDomNode = domNode.appendChild(element); - JcrNode childNode = new JcrNode(this, childDomNode, null); - underlying.save(); + if (domNode==null) { + // then we're not in the context of a .content.xml file yet + // so we need to create one + final String minimalContentXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><jcr:root xmlns:sling=\"http://sling.apache.org/jcr/sling/1.0\" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\"/>"; + if (resource instanceof IFolder) { + IFolder folder = (IFolder)resource; + IFile file = folder.getFile(nodeName+".xml"); + try { + file.create(new ByteArrayInputStream(minimalContentXml.getBytes()), true, new NullProgressMonitor()); + } catch (CoreException e) { + //TODO proper logging + e.printStackTrace(); + } + } else { + MessageDialog.openInformation(Display.getDefault().getActiveShell(), + "Cannot create JCR node on a File", "Creating a JCR node on a File is not yet supported"); + } + } else { + try{ + Element element = domNode.getOwnerDocument().createElement(nodeName); + element.setAttribute("jcr:primaryType", "nt:unstructured"); + Node childDomNode = domNode.appendChild(element); + JcrNode childNode = new JcrNode(this, childDomNode, null); + underlying.save(); + } catch(Exception e) { + MessageDialog.openError(Display.getDefault().getActiveShell(), "Error creating new JCR node", "The following error occurred: "+e.getMessage()); + } + } } public void delete() {