Author: andreas
Date: Sun Mar 2 17:03:46 2008
New Revision: 632900
URL: http://svn.apache.org/viewvc?rev=632900&view=rev
Log:
Adding foldernode and linkdocument modules (needed for documentation)
Added:
lenya/sandbox/modules/foldernode/
lenya/sandbox/modules/foldernode/config/
lenya/sandbox/modules/foldernode/config/cocoon-xconf/
lenya/sandbox/modules/foldernode/config/cocoon-xconf/foldernode-metadata.xconf
lenya/sandbox/modules/foldernode/config/module.xml
lenya/sandbox/modules/foldernode/config/sitemap/
lenya/sandbox/modules/foldernode/config/sitemap/foldernode-transformer.xmap
lenya/sandbox/modules/foldernode/java/
lenya/sandbox/modules/foldernode/java/src/
lenya/sandbox/modules/foldernode/java/src/org/
lenya/sandbox/modules/foldernode/java/src/org/apache/
lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/
lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/modules/
lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/modules/foldernode/
lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/modules/foldernode/FolderNodeTransformer.java
lenya/sandbox/modules/linkdocument/
lenya/sandbox/modules/linkdocument/config/
lenya/sandbox/modules/linkdocument/config/cocoon-xconf/
lenya/sandbox/modules/linkdocument/config/cocoon-xconf/resourcetype-link.xconf
lenya/sandbox/modules/linkdocument/config/module.xml
lenya/sandbox/modules/linkdocument/java/
lenya/sandbox/modules/linkdocument/java/src/
lenya/sandbox/modules/linkdocument/java/src/org/
lenya/sandbox/modules/linkdocument/java/src/org/apache/
lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/
lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/modules/
lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/modules/linkdocument/
lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/modules/linkdocument/LinkDocument.java
lenya/sandbox/modules/linkdocument/resources/
lenya/sandbox/modules/linkdocument/resources/samples/
lenya/sandbox/modules/linkdocument/resources/samples/link.xml
lenya/sandbox/modules/linkdocument/resources/schemas/
lenya/sandbox/modules/linkdocument/resources/schemas/link.rng
Added: lenya/sandbox/modules/foldernode/config/cocoon-xconf/foldernode-metadata.xconf
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/foldernode/config/cocoon-xconf/foldernode-metadata.xconf?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/foldernode/config/cocoon-xconf/foldernode-metadata.xconf (added)
+++ lenya/sandbox/modules/foldernode/config/cocoon-xconf/foldernode-metadata.xconf Sun Mar 2 17:03:46 2008
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- $Id: usecases-workflow-deactivate.xconf 348547 2005-11-23 20:13:01Z chestnut $ -->
+<!--
+ This file defines the publication specific use-cases
+-->
+
+ <xconf xpath="/cocoon/meta-data"
+ unless="/cocoon/meta-data/component-instance[@name = 'http://apache.org/lenya/foldernode/1.0']">
+ <component-instance name="http://apache.org/lenya/foldernode/1.0"
+ class="org.apache.lenya.cms.metadata.ConfigurableElementSet">
+ <element name="foldernode" multiple="false" editable="true"/>
+ </component-instance>
+ </xconf>
+
Added: lenya/sandbox/modules/foldernode/config/module.xml
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/foldernode/config/module.xml?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/foldernode/config/module.xml (added)
+++ lenya/sandbox/modules/foldernode/config/module.xml Sun Mar 2 17:03:46 2008
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module xmlns="http://apache.org/lenya/module/1.0">
+ <id>org.apache.lenya.modules.foldernode</id>
+ <export package="org.apache.lenya.modules.foldernode"/>
+ <package>org.apache.lenya.modules</package>
+ <version>0.1-dev</version>
+ <name>foldernode</name>
+ <lenya-version>@lenya.version@</lenya-version>
+ <description>
+ This module allows to configure documents as folder nodes via a meta data element.
+ A transformer removes the uuid attributes of the sitetree accordingly. This way,
+ a navigation can be built with nodes that don't show documents.
+ </description>
+</module>
\ No newline at end of file
Added: lenya/sandbox/modules/foldernode/config/sitemap/foldernode-transformer.xmap
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/foldernode/config/sitemap/foldernode-transformer.xmap?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/foldernode/config/sitemap/foldernode-transformer.xmap (added)
+++ lenya/sandbox/modules/foldernode/config/sitemap/foldernode-transformer.xmap Sun Mar 2 17:03:46 2008
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<xmap xpath="/sitemap/components/transformers"
+ unless="/sitemap/components/transformers/transformer[@name = 'foldernode']"
+ xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+
+ <map:transformer name="foldernode" logger="lenya.sitemap.transformer.foldernode"
+ src="org.apache.lenya.modules.foldernode.FolderNodeTransformer"/>
+
+</xmap>
Added: lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/modules/foldernode/FolderNodeTransformer.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/modules/foldernode/FolderNodeTransformer.java?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/modules/foldernode/FolderNodeTransformer.java (added)
+++ lenya/sandbox/modules/foldernode/java/src/org/apache/lenya/modules/foldernode/FolderNodeTransformer.java Sun Mar 2 17:03:46 2008
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.lenya.modules.foldernode;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.Map;
+
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.transformation.AbstractSAXTransformer;
+import org.apache.lenya.cms.linking.Link;
+import org.apache.lenya.cms.linking.LinkResolver;
+import org.apache.lenya.cms.linking.LinkTarget;
+import org.apache.lenya.cms.metadata.MetaData;
+import org.apache.lenya.cms.metadata.MetaDataException;
+import org.apache.lenya.cms.publication.Area;
+import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentFactory;
+import org.apache.lenya.cms.publication.DocumentUtil;
+import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.publication.URLInformation;
+import org.apache.lenya.util.ServletHelper;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+
+/**
+ * Removes <em>href</em> attributes from navigation nodes for foldernode
+ * documents.
+ */
+public class FolderNodeTransformer extends AbstractSAXTransformer implements Initializable {
+
+ private Area area;
+ private LinkResolver linkResolver;
+
+ public void setup(SourceResolver resolver, Map objectModel, String src, Parameters params)
+ throws ProcessingException, SAXException, IOException {
+ super.setup(resolver, objectModel, src, params);
+
+ Request req = ObjectModelHelper.getRequest(objectModel);
+ DocumentFactory factory = DocumentUtil.getDocumentFactory(this.manager, request);
+ String webappUrl = ServletHelper.getWebappURI(req);
+ URLInformation info = new URLInformation(webappUrl);
+ try {
+ Publication pub = factory.getPublication(info.getPublicationId());
+ this.area = pub.getArea(info.getArea());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void initialize() throws Exception {
+ this.linkResolver = (LinkResolver) this.manager.lookup(LinkResolver.ROLE);
+ }
+
+ public void dispose() {
+ super.dispose();
+ if (this.linkResolver == null) {
+ this.manager.release(linkResolver);
+ }
+ }
+
+ protected static final String NAV_NAMESPACE = "http://apache.org/cocoon/lenya/navigation/1.0";
+ protected static final String ELEM_NODE = "node";
+
+ /**
+ * The foldernode meta data namespace.
+ */
+ public static final String NAMESPACE = "http://apache.org/lenya/foldernode/1.0";
+
+ /**
+ * The foldernode meta data element name.
+ */
+ public static final String ELEM_FOLDERNODE = "foldernode";
+
+ public void startElement(String uri, String localName, String qName, Attributes attr)
+ throws SAXException {
+ if (uri != null && uri.equals(NAV_NAMESPACE) && localName.equals(ELEM_NODE)) {
+ AttributesImpl attrs = new AttributesImpl(attr);
+ String href = attrs.getValue("href");
+ try {
+ if (href != null && href.startsWith("lenya-document:")) {
+ LinkTarget target = linkResolver.resolve(this.area.getPublication()
+ .getFactory(), getLinkUri(href));
+ if (target.exists() && isFolderNode(target.getDocument())) {
+ attrs.removeAttribute(attrs.getIndex("href"));
+ }
+ }
+ } catch (Exception e) {
+ throw new SAXException(e);
+ } finally {
+ super.startElement(uri, localName, qName, attrs);
+ }
+ } else {
+ super.startElement(uri, localName, qName, attr);
+ }
+ }
+
+ protected boolean isFolderNode(Document doc) throws MetaDataException {
+ MetaData meta = doc.getMetaData(NAMESPACE);
+ String value = meta.getFirstValue(ELEM_FOLDERNODE);
+ boolean isFolderNode = value != null && Boolean.valueOf(value).booleanValue();
+ return isFolderNode;
+ }
+
+ protected String getLinkUri(String href) throws MalformedURLException {
+ int qm = href.indexOf("?");
+ String linkUri = qm < 0 ? href : href.substring(0, qm - 1);
+ Link link = new Link(linkUri);
+ if (link.getArea() == null) {
+ link.setArea(this.area.getName());
+ }
+ if (link.getPubId() == null) {
+ link.setPubId(this.area.getPublication().getId());
+ }
+ return link.getUri();
+ }
+
+}
Added: lenya/sandbox/modules/linkdocument/config/cocoon-xconf/resourcetype-link.xconf
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/linkdocument/config/cocoon-xconf/resourcetype-link.xconf?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/linkdocument/config/cocoon-xconf/resourcetype-link.xconf (added)
+++ lenya/sandbox/modules/linkdocument/config/cocoon-xconf/resourcetype-link.xconf Sun Mar 2 17:03:46 2008
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 1999-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<xconf xpath="/cocoon/resource-types"
+ unless="/cocoon/resource-types/component-instance[@name = 'link']">
+
+ <component-instance name="link" logger="lenya.resourcetypes"
+ class="org.apache.lenya.cms.publication.ResourceTypeImpl">
+
+ <schema namespace="http://relaxng.org/ns/structure/0.9"
+ uri="fallback://lenya/modules/linkdocument/resources/schemas/link.rng"/>
+
+ <sample mime-type="application/xml" uri="fallback://lenya/modules/linkdocument/resources/samples/link.xml"/>
+
+ <format name="xhtml" uri="cocoon://modules/link/xhtml.xml"/>
+ <format name="xhtml-include" uri="cocoon://modules/link/xhtml-include.xml"/>
+
+ </component-instance>
+
+</xconf>
\ No newline at end of file
Added: lenya/sandbox/modules/linkdocument/config/module.xml
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/linkdocument/config/module.xml?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/linkdocument/config/module.xml (added)
+++ lenya/sandbox/modules/linkdocument/config/module.xml Sun Mar 2 17:03:46 2008
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 1999-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<module xmlns="http://apache.org/lenya/module/1.0">
+ <id>org.apache.lenya.modules.linkdocument</id>
+ <export package="org.apache.lenya.modules.linkdocument"/>
+ <package>org.apache.lenya.modules</package>
+ <version>0.1-dev</version>
+ <name>linkdocument</name>
+ <lenya-version>@lenya.version@</lenya-version>
+ <description>
+ Resource type to store a link.
+ </description>
+</module>
\ No newline at end of file
Added: lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/modules/linkdocument/LinkDocument.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/modules/linkdocument/LinkDocument.java?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/modules/linkdocument/LinkDocument.java (added)
+++ lenya/sandbox/modules/linkdocument/java/src/org/apache/lenya/modules/linkdocument/LinkDocument.java Sun Mar 2 17:03:46 2008
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.lenya.modules.linkdocument;
+
+import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentDoesNotExistException;
+import org.apache.lenya.cms.publication.DocumentException;
+import org.apache.lenya.util.Assert;
+import org.apache.lenya.xml.DocumentHelper;
+import org.apache.lenya.xml.NamespaceHelper;
+import org.w3c.dom.Element;
+
+/**
+ * Wrapper for link documents.
+ */
+public class LinkDocument {
+
+ public static final String RESOURCE_TYPE = "link";
+ public static final String NAMESPACE = "http://apache.org/lenya/linkdocument/1.0";
+ public static final String PREFIX = "";
+
+ protected static final String ELEM_LINK = "link";
+ protected static final String ATTR_HREF = "href";
+
+ private Document document;
+ private String href;
+
+ public LinkDocument(Document doc) {
+ Assert.notNull("document", doc);
+ this.document = doc;
+ }
+
+ /**
+ * @return The href attribute of this link document.
+ * @throws DocumentDoesNotExistException if the document doesn't exist.
+ */
+ public String getHref() throws DocumentDoesNotExistException {
+ try {
+ if (!this.document.exists()) {
+ throw new DocumentDoesNotExistException("Document [" + this.document
+ + "] doesn't exist.");
+ }
+ } catch (DocumentDoesNotExistException e) {
+ throw e;
+ } catch (DocumentException e) {
+ throw new RuntimeException(e);
+ }
+ load();
+ return this.href;
+ }
+
+ public void setHref(String href) {
+ this.href = href;
+ save();
+ }
+
+ protected void load() {
+ try {
+ if (this.document.exists()) {
+ org.w3c.dom.Document xml = DocumentHelper.readDocument(this.document
+ .getInputStream());
+ Element root = xml.getDocumentElement();
+ Assert.isTrue("Valid link document", root.getNamespaceURI().equals(NAMESPACE)
+ && root.getLocalName().equals(ELEM_LINK));
+ Assert.isTrue("Document element has href attribute", root.hasAttribute(ATTR_HREF));
+ this.href = root.getAttribute(ATTR_HREF);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected void save() {
+ try {
+ NamespaceHelper helper = new NamespaceHelper(NAMESPACE, PREFIX, ELEM_LINK);
+ String href = this.href != null ? this.href : "";
+ helper.getDocument().getDocumentElement().setAttribute(ATTR_HREF, href);
+ helper.save(this.document.getOutputStream());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
Added: lenya/sandbox/modules/linkdocument/resources/samples/link.xml
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/linkdocument/resources/samples/link.xml?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/linkdocument/resources/samples/link.xml (added)
+++ lenya/sandbox/modules/linkdocument/resources/samples/link.xml Sun Mar 2 17:03:46 2008
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 1999-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<link xmlns="http://apache.org/lenya/linkdocument/1.0" href="http://lenya.apache.org"/>
\ No newline at end of file
Added: lenya/sandbox/modules/linkdocument/resources/schemas/link.rng
URL: http://svn.apache.org/viewvc/lenya/sandbox/modules/linkdocument/resources/schemas/link.rng?rev=632900&view=auto
==============================================================================
--- lenya/sandbox/modules/linkdocument/resources/schemas/link.rng (added)
+++ lenya/sandbox/modules/linkdocument/resources/schemas/link.rng Sun Mar 2 17:03:46 2008
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 1999-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<grammar ns="http://apache.org/lenya/linkdocument/1.0"
+ xmlns="http://relaxng.org/ns/structure/1.0"
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <start>
+ <element name="link">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ </element>
+ </start>
+</grammar>
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.