View Javadoc

1   /*   Copyright 2004 BEA Systems, Inc.
2    *
3    *   Licensed under the Apache License, Version 2.0 (the "License");
4    *   you may not use this file except in compliance with the License.
5    *   You may obtain a copy of the License at
6    *
7    *       http://www.apache.org/licenses/LICENSE-2.0
8    *
9    *   Unless required by applicable law or agreed to in writing, software
10   *   distributed under the License is distributed on an "AS IS" BASIS,
11   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   *   See the License for the specific language governing permissions and
13   *   limitations under the License.
14   */
15  
16  package com.bea.xml.stream;
17  
18  import com.bea.xml.stream.filters.TypeFilter;
19  import com.bea.xml.stream.filters.NameFilter;
20  import javax.xml.namespace.QName;
21  import javax.xml.stream.XMLStreamException;
22  import javax.xml.stream.XMLStreamReader;
23  import javax.xml.stream.XMLInputFactory;
24  import javax.xml.stream.StreamFilter;
25  import javax.xml.stream.events.XMLEvent;
26  import javax.xml.stream.StreamFilter;
27  
28  /***
29   * <p> Apply a filter to the StreamReader </p>
30   */
31  
32  public class StreamReaderFilter 
33    extends ReaderDelegate
34  {
35    private StreamFilter filter;
36  
37    public StreamReaderFilter(XMLStreamReader reader) {
38      super(reader);
39    }
40  
41    public StreamReaderFilter(XMLStreamReader reader,
42                              StreamFilter filter) {
43      super(reader);
44      setFilter(filter);
45    }
46  
47    public void setFilter(StreamFilter filter) {
48      this.filter = filter;
49    }
50  
51    public int next()
52      throws XMLStreamException
53    {
54      if (hasNext())
55        return super.next();
56      throw new IllegalStateException("next() may not be called "+
57                                      " when there are no more "+
58                                      " items to return");
59    }
60  
61    public boolean hasNext()
62      throws XMLStreamException
63    {
64      while (super.hasNext()) {
65        if (filter.accept(getDelegate())) return true;
66        super.next();
67      }
68      return false;
69    }
70  
71  
72    public static void main(String args[]) throws Exception {
73      System.setProperty("javax.xml.stream.XMLInputFactory", 
74                         "com.bea.xml.stream.MXParserFactory");
75  
76      XMLInputFactory factory = XMLInputFactory.newInstance();
77  
78      TypeFilter f = new com.bea.xml.stream.filters.TypeFilter();
79      f.addType(XMLEvent.START_ELEMENT);
80      f.addType(XMLEvent.END_ELEMENT);
81      XMLStreamReader reader = factory.createFilteredReader(
82        factory.createXMLStreamReader(new java.io.FileReader(args[0])),(StreamFilter)f);
83      while(reader.hasNext()) {
84        System.out.println(reader.getLocalName());
85        reader.next();
86      }
87  
88      
89      NameFilter nf = new NameFilter(new QName("banana","B"));
90      XMLStreamReader reader2 = factory.createFilteredReader(
91        factory.createXMLStreamReader(new java.io.FileReader(args[0])),(StreamFilter)nf);
92      
93      XMLStreamRecorder r = new XMLStreamRecorder(new java.io.OutputStreamWriter(new java.io.FileOutputStream("out.stream")));
94  
95  
96      while(reader2.hasNext()) {
97        r.write(reader2);
98        reader2.next();
99      }
100     r.flush();
101     
102   }
103 }