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(),
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.
@ -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<String, String> cachedAttributes;
if (listMode) {
cachedAttributes = cachedXml.getCachedAttributes(Mode.LIST_MODE);
} else {
cachedAttributes = cachedXml.getCachedAttributes(Mode.DEFAULT);
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());
}
if (cachedAttributes != null) {
for (Map.Entry<String, String> attribute : cachedAttributes.entrySet()) {
parent.addAttribute(attribute.getKey(), attribute.getValue());
}
final Iterator<Element> childs = cacheElem.getChildren().iterator();
while (childs.hasNext()) {
copyElement(parent, childs.next());
}
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);
}
// 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 Element cacheElem = new Element("cachedItem");
final Iterator<Map.Entry<String, String>> attrs = parent.getAttributes().entrySet().iterator();
Map.Entry<String, String> attr;
final Map<String, String> attributes = new HashMap<String, String>();
while (attrs.hasNext()) {
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());
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());
@ -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<String, CachedXml> cachedXml = new HashMap<String, CachedXml>();
@ -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<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);
private final Map<Mode, Element> cachedXml = new EnumMap<Mode, Element>(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<String, String> 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<String, String> 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,}
}