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
8 package org.opendaylight.yangtools.yang.parser.repo;
10 import com.google.common.base.Optional;
11 import java.util.Collection;
13 import org.opendaylight.yangtools.concepts.SemVer;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
16 import org.opendaylight.yangtools.yang.model.repo.api.OpenconfigVerSourceIdentifier;
17 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
18 import org.opendaylight.yangtools.yang.parser.impl.util.YangModelDependencyInfo;
20 final class OpenconfigVerDependencyResolver extends DependencyResolver {
22 protected OpenconfigVerDependencyResolver(final Map<SourceIdentifier, YangModelDependencyInfo> depInfo) {
26 protected static SourceIdentifier findCompatibleVersion(final Iterable<SourceIdentifier> haystack, final ModuleImport mi) {
27 final String requestedModuleName = mi.getModuleName();
28 for (SourceIdentifier r : haystack) {
29 if (requestedModuleName.equals(r.getName())
30 && isCompatible(((OpenconfigVerSourceIdentifier) r).getOpenconfigVersion(), mi.getOpenconfigVersion())) {
38 private static boolean isCompatible(final SemVer moduleSemVer, final SemVer importSemVer) {
39 return moduleSemVer.getMajor() == importSemVer.getMajor() && moduleSemVer.compareTo(importSemVer) >= 0;
43 protected boolean isKnown(final Collection<SourceIdentifier> haystack, final ModuleImport mi) {
44 final String rev = mi.getRevision() != null ? QName.formattedRevision(mi.getRevision()) : null;
45 final OpenconfigVerSourceIdentifier msi = OpenconfigVerSourceIdentifier.create(mi.getModuleName(), Optional.fromNullable(rev), mi.getOpenconfigVersion());
48 if (haystack.contains(msi)) {
52 // Slow revision-less walk
53 return findCompatibleVersion(haystack, mi) != null;
56 public static OpenconfigVerDependencyResolver create(final Map<SourceIdentifier, YangModelDependencyInfo> depInfo) {
57 return new OpenconfigVerDependencyResolver(depInfo);