You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2005/11/11 18:00:21 UTC
svn commit: r332599 - in /lenya/trunk/src:
java/org/apache/lenya/cms/migration/ java/org/apache/lenya/cms/repo/
modules/jackrabbit/repository/repository/nodetypes/
modules/jcr/java/src/org/apache/lenya/cms/jcr/
Author: andreas
Date: Fri Nov 11 09:00:00 2005
New Revision: 332599
URL: http://svn.apache.org/viewcvs?rev=332599&view=rev
Log:
JCR integration: implemented writing and reading document content
Modified:
lenya/trunk/src/java/org/apache/lenya/cms/migration/Migrate14.java
lenya/trunk/src/java/org/apache/lenya/cms/repo/ContentNode.java
lenya/trunk/src/java/org/apache/lenya/cms/repo/Document.java
lenya/trunk/src/modules/jackrabbit/repository/repository/nodetypes/custom_nodetypes.xml
lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRContentNode.java
lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocument.java
lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocumentBuilder.java
lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRSiteNodeBuilder.java
Modified: lenya/trunk/src/java/org/apache/lenya/cms/migration/Migrate14.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/migration/Migrate14.java?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/migration/Migrate14.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/migration/Migrate14.java Fri Nov 11 09:00:00 2005
@@ -19,21 +19,39 @@
import java.io.File;
import java.io.FileFilter;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
import org.apache.lenya.cms.repo.Area;
import org.apache.lenya.cms.repo.ContentNode;
+import org.apache.lenya.cms.repo.Document;
import org.apache.lenya.cms.repo.Publication;
import org.apache.lenya.cms.repo.Repository;
import org.apache.lenya.cms.repo.RepositoryException;
import org.apache.lenya.cms.repo.RepositoryManager;
import org.apache.lenya.cms.repo.Session;
import org.apache.lenya.cms.repo.SiteNode;
+import org.apache.lenya.xml.DocumentHelper;
import org.apache.tools.ant.BuildException;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.helpers.DefaultHandler;
/**
* Migrate Lenya 1.4-dev content.
*/
public class Migrate14 {
+ /**
+ * Main method.
+ * @param args The command line arguments: <webapp-directory>
+ * <repository-factory-class>
+ */
public static void main(String[] args) {
if (args.length != 2) {
@@ -146,8 +164,7 @@
importChildren(contentDir, repoArea, null);
}
- protected void importNode(File docDir, Area area, SiteNode parent)
- throws RepositoryException {
+ protected void importNode(File docDir, Area area, SiteNode parent) throws RepositoryException {
String nodeId = docDir.getName();
String parentPath = "";
if (parent != null) {
@@ -185,8 +202,21 @@
String fileName = file.getName();
String suffix = fileName.substring("index_".length());
String language = suffix.substring(0, suffix.length() - ".xml".length());
- contentNode.addDocument(language);
System.out.println(" language [" + language + "]");
+
+ Document document = contentNode.addDocument(language);
+
+ try {
+ Transformer transformer = TransformerFactory.newInstance().newTransformer();
+ Source source = new StreamSource(file);
+ Result result = new StreamResult(document.getOutputStream());
+ transformer.transform(source, result);
+ } catch (RepositoryException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new RepositoryException(e);
+ }
+
}
protected void importChildren(File docDir, Area area, SiteNode parentNode)
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repo/ContentNode.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/repo/ContentNode.java?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repo/ContentNode.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repo/ContentNode.java Fri Nov 11 09:00:00 2005
@@ -20,7 +20,7 @@
Document[] getDocuments() throws RepositoryException;
- void addDocument(String language) throws RepositoryException;
+ Document addDocument(String language) throws RepositoryException;
void removeDocument(Document document) throws RepositoryException;
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repo/Document.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/repo/Document.java?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repo/Document.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repo/Document.java Fri Nov 11 09:00:00 2005
@@ -16,10 +16,23 @@
*/
package org.apache.lenya.cms.repo;
+import java.io.InputStream;
+import java.io.OutputStream;
+
public interface Document {
String getLanguage() throws RepositoryException;
void setLanguage(String language) throws RepositoryException;
+
+ InputStream getInputStream() throws RepositoryException;
+
+ OutputStream getOutputStream() throws RepositoryException;
+
+ long getContentLength() throws RepositoryException;
+
+ String getMimeType() throws RepositoryException;
+
+ long getLastModified() throws RepositoryException;
}
Modified: lenya/trunk/src/modules/jackrabbit/repository/repository/nodetypes/custom_nodetypes.xml
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/modules/jackrabbit/repository/repository/nodetypes/custom_nodetypes.xml?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/modules/jackrabbit/repository/repository/nodetypes/custom_nodetypes.xml (original)
+++ lenya/trunk/src/modules/jackrabbit/repository/repository/nodetypes/custom_nodetypes.xml Fri Nov 11 09:00:00 2005
@@ -113,12 +113,23 @@
onParentVersion="COPY" protected="false" multiple="false"/>
<propertyDef name="lenya:label" requiredType="String" autoCreate="false" mandatory="true"
onParentVersion="COPY" protected="false" multiple="false"/>
+ <childNodeDef name="lenya:resource" defaultPrimaryType="lnt:resource" autoCreate="true" mandatory="true">
+ <requiredPrimaryTypes>
+ <requiredPrimaryType>lnt:resource</requiredPrimaryType>
+ </requiredPrimaryTypes>
+ </childNodeDef>
<childNodeDef name="lenya:meta" defaultPrimaryType="lnt:meta" autoCreate="true" mandatory="true"
onParentVersion="COPY" protected="false" sameNameSibs="true">
<requiredPrimaryTypes>
<requiredPrimaryType>lnt:meta</requiredPrimaryType>
</requiredPrimaryTypes>
</childNodeDef>
+ </nodeType>
+
+ <nodeType name="lnt:resource" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
+ <supertypes>
+ <supertype>nt:resource</supertype>
+ </supertypes>
</nodeType>
<!--
Modified: lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRContentNode.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRContentNode.java?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRContentNode.java (original)
+++ lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRContentNode.java Fri Nov 11 09:00:00 2005
@@ -25,7 +25,6 @@
import org.apache.lenya.cms.repo.ContentNode;
import org.apache.lenya.cms.repo.Document;
import org.apache.lenya.cms.repo.RepositoryException;
-import org.apache.lenya.cms.repo.SiteNode;
/**
* JCR content node.
@@ -34,30 +33,47 @@
private NodeWrapperManager documentManager;
private JCRContent content;
-
+
public JCRContentNode(JCRContent content, Node node) {
super(node);
this.content = content;
- this.documentManager = new NodeWrapperManager(content.getArea().getPublication().getSession());
+ this.documentManager = new NodeWrapperManager(content.getArea()
+ .getPublication()
+ .getSession());
}
-
+
public Document[] getDocuments() throws RepositoryException {
- return null;
+ try {
+ List documents = new ArrayList();
+ for (NodeIterator i = getNode().getNodes(JCRDocumentBuilder.NODE_NAME); i.hasNext();) {
+ Node node = i.nextNode();
+ documents.add(getDocument(node.getProperty(JCRDocumentBuilder.LANGUAGE_ATTRIBUTE)
+ .getString()));
+ }
+ return (Document[]) documents.toArray(new Document[documents.size()]);
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RepositoryException(e);
+ }
+
}
- public void addDocument(String language) throws RepositoryException {
- // TODO Auto-generated method stub
-
+ public Document addDocument(String language) throws RepositoryException {
+ NodeWrapperBuilder builder = new JCRDocumentBuilder(this, language);
+ return (Document) builder.buildNode(this.content.getArea().getPublication().getSession(),
+ true);
}
public void removeDocument(Document document) throws RepositoryException {
- // TODO Auto-generated method stub
-
+ try {
+ ((JCRDocument) document).getNode().remove();
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RepositoryException(e);
+ }
}
public Document getDocument(String language) throws RepositoryException {
- // TODO Auto-generated method stub
- return null;
+ NodeWrapperBuilder builder = new JCRDocumentBuilder(this, language);
+ return (Document) builder.buildNode(this.content.getArea().getPublication().getSession(), false);
}
-
+
}
Modified: lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocument.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocument.java?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocument.java (original)
+++ lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocument.java Fri Nov 11 09:00:00 2005
@@ -16,6 +16,123 @@
*/
package org.apache.lenya.cms.jcr;
-public class JCRDocument {
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import javax.jcr.Node;
+
+import org.apache.lenya.cms.repo.Document;
+import org.apache.lenya.cms.repo.RepositoryException;
+
+/**
+ * JCR-based document implementation.
+ */
+public class JCRDocument extends NodeWrapper implements Document {
+
+ /**
+ * Ctor.
+ * @param node The JCR node.
+ */
+ public JCRDocument(Node node) {
+ super(node);
+ }
+
+ public String getLanguage() throws RepositoryException {
+ try {
+ return getNode().getProperty(JCRDocumentBuilder.LANGUAGE_ATTRIBUTE).getString();
+ } catch (Exception e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ public void setLanguage(String language) throws RepositoryException {
+ try {
+ getNode().getProperty(JCRDocumentBuilder.LANGUAGE_ATTRIBUTE).setValue(language);
+ } catch (Exception e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ protected Node getResourceNode() throws RepositoryException {
+ try {
+ Node resourceNode = getNode().getNode("lenya:resource");
+ if (resourceNode == null) {
+ throw new RepositoryException("Node [" + getNode().getPath()
+ + "] doesn't have a resource child node!");
+ }
+ return resourceNode;
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ public InputStream getInputStream() throws RepositoryException {
+ try {
+ return getResourceNode().getProperty("jcr:data").getStream();
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ public OutputStream getOutputStream() throws RepositoryException {
+ return new JCROutputStream(getResourceNode());
+ }
+
+ public long getContentLength() throws RepositoryException {
+ try {
+ return getResourceNode().getProperty("jcr:data").getLength();
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ public String getMimeType() throws RepositoryException {
+ try {
+ return getResourceNode().getProperty("jcr:mimeType").getString();
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ public long getLastModified() throws RepositoryException {
+ try {
+ return getResourceNode().getProperty("jcr:lastModified").getLong();
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ /**
+ * An outputStream that will save the session upon close, and discard it upon cancel.
+ */
+ private class JCROutputStream extends ByteArrayOutputStream {
+ private boolean isClosed = false;
+
+ private final Node contentNode;
+
+ /**
+ * Ctor.
+ * @param contentNode The JCR node.
+ */
+ public JCROutputStream(Node contentNode) {
+ this.contentNode = contentNode;
+ }
+
+ public void close() throws IOException {
+ if (!isClosed) {
+ super.close();
+ this.isClosed = true;
+ try {
+ contentNode.setProperty("jcr:data",
+ new ByteArrayInputStream(this.toByteArray()));
+ } catch (javax.jcr.RepositoryException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ }
}
Modified: lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocumentBuilder.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocumentBuilder.java?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocumentBuilder.java (original)
+++ lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRDocumentBuilder.java Fri Nov 11 09:00:00 2005
@@ -16,6 +16,59 @@
*/
package org.apache.lenya.cms.jcr;
-public class JCRDocumentBuilder {
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+
+import org.apache.lenya.cms.repo.RepositoryException;
+
+/**
+ * JCR document builder.
+ */
+public class JCRDocumentBuilder implements NodeWrapperBuilder {
+
+ protected static final String LANGUAGE_ATTRIBUTE = "xml:lang";
+ protected static final String NODE_NAME = "lenya:document";
+ protected static final String RESOURCE_NODE_NAME = "lenya:resource";
+
+ private String language;
+ private JCRContentNode contentNode;
+
+ /**
+ * Ctor.
+ * @param contentNode The content node.
+ * @param language The language.
+ */
+ public JCRDocumentBuilder(JCRContentNode contentNode, String language) {
+ this.contentNode = contentNode;
+ this.language = language;
+ }
+
+ public NodeWrapper buildNode(JCRSession session, boolean create) throws RepositoryException {
+ try {
+ JCRDocument document = null;
+ Node contentNodeNode = this.contentNode.getNode();
+
+ Node documentNode = null;
+ for (NodeIterator i = contentNodeNode.getNodes(NODE_NAME); i.hasNext();) {
+ Node node = i.nextNode();
+ if (node.getProperty(LANGUAGE_ATTRIBUTE).getString().equals(this.language)) {
+ documentNode = node;
+ }
+ }
+
+ if (documentNode == null && create) {
+ documentNode = contentNodeNode.addNode(NODE_NAME);
+ documentNode.setProperty(LANGUAGE_ATTRIBUTE, this.language);
+ documentNode.addNode(RESOURCE_NODE_NAME);
+ }
+
+ if (documentNode != null) {
+ document = new JCRDocument(documentNode);
+ }
+ return document;
+ } catch (Exception e) {
+ throw new RepositoryException(e);
+ }
+ }
}
Modified: lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRSiteNodeBuilder.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRSiteNodeBuilder.java?rev=332599&r1=332598&r2=332599&view=diff
==============================================================================
--- lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRSiteNodeBuilder.java (original)
+++ lenya/trunk/src/modules/jcr/java/src/org/apache/lenya/cms/jcr/JCRSiteNodeBuilder.java Fri Nov 11 09:00:00 2005
@@ -58,7 +58,6 @@
public NodeWrapper buildNode(JCRSession session, boolean create) throws RepositoryException {
try {
-
JCRSiteNode wrapper = null;
Node siteNode = null;
if (parent.hasNode(this.name)) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org