summaryrefslogtreecommitdiffstats
path: root/org/madore/damlengine/TodoWeblogSelectionElement.java
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2011-11-12 12:50:58 +0100
committerDavid A. Madore <david+git@madore.org>2011-11-12 12:50:58 +0100
commit71dc0d53fcefea70ce978d305fba653cc2180a3b (patch)
treeaaa383e6d1561b081fe8cbc60539a718aa24c5f4 /org/madore/damlengine/TodoWeblogSelectionElement.java
parent2b55a35cf1188e0b7215ebf65c593ff45971e184 (diff)
downloaddamlengine-71dc0d53fcefea70ce978d305fba653cc2180a3b.tar.gz
damlengine-71dc0d53fcefea70ce978d305fba653cc2180a3b.tar.bz2
damlengine-71dc0d53fcefea70ce978d305fba653cc2180a3b.zip
Allow selecting a single entry.
Diffstat (limited to 'org/madore/damlengine/TodoWeblogSelectionElement.java')
-rw-r--r--org/madore/damlengine/TodoWeblogSelectionElement.java67
1 files changed, 59 insertions, 8 deletions
diff --git a/org/madore/damlengine/TodoWeblogSelectionElement.java b/org/madore/damlengine/TodoWeblogSelectionElement.java
index df9c75e..ec87d17 100644
--- a/org/madore/damlengine/TodoWeblogSelectionElement.java
+++ b/org/madore/damlengine/TodoWeblogSelectionElement.java
@@ -1,8 +1,12 @@
package org.madore.damlengine;
+import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import org.w3c.dom.*;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSParser;
+import org.w3c.dom.ls.LSInput;
public final class TodoWeblogSelectionElement extends TodoDefaultElement {
@@ -11,7 +15,9 @@ public final class TodoWeblogSelectionElement extends TodoDefaultElement {
MONTH_YEAR,
MONTH_MONTH,
CATEGORY_NAME,
- CATEGORY_CODE;
+ CATEGORY_CODE,
+ SINGLE_NUMBER,
+ SINGLE_TITLE;
}
public static class Factory extends TodoElement.Factory {
@@ -93,37 +99,82 @@ public final class TodoWeblogSelectionElement extends TodoDefaultElement {
throw new IllegalStateException("weblog-selection element encountered with no weblog selection state");
// String lang = LangHelper.getLangRec(node);
String str;
+ Node newNode;
switch ( t ) {
case RECENT_COUNT:
if ( ! ( ctx.wsc instanceof Context.WeblogRecentSelectionContext ) )
throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog recent selection state");
- str = String.format("%d", ((Context.WeblogRecentSelectionContext)(ctx.wsc)).count );
+ str = String.format("%d", ((Context.WeblogRecentSelectionContext)(ctx.wsc)).count);
+ newNode = ctx.doc.createTextNode(str);
+ node.getParentNode().replaceChild(newNode, node);
break;
case MONTH_YEAR:
if ( ! ( ctx.wsc instanceof Context.WeblogMonthSelectionContext ) )
- throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog month selection state");
+ throw new IllegalStateException("weblog-selection-month-year element encountered while not in weblog month selection state");
str = ((Context.WeblogMonthSelectionContext)(ctx.wsc)).year;
+ newNode = ctx.doc.createTextNode(str);
+ node.getParentNode().replaceChild(newNode, node);
break;
case MONTH_MONTH:
if ( ! ( ctx.wsc instanceof Context.WeblogMonthSelectionContext ) )
- throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog month selection state");
+ throw new IllegalStateException("weblog-selection-month-month element encountered while not in weblog month selection state");
str = ((Context.WeblogMonthSelectionContext)(ctx.wsc)).month;
+ newNode = ctx.doc.createTextNode(str);
+ node.getParentNode().replaceChild(newNode, node);
break;
case CATEGORY_CODE:
if ( ! ( ctx.wsc instanceof Context.WeblogCategorySelectionContext ) )
- throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog category selection state");
+ throw new IllegalStateException("weblog-selection-cat-code element encountered while not in weblog category selection state");
str = ((Context.WeblogCategorySelectionContext)(ctx.wsc)).code;
+ newNode = ctx.doc.createTextNode(str);
+ node.getParentNode().replaceChild(newNode, node);
break;
case CATEGORY_NAME:
if ( ! ( ctx.wsc instanceof Context.WeblogCategorySelectionContext ) )
- throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog category selection state");
+ throw new IllegalStateException("weblog-selection-cat-name element encountered while not in weblog category selection state");
str = categoryName(((Context.WeblogCategorySelectionContext)(ctx.wsc)).code, LangHelper.getLangRec(node));
+ newNode = ctx.doc.createTextNode(str);
+ node.getParentNode().replaceChild(newNode, node);
+ break;
+ case SINGLE_NUMBER:
+ if ( ! ( ctx.wsc instanceof Context.WeblogSingleSelectionContext ) )
+ throw new IllegalStateException("weblog-selection-single-number element encountered while not in weblog single entry selection state");
+ str = String.format("%04d", ((Context.WeblogSingleSelectionContext)(ctx.wsc)).number);
+ newNode = ctx.doc.createTextNode(str);
+ node.getParentNode().replaceChild(newNode, node);
+ break;
+ case SINGLE_TITLE:
+ if ( ! ( ctx.wsc instanceof Context.WeblogSingleSelectionContext ) )
+ throw new IllegalStateException("weblog-selection-single-title element encountered while not in weblog single entry selection state");
+ WeblogSummary wsum = WeblogSummary.getSummary();
+ if ( wsum == null || wsum.entries == null )
+ throw new IllegalStateException("failed to obtain weblog summary for weblog-selection-single-title");
+ WeblogSummary.EntrySummary esum
+ = wsum.entries.get(new Integer(((Context.WeblogSingleSelectionContext)(ctx.wsc)).number));
+ if ( esum == null )
+ throw new IllegalStateException("tried weblog-selection-single-title on inexistent entry");
+ {
+ Element span = ctx.doc.createElementNS(DamlEngine.XHTML_NS, "span");
+ node.getParentNode().replaceChild(span, node);
+ LangHelper.setLangRec(span, esum.lang);
+ DOMImplementationLS domi
+ = (DOMImplementationLS)ctx.doc.getImplementation();
+ LSParser par = domi.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
+ LSInput input = domi.createLSInput();
+ input.setStringData(esum.titleXml);
+ Document temp = par.parse(input);
+ Node titleNode = ctx.doc.adoptNode(temp.getDocumentElement());
+ String explicitLang = LangHelper.getLangNorec(titleNode);
+ if ( explicitLang != null )
+ LangHelper.setLangNorec(span, explicitLang);
+ ArrayList<Node> childList = getChildList(titleNode);
+ for ( Node child : childList )
+ span.appendChild(child);
+ }
break;
default:
throw new AssertionError("unknown type");
}
- Node txt = ctx.doc.createTextNode(str);
- node.getParentNode().replaceChild(txt, node);
}
}