From a49cff43d551b29dd726a6d5c19aba31db3bfc71 Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Sat, 6 Apr 2013 20:18:10 +0200 Subject: Support for d:wrefcat attribute to create links inside a category. --- org/madore/damlengine/TodoWrefAttr.java | 13 +++++++++++++ org/madore/damlengine/WeblogSummary.java | 18 +++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'org/madore/damlengine') diff --git a/org/madore/damlengine/TodoWrefAttr.java b/org/madore/damlengine/TodoWrefAttr.java index 7f40959..7f69a96 100644 --- a/org/madore/damlengine/TodoWrefAttr.java +++ b/org/madore/damlengine/TodoWrefAttr.java @@ -33,6 +33,13 @@ public class TodoWrefAttr extends TodoAttr { String wrefNumberStr = wrefMatcher.group(4); int wrefNumber = Integer.parseInt(wrefNumberStr); String wrefSupplementStr = wrefMatcher.group(5); + String wrefCat; + if ( this.owner.hasAttributeNS(DamlEngine.DAML_NS, "wrefcat") ) { + wrefCat = this.owner.getAttributeNS(DamlEngine.DAML_NS, "wrefcat"); + this.owner.removeAttributeNS(DamlEngine.DAML_NS, "wrefcat"); + } else { + wrefCat = null; + } String targetFile; String targetStdDir = (ctx.gc.uriToTop==null)?"":(ctx.gc.uriToTop+"weblog/"); WeblogSummary wsum = WeblogSummary.getSummary(); @@ -47,6 +54,10 @@ public class TodoWrefAttr extends TodoAttr { if ( ! ((wrefYearStr+"-"+wrefMonthStr+"-"+wrefDayStr) .equals(esum.date)) ) throw new IllegalArgumentException("date mismatch for reference to entry "+wrefNumberStr); + if ( wrefCat != null ) { + if ( esum.catSet == null || ! esum.catSet.contains(wrefCat) ) + throw new IllegalArgumentException("reference to entry "+wrefNumberStr+" in wrong category "+wrefCat); + } } // Choose file portion of link target if ( esum != null && esum.doSinglePage != null && ! wrefSupplementStr.equals("") ) { @@ -59,6 +70,8 @@ public class TodoWrefAttr extends TodoAttr { } else if ( ctx.wsc != null && ctx.wsc.sel != null && ctx.wsc.sel.contains(wrefNumber) ) { targetFile = ""; + } else if ( wrefCat != null ) { + targetFile = targetStdDir + wrefCat + ".html"; } else { targetFile = targetStdDir + wrefYearStr + "-" + wrefMonthStr + ".html"; if ( esum != null && esum.doSinglePage != null diff --git a/org/madore/damlengine/WeblogSummary.java b/org/madore/damlengine/WeblogSummary.java index 997f67a..50ab143 100644 --- a/org/madore/damlengine/WeblogSummary.java +++ b/org/madore/damlengine/WeblogSummary.java @@ -1,6 +1,7 @@ package org.madore.damlengine; import java.util.HashMap; +import java.util.HashSet; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -14,6 +15,7 @@ public final class WeblogSummary { String lang; String title; String titleXml; String doSinglePage; + HashSet catSet; public EntrySummary(int id, String date, String lang, String title, String titleXml, String doSinglePage) { @@ -23,6 +25,7 @@ public final class WeblogSummary { this.title = title; this.titleXml = titleXml; this.doSinglePage = doSinglePage; + this.catSet = null; } } @@ -50,7 +53,20 @@ public final class WeblogSummary { String title = selRes.getString(4); String titleXml = selRes.getString(5); String doSinglePage = selRes.getString(6); - singleton.entries.put(new Integer(id), new EntrySummary(id, date, lang, title, titleXml, doSinglePage)); + singleton.entries.put(id, new EntrySummary(id, date, lang, title, titleXml, doSinglePage)); + } + final PreparedStatement catSt + = conn.prepareStatement("SELECT id , code FROM incat"); + final ResultSet catRes = catSt.executeQuery(); + while ( catRes.next() ) { + int id = catRes.getInt(1); + String code = catRes.getString(2); + HashSet catSet = singleton.entries.get(id).catSet; + if ( catSet == null ) { + catSet = new HashSet(); + singleton.entries.get(id).catSet = catSet; + } + catSet.add(code); } } catch (SQLException e) { // Well, we'll have no summary. Too bad, but better than abort. -- cgit v1.2.3