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 public void endElement(String uri, String localName, String qName) throws SAXException {
76
77 if (inVersionElement > 0) {
78 inVersionElement--;
79 return;
80 }
81
82 super.endElement(uri, localName, qName);
83 }
84
85
86
87
88 public void characters(char[] ch, int start, int length) throws SAXException {
89
90 if (inVersionElement == 0) {
91 super.characters(ch, start, length);
92 }
93 }
94
95
96
97
98 public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
99
100 if (inVersionElement > 0) {
101 inVersionElement++;
102 return;
103 }
104 if ("sv:property".equals(qName)) {
105 String attName = atts.getValue("sv:name");
106 if (attName != null) {
107 if ("jcr:predecessors".equals(attName)
108 || "jcr:baseVersion".equals(attName)
109 || "jcr:primaryType".equals(attName)
110 || "jcr:uuid".equals(attName)
111 || "jcr:mixinTypes".equals(attName)
112 || "jcr:isCheckedOut".equals(attName)
113 || "jcr:created".equals(attName)
114 || "mgnl:sequenceposition".equals(attName)
115 || "jcr:versionHistory"
116 .equals(attName)) {
117 inVersionElement++;
118 return;
119 }
120 else if ("jcr:frozenPrimaryType".equals(attName)) {
121 AttributesImpl attributesImpl = new AttributesImpl(atts);
122 int index = attributesImpl.getIndex("sv:name");
123 attributesImpl.setValue(index, "jcr:primaryType");
124 atts = attributesImpl;
125 }
126 else if ("jcr:frozenMixinTypes".equals(attName)) {
127 AttributesImpl attributesImpl = new AttributesImpl(atts);
128 int index = attributesImpl.getIndex("sv:name");
129 attributesImpl.setValue(index, "jcr:mixinTypes");
130 atts = attributesImpl;
131 }
132 else if ("jcr:frozenUuid".equals(attName)) {
133 AttributesImpl attributesImpl = new AttributesImpl(atts);
134 int index = attributesImpl.getIndex("sv:name");
135 attributesImpl.setValue(index, "jcr:uuid");
136 atts = attributesImpl;
137 }
138 }
139 }
140 else if ("sv:node".equals(qName)) {
141 String attName = atts.getValue("sv:name");
142 if (attName != null) {
143 if ("jcr:frozenNode".equals(attName)) {
144 AttributesImpl attributesImpl = new AttributesImpl(atts);
145 int index = attributesImpl.getIndex("sv:name");
146 attributesImpl.setValue(index, this.nodeName);
147 atts = attributesImpl;
148 }
149 }
150 }
151
152 super.startElement(uri, localName, qName, atts);
153 }
154
155 }