*/
public static final Date DEFAULT_DATE_REV;
- /**
- * {@link SimpleDateFormatUtil#DEFAULT_DATE} for import statement.
- */
- public static final Date DEFAULT_DATE_IMP;
-
static {
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(REVISION_SIMPLE_DATE);
try {
DEFAULT_DATE_REV = simpleDateFormat.parse(DEFAULT_DATE);
- DEFAULT_DATE_IMP = simpleDateFormat.parse(DEFAULT_DATE);
} catch (final ParseException e) {
throw new ExceptionInInitializerError(e);
}
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
-import java.util.Set;
import javax.annotation.Nonnull;
-import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
@Override
public <K, V, N extends IdentifierNamespace<K, V>> V getFromLocalStorage(final Class<N> type, final K key) {
final Map<K, V> localNamespace = (Map<K, V>) namespaces.get(type);
-
- V potential = null;
- if (localNamespace != null) {
- potential = localNamespace.get(key);
- }
-
- if (potential == null && isModuleIdentifierWithoutSpecifiedRevision(key)) {
- potential = getRegardlessOfRevision((ModuleIdentifier)key, (Map<ModuleIdentifier,V>)localNamespace);
- }
-
- return potential;
- }
-
- private static boolean isModuleIdentifierWithoutSpecifiedRevision(final Object obj) {
- return obj instanceof ModuleIdentifier
- && ((ModuleIdentifier) obj).getRevision() == SimpleDateFormatUtil.DEFAULT_DATE_IMP;
- }
-
- private static <K, V, N extends IdentifierNamespace<K, V>> V getRegardlessOfRevision(final ModuleIdentifier key,
- final Map<ModuleIdentifier, V> localNamespace) {
-
- if (localNamespace == null) {
- return null;
- }
-
- final Set<Entry<ModuleIdentifier, V>> entrySet = localNamespace.entrySet();
- for (final Entry<ModuleIdentifier, V> entry : entrySet) {
- final ModuleIdentifier moduleIdentifierInMap = entry.getKey();
- if (moduleIdentifierInMap.getName().equals(key.getName())) {
- return entry.getValue();
- }
- }
-
- return null;
+ return localNamespace == null ? null : localNamespace.get(key);
}
@Override
import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement;
import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf;
-import com.google.common.base.MoreObjects;
import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.base.Verify;
import java.net.URI;
private static class RevisionImport {
- private static final class LastRevisionCriterion extends NamespaceKeyCriterion<ModuleIdentifier> {
- private final String moduleName;
-
- LastRevisionCriterion(final String moduleName) {
- this.moduleName = requireNonNull(moduleName);
- }
-
- @Override
- public boolean match(final ModuleIdentifier key) {
- return moduleName.equals(key.getName());
- }
-
- @Override
- public ModuleIdentifier select(final ModuleIdentifier first, final ModuleIdentifier second) {
- final Date firstRev = Verify.verifyNotNull(first.getRevision());
- final Date secondRev = Verify.verifyNotNull(second.getRevision());
- return firstRev.compareTo(secondRev) >= 0 ? first : second;
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(this).add("moduleName", moduleName).toString();
- }
- }
-
private RevisionImport() {
throw new UnsupportedOperationException("Utility class");
}
final Date revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class);
if (revision == null) {
imported = importAction.requiresCtx(stmt, ModuleNamespace.class,
- new LastRevisionCriterion(moduleName), SOURCE_LINKAGE);
+ NamespaceKeyCriterion.latestRevisionModule(moduleName), SOURCE_LINKAGE);
} else {
imported = importAction.requiresCtx(stmt, ModuleNamespace.class,
ModuleIdentifierImpl.create(moduleName, Optional.empty(), Optional.of(revision)), SOURCE_LINKAGE);
}
@Override
- public String toString() {
- return addToStringAttributes(MoreObjects.toStringHelper(this)).toString();
- }
-
protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
return toStringHelper.add("moduleName", moduleName);
}
private static SemVerSourceIdentifier createSemVerModuleIdentifier(
final ModuleIdentifier importedModuleIdentifier, final SemVer semVer) {
- final String formattedRevision;
- if (importedModuleIdentifier.getRevision() == SimpleDateFormatUtil.DEFAULT_DATE_IMP) {
- formattedRevision = null;
- } else {
- formattedRevision = SimpleDateFormatUtil.getRevisionFormat().format(
+ final String formattedRevision = SimpleDateFormatUtil.getRevisionFormat().format(
importedModuleIdentifier.getRevision());
- }
-
-
return SemVerSourceIdentifier.create(importedModuleIdentifier.getName(), formattedRevision, semVer);
}
}
import java.util.Date;
import java.util.Optional;
import javax.annotation.Nonnull;
-import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceAction;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
RevisionDateStatement.class);
final ModelActionBuilder includeAction = stmt.newInferenceAction(SOURCE_LINKAGE);
- final Prerequisite<StmtContext<?, ?, ?>> requiresCtxPrerequisite = includeAction.requiresCtx(stmt,
- SubmoduleNamespace.class,ModuleIdentifierImpl.create(submoduleName, Optional.empty(),
- Optional.of(revision == null ? SimpleDateFormatUtil.DEFAULT_DATE_IMP
- : revision.getStatementArgument())), SOURCE_LINKAGE);
+ final Prerequisite<StmtContext<?, ?, ?>> requiresCtxPrerequisite;
+ if (revision == null) {
+ requiresCtxPrerequisite = includeAction.requiresCtx(stmt, SubmoduleNamespace.class,
+ NamespaceKeyCriterion.latestRevisionModule(submoduleName), SOURCE_LINKAGE);
+ } else {
+ requiresCtxPrerequisite = includeAction.requiresCtx(stmt, SubmoduleNamespace.class,
+ ModuleIdentifierImpl.create(submoduleName, Optional.empty(),
+ Optional.of(revision.getStatementArgument())), SOURCE_LINKAGE);
+ }
includeAction.apply(new InferenceAction() {
@Override
*/
package org.opendaylight.yangtools.yang.parser.spi.meta;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
+import com.google.common.base.Verify;
+import java.util.Date;
import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
/**
* Namespace key matching criterion.
*/
@Beta
public abstract class NamespaceKeyCriterion<K> {
+ private static final class LatestRevisionModule extends NamespaceKeyCriterion<ModuleIdentifier> {
+ private final String moduleName;
+
+ LatestRevisionModule(final String moduleName) {
+ this.moduleName = requireNonNull(moduleName);
+ }
+
+ @Override
+ public boolean match(final ModuleIdentifier key) {
+ return moduleName.equals(key.getName());
+ }
+
+ @Override
+ public ModuleIdentifier select(final ModuleIdentifier first, final ModuleIdentifier second) {
+ final Date firstRev = Verify.verifyNotNull(first.getRevision());
+ final Date secondRev = Verify.verifyNotNull(second.getRevision());
+ return firstRev.compareTo(secondRev) >= 0 ? first : second;
+ }
+
+ @Override
+ protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+ return toStringHelper.add("moduleName", moduleName);
+ }
+ }
+
+ /**
+ * Return a criterion which selects the latest known revision of a particular module.
+ *
+ * @param moduleName Module name
+ * @return A criterion object.
+ */
+ public static NamespaceKeyCriterion<ModuleIdentifier> latestRevisionModule(final String moduleName) {
+ return new LatestRevisionModule(moduleName);
+ }
+
/**
* Match a key against this criterion.
*
public abstract K select(@Nonnull K first, @Nonnull K second);
@Override
- public abstract String toString();
+ public final String toString() {
+ return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
+ }
+
+ protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+ return toStringHelper;
+ }
@Override
public final int hashCode() {