Noch ein BugFix für den XMLDeliveryCache

git-svn-id: https://svn.libreccm.org/ccm/trunk@2170 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-06-03 17:47:52 +00:00
parent 4d8148da83
commit 2fdc8c3bae
1 changed files with 62 additions and 116 deletions

View File

@ -25,7 +25,7 @@ public final class XMLDeliveryCache {
*/ */
private CacheTable cache = new CacheTable(XMLDeliveryCache.class.getName(), private CacheTable cache = new CacheTable(XMLDeliveryCache.class.getName(),
CMSConfig.getInstance().getXmlCacheSize(), CMSConfig.getInstance().getXmlCacheSize(),
CMSConfig.getInstance().getXmlCacheAge(), CMSConfig.getInstance().getXmlCacheSize(),
true); true);
/** /**
* Maps from the OID of the master version of an item in the cache to the OID of the item in the cache. * Maps from the OID of the master version of an item in the cache to the OID of the item in the cache.
@ -127,18 +127,14 @@ public final class XMLDeliveryCache {
context)); context));
} }
//Element cacheElem; Element cacheElem;
String cached;
if (listMode) { if (listMode) {
//cacheElem = cachedXml.getCachedXml(Mode.LIST_MODE); cacheElem = cachedXml.getCachedXml(Mode.LIST_MODE);
cached = cachedXml.getCachedXml(Mode.LIST_MODE);
} else { } else {
//cacheElem = cachedXml.getCachedXml(Mode.DEFAULT); cacheElem = cachedXml.getCachedXml(Mode.DEFAULT);
cached = cachedXml.getCachedXml(Mode.LIST_MODE);
} }
//if (cacheElem == null) { if (cacheElem == null) {
if (cached == null) {
if (listMode) { if (listMode) {
throw new IllegalArgumentException(String.format( throw new IllegalArgumentException(String.format(
"The item with the OID '%s' is not cached for context '%s' in list mode", "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<String, String> cachedAttributes; final Iterator<Map.Entry<String, String>> attrs = cacheElem.getAttributes().entrySet().iterator();
if (listMode) { Map.Entry<String, String> attr;
cachedAttributes = cachedXml.getCachedAttributes(Mode.LIST_MODE); while (attrs.hasNext()) {
} else { attr = attrs.next();
cachedAttributes = cachedXml.getCachedAttributes(Mode.DEFAULT); parent.addAttribute(attr.getKey(), attr.getValue());
} }
final Iterator<Element> childs = cacheElem.getChildren().iterator();
if (cachedAttributes != null) { while (childs.hasNext()) {
for (Map.Entry<String, String> attribute : cachedAttributes.entrySet()) { copyElement(parent, childs.next());
parent.addAttribute(attribute.getKey(), attribute.getValue());
}
} }
parent.setText(cached);
// final Iterator<Map.Entry<String, String>> attrs = cacheElem.getAttributes().entrySet().iterator();
// Map.Entry<String, String> attr;
// while (attrs.hasNext()) {
// attr = attrs.next();
// parent.addAttribute(attr.getKey(), attr.getValue());
// }
// final Iterator<Element> childs = cacheElem.getChildren().iterator();
// while (childs.hasNext()) {
// copyElement(parent, childs.next());
// }
} }
/** /**
@ -238,35 +219,23 @@ public final class XMLDeliveryCache {
cachedItem.put(context, cachedXml); cachedItem.put(context, cachedXml);
} }
// final Element cacheElem = new Element("cachedItem"); final Element cacheElem = new Element("cachedItem");
// final Iterator<Map.Entry<String, String>> attrs = parent.getAttributes().entrySet().iterator();
// Map.Entry<String, String> attr;
// while (attrs.hasNext()) {
// attr = attrs.next();
// cacheElem.addAttribute(attr.getKey(), attr.getValue());
// }
// final Iterator<Element> 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 Iterator<Map.Entry<String, String>> attrs = parent.getAttributes().entrySet().iterator(); final Iterator<Map.Entry<String, String>> attrs = parent.getAttributes().entrySet().iterator();
Map.Entry<String, String> attr; Map.Entry<String, String> attr;
final Map<String, String> attributes = new HashMap<String, String>();
while (attrs.hasNext()) { while (attrs.hasNext()) {
attr = attrs.next(); attr = attrs.next();
attributes.put(attr.getKey(), attr.getValue()); cacheElem.addAttribute(attr.getKey(), attr.getValue());
}
final Iterator<Element> childs = parent.getChildren().iterator();
while (childs.hasNext()) {
copyElement(cacheElem, childs.next());
} }
cachedXml.putCachedXml(mode, parent.toString()); if (listMode) {
cachedXml.pubCachedAttributes(mode, attributes); cachedXml.putCachedXml(Mode.LIST_MODE, cacheElem);
} else {
cachedXml.putCachedXml(Mode.DEFAULT, cacheElem);
}
if (item.getDraftVersion() != null) { if (item.getDraftVersion() != null) {
cachedItems.put(item.getDraftVersion().getOID().toString(), oid.toString()); cachedItems.put(item.getDraftVersion().getOID().toString(), oid.toString());
@ -292,33 +261,30 @@ public final class XMLDeliveryCache {
} }
} }
// private void copyElement(final Element parent, final Element element) { private void copyElement(final Element parent, final Element element) {
// final Element copy = parent.newChildElement(element.getName()); final Element copy = parent.newChildElement(element.getName());
// final Iterator attrs = element.getAttributes().entrySet().iterator(); final Iterator attrs = element.getAttributes().entrySet().iterator();
// Map.Entry attr; Map.Entry attr;
// while (attrs.hasNext()) { while (attrs.hasNext()) {
// attr = (Map.Entry) attrs.next(); attr = (Map.Entry) attrs.next();
// copy.addAttribute((String) attr.getKey(), (String) attr.getValue()); copy.addAttribute((String) attr.getKey(), (String) attr.getValue());
// } }
//
// final Iterator childs = element.getChildren().iterator(); final Iterator childs = element.getChildren().iterator();
// while (childs.hasNext()) { while (childs.hasNext()) {
// copyElement(copy, (Element) childs.next()); copyElement(copy, (Element) childs.next());
// } }
//
// if (element.getText() != null) { if (element.getText() != null) {
// copy.setText(element.getText()); copy.setText(element.getText());
// } }
//
// if (element.getCDATASection() != null) { if (element.getCDATASection() != null) {
// copy.setCDATASection(element.getCDATASection()); copy.setCDATASection(element.getCDATASection());
// } }
//
// } }
/**
* Helper class, containing the XML for different contexts.
*/
private class CachedItem { private class CachedItem {
private final Map<String, CachedXml> cachedXml = new HashMap<String, CachedXml>(); private final Map<String, CachedXml> cachedXml = new HashMap<String, CachedXml>();
@ -334,47 +300,27 @@ public final class XMLDeliveryCache {
public void put(final String context, final CachedXml cachedXml) { public void put(final String context, final CachedXml cachedXml) {
this.cachedXml.put(context, cachedXml); this.cachedXml.put(context, cachedXml);
} }
} }
private class CachedXml { private class CachedXml {
//private final Map<Mode, Element> cachedXml = new EnumMap<Mode, Element>(Mode.class); private final Map<Mode, Element> cachedXml = new EnumMap<Mode, Element>(Mode.class);
private final Map<Mode, String> cachedXml = new EnumMap<Mode, String>(Mode.class);
private final Map<Mode, Map<String, String>> cachedAttributes = new EnumMap<Mode, Map<String, String>>(
Mode.class);
public CachedXml() { public CachedXml() {
//Nothing //Nothing
} }
// public Element getCachedXml(final Mode mode) { public Element getCachedXml(final Mode mode) {
// return cachedXml.get(mode);
// }
public String getCachedXml(final Mode mode) {
return cachedXml.get(mode); return cachedXml.get(mode);
} }
public Map<String, String> getCachedAttributes(final Mode mode) { public void putCachedXml(final Mode mode, final Element element) {
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<String, String> attributes) {
cachedAttributes.put(mode, attributes);
}
public void putCachedXml(final Mode mode, final String element) {
cachedXml.put(mode, element); cachedXml.put(mode, element);
} }
} }
private enum Mode { private enum Mode {
DEFAULT, DEFAULT,
LIST_MODE, LIST_MODE,}
}
} }