Improve {Action,Notification}NodeContainerCompat safety
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / stmt / OrderedByStatement.java
1 /*
2  * Copyright (c) 2015 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.model.api.stmt;
9
10 import static com.google.common.base.Verify.verifyNotNull;
11
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.eclipse.jdt.annotation.NonNullByDefault;
14 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
15 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
16 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
17
18 public interface OrderedByStatement extends DeclaredStatement<OrderedByStatement.Ordering> {
19     @NonNullByDefault
20     enum Ordering {
21         SYSTEM("system"),
22         USER("user");
23
24         private String argumentString;
25
26         Ordering(final String argumentString) {
27             this.argumentString = argumentString;
28         }
29
30         public String getArgumentString() {
31             return argumentString;
32         }
33
34         public static Ordering forArgumentString(final String argumentString) {
35             switch (argumentString) {
36                 case "system":
37                     return SYSTEM;
38                 case "user":
39                     return USER;
40                 default:
41                     throw new IllegalArgumentException("Invalid ordering string '" + argumentString + "'");
42             }
43         }
44     }
45
46     @Override
47     default StatementDefinition statementDefinition() {
48         return YangStmtMapping.ORDERED_BY;
49     }
50
51     default @NonNull Ordering getValue() {
52         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
53         return verifyNotNull(argument());
54     }
55 }