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 }