X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2Fmapping%2Fattributes%2Ffromxml%2FSimpleIdentityRefAttributeReadingStrategy.java;fp=opendaylight%2Fconfig%2Fconfig-manager-facade-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Ffacade%2Fxml%2Fmapping%2Fattributes%2Ffromxml%2FSimpleIdentityRefAttributeReadingStrategy.java;h=2bd4356ef47887b8f25f8f8150f87484a61aed5d;hb=23fe9ca678ada6263fec5dd996f4025e4a32fcf5;hp=0000000000000000000000000000000000000000;hpb=071a641d7c12c0e6112d5ce0afe806b54f116ed2;p=controller.git diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java new file mode 100644 index 0000000000..2bd4356ef4 --- /dev/null +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import java.net.URI; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import org.opendaylight.controller.config.facade.xml.mapping.IdentityMapping; +import org.opendaylight.controller.config.util.xml.DocumentedException; +import org.opendaylight.controller.config.util.xml.XmlElement; +import org.opendaylight.yangtools.yang.common.QName; + + +public class SimpleIdentityRefAttributeReadingStrategy extends SimpleAttributeReadingStrategy { + + private final String key; + private final Map> identityMap; + + public SimpleIdentityRefAttributeReadingStrategy(String nullableDefault, String key, Map> identityMap) { + super(nullableDefault); + this.key = key; + this.identityMap = identityMap; + } + + @Override + protected String readElementContent(XmlElement xmlElement) throws DocumentedException { + Map.Entry namespaceOfTextContent = xmlElement.findNamespaceOfTextContent(); + String content = xmlElement.getTextContent(); + + final String namespace; + final String localName; + if(namespaceOfTextContent.getKey().isEmpty()) { + localName = content; + namespace = xmlElement.getNamespace(); + } else { + String prefix = namespaceOfTextContent.getKey() + ":"; + Preconditions.checkArgument(content.startsWith(prefix), "Identity ref should be prefixed with \"%s\"", prefix); + localName = content.substring(prefix.length()); + namespace = namespaceOfTextContent.getValue(); + } + + Date revision = null; + Map revisions = identityMap.get(namespace); + if(revisions.keySet().size() > 1) { + for (Map.Entry revisionToIdentityEntry : revisions.entrySet()) { + if(revisionToIdentityEntry.getValue().containsIdName(localName)) { + Preconditions.checkState(revision == null, "Duplicate identity %s, in namespace %s, with revisions: %s, %s detected. Cannot map attribute", + localName, namespace, revision, revisionToIdentityEntry.getKey()); + revision = revisionToIdentityEntry.getKey(); + } + } + } else { + revision = revisions.keySet().iterator().next(); + } + return QName.create(URI.create(namespace), revision, localName).toString(); + } + + @Override + protected Object postprocessParsedValue(String textContent) { + HashMap map = Maps.newHashMap(); + map.put(key, textContent); + return map; + } + + @Override + protected Object postprocessNullableDefault(String nullableDefault) { + return nullableDefault == null ? null : postprocessParsedValue(nullableDefault); + } +}