From 2fdc8c3bae277410a3169b2caf71793334f89030 Mon Sep 17 00:00:00 2001 From: jensp Date: Mon, 3 Jun 2013 17:47:52 +0000 Subject: [PATCH] =?UTF-8?q?Noch=20ein=20BugFix=20f=C3=BCr=20den=20XMLDeliv?= =?UTF-8?q?eryCache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@2170 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/cms/XMLDeliveryCache.java | 178 ++++++------------ 1 file changed, 62 insertions(+), 116 deletions(-) diff --git a/ccm-cms/src/com/arsdigita/cms/XMLDeliveryCache.java b/ccm-cms/src/com/arsdigita/cms/XMLDeliveryCache.java index d3b6d720d..f80b4ecae 100644 --- a/ccm-cms/src/com/arsdigita/cms/XMLDeliveryCache.java +++ b/ccm-cms/src/com/arsdigita/cms/XMLDeliveryCache.java @@ -25,7 +25,7 @@ public final class XMLDeliveryCache { */ private CacheTable cache = new CacheTable(XMLDeliveryCache.class.getName(), CMSConfig.getInstance().getXmlCacheSize(), - CMSConfig.getInstance().getXmlCacheAge(), + CMSConfig.getInstance().getXmlCacheSize(), true); /** * Maps from the OID of the master version of an item in the cache to the OID of the item in the cache. @@ -56,22 +56,22 @@ public final class XMLDeliveryCache { * @param listMode Is the XML cached for list mode or normal mode. * @return */ - public boolean isCached(final OID oid, final String context, final boolean listMode) { + public boolean isCached(final OID oid, final String context, final boolean listMode) { final CachedItem cachedItem = (CachedItem) cache.get(oid.toString()); if (cachedItem == null) { return false; } - + final CachedXml cachedXml = cachedItem.get(context); if (cachedXml == null) { return false; } - + if (listMode) { return (cachedXml.getCachedXml(Mode.LIST_MODE) != null); } else { return (cachedXml.getCachedXml(Mode.DEFAULT) != null); - } + } } /** @@ -127,18 +127,14 @@ public final class XMLDeliveryCache { context)); } - //Element cacheElem; - String cached; + Element cacheElem; if (listMode) { - //cacheElem = cachedXml.getCachedXml(Mode.LIST_MODE); - cached = cachedXml.getCachedXml(Mode.LIST_MODE); + cacheElem = cachedXml.getCachedXml(Mode.LIST_MODE); } else { - //cacheElem = cachedXml.getCachedXml(Mode.DEFAULT); - cached = cachedXml.getCachedXml(Mode.LIST_MODE); + cacheElem = cachedXml.getCachedXml(Mode.DEFAULT); } - //if (cacheElem == null) { - if (cached == null) { + if (cacheElem == null) { if (listMode) { throw new IllegalArgumentException(String.format( "The item with the OID '%s' is not cached for context '%s' in list mode", @@ -154,33 +150,18 @@ public final class XMLDeliveryCache { } } - //cacheElem.syncDocs(); + cacheElem.syncDocs(); - Map cachedAttributes; - if (listMode) { - cachedAttributes = cachedXml.getCachedAttributes(Mode.LIST_MODE); - } else { - cachedAttributes = cachedXml.getCachedAttributes(Mode.DEFAULT); + final Iterator> attrs = cacheElem.getAttributes().entrySet().iterator(); + Map.Entry attr; + while (attrs.hasNext()) { + attr = attrs.next(); + parent.addAttribute(attr.getKey(), attr.getValue()); } - - if (cachedAttributes != null) { - for (Map.Entry attribute : cachedAttributes.entrySet()) { - parent.addAttribute(attribute.getKey(), attribute.getValue()); - } + final Iterator childs = cacheElem.getChildren().iterator(); + while (childs.hasNext()) { + copyElement(parent, childs.next()); } - - parent.setText(cached); - -// final Iterator> attrs = cacheElem.getAttributes().entrySet().iterator(); -// Map.Entry attr; -// while (attrs.hasNext()) { -// attr = attrs.next(); -// parent.addAttribute(attr.getKey(), attr.getValue()); -// } -// final Iterator childs = cacheElem.getChildren().iterator(); -// while (childs.hasNext()) { -// copyElement(parent, childs.next()); -// } } /** @@ -221,10 +202,10 @@ public final class XMLDeliveryCache { * @param context The context of the XML output. * @param listMode If the XML is for the list mode. */ - public void cache(final OID oid, - final ContentItem item, - final Element parent, - final String context, + public void cache(final OID oid, + final ContentItem item, + final Element parent, + final String context, final boolean listMode) { CachedItem cachedItem = (CachedItem) cache.get(oid.toString()); if (cachedItem == null) { @@ -238,40 +219,28 @@ public final class XMLDeliveryCache { cachedItem.put(context, cachedXml); } -// final Element cacheElem = new Element("cachedItem"); -// final Iterator> attrs = parent.getAttributes().entrySet().iterator(); -// Map.Entry attr; -// while (attrs.hasNext()) { -// attr = attrs.next(); -// cacheElem.addAttribute(attr.getKey(), attr.getValue()); -// } -// final Iterator childs = parent.getChildren().iterator(); -// while (childs.hasNext()) { -// copyElement(cacheElem, childs.next()); -// } - - final Mode mode; - if (listMode) { - mode = Mode.LIST_MODE; - } else { - mode = Mode.DEFAULT; - } - + final Element cacheElem = new Element("cachedItem"); final Iterator> attrs = parent.getAttributes().entrySet().iterator(); Map.Entry attr; - final Map attributes = new HashMap(); while (attrs.hasNext()) { attr = attrs.next(); - attributes.put(attr.getKey(), attr.getValue()); + cacheElem.addAttribute(attr.getKey(), attr.getValue()); + } + final Iterator childs = parent.getChildren().iterator(); + while (childs.hasNext()) { + copyElement(cacheElem, childs.next()); } - cachedXml.putCachedXml(mode, parent.toString()); - cachedXml.pubCachedAttributes(mode, attributes); - + if (listMode) { + cachedXml.putCachedXml(Mode.LIST_MODE, cacheElem); + } else { + cachedXml.putCachedXml(Mode.DEFAULT, cacheElem); + } + if (item.getDraftVersion() != null) { cachedItems.put(item.getDraftVersion().getOID().toString(), oid.toString()); } - + if ((item instanceof ContentPage) && (((ContentPage) item).getContentBundle() != null)) { cachedItems.put(((ContentPage) item).getContentBundle().getOID().toString(), oid.toString()); } @@ -292,33 +261,30 @@ public final class XMLDeliveryCache { } } -// private void copyElement(final Element parent, final Element element) { -// final Element copy = parent.newChildElement(element.getName()); -// final Iterator attrs = element.getAttributes().entrySet().iterator(); -// Map.Entry attr; -// while (attrs.hasNext()) { -// attr = (Map.Entry) attrs.next(); -// copy.addAttribute((String) attr.getKey(), (String) attr.getValue()); -// } -// -// final Iterator childs = element.getChildren().iterator(); -// while (childs.hasNext()) { -// copyElement(copy, (Element) childs.next()); -// } -// -// if (element.getText() != null) { -// copy.setText(element.getText()); -// } -// -// if (element.getCDATASection() != null) { -// copy.setCDATASection(element.getCDATASection()); -// } -// -// } + private void copyElement(final Element parent, final Element element) { + final Element copy = parent.newChildElement(element.getName()); + final Iterator attrs = element.getAttributes().entrySet().iterator(); + Map.Entry attr; + while (attrs.hasNext()) { + attr = (Map.Entry) attrs.next(); + copy.addAttribute((String) attr.getKey(), (String) attr.getValue()); + } + + final Iterator childs = element.getChildren().iterator(); + while (childs.hasNext()) { + copyElement(copy, (Element) childs.next()); + } + + if (element.getText() != null) { + copy.setText(element.getText()); + } + + if (element.getCDATASection() != null) { + copy.setCDATASection(element.getCDATASection()); + } + + } - /** - * Helper class, containing the XML for different contexts. - */ private class CachedItem { private final Map cachedXml = new HashMap(); @@ -334,47 +300,27 @@ public final class XMLDeliveryCache { public void put(final String context, final CachedXml cachedXml) { this.cachedXml.put(context, cachedXml); } - } private class CachedXml { - //private final Map cachedXml = new EnumMap(Mode.class); - private final Map cachedXml = new EnumMap(Mode.class); - private final Map> cachedAttributes = new EnumMap>( - Mode.class); + private final Map cachedXml = new EnumMap(Mode.class); public CachedXml() { //Nothing } -// public Element getCachedXml(final Mode mode) { -// return cachedXml.get(mode); -// } - public String getCachedXml(final Mode mode) { + public Element getCachedXml(final Mode mode) { return cachedXml.get(mode); } - public Map getCachedAttributes(final Mode mode) { - return cachedAttributes.get(mode); - } - -// public void putCachedXml(final Mode mode, final Element element) { -// cachedXml.put(mode, element); -// } - public void pubCachedAttributes(final Mode mode, final Map attributes) { - cachedAttributes.put(mode, attributes); - } - - public void putCachedXml(final Mode mode, final String element) { + public void putCachedXml(final Mode mode, final Element element) { cachedXml.put(mode, element); } - } private enum Mode { DEFAULT, - LIST_MODE, - } + LIST_MODE,} }