private JCRNodeWrapper dereference(JCRNodeWrapper parent, String refPath) throws RepositoryException { JCRStoreProvider provider = parent.getProvider(); JCRNodeWrapper wrapper; Node referencedNode = parent.getRealNode().getProperty("j:node").getNode(); String fullPath = parent.getPath() + DEREF_SEPARATOR + refPath; if (parent.getPath().startsWith(referencedNode.getPath())) { throw new PathNotFoundException(fullPath); } String refRootName = StringUtils.substringBefore(refPath, "/"); if (!referencedNode.getName().equals(refRootName)) { throw new PathNotFoundException(fullPath); } refPath = StringUtils.substringAfter(refPath, "/"); if (refPath.equals("")) { wrapper = provider.getNodeWrapper(referencedNode, fullPath, parent, this); } else { Node node = referencedNode.getNode(refPath); wrapper = provider.getNodeWrapper(node, fullPath, null, this); } sessionCacheByPath.put(fullPath, wrapper); return wrapper; }
void unregisterNewNode(JCRNodeWrapper node) { if (!newNodes.isEmpty()) { newNodes.remove(node.getPath()); try { if (node.hasNodes()) { NodeIterator it = node.getNodes(); while (it.hasNext()) { unregisterNewNode((JCRNodeWrapper) it.next()); } } } catch (RepositoryException e) { logger.warn("Error unregistering new nodes", e); } } }
void registerNewNode(JCRNodeWrapper node) { newNodes.put(node.getPath(), node); }
public JCRNodeWrapper getNodeByUUID(final String uuid, final boolean checkVersion) throws ItemNotFoundException, RepositoryException { if (sessionCacheByIdentifier.containsKey(uuid)) { return sessionCacheByIdentifier.get(uuid); } RepositoryException originalEx = null; for (JCRStoreProvider provider : sessionFactory.getProviderList()) { if (!provider.isInitialized()) { logger.debug( "Provider " + provider.getKey() + " / " + provider.getClass().getName() + " is not yet initialized, skipping..."); continue; } if (provider instanceof JackrabbitStoreProvider && JCRContentUtils.isNotJcrUuid(uuid)) { // not a valid UUID, probably a VFS node continue; } try { Session session = getProviderSession(provider); if (session instanceof JahiaSessionImpl && getUser() != null && sessionFactory.getCurrentAliasedUser() != null && sessionFactory.getCurrentAliasedUser().equals(getUser())) { ((JahiaSessionImpl) session).toggleThisSessionAsAliased(); } Node n = session.getNodeByIdentifier(uuid); JCRNodeWrapper wrapper = provider.getNodeWrapper(n, this); if (getUser() != null && sessionFactory.getCurrentAliasedUser() != null && !sessionFactory.getCurrentAliasedUser().equals(getUser())) { JCRTemplate.getInstance() .doExecuteWithUserSession( sessionFactory.getCurrentAliasedUser().getUsername(), session.getWorkspace().getName(), getLocale(), new JCRCallback<Object>() { public Object doInJCR(JCRSessionWrapper session) throws RepositoryException { return session.getNodeByUUID(uuid, checkVersion); } }); } if (checkVersion && (versionDate != null || versionLabel != null)) { wrapper = getFrozenVersionAsRegular(n, provider); } sessionCacheByIdentifier.put(uuid, wrapper); sessionCacheByPath.put(wrapper.getPath(), wrapper); return wrapper; } catch (ItemNotFoundException ee) { // All good if (originalEx == null) { originalEx = ee; } } catch (UnsupportedRepositoryOperationException uso) { logger.debug( "getNodeByUUID unsupported by : " + provider.getKey() + " / " + provider.getClass().getName()); if (originalEx == null) { originalEx = uso; } } catch (RepositoryException ex) { if (originalEx == null) { originalEx = ex; } logger.warn( "repository exception : " + provider.getKey() + " / " + provider.getClass().getName() + " : " + ex.getMessage()); } } if (originalEx != null) { if (originalEx instanceof ItemNotFoundException) { throw originalEx; } else { throw new ItemNotFoundException(uuid, originalEx); } } throw new ItemNotFoundException(uuid); }