2 * Copyright (c) 2015 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.stmt.rfc6020;
10 import java.util.Collection;
11 import org.opendaylight.yangtools.yang.common.QName;
12 import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
13 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
14 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
15 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
16 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
17 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
18 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
19 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
26 import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace;
27 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
28 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
29 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
30 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder;
31 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceAction;
32 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite;
33 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
34 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
35 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
36 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
38 public class UsesStatementImpl extends AbstractDeclaredStatement<QName> implements UsesStatement {
40 protected UsesStatementImpl(StmtContext<QName, UsesStatement, ?> context) {
44 public static class Definition extends
45 AbstractStatementSupport<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> {
48 super(Rfc6020Mapping.USES);
52 public QName parseArgumentValue(StmtContext<?, ?, ?> ctx, String value) {
53 return Utils.qNameFromArgument(ctx, value);
56 public void onStatementDeclared(Mutable<QName, UsesStatement, ?> usesNode) throws InferenceException {
57 ModelActionBuilder modifier = usesNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL);
58 final QName groupingName = usesNode.getStatementArgument();
59 final StatementSourceReference usesSource = usesNode.getStatementSourceReference();
60 final Prerequisite<?> targetPre = modifier.mutatesEffectiveCtx(usesNode.getParentContext());
61 final Prerequisite<EffectiveStatement<QName, GroupingStatement>> sourcePre = modifier.requiresEffective(
62 usesNode, GroupingNamespace.class, groupingName);
64 modifier.apply(new InferenceAction() {
67 public void apply() throws InferenceException {
68 Mutable<?, ?, ?> targetCtx = (Mutable<?, ?, ?>) targetPre.get();
69 EffectiveStatement<QName, GroupingStatement> source = sourcePre.get();
71 throw new UnsupportedOperationException("Copy of not not yet implemented.");
75 public void prerequisiteFailed(Collection<? extends Prerequisite<?>> failed) throws InferenceException {
76 if(failed.contains(sourcePre)) {
77 throw new InferenceException("Grouping " + groupingName + "was not found.", usesSource);
79 throw new InferenceException("Unknown error occured.", usesSource);
87 public UsesStatement createDeclared(StmtContext<QName, UsesStatement, ?> ctx) {
88 return new UsesStatementImpl(ctx);
92 public EffectiveStatement<QName, UsesStatement> createEffective(
93 StmtContext<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> ctx) {
94 throw new UnsupportedOperationException("Not implemented yet.");
100 public QName getName() {
105 public WhenStatement getWhenStatement() {
106 return firstDeclared(WhenStatement.class);
110 public Collection<? extends IfFeatureStatement> getIfFeatures() {
111 return allDeclared(IfFeatureStatement.class);
115 public StatusStatement getStatus() {
116 return firstDeclared(StatusStatement.class);
120 public DescriptionStatement getDescription() {
121 return firstDeclared(DescriptionStatement.class);
125 public ReferenceStatement getReference() {
126 return firstDeclared(ReferenceStatement.class);
130 public Collection<? extends AugmentStatement> getAugments() {
131 return allDeclared(AugmentStatement.class);
135 public Collection<? extends RefineStatement> getRefines() {
136 return allDeclared(RefineStatement.class);
140 public QName argument() {
141 // TODO Auto-generated method stub
146 public String rawArgument() {
147 // TODO Auto-generated method stub
152 public Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
153 // TODO Auto-generated method stub
158 public StatementDefinition statementDefinition() {
159 // TODO Auto-generated method stub
164 public StatementSource getStatementSource() {
165 // TODO Auto-generated method stub