View Javadoc

1   /**
2    * Copyright (C) cedarsoft GmbH.
3    *
4    * Licensed under the GNU General Public License version 3 (the "License")
5    * with Classpath Exception; you may not use this file except in compliance
6    * with the License. You may obtain a copy of the License at
7    *
8    *         http://www.cedarsoft.org/gpl3ce
9    *         (GPL 3 with Classpath Exception)
10   *
11   * This code is free software; you can redistribute it and/or modify it
12   * under the terms of the GNU General Public License version 3 only, as
13   * published by the Free Software Foundation. cedarsoft GmbH designates this
14   * particular file as subject to the "Classpath" exception as provided
15   * by cedarsoft GmbH in the LICENSE file that accompanied this code.
16   *
17   * This code is distributed in the hope that it will be useful, but WITHOUT
18   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20   * version 3 for more details (a copy is included in the LICENSE file that
21   * accompanied this code).
22   *
23   * You should have received a copy of the GNU General Public License version
24   * 3 along with this work; if not, write to the Free Software Foundation,
25   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
26   *
27   * Please contact cedarsoft GmbH, 72810 Gomaringen, Germany,
28   * or visit www.cedarsoft.com if you need additional information or
29   * have any questions.
30   */
31  
32  package com.cedarsoft.serialization;
33  
34  import com.cedarsoft.version.VersionRange;
35  
36  import javax.annotation.Nonnull;
37  
38  /**
39   * Abstract base class for xml based serializers.
40   * The version information is stored within the namespace declaration of the root element
41   *
42   * @param <T> the type of object this serializer is able to (de)serialize
43   * @param <S> the object to serialize to
44   * @param <D> the object to deserialize from
45   * @param <E> the exception that might be thrown
46   */
47  public abstract class AbstractXmlSerializer<T, S, D, E extends Throwable> extends AbstractNameSpaceBasedSerializer<T, S, D, E> {
48    @Nonnull
49  
50    private final String defaultElementName;
51  
52    /**
53     * Creates a new serializer
54     *
55     * @param defaultElementName the default element name
56     * @param nameSpaceBase      the base for the namespace uri
57     * @param formatVersionRange the version range. The max value is used when written.
58     */
59    protected AbstractXmlSerializer( @Nonnull String defaultElementName, @Nonnull String nameSpaceBase, @Nonnull VersionRange formatVersionRange ) {
60      super( nameSpaceBase, formatVersionRange );
61      this.defaultElementName = defaultElementName;
62    }
63  
64    /**
65     * Returns the default element name
66     *
67     * @return the default element name
68     */
69    @Nonnull
70  
71    public String getDefaultElementName() {
72      return defaultElementName;
73    }
74  
75    @Nonnull
76    @Override
77    public <T> AbstractXmlSerializer<? super T, S, D, E> getSerializer( @Nonnull Class<T> type ) {
78      return ( AbstractXmlSerializer<? super T, S, D, E> ) super.getSerializer( type );
79    }
80  
81  }