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