// make sure path and related members are set
if (fragmentsElement.getPath() != null)
{
if (!fragmentsElement.getPath().equals(fragmentsElement.getId()))
{
throw new NodeException("Fragments/page paths and ids must match!");
}
}
else
{
throw new NodeException("Fragments/page paths and ids must be set!");
}
// validate fragments element
if (!fragmentsElement.validateFragments())
{
throw new NodeException("Fragments hierarchy invalid for fragments/page: " + fragmentsElement.getPath() + ", not updated.");
}
try
{
// set parent
boolean newPageElement = false;
FolderImpl parentFolder = getNodeFolder(fragmentsElement.getPath());
if (fragmentsElement.getParent() == null)
{
fragmentsElement.setParent(parentFolder);
newPageElement = true;
}
// enable permissions/constraints
fragmentsElement.setPermissionsEnabled(handlerFactory.getPermissionsEnabled());
fragmentsElement.setConstraintsEnabled(handlerFactory.getConstraintsEnabled());
// check for edit/view access
fragmentsElement.checkAccess(checkEditAccess ? JetspeedActions.EDIT : JetspeedActions.VIEW);
// update fragments/page
handlerFactory.getDocumentHandler(documentType).updateDocument(fragmentsElement);
// update parent folder
if (parentFolder != null)
{
NodeSetImpl parentAllNodes = (NodeSetImpl)parentFolder.getAllNodes();
if (!parentAllNodes.contains(fragmentsElement))
{
// add new fragments/page element
parentAllNodes.add(fragmentsElement);
newPageElement = true;
}
else if (parentAllNodes.get(fragmentsElement.getPath()) != fragmentsElement)
{
// remove stale fragments/page element and add updated element
parentAllNodes.remove(fragmentsElement);
parentAllNodes.add(fragmentsElement);
}
}
// notify page manager listeners
if (newPageElement)
{
notifyNewNode(fragmentsElement);
}
else
{
notifyUpdatedNode(fragmentsElement);
}
}
catch (FolderNotFoundException fnfe)
{
throw new NodeException(fnfe.getMessage());
}
}