2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.yangtools.yang.data.codec.xml;
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;
41 public final class XmlCodecFactory extends AbstractCodecFactory<XmlCodec<?>> {
43 private XmlCodecFactory(final SchemaContext context) {
44 super(context, new SharedCodecCache<>());
48 * Instantiate a new codec factory attached to a particular context.
50 * @param context SchemaContext to which the factory should be bound
51 * @return A codec factory instance.
53 public static XmlCodecFactory create(final SchemaContext context) {
54 return new XmlCodecFactory(context);
58 protected XmlCodec<?> binaryCodec(final BinaryTypeDefinition type) {
59 return new QuotedXmlCodec<>(BinaryStringCodec.from(type));
63 protected XmlCodec<?> booleanCodec(final BooleanTypeDefinition type) {
64 return new BooleanXmlCodec(BooleanStringCodec.from(type));
68 protected XmlCodec<?> bitsCodec(final BitsTypeDefinition type) {
69 return new QuotedXmlCodec<>(BitsStringCodec.from(type));
73 protected XmlCodec<?> emptyCodec(final EmptyTypeDefinition type) {
74 return EmptyXmlCodec.INSTANCE;
78 protected XmlCodec<?> enumCodec(final EnumTypeDefinition type) {
79 return new QuotedXmlCodec<>(EnumStringCodec.from(type));
83 protected XmlCodec<?> identityRefCodec(final IdentityrefTypeDefinition type, final QNameModule module) {
84 return new IdentityrefXmlCodec(getSchemaContext(), module);
88 protected XmlCodec<?> instanceIdentifierCodec(final InstanceIdentifierTypeDefinition type) {
89 return new XmlStringInstanceIdentifierCodec(getSchemaContext(), this);
93 protected XmlCodec<?> intCodec(final IntegerTypeDefinition type) {
94 return new NumberXmlCodec<>(AbstractIntegerStringCodec.from(type));
98 protected XmlCodec<?> decimalCodec(final DecimalTypeDefinition type) {
99 return new NumberXmlCodec<>(DecimalStringCodec.from(type));
103 protected XmlCodec<?> stringCodec(final StringTypeDefinition type) {
104 return new QuotedXmlCodec<>(StringStringCodec.from(type));
108 protected XmlCodec<?> uintCodec(final UnsignedIntegerTypeDefinition type) {
109 return new NumberXmlCodec<>(AbstractIntegerStringCodec.from(type));
113 protected XmlCodec<?> unionCodec(final UnionTypeDefinition type, final List<XmlCodec<?>> codecs) {
114 return UnionXmlCodec.create(type, codecs);
118 protected XmlCodec<?> unknownCodec(final UnknownTypeDefinition type) {
119 return NullXmlCodec.INSTANCE;