BUG-7983: make XmlCodecFactory a subclass of AbstractCodecFactory
[yangtools.git] / yang / yang-data-codec-xml / src / main / java / org / opendaylight / yangtools / yang / data / codec / xml / XmlCodecFactory.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.yangtools.yang.data.codec.xml;
10
11 import com.google.common.annotations.Beta;
12 import java.util.List;
13 import javax.annotation.concurrent.ThreadSafe;
14 import org.opendaylight.yangtools.yang.common.QNameModule;
15 import org.opendaylight.yangtools.yang.data.impl.codec.AbstractIntegerStringCodec;
16 import org.opendaylight.yangtools.yang.data.impl.codec.BinaryStringCodec;
17 import org.opendaylight.yangtools.yang.data.impl.codec.BitsStringCodec;
18 import org.opendaylight.yangtools.yang.data.impl.codec.BooleanStringCodec;
19 import org.opendaylight.yangtools.yang.data.impl.codec.DecimalStringCodec;
20 import org.opendaylight.yangtools.yang.data.impl.codec.EnumStringCodec;
21 import org.opendaylight.yangtools.yang.data.impl.codec.StringStringCodec;
22 import org.opendaylight.yangtools.yang.data.util.codec.AbstractCodecFactory;
23 import org.opendaylight.yangtools.yang.data.util.codec.SharedCodecCache;
24 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
25 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
26 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
27 import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
28 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
29 import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
30 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
31 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
32 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
33 import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition;
34 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
35 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
36 import org.opendaylight.yangtools.yang.model.api.type.UnknownTypeDefinition;
37 import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition;
38
39 @Beta
40 @ThreadSafe
41 public final class XmlCodecFactory extends AbstractCodecFactory<XmlCodec<?>> {
42
43     private XmlCodecFactory(final SchemaContext context) {
44         super(context, new SharedCodecCache<>());
45     }
46
47     /**
48      * Instantiate a new codec factory attached to a particular context.
49      *
50      * @param context SchemaContext to which the factory should be bound
51      * @return A codec factory instance.
52      */
53     public static XmlCodecFactory create(final SchemaContext context) {
54         return new XmlCodecFactory(context);
55     }
56
57     @Override
58     protected XmlCodec<?> binaryCodec(final BinaryTypeDefinition type) {
59         return new QuotedXmlCodec<>(BinaryStringCodec.from(type));
60     }
61
62     @Override
63     protected XmlCodec<?> booleanCodec(final BooleanTypeDefinition type) {
64         return new BooleanXmlCodec(BooleanStringCodec.from(type));
65     }
66
67     @Override
68     protected XmlCodec<?> bitsCodec(final BitsTypeDefinition type) {
69         return new QuotedXmlCodec<>(BitsStringCodec.from(type));
70     }
71
72     @Override
73     protected XmlCodec<?> emptyCodec(final EmptyTypeDefinition type) {
74         return EmptyXmlCodec.INSTANCE;
75     }
76
77     @Override
78     protected XmlCodec<?> enumCodec(final EnumTypeDefinition type) {
79         return new QuotedXmlCodec<>(EnumStringCodec.from(type));
80     }
81
82     @Override
83     protected XmlCodec<?> identityRefCodec(final IdentityrefTypeDefinition type, final QNameModule module) {
84         return new IdentityrefXmlCodec(getSchemaContext(), module);
85     }
86
87     @Override
88     protected XmlCodec<?> instanceIdentifierCodec(final InstanceIdentifierTypeDefinition type) {
89         return new XmlStringInstanceIdentifierCodec(getSchemaContext(), this);
90     }
91
92     @Override
93     protected XmlCodec<?> intCodec(final IntegerTypeDefinition type) {
94         return new NumberXmlCodec<>(AbstractIntegerStringCodec.from(type));
95     }
96
97     @Override
98     protected XmlCodec<?> decimalCodec(final DecimalTypeDefinition type) {
99         return new NumberXmlCodec<>(DecimalStringCodec.from(type));
100     }
101
102     @Override
103     protected XmlCodec<?> stringCodec(final StringTypeDefinition type) {
104         return new QuotedXmlCodec<>(StringStringCodec.from(type));
105     }
106
107     @Override
108     protected XmlCodec<?> uintCodec(final UnsignedIntegerTypeDefinition type) {
109         return new NumberXmlCodec<>(AbstractIntegerStringCodec.from(type));
110     }
111
112     @Override
113     protected XmlCodec<?> unionCodec(final UnionTypeDefinition type, final List<XmlCodec<?>> codecs) {
114         return UnionXmlCodec.create(type, codecs);
115     }
116
117     @Override
118     protected XmlCodec<?> unknownCodec(final UnknownTypeDefinition type) {
119         return NullXmlCodec.INSTANCE;
120     }
121 }