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.importexport.filters;
35
36 import org.xml.sax.Attributes;
37 import org.xml.sax.SAXException;
38 import org.xml.sax.XMLReader;
39 import org.xml.sax.helpers.AttributesImpl;
40 import org.xml.sax.helpers.XMLFilterImpl;
41
42 import java.util.ArrayList;
43 import java.util.Iterator;
44 import java.util.List;
45
46
47
48
49
50
51
52
53
54
55
56 public class RemoveMixversionableFilter extends XMLFilterImpl {
57
58 private boolean inMixinTypes = false;
59
60 private boolean inValue = false;
61
62 private List values = new ArrayList();
63
64 private String value;
65
66 private Attributes atts;
67
68
69
70
71
72 public RemoveMixversionableFilter(XMLReader parent) {
73 super(parent);
74 }
75
76 public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException {
77 if (name.equals("sv:property") && atts.getValue("sv:name").equals("jcr:mixinTypes")) {
78 this.atts = new AttributesImpl(atts);
79 inMixinTypes = true;
80 values.clear();
81 }
82 else if (inMixinTypes && name.equals("sv:value")) {
83 inValue = true;
84 }
85 else {
86 super.startElement(uri, localName, name, atts);
87 }
88 }
89
90 public void characters(char[] ch, int start, int length) throws SAXException {
91 if (inValue) {
92 if(value == null){
93 value = new String(ch, start, length);
94 }
95 else{
96 value += new String(ch, start, length);
97 }
98 }
99 else {
100 super.characters(ch, start, length);
101 }
102 }
103
104 public void endElement(String uri, String localName, String name) throws SAXException {
105 if (inValue && name.equals("sv:value")) {
106 inValue = false;
107 if (!value.equals("mix:versionable")) {
108 values.add(value);
109 }
110 value = null;
111 }
112 else if (inMixinTypes && name.equals("sv:property")) {
113 inMixinTypes = false;
114
115 if (values.size() > 0) {
116 super.startElement(uri, "property", "sv:property", this.atts);
117 for (Iterator iterator = values.iterator(); iterator.hasNext();) {
118 String value = (String) iterator.next();
119 super.startElement(uri, "value", "sv:value", new AttributesImpl());
120 super.characters(value.toCharArray(), 0, value.length());
121 super.endElement(uri, "value", "sv:value");
122 }
123 super.endElement(uri, "property", "sv:property");
124 }
125 }
126 else {
127 super.endElement(uri, localName, name);
128 }
129 }
130 }