Merge branch 'master' of ../controller
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / deviate / DeviateStatementRFC7950Support.java
1 /*
2  * Copyright (c) 2017 Cisco Systems, Inc. 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.rfc7950.stmt.deviate;
9
10 import com.google.common.annotations.Beta;
11 import org.opendaylight.yangtools.yang.model.api.DeviateKind;
12 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
13 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
14
15 /**
16  * Class providing necessary support for processing YANG 1.1 deviate statement.
17  */
18 @Beta
19 public final class DeviateStatementRFC7950Support extends AbstractDeviateStatementSupport {
20
21     private static final SubstatementValidator DEVIATE_ADD_SUBSTATEMENT_VALIDATOR =
22             SubstatementValidator.builder(YangStmtMapping.DEVIATE)
23                 .addOptional(YangStmtMapping.CONFIG)
24                 .addAny(YangStmtMapping.DEFAULT)
25                 .addOptional(YangStmtMapping.MANDATORY)
26                 .addOptional(YangStmtMapping.MAX_ELEMENTS)
27                 .addOptional(YangStmtMapping.MIN_ELEMENTS)
28                 .addAny(YangStmtMapping.MUST)
29                 .addAny(YangStmtMapping.UNIQUE)
30                 .addOptional(YangStmtMapping.UNITS)
31                 .build();
32
33     private static final SubstatementValidator DEVIATE_DELETE_SUBSTATEMENT_VALIDATOR =
34             SubstatementValidator.builder(YangStmtMapping.DEVIATE)
35                 .addAny(YangStmtMapping.DEFAULT)
36                 .addAny(YangStmtMapping.MUST)
37                 .addAny(YangStmtMapping.UNIQUE)
38                 .addOptional(YangStmtMapping.UNITS)
39                 .build();
40     private static final DeviateStatementRFC7950Support INSTANCE = new DeviateStatementRFC7950Support();
41
42     private DeviateStatementRFC7950Support() {
43         // Hidden
44     }
45
46     public static DeviateStatementRFC7950Support getInstance() {
47         return INSTANCE;
48     }
49
50     @Override
51     protected SubstatementValidator getSubstatementValidatorForDeviate(final DeviateKind deviateKind) {
52         switch (deviateKind) {
53             case NOT_SUPPORTED:
54                 return super.getSubstatementValidatorForDeviate(deviateKind);
55             case ADD:
56                 return DEVIATE_ADD_SUBSTATEMENT_VALIDATOR;
57             case REPLACE:
58                 return super.getSubstatementValidatorForDeviate(deviateKind);
59             case DELETE:
60                 return DEVIATE_DELETE_SUBSTATEMENT_VALIDATOR;
61             default:
62                 throw new IllegalStateException(String.format(
63                         "Substatement validator for deviate %s has not been defined.", deviateKind));
64         }
65     }
66 }