import javax.xml.transform.stream.StreamSource;
import org.argeo.api.acr.Content;
-import org.argeo.api.acr.ContentUtils;
import org.argeo.api.acr.NamespaceUtils;
-import org.argeo.api.acr.spi.AbstractContent;
+import org.argeo.api.acr.spi.ContentProvider;
import org.argeo.api.acr.spi.ProvidedSession;
+import org.argeo.api.cms.CmsConstants;
+import org.argeo.cms.acr.AbstractContent;
+import org.argeo.cms.acr.ContentUtils;
import org.argeo.jcr.Jcr;
import org.argeo.jcr.JcrException;
import org.argeo.jcr.JcrUtils;
@Override
public Content getParent() {
+ if (Jcr.isRoot(getJcrNode())) // root
+ return null;
return new JcrContent(session, provider, jcrWorkspace, Jcr.getParentPath(getJcrNode()));
}
/*
* ADAPTERS
*/
+ @SuppressWarnings("unchecked")
public <A> A adapt(Class<A> clss) {
if (Source.class.isAssignableFrom(clss)) {
// try {
return super.adapt(clss);
}
+ @SuppressWarnings("unchecked")
@Override
public <C extends Closeable> C open(Class<C> clss) throws IOException, IllegalArgumentException {
if (InputStream.class.isAssignableFrom(clss)) {
return super.open(clss);
}
-// class JcrKeyIterator implements Iterator<QName> {
-// private final PropertyIterator propertyIterator;
-//
-// protected JcrKeyIterator(PropertyIterator propertyIterator) {
-// this.propertyIterator = propertyIterator;
-// }
-//
-// @Override
-// public boolean hasNext() {
-// return propertyIterator.hasNext();
-// }
-//
-// @Override
-// public QName next() {
-// Property property = null;
-// try {
-// property = propertyIterator.nextProperty();
-// // TODO map standard property names
-// return NamespaceUtils.parsePrefixedName(provider, property.getName());
-// } catch (RepositoryException e) {
-// throw new JcrException("Cannot retrieve property " + property, null);
-// }
-// }
-//
-// }
+ @Override
+ public ProvidedSession getSession() {
+ return session;
+ }
+
+ @Override
+ public ContentProvider getProvider() {
+ return provider;
+ }
+
+ @Override
+ public String getSessionLocalId() {
+ try {
+ return getJcrNode().getIdentifier();
+ } catch (RepositoryException e) {
+ throw new JcrException("Cannot get identifier for " + getJcrNode(), e);
+ }
+ }
+
+ /*
+ * STATIC UTLITIES
+ */
+ public static Content nodeToContent(Node node) {
+ if (node == null)
+ return null;
+ try {
+ ProvidedSession contentSession = (ProvidedSession) node.getSession()
+ .getAttribute(ProvidedSession.class.getName());
+ if (contentSession == null)
+ throw new IllegalArgumentException(
+ "Cannot adapt " + node + " to content, because it was not loaded from a content session");
+ return contentSession.get(CmsConstants.SYS_WORKSPACE + node.getPath());
+ } catch (RepositoryException e) {
+ throw new JcrException("Cannot adapt " + node + " to a content", e);
+ }
+ }
+
}