Defer copy decisions to StatementSupport
[yangtools.git] / yang / yang-parser-spi / src / main / java / org / opendaylight / yangtools / yang / parser / spi / meta / ForwardingStatementSupport.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.spi.meta;
9
10 import com.google.common.annotations.Beta;
11 import com.google.common.collect.ForwardingObject;
12 import java.util.Optional;
13 import org.opendaylight.yangtools.yang.common.QNameModule;
14 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
15 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
16 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
17 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
18
19 /**
20  * Utility forwarding implementation of {@link StatementSupport} contract. This class is useful for implementing
21  * wrapped statements.
22  *
23  * @author Robert Varga
24  *
25  * @param <A> Argument type
26  * @param <D> Declared Statement representation
27  * @param <E> Effective Statement representation
28  */
29 @Beta
30 public abstract class ForwardingStatementSupport<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
31     extends ForwardingObject implements StatementSupport<A, D, E> {
32
33     @Override
34     protected abstract StatementSupport<A, D, E> delegate();
35
36     @Override
37     public D createDeclared(final StmtContext<A, D, ?> ctx) {
38         return delegate().createDeclared(ctx);
39     }
40
41     @Override
42     public E createEffective(final StmtContext<A, D, E> ctx) {
43         return delegate().createEffective(ctx);
44     }
45
46     @Override
47     public StatementDefinition getPublicView() {
48         return delegate().getPublicView();
49     }
50
51     @Override
52     public A parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
53         return delegate().parseArgumentValue(ctx, value);
54     }
55
56     @Override
57     public void onStatementAdded(final Mutable<A, D, E> stmt) {
58         delegate().onStatementAdded(stmt);
59     }
60
61     @Override
62     public void onPreLinkageDeclared(final Mutable<A, D, E> stmt) {
63         delegate().onPreLinkageDeclared(stmt);
64     }
65
66     @Override
67     public void onLinkageDeclared(final Mutable<A, D, E> stmt) {
68         delegate().onLinkageDeclared(stmt);
69     }
70
71     @Override
72     public void onStatementDefinitionDeclared(final Mutable<A, D, E> stmt) {
73         delegate().onStatementDefinitionDeclared(stmt);
74     }
75
76     @Override
77     public void onFullDefinitionDeclared(final Mutable<A, D, E> stmt) {
78         delegate().onFullDefinitionDeclared(stmt);
79     }
80
81     @Override
82     public boolean hasArgumentSpecificSupports() {
83         return delegate().hasArgumentSpecificSupports();
84     }
85
86     @Override
87     public StatementSupport<?, ?, ?> getSupportSpecificForArgument(final String argument) {
88         return delegate().getSupportSpecificForArgument(argument);
89     }
90
91     @Override
92     public Optional<? extends Mutable<?, ?, ?>> copyAsChildOf(final Mutable<?, ?, ?> stmt,
93             final Mutable<?, ?, ?> parent, final CopyType type, final QNameModule targetModule) {
94         return delegate().copyAsChildOf(stmt, parent, type, targetModule);
95     }
96 }