1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.kuali.rice.edl.impl.components;
18
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import org.kuali.rice.edl.impl.EDLContext;
23 import org.kuali.rice.edl.impl.EDLModelComponent;
24 import org.kuali.rice.edl.impl.EDLXmlUtils;
25 import org.kuali.rice.edl.impl.RequestParser;
26 import org.w3c.dom.Document;
27 import org.w3c.dom.Element;
28 import org.w3c.dom.Node;
29 import org.w3c.dom.NodeList;
30
31
32
33
34
35
36
37
38
39 public class VersioningPreprocessor implements EDLModelComponent {
40
41 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(VersioningPreprocessor.class);
42
43 public void updateDOM(Document dom, Element configElement, EDLContext edlContext) {
44
45 RequestParser requestParser = edlContext.getRequestParser();
46
47 boolean incrementVersion = edlContext.getUserAction().isIncrementVersionAction();
48 boolean replaceVersion = edlContext.getUserAction().isReplaceVersionAction();
49
50 Element edlContentElement = EDLXmlUtils.getEDLContent(dom, false);
51 Element dataElement = EDLXmlUtils.getDataFromEDLDocument(edlContentElement, false);
52 Element currentVersion = findCurrentVersion(dom);
53
54
55 if (currentVersion == null) {
56 Integer currentVersionCount = new Integer(0);
57 currentVersion = EDLXmlUtils.getVersionFromData(dataElement, currentVersionCount);
58 } else if (incrementVersion) {
59 currentVersion.getAttributeNode("current").setNodeValue("false");
60 int currentVersionCount = new Integer(currentVersion.getAttribute("version")).intValue() + 1;
61 EDLXmlUtils.getVersionFromData(dataElement, new Integer(currentVersionCount));
62 } else if (replaceVersion) {
63 NodeList children = currentVersion.getChildNodes();
64
65 List<Node> childrenToRemove = new ArrayList<Node>();
66 for (int index = 0; index < children.getLength(); index++) {
67 childrenToRemove.add(children.item(index));
68 }
69 for (Node childToRemove : childrenToRemove) {
70 currentVersion.removeChild(childToRemove);
71 }
72 }
73 requestParser.setAttribute("currentVersion", currentVersion.getAttribute("currentVersion"));
74 }
75
76 public static Element findCurrentVersion(Document dom) {
77 Element edlContentElement = EDLXmlUtils.getEDLContent(dom, false);
78 Element dataElement = EDLXmlUtils.getDataFromEDLDocument(edlContentElement, false);
79 NodeList versionElements = dataElement.getElementsByTagName(EDLXmlUtils.VERSION_E);
80 for (int i = 0; i < versionElements.getLength(); i++) {
81 Element version = (Element) versionElements.item(i);
82 Boolean currentVersion = new Boolean(version.getAttribute("current"));
83 if (currentVersion.booleanValue()) {
84 return version;
85 }
86 }
87 return null;
88 }
89
90 }