1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.exchangesimple;
35
36 import info.magnolia.importexport.filters.VersionFilter;
37 import org.xml.sax.Attributes;
38 import org.xml.sax.SAXException;
39 import org.xml.sax.XMLReader;
40 import org.xml.sax.helpers.AttributesImpl;
41
42
43
44
45
46
47
48 class FrozenElementFilter extends VersionFilter {
49
50
51
52
53 private int inVersionElement;
54
55
56
57
58 private String nodeName;
59
60
61
62
63
64 protected FrozenElementFilter(XMLReader parent) {
65 super(parent);
66 }
67
68 protected void setNodeName(String name) {
69 this.nodeName = name;
70 }
71
72
73
74
75 @Override
76 public void endElement(String uri, String localName, String qName) throws SAXException {
77
78 if (inVersionElement > 0) {
79 inVersionElement--;
80 return;
81 }
82
83 super.endElement(uri, localName, qName);
84 }
85
86
87
88
89 @Override
90 public void characters(char[] ch, int start, int length) throws SAXException {
91
92 if (inVersionElement == 0) {
93 super.characters(ch, start, length);
94 }
95 }
96
97
98
99
100 @Override
101 public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
102
103 if (inVersionElement > 0) {
104 inVersionElement++;
105 return;
106 }
107 if ("sv:property".equals(qName)) {
108 String attName = atts.getValue("sv:name");
109 if (attName != null) {
110 if ("jcr:predecessors".equals(attName)
111 || "jcr:baseVersion".equals(attName)
112 || "jcr:primaryType".equals(attName)
113 || "jcr:uuid".equals(attName)
114 || "jcr:mixinTypes".equals(attName)
115 || "jcr:isCheckedOut".equals(attName)
116 || "jcr:created".equals(attName)
117 || "mgnl:sequenceposition".equals(attName)
118 || "jcr:versionHistory"
119 .equals(attName)) {
120 inVersionElement++;
121 return;
122 }
123 else if ("jcr:frozenPrimaryType".equals(attName)) {
124 AttributesImpl attributesImpl = new AttributesImpl(atts);
125 int index = attributesImpl.getIndex("sv:name");
126 attributesImpl.setValue(index, "jcr:primaryType");
127 atts = attributesImpl;
128 }
129 else if ("jcr:frozenMixinTypes".equals(attName)) {
130 AttributesImpl attributesImpl = new AttributesImpl(atts);
131 int index = attributesImpl.getIndex("sv:name");
132 attributesImpl.setValue(index, "jcr:mixinTypes");
133 atts = attributesImpl;
134 }
135 else if ("jcr:frozenUuid".equals(attName)) {
136 AttributesImpl attributesImpl = new AttributesImpl(atts);
137 int index = attributesImpl.getIndex("sv:name");
138 attributesImpl.setValue(index, "jcr:uuid");
139 atts = attributesImpl;
140 }
141 }
142 }
143 else if ("sv:node".equals(qName)) {
144 String attName = atts.getValue("sv:name");
145 if (attName != null) {
146 if ("jcr:frozenNode".equals(attName)) {
147 AttributesImpl attributesImpl = new AttributesImpl(atts);
148 int index = attributesImpl.getIndex("sv:name");
149 attributesImpl.setValue(index, this.nodeName);
150 atts = attributesImpl;
151 }
152 }
153 }
154
155 super.startElement(uri, localName, qName, atts);
156 }
157
158 }