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
55
56 @Deprecated
57 public class RemoveMixversionableFilter extends XMLFilterImpl {
58
59 private boolean inMixinTypes = false;
60
61 private boolean inValue = false;
62
63 private List values = new ArrayList();
64
65 private String value;
66
67 private Attributes atts;
68
69
70
71
72
73
74 public RemoveMixversionableFilter(XMLReader parent) {
75 super(parent);
76 }
77
78 @Override
79 public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException {
80 if (name.equals("sv:property") && atts.getValue("sv:name").equals("jcr:mixinTypes")) {
81 this.atts = new AttributesImpl(atts);
82 inMixinTypes = true;
83 values.clear();
84 } else if (inMixinTypes && name.equals("sv:value")) {
85 inValue = true;
86 } else {
87 super.startElement(uri, localName, name, atts);
88 }
89 }
90
91 @Override
92 public void characters(char[] ch, int start, int length) throws SAXException {
93 if (inValue) {
94 if (value == null) {
95 value = new String(ch, start, length);
96 } else {
97 value += new String(ch, start, length);
98 }
99 } else {
100 super.characters(ch, start, length);
101 }
102 }
103
104 @Override
105 public void endElement(String uri, String localName, String name) throws SAXException {
106 if (inValue && name.equals("sv:value")) {
107 inValue = false;
108 if (!value.equals("mix:versionable")) {
109 values.add(value);
110 }
111 value = null;
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 } else {
126 super.endElement(uri, localName, name);
127 }
128 }
129 }