View Javadoc

1   /**
2    *
3    * Copyright 2005 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.kernel.config.xstream;
18  
19  import java.io.IOException;
20  
21  import com.thoughtworks.xstream.converters.Converter;
22  import com.thoughtworks.xstream.converters.MarshallingContext;
23  import com.thoughtworks.xstream.converters.UnmarshallingContext;
24  import com.thoughtworks.xstream.converters.ConversionException;
25  import com.thoughtworks.xstream.io.HierarchicalStreamReader;
26  import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
27  import org.w3c.dom.Element;
28  import org.w3c.dom.NodeList;
29  import org.w3c.dom.Node;
30  
31  /**
32   * @version $Rev: 410741 $ $Date: 2006-05-31 21:35:48 -0700 (Wed, 31 May 2006) $
33   */
34  public class XStreamGBeanStateConverter implements Converter {
35      public boolean canConvert(Class clazz) {
36          return XStreamGBeanState.class.isAssignableFrom(clazz);
37      }
38  
39      public void marshal(Object object, HierarchicalStreamWriter writer, MarshallingContext marshallingContext) {
40          XStreamGBeanState gbeanState = (XStreamGBeanState) object;
41          Element element = null;
42          try {
43              element = gbeanState.getGBeanState();
44          } catch (IOException e) {
45              throw new ConversionException("Cannot get xml version of gbeans", e);
46          }
47          marshallingContext.convertAnother(element);
48      }
49  
50      public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext unmarshallingContext) {
51          Element element = (Element) unmarshallingContext.convertAnother(reader, Element.class);
52          NodeList childNodes = element.getChildNodes();
53          for (int i = 0; i < childNodes.getLength(); i ++) {
54              Node node = childNodes.item(i);
55              if (node instanceof Element) {
56                  element = (Element) node;
57                  return new XStreamGBeanState(element);
58              }
59          }
60          throw new ConversionException("No nested nodes found");
61      }
62  }