2 * Copyright (c) 2015 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
8 package org.opendaylight.yangtools.yang.data.impl.codec;
10 import com.google.common.base.Optional;
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.ImmutableSet;
13 import com.google.common.collect.Sets;
14 import java.util.List;
16 import org.opendaylight.yangtools.yang.data.api.codec.EnumCodec;
17 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
18 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
20 class EnumStringCodec extends TypeDefinitionAwareCodec<String, EnumTypeDefinition> implements
23 private final Set<String> values;
25 protected EnumStringCodec(final Optional<EnumTypeDefinition> typeDef) {
26 super(typeDef, String.class);
27 if(typeDef.isPresent()) {
28 final List<EnumPair> enumValues = typeDef.get().getValues();
29 final Set<String> valuesBuilder = Sets.newHashSetWithExpectedSize(enumValues.size());
30 for( final EnumPair pair: enumValues ) {
31 valuesBuilder.add( pair.getName() );
33 values = ImmutableSet.copyOf(valuesBuilder);
40 static TypeDefinitionAwareCodec<?,EnumTypeDefinition> from(final EnumTypeDefinition normalizedType) {
41 return new EnumStringCodec(Optional.fromNullable(normalizedType));
45 public final String deserialize(final String s) {
47 Preconditions.checkArgument(values.contains(s), "Invalid value '%s' for enum type. Allowed values are: %s",
54 public final String serialize(final String data) {
55 return data == null ? "" : data;