2 * Copyright (c) 2014 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.codec.gson;
10 import static com.google.common.base.Preconditions.checkArgument;
11 import static java.util.Objects.requireNonNull;
13 import com.google.gson.stream.JsonWriter;
14 import java.io.IOException;
15 import java.util.Iterator;
16 import java.util.Optional;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.common.QNameModule;
19 import org.opendaylight.yangtools.yang.data.util.codec.IdentityCodecUtil;
20 import org.opendaylight.yangtools.yang.data.util.codec.QNameCodecUtil;
21 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
22 import org.opendaylight.yangtools.yang.model.api.Module;
24 final class IdentityrefJSONCodec implements JSONCodec<QName> {
25 private final EffectiveModelContext schemaContext;
26 private final QNameModule parentModule;
28 IdentityrefJSONCodec(final EffectiveModelContext context, final QNameModule parentModule) {
29 this.schemaContext = requireNonNull(context);
30 this.parentModule = requireNonNull(parentModule);
34 public Class<QName> getDataType() {
39 public QName parseValue(final Object ctx, final String value) {
40 return IdentityCodecUtil.parseIdentity(value, schemaContext, prefix -> {
41 if (prefix.isEmpty()) {
45 final Iterator<? extends Module> modules = schemaContext.findModules(prefix).iterator();
46 checkArgument(modules.hasNext(), "Could not find module %s", prefix);
47 return modules.next().getQNameModule();
52 * Serialize QName with specified JsonWriter.
54 * @param writer JsonWriter
58 public void writeValue(final JsonWriter writer, final QName value) throws IOException {
59 final String str = QNameCodecUtil.encodeQName(value, uri -> {
60 final Optional<String> optName = schemaContext.findModule(uri).map(Module::getName);
61 checkArgument(optName.isPresent(), "Cannot find module for %s", uri);