/* * 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.yangtools.yang.parser.stmt.rfc6020; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; import java.net.URI; import java.util.Date; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement; import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleIdentifierImpl; import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; import org.opendaylight.yangtools.yang.parser.spi.NamespaceToModule; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; 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.source.ImpPrefixToModuleIdentifier; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleIdentifierToModuleQName; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleQNameToModuleName; import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ModuleEffectiveStatementImpl; import com.google.common.base.Optional; public class ModuleStatementSupport extends AbstractStatementSupport> { private QNameModule qNameModule; public ModuleStatementSupport() { super(Rfc6020Mapping.MODULE); } @Override public String parseArgumentValue(StmtContext ctx, String value) { return value; } @Override public ModuleStatement createDeclared(StmtContext ctx) { return new ModuleStatementImpl(ctx); } @Override public EffectiveStatement createEffective( StmtContext> ctx) { return new ModuleEffectiveStatementImpl(ctx); } @Override public void onLinkageDeclared(Mutable> stmt) throws SourceException { Optional moduleNs = Optional.fromNullable(firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class)); if (!moduleNs.isPresent()) { throw new IllegalArgumentException("Namespace of the module [" + stmt.getStatementArgument() + "] is missing."); } Optional revisionDate = Optional.fromNullable(firstAttributeOf(stmt.declaredSubstatements(), RevisionStatement.class)); qNameModule = QNameModule.create(moduleNs.get(), revisionDate.orNull()); ModuleIdentifier moduleIdentifier = new ModuleIdentifierImpl(stmt.getStatementArgument(), Optional. absent(), revisionDate); stmt.addContext(ModuleNamespace.class, moduleIdentifier, stmt); stmt.addContext(NamespaceToModule.class, qNameModule, stmt); String modulePrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); if (modulePrefix == null) { throw new IllegalArgumentException("Prefix of the module [" + stmt.getStatementArgument() + "] is missing."); } stmt.addToNs(PrefixToModule.class, modulePrefix, qNameModule); stmt.addToNs(ModuleNameToModuleQName.class, stmt.getStatementArgument(), qNameModule); stmt.addToNs(ModuleQNameToModuleName.class, qNameModule, stmt.getStatementArgument()); stmt.addToNs(ModuleIdentifierToModuleQName.class, moduleIdentifier, qNameModule); stmt.addToNs(ImpPrefixToModuleIdentifier.class, modulePrefix, moduleIdentifier); } @Override public void onFullDefinitionDeclared( final Mutable> stmt) throws SourceException { stmt.addContext(NamespaceToModule.class, qNameModule, stmt); } }