From 71dc0d53fcefea70ce978d305fba653cc2180a3b Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Sat, 12 Nov 2011 12:50:58 +0100 Subject: Allow selecting a single entry. --- .../damlengine/TodoWeblogSelectionElement.java | 67 +++++++++++++++++++--- 1 file changed, 59 insertions(+), 8 deletions(-) (limited to 'org/madore/damlengine/TodoWeblogSelectionElement.java') 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 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); } } -- cgit v1.2.3