X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Facr%2FJcrContentProvider.java;fp=org.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Facr%2FJcrContentProvider.java;h=258facc6c1b6c3658fc786ef4a45339eaaab8eab;hb=311d6e47ad278fd00d1ad15fe9d59be47e23e385;hp=0e641b19a7c0f8bc06522dae41f68a997530a6c3;hpb=f0cbf84181c2dbef459150e75d403aa66c12de1d;p=gpl%2Fargeo-jcr.git diff --git a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java index 0e641b1..258facc 100644 --- a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java +++ b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java @@ -73,7 +73,7 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext { return new JcrContent(contentSession, this, jcrWorkspace, jcrPath).exists(); } - public Session getJcrSession(ProvidedSession contentSession, String jcrWorkspace) { + protected JcrSessionAdapter getJcrSessionAdapter(ProvidedSession contentSession) { JcrSessionAdapter sessionAdapter = sessionAdapters.get(contentSession); if (sessionAdapter == null) { final JcrSessionAdapter newSessionAdapter = new JcrSessionAdapter(jcrRepository, contentSession, @@ -82,7 +82,11 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext { contentSession.onClose().thenAccept((s) -> newSessionAdapter.close()); sessionAdapter = newSessionAdapter; } + return sessionAdapter; + } + public Session getJcrSession(ProvidedSession contentSession, String jcrWorkspace) { + JcrSessionAdapter sessionAdapter = getJcrSessionAdapter(contentSession); Session jcrSession = sessionAdapter.getSession(jcrWorkspace); return jcrSession; } @@ -91,6 +95,32 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext { return getJcrSession(((ProvidedContent) content).getSession(), jcrWorkspace); } + /* + * WRITE + */ + public Node openForEdit(ProvidedSession contentSession, String jcrWorkspace, String jcrPath) { + try { + if (contentSession.isEditing()) { + JcrSessionAdapter sessionAdapter = getJcrSessionAdapter(contentSession); + return sessionAdapter.openForEdit(jcrWorkspace, jcrPath); + } else { + return getJcrSession(contentSession, jcrWorkspace).getNode(jcrPath); + } + } catch (RepositoryException e) { + throw new JcrException("Cannot open for edit " + jcrPath + " in workspace " + jcrWorkspace, e); + } + } + + @Override + public void persist(ProvidedSession contentSession) { + try { + JcrSessionAdapter sessionAdapter = getJcrSessionAdapter(contentSession); + sessionAdapter.persist(); + } catch (RepositoryException e) { + throw new JcrException("Cannot persist " + contentSession, e); + } + } + @Override public String getMountPath() { return mountPath;