Merge branch 'master' of ../controller
[yangtools.git] / yang / yang-common / src / main / java / org / opendaylight / yangtools / yang / common / YangVersion.java
index a8b02c87774060ff3fcaecbe3455f7c0d7f67bca..19240270183543ff73510c07af29ea1af0a4a37e 100644 (file)
@@ -7,9 +7,14 @@
  */
 package org.opendaylight.yangtools.yang.common;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.annotations.Beta;
-import com.google.common.base.Preconditions;
-import javax.annotation.Nonnull;
+import com.google.common.collect.Maps;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 
 /**
  * Enumeration of supported YANG versions.
@@ -27,12 +32,15 @@ public enum YangVersion {
      */
     VERSION_1_1("1.1", "RFC7950");
 
-    private final String str;
-    private String reference;
+    private static final Map<String, YangVersion> YANG_VERSION_MAP = Maps.uniqueIndex(Arrays.asList(values()),
+        YangVersion::toString);
+
+    private final @NonNull String str;
+    private final @NonNull String reference;
 
-    private YangVersion(final String str, final String reference) {
-        this.str = Preconditions.checkNotNull(str);
-        this.reference = Preconditions.checkNotNull(reference);
+    YangVersion(final @NonNull String str, final @NonNull String reference) {
+        this.str = requireNonNull(str);
+        this.reference = requireNonNull(reference);
     }
 
     /**
@@ -40,18 +48,10 @@ public enum YangVersion {
      *
      * @param str String to parse
      * @return YANG version
-     * @throws IllegalArgumentException if the string is malformed
      * @throws NullPointerException if the string is null
      */
-    public static YangVersion parse(@Nonnull final String str) {
-        switch (str) {
-            case "1":
-                return VERSION_1;
-            case "1.1":
-                return VERSION_1_1;
-            default:
-                throw new IllegalArgumentException("Invalid YANG version '" + str + "'");
-        }
+    public static Optional<YangVersion> parse(final @NonNull String str) {
+        return Optional.ofNullable(YANG_VERSION_MAP.get(requireNonNull(str)));
     }
 
     /**
@@ -59,12 +59,12 @@ public enum YangVersion {
      *
      * @return Normative reference.
      */
-    @Nonnull public String getReference() {
+    public @NonNull String getReference() {
         return reference;
     }
 
     @Override
-    @Nonnull public String toString() {
+    public @NonNull String toString() {
         return str;
     }
 }