Search in sources :

Example 1 with SerializationManager

use of org.apache.sling.ide.serialization.SerializationManager in project sling by apache.

the class JcrNode method createChild.

public void createChild(final String childNodeName, final String childNodeType) {
    String thisNodeType = getPrimaryType();
    final SerializationKind parentSk = getSerializationKind(thisNodeType);
    final SerializationKind childSk = getSerializationKind(childNodeType);
    final SerializationManager serializationManager = Activator.getDefault().getSerializationManager();
    if (parentSk == SerializationKind.METADATA_FULL) {
        createDomChild(childNodeName, childNodeType);
    } else if (parentSk == SerializationKind.FILE) {
        throw new IllegalStateException("cannot create child of nt:file");
    } else if (childSk == SerializationKind.FOLDER) {
        IWorkspaceRunnable r = new IWorkspaceRunnable() {

            @Override
            public void run(IProgressMonitor monitor) throws CoreException {
                IFolder newFolder = prepareCreateFolderChild(childNodeName);
                if (parentSk == SerializationKind.METADATA_PARTIAL) {
                    // when the parent is partial and we're creating a folder here,
                    // then we're running into a SLING-3639 type of problem
                    // the way around this is to make a 'pointer' in the 'root'
                    // .content.xml, and have a directory structure leaving to
                    // the new node, together with a .content.xml describing
                    // the type (unless it's a nt:folder that is)
                    // 1) 'pointer' in the 'root .content.xml'
                    createDomChild(childNodeName, null);
                // 2) directory structure is created above already
                // 3) new .content.xml is done below
                }
                if (!childNodeType.equals("nt:folder")) {
                    createVaultFile(newFolder, ".content.xml", childNodeType);
                }
            }
        };
        try {
            ResourcesPlugin.getWorkspace().run(r, null);
            if (childNodeType.equals("nt:folder") && parentSk == SerializationKind.FOLDER) {
                // trigger a publish, as folder creation is not propagated to 
                // the SlingLaunchpadBehavior otherwise
                //TODO: make configurable? Fix in Eclipse/WST?
                ServerUtil.triggerIncrementalBuild((IFolder) resource, null);
            }
        } catch (CoreException e) {
            Activator.getDefault().getPluginLogger().error("Error creating child " + childNodeName + ": " + e, e);
            e.printStackTrace();
            MessageDialog.openError(Display.getDefault().getActiveShell(), "Error creating node", "Error creating child of " + thisNodeType + " with type " + childNodeType + ": " + e);
            return;
        }
    } else if ((parentSk == SerializationKind.FOLDER || parentSk == SerializationKind.METADATA_PARTIAL) && childSk == SerializationKind.METADATA_FULL) {
        createVaultFile((IFolder) resource, serializationManager.getOsPath(childNodeName) + ".xml", childNodeType);
    } else if (parentSk == SerializationKind.FOLDER && childSk == SerializationKind.METADATA_PARTIAL) {
        //	        createVaultFile((IFolder)resource, childNodeName+".xml", childNodeType);
        IWorkspaceRunnable r = new IWorkspaceRunnable() {

            @Override
            public void run(IProgressMonitor monitor) throws CoreException {
                IFolder f = (IFolder) resource;
                IFolder newFolder = null;
                newFolder = f.getFolder(serializationManager.getOsPath(childNodeName));
                newFolder.create(true, true, new NullProgressMonitor());
                createVaultFile(newFolder, ".content.xml", childNodeType);
            }
        };
        try {
            ResourcesPlugin.getWorkspace().run(r, null);
        } catch (CoreException e) {
            Activator.getDefault().getPluginLogger().error("Error creating child " + childNodeName + ": " + e, e);
            e.printStackTrace();
            MessageDialog.openError(Display.getDefault().getActiveShell(), "Error creating node", "Error creating child of " + thisNodeType + " with type " + childNodeType + ": " + e);
            return;
        }
    } else if (parentSk != SerializationKind.FOLDER && childSk == SerializationKind.METADATA_PARTIAL) {
        createDomChild(childNodeName, childNodeType);
    } else {
        if (childNodeType.equals("nt:file")) {
            IFolder f = (IFolder) resource;
            createNtFile(f, childNodeName, childNodeType);
            return;
        }
        //TODO: FILE not yet supported
        Activator.getDefault().getPluginLogger().error("Cannot create child node of type " + childNodeType + ", serializationKind " + childSk + " under child node of type " + thisNodeType + ", serializationKind " + parentSk);
        MessageDialog.openWarning(Display.getDefault().getActiveShell(), "Error creating node", "Cannot create child of " + thisNodeType + " with type " + childNodeType + " (yet?)");
        return;
    }
}
Also used : IWorkspaceRunnable(org.eclipse.core.resources.IWorkspaceRunnable) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) CoreException(org.eclipse.core.runtime.CoreException) SerializationKind(org.apache.sling.ide.serialization.SerializationKind) SerializationManager(org.apache.sling.ide.serialization.SerializationManager) IFolder(org.eclipse.core.resources.IFolder)

Example 2 with SerializationManager

use of org.apache.sling.ide.serialization.SerializationManager in project sling by apache.

the class GenericJcrRootFile method pickResources.

public void pickResources(List<IResource> membersList) {
    final SerializationManager serializationManager = Activator.getDefault().getSerializationManager();
    for (Iterator<IResource> it = membersList.iterator(); it.hasNext(); ) {
        final IResource resource = it.next();
        final String resName = resource.getName();
        Iterator<JcrNode> it2;
        if (isRootContentXml()) {
            it2 = parent.children.iterator();
        } else {
            it2 = children.iterator();
        }
        while (it2.hasNext()) {
            JcrNode aChild = it2.next();
            if (resName.equals(serializationManager.getOsPath(aChild.getName()))) {
                // then pick this one
                it.remove();
                aChild.setResource(resource);
                break;
            }
        }
    }
}
Also used : SerializationManager(org.apache.sling.ide.serialization.SerializationManager) IResource(org.eclipse.core.resources.IResource)

Aggregations

SerializationManager (org.apache.sling.ide.serialization.SerializationManager)2 SerializationKind (org.apache.sling.ide.serialization.SerializationKind)1 IFolder (org.eclipse.core.resources.IFolder)1 IResource (org.eclipse.core.resources.IResource)1 IWorkspaceRunnable (org.eclipse.core.resources.IWorkspaceRunnable)1 CoreException (org.eclipse.core.runtime.CoreException)1 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)1 NullProgressMonitor (org.eclipse.core.runtime.NullProgressMonitor)1