Author: fred
Date: 2007-07-30 20:38:54 +0000 (Mon, 30 Jul 2007)
New Revision: 14444
Added:
trunk/plugins/Echo/src/plugins/echo/MarkupRender.java
trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
Removed:
trunk/plugins/Echo/src/plugins/echo/Test.java
trunk/plugins/Echo/src/plugins/echo/TextRender.java
Modified:
trunk/plugins/Echo/src/plugins/echo/Echo.java
trunk/plugins/Echo/src/plugins/echo/Node.java
trunk/plugins/Echo/src/plugins/echo/Nodes.java
trunk/plugins/Echo/src/plugins/echo/NodesManager.java
trunk/plugins/Echo/src/test/0001.xml
trunk/plugins/Echo/src/test/0002.xml
trunk/plugins/Echo/src/test/0003.xml
trunk/plugins/Echo/src/xml/edit.xsl
trunk/plugins/Echo/src/xml/test.xsl
Log:
Big changes in the site generator
Modified: trunk/plugins/Echo/src/plugins/echo/Echo.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Echo.java 2007-07-30 20:26:09 UTC
(rev 14443)
+++ trunk/plugins/Echo/src/plugins/echo/Echo.java 2007-07-30 20:38:54 UTC
(rev 14444)
@@ -66,8 +66,8 @@
NODES_DIR.mkdirs();
parser = new Builder();
-// Document styleSheet =
parser.build(getClass().getResourceAsStream("/xml/edit.xsl"));
- Document styleSheet =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/edit.xsl");
+ Document styleSheet =
parser.build(getClass().getResourceAsStream("/xml/edit.xsl"));
+// Document styleSheet =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/edit.xsl");
i18n.translateXML(styleSheet);
transform = new XSLTransform(styleSheet);
@@ -224,7 +224,7 @@
page.setTitle(i18n.getString("echo.action.publish"));
try {
- Test test = new Test();
+ SiteGenerator test = new SiteGenerator();
test.generate();
pub.addAttribute(new Attribute("outputdir",(new
File(BASE_DIR.getPath() + File.separator + "out")).getAbsolutePath() + "/"));
@@ -322,6 +322,10 @@
node.setTitle(title);
node.setBody(body);
+
+ String[] cats = nodesManager.getCategoriesIds();
+ for(String cat : cats)
+ node.setCategory(cat,
request.isPartSet("category-" + cat));
if(page.countErrors() == 0) {
Copied: trunk/plugins/Echo/src/plugins/echo/MarkupRender.java (from rev 14407,
trunk/plugins/Echo/src/plugins/echo/TextRender.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/MarkupRender.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/MarkupRender.java 2007-07-30
20:38:54 UTC (rev 14444)
@@ -0,0 +1,55 @@
+package plugins.echo;
+
+import org.radeox.api.engine.context.RenderContext;
+import org.radeox.engine.context.BaseRenderContext;
+import org.radeox.api.engine.RenderEngine;
+import org.radeox.engine.BaseRenderEngine;
+
+import nu.xom.Builder;
+import nu.xom.Element;
+import nu.xom.Node;
+import nu.xom.Nodes;
+import nu.xom.ParsingException;
+
+import java.io.IOException;
+
+/**
+* A very very very crappy class
+*/
+public class MarkupRender{
+
+ private RenderContext renderContext;
+ private RenderEngine engine;
+
+ public MarkupRender() {
+ renderContext = new BaseRenderContext();
+ engine = new BaseRenderEngine();
+ }
+
+ public nu.xom.Nodes render(String text) {
+ try {
+
+ String result = engine.render(text, renderContext);
+ Builder parser = new Builder();
+ // FIXME : bug ?
+ Element renderedContent = parser.build("<rendered>" +
result + "</rendered>", null).getRootElement();
+
+ nu.xom.Nodes nodes = new Nodes();
+ while (renderedContent.getChildCount() != 0) {
+ nu.xom.Node node = renderedContent.getChild(0);
+ node.detach();
+ nodes.append(node);
+ }
+
+ return nodes;
+
+ } catch (ParsingException pe) {
+ pe.printStackTrace(System.err);
+ } catch (IOException ioe) {
+ ioe.printStackTrace(System.err);
+ }
+
+ return null;
+ }
+
+}
\ No newline at end of file
Modified: trunk/plugins/Echo/src/plugins/echo/Node.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Node.java 2007-07-30 20:26:09 UTC
(rev 14443)
+++ trunk/plugins/Echo/src/plugins/echo/Node.java 2007-07-30 20:38:54 UTC
(rev 14444)
@@ -127,6 +127,28 @@
}
+ public boolean isInCategory(String catId) {
+
+ return (getCategoriesElement().query("category[@id='" + catId +
"']").size() != 0);
+
+ }
+
+ public void setCategory(String catId, boolean value) {
+
+ if(this.isInCategory(catId)) {
+ if(!value) {
+ getCategoriesElement().query("category[@id='" +
catId + "']").get(0).detach();
+ }
+
+ } else {
+ if(value) {
+ Element category = new Element("category");
+ category.addAttribute(new Attribute("id",
catId));
+ getCategoriesElement().appendChild(category);
+ }
+ }
+ }
+
public void setCategories(String[] Ids) {
getCategoriesElement().removeChildren();
@@ -195,10 +217,39 @@
return doc;
}
+ /**
+ * Returns a <strong>copy</strong> of the root element
+ * @retrun a copy of the root element
+ */
public Element getRoot() {
return (Element) getDoc().getRootElement().copy();
}
+
+ public Node render() {
+
+ Node renderedNode = (Node) this.copy();
+ Element content = renderedNode.getContentElement();
+ MarkupRender markupRender = new MarkupRender();
+
+ nu.xom.Nodes renderedContent =
markupRender.render(content.getChild(0).toXML());
+ content.removeChildren();
+ for(int i=0; i < renderedContent.size(); i++)
+ content.appendChild(renderedContent.get(i));
+
+ return renderedNode;
+
+ }
+ /**
+ * Returns a deep copy of this node
+ * @return a deep copy of this node
+ */
+ public Node copy() {
+
+ return new Node((Document) this.doc.copy());
+
+ }
+
}
Modified: trunk/plugins/Echo/src/plugins/echo/Nodes.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Nodes.java 2007-07-30 20:26:09 UTC
(rev 14443)
+++ trunk/plugins/Echo/src/plugins/echo/Nodes.java 2007-07-30 20:38:54 UTC
(rev 14444)
@@ -3,11 +3,12 @@
import java.util.Vector;
import java.util.Comparator;
import java.util.Collections;
+import java.util.Iterator;
/**
* A simple list of nodes
*/
-public class Nodes {
+public class Nodes implements Iterable<Node> {
private Vector<Node> nodes;
@@ -58,8 +59,23 @@
return nodes.remove(index);
}
-
+
/**
+ * Returns all the post nodes contained in this list
+ * @return the posts nodes contained in this list
+ */
+ public Nodes getPosts() {
+
+ Nodes posts = new Nodes();
+ for(Node n : this) {
+ if(n.getType() == Node.NodeType.POST_NODE)
+ posts.append(n);
+ }
+
+ return posts;
+ }
+
+ /**
* Returns the number of nodes in this list.
* @return the number of nodes in this list
*/
@@ -77,7 +93,11 @@
Collections.sort(nodes, new CreationDateComparator());
}
-
+ public Iterator<Node> iterator() {
+
+ return nodes.iterator();
+
+ }
}
\ No newline at end of file
Modified: trunk/plugins/Echo/src/plugins/echo/NodesManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/NodesManager.java 2007-07-30
20:26:09 UTC (rev 14443)
+++ trunk/plugins/Echo/src/plugins/echo/NodesManager.java 2007-07-30
20:38:54 UTC (rev 14444)
@@ -60,7 +60,18 @@
return new Node(parser.build(file));
}
+
+ public Nodes getNodes() throws IOException, ParsingException {
+
+ Nodes nodes = new Nodes();
+ String[] ids = getIds();
+ for(String id : ids)
+ nodes.append(getNodeById(id));
+
+ return nodes;
+ }
+
public Nodes getPosts() throws IOException, ParsingException {
Nodes posts = new Nodes();
@@ -167,6 +178,12 @@
}
+ public String[] getCategoriesIds() {
+
+ return categories.keySet().toArray(new String[]{});
+
+ }
+
public void newCategory(String name) {
String id = "";
Copied: trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java (from rev 14407,
trunk/plugins/Echo/src/plugins/echo/Test.java)
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
(rev 0)
+++ trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java 2007-07-30
20:38:54 UTC (rev 14444)
@@ -0,0 +1,86 @@
+package plugins.echo;
+
+import nu.xom.*;
+import nu.xom.xslt.*;
+
+import java.io.*;
+
+public class SiteGenerator {
+
+// public static final File BASE_DIR = new
File("/home/fred/Freenet/plugins/Echo");
+ public static final File BASE_DIR = Echo.BASE_DIR;
+ public static final File OUT_DIR = new File(BASE_DIR.getAbsolutePath()
+ File.separator + "out");
+ public static final int POSTS_PER_PAGE = 5;
+
+ private NodesManager nodesManager;
+ private Builder parser;
+ private XSLTransform transform;
+ private Serializer serializer;
+ private Document template;
+
+ public SiteGenerator() throws IOException, ParsingException,
XSLException {
+
+ nodesManager = new NodesManager(BASE_DIR);
+ parser = new Builder();
+
+ template =
parser.build(getClass().getResourceAsStream("/xml/test.xsl"));
+// template =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/test.xsl");
+ transform = new XSLTransform(template);
+ transform.setParameter("basedir", BASE_DIR.getAbsolutePath() +
"/");
+
+ serializer = new Serializer(System.out);
+ serializer.setIndent(4);
+ serializer.setMaxLength(128);
+
+ }
+
+ public void transformAndWrite(Document doc, String fileName) throws
XSLException, IOException {
+
+ serializer.setOutputStream(new
FileOutputStream(OUT_DIR.getPath() + File.separator + fileName));
+ serializer.write(new Document((Element)
transform.transform(doc).get(0)));
+
+ }
+
+ public void transformAndWrite(Element element, String fileName) throws
XSLException, IOException {
+
+ transformAndWrite(new Document(element), fileName);
+
+ }
+
+ public void generate() throws Exception{ // TODO : Pfouille !!
+
+ OUT_DIR.mkdirs();
+
+ Nodes nodes = nodesManager.getNodes();
+ for(Node node : nodes) {
+ System.out.println(node.getId());
+ transformAndWrite(node.render().getDoc(), node.getId()
+ ".html");
+ }
+
+ Nodes posts = nodes.getPosts();
+ posts.sortByCreationDate();
+
+ Element index = new Element("index");
+ for(Node post : posts) {
+ System.out.println(post.getId() + " (" +
post.getCreationDate().toString() + ")");
+ index.appendChild(post.render().getRoot());
+ }
+ transformAndWrite(index, "index.html");
+
+
+ System.out.println("\n * Categories *");
+
+ String[] categories = nodesManager.getCategoriesIds();
+ for(String category : categories) {
+ System.out.println(category);
+ index = new Element("index");
+ index.addAttribute(new Attribute("category", category));
+ for(Node post : posts) {
+ if(post.isInCategory(category))
+
index.appendChild(post.render().getRoot());
+ }
+ transformAndWrite(index, "category-" + category +
".html");
+ }
+
+ }
+}
\ No newline at end of file
Deleted: trunk/plugins/Echo/src/plugins/echo/Test.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Test.java 2007-07-30 20:26:09 UTC
(rev 14443)
+++ trunk/plugins/Echo/src/plugins/echo/Test.java 2007-07-30 20:38:54 UTC
(rev 14444)
@@ -1,59 +0,0 @@
-package plugins.echo;
-
-import nu.xom.*;
-import nu.xom.xslt.*;
-
-import java.io.*;
-
-public class Test{
-
- private static final File BASE_DIR = new
File("/home/fred/Freenet/plugins/Echo");
-
- public void generate() throws Exception{
-
- File outDir = new File(BASE_DIR.getAbsolutePath() +
File.separator + "out");
- outDir.mkdirs();
-
- NodesManager nodesManager = new NodesManager(BASE_DIR);
-
- Builder parser = new Builder();
-// Document styleSheet =
parser.build(getClass().getResourceAsStream("/xml/test.xsl"));
- Document styleSheet =
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/test.xsl");
- XSLTransform transform = new XSLTransform(styleSheet);
- transform.setParameter("basedir", BASE_DIR.getAbsolutePath() +
"/");
-
- Serializer serializer = new Serializer(System.out);
- serializer.setIndent(4);
- serializer.setMaxLength(128);
-
- TextRender render = new TextRender();
-
- String[] ids = nodesManager.getIds();
- for(String id : ids) {
-
- System.out.println(id);
-
- Element root = nodesManager.getNodeById(id).getRoot();
- Element content = (Element)
root.query("./content").get(0);
- Text contentText = (Text) content.getChild(0);
-
- nu.xom.Nodes result =
render.render(contentText.toXML());
-
- contentText.detach();
- for (int i=0; i < result.size(); i++) {
- content.appendChild(result.get(i));
- }
-
- nu.xom.Nodes t = transform.transform(new
Document(root));
- serializer.setOutputStream(new
FileOutputStream(outDir.getPath() + File.separator + id + ".html"));
- serializer.write(new Document((Element) t.get(0)));
-
- }
-
-
- }
-// public static void main(String args[]){
-// Test test = new Test();
-// test.generate();
-// }
-}
\ No newline at end of file
Deleted: trunk/plugins/Echo/src/plugins/echo/TextRender.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/TextRender.java 2007-07-30 20:26:09 UTC
(rev 14443)
+++ trunk/plugins/Echo/src/plugins/echo/TextRender.java 2007-07-30 20:38:54 UTC
(rev 14444)
@@ -1,43 +0,0 @@
-package plugins.echo;
-
-import org.radeox.api.engine.context.RenderContext;
-import org.radeox.engine.context.BaseRenderContext;
-import org.radeox.api.engine.RenderEngine;
-import org.radeox.engine.BaseRenderEngine;
-
-import nu.xom.Builder;
-import nu.xom.Element;
-import nu.xom.Node;
-import nu.xom.Nodes;
-import nu.xom.ParsingException;
-
-import java.io.IOException;
-
-public class TextRender {
-
- private RenderContext renderContext;
- private RenderEngine engine;
-
- public TextRender() {
- renderContext = new BaseRenderContext();
- engine = new BaseRenderEngine();
- }
-
- public Nodes render(String text) throws ParsingException, IOException {
-
- String result = engine.render(text, renderContext);
- Builder parser = new Builder();
- // FIXME : bug ?
- Element renderedContent = parser.build("<rendered>" + result +
"</rendered>", null).getRootElement();
-
- Nodes nodes = new Nodes();
- while (renderedContent.getChildCount() != 0) {
- Node node = renderedContent.getChild(0);
- node.detach();
- nodes.append(node);
- }
-
- return nodes;
- }
-
-}
\ No newline at end of file
Modified: trunk/plugins/Echo/src/test/0001.xml
===================================================================
--- trunk/plugins/Echo/src/test/0001.xml 2007-07-30 20:26:09 UTC (rev
14443)
+++ trunk/plugins/Echo/src/test/0001.xml 2007-07-30 20:38:54 UTC (rev
14444)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<node id="0001">
+<node id="0001" type="post">
<title>Title of the node #0001</title>
- <created>date</created>
- <modified>date</modified>
+ <created>2007/4/20</created>
+ <modified>2007/5/19</modified>
<categories>
<category id="001" />
<category id="003" />
Modified: trunk/plugins/Echo/src/test/0002.xml
===================================================================
--- trunk/plugins/Echo/src/test/0002.xml 2007-07-30 20:26:09 UTC (rev
14443)
+++ trunk/plugins/Echo/src/test/0002.xml 2007-07-30 20:38:54 UTC (rev
14444)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<node id="0002">
+<node id="0002" type="page">
<title>Title</title>
- <created>date</created>
- <modified>date</modified>
+ <created>2007/6/15</created>
+ <modified>2007/6/24</modified>
<categories>
<category id="002" />
</categories>
Modified: trunk/plugins/Echo/src/test/0003.xml
===================================================================
--- trunk/plugins/Echo/src/test/0003.xml 2007-07-30 20:26:09 UTC (rev
14443)
+++ trunk/plugins/Echo/src/test/0003.xml 2007-07-30 20:38:54 UTC (rev
14444)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<node id="0003">
+<node id="0003" type="post">
<title>Freenet</title>
- <created>date</created>
- <modified>date</modified>
+ <created>2007/6/27</created>
+ <modified>2007/6/28</modified>
<content>
1 What is Freenet?
Modified: trunk/plugins/Echo/src/xml/edit.xsl
===================================================================
--- trunk/plugins/Echo/src/xml/edit.xsl 2007-07-30 20:26:09 UTC (rev 14443)
+++ trunk/plugins/Echo/src/xml/edit.xsl 2007-07-30 20:38:54 UTC (rev 14444)
@@ -168,16 +168,9 @@
<xsl:if
test="count(document(concat($contextprefix,
'../categories.xml'))/categories/category) > 0">
<fieldset>
<legend><i18n
key="echo.common.categories" /></legend>
- <xsl:for-each
select="document(concat($contextprefix,
'../categories.xml'))/categories/category">
- <input type="checkbox"
id="category-{@id}" name="category-{@id}" class="inline">
-<!-- <xsl:for-each
select="node/categories/category[@id = '001']"> -->
-<!--<xsl:if test="count(node/categories/category[@id='001']) > 0">
- <xsl:attribute
name="checked">checked</xsl:attribute>
- </xsl:if>-->
- </input>
-<!-- <xsl:value-of
select="node/categories/category[@id = '001']/@id" /> -->
- <label for="category-{@id}"
class="inline"><xsl:value-of select="text()" /></label>
- </xsl:for-each>
+ <xsl:call-template
name="categoriesCheckbox">
+ <xsl:with-param
name="nodeCategories" select="node/categories" />
+ </xsl:call-template>
</fieldset>
</xsl:if>
<input type="hidden" name="formPassword"
value="{formpassword/@value}" />
@@ -228,4 +221,21 @@
</xsl:choose>
</div>
</xsl:template>
+
+ <xsl:template name="categoriesCheckbox">
+ <xsl:param name="nodeCategories" />
+ <xsl:for-each select="document(concat($contextprefix,
'../categories.xml'))/categories/category">
+ <xsl:sort select="text()" />
+ <xsl:variable name="id"><xsl:value-of select="@id"
/></xsl:variable>
+
+ <input type="checkbox" id="category-{@id}"
name="category-{@id}" class="inline">
+ <xsl:if test="$nodeCategories/category[@id=$id]">
+ <xsl:attribute
name="checked">checked</xsl:attribute>
+ </xsl:if>
+ </input>
+ <label for="category-{@id}"
class="inline"><xsl:value-of select="text()" /></label>
+ </xsl:for-each>
+
+ </xsl:template>
+
</xsl:stylesheet>
\ No newline at end of file
Modified: trunk/plugins/Echo/src/xml/test.xsl
===================================================================
--- trunk/plugins/Echo/src/xml/test.xsl 2007-07-30 20:26:09 UTC (rev 14443)
+++ trunk/plugins/Echo/src/xml/test.xsl 2007-07-30 20:38:54 UTC (rev 14444)
@@ -15,7 +15,8 @@
<xsl:param name="basedir" />
<xsl:variable name="blocksdir"><xsl:value-of select="$basedir"
/>/blocks/</xsl:variable>
-
+ <xsl:variable name="categoriesFile"><xsl:value-of select="$basedir"
/>/categories.xml</xsl:variable>
+
<xsl:template match="/">
<html>
<head>
@@ -24,7 +25,9 @@
</head>
<body>
<div id="container">
- <div id="header"><h1 id="blog-title">My
Flog</h1></div>
+ <div id="header">
+ <h1 id="blog-title"><a
href="index.html">My Flog</a></h1>
+ </div>
<div id="left">
<xsl:call-template name="blocks">
@@ -33,7 +36,7 @@
</div>
<div id="main">
- <h2><xsl:call-template
name="title" /></h2>
+ <h2><xsl:call-template
name="page-title" /></h2>
<xsl:call-template
name="content" />
</div>
@@ -44,10 +47,7 @@
</div>
<div id="footer">
-<!-- <xsl:call-template name="blocks">
- <xsl:with-param
name="align">bottom</xsl:with-param>
- </xsl:call-template>
---> Powered by Echo
+ Powered by Echo
</div>
</div>
</body>
@@ -79,7 +79,7 @@
<ul class="block categories">
<xsl:for-each select="document(concat($basedir,
'categories.xml'))//category">
<li>
- <a
href="category/{text()}.html"><xsl:value-of select="text()"/></a>
+ <a
href="category-{@id}.html"><xsl:value-of select="text()"/></a>
</li>
</xsl:for-each>
</ul>
@@ -105,18 +105,72 @@
</xsl:for-each>
</ul>
</xsl:when>
-
+
<xsl:otherwise>
- <xsl:copy-of select="." />
+<!-- <xsl:copy-of select="." /> -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="content">
- <xsl:copy-of select="/node/content/node()" />
+ <xsl:choose>
+ <xsl:when test="/node">
+ <xsl:copy-of select="/node/content/node()" />
+ </xsl:when>
+ <xsl:when test="/index">
+ <xsl:for-each select="/index/node">
+ <div class="post" id="post-{@id}">
+ <h2><a
href="{@id}.html"><xsl:value-of select="title/text()"/></a></h2>
+ <div class="entry">
+ <xsl:copy-of
select="content/node()" />
+ </div>
+ <div class="meta">
+ <xsl:value-of
select="created/text()" />
+ <xsl:if
test="count(categories/category) > 0">
+ |<ul class="categories">
+ <xsl:for-each
select="categories/category">
+ <li>
+ <a
href="category-{@id}.html">
+
<xsl:call-template name="categoryName">
+
<xsl:with-param name="id" select="@id" />
+
</xsl:call-template>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </xsl:if>
+ </div>
+ </div>
+ </xsl:for-each>
+<!-- <xsl:copy-of select="." /> -->
+ </xsl:when>
+ </xsl:choose>
</xsl:template>
<xsl:template name="page-title">
- <xsl:value-of select="/node/title/text()" />
+ <xsl:choose>
+ <xsl:when test="/node">
+ <xsl:value-of select="/node/title/text()" />
+ </xsl:when>
+ <xsl:when test="/index">
+ <xsl:choose>
+ <xsl:when test="/index/@category">
+ <xsl:call-template
name="categoryName">
+ <xsl:with-param
name="id" select="/index/@category" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ My Flog
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ </xsl:choose>
</xsl:template>
+
+ <xsl:template name="categoryName">
+ <xsl:param name="id" />
+
+ <xsl:value-of
select="document($categoriesFile)//category[@id=$id]/text()" />
+ </xsl:template>
+
</xsl:stylesheet>