Initial code drop of yang model driven configuration system
[controller.git] / opendaylight / config / config-api / src / main / java / org / opendaylight / controller / config / api / JmxAttributeValidationException.java
diff --git a/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/JmxAttributeValidationException.java b/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/JmxAttributeValidationException.java
new file mode 100644 (file)
index 0000000..3380a10
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.api;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Exception that can be thrown during validation phase. This allows for
+ * pointing user to a specific list of parameters that fail the validation. Note
+ * that {@link org.opendaylight.controller.config.spi.Module#validate()} can
+ * throw any runtime exception to trigger validation failure.
+ */
+public class JmxAttributeValidationException extends RuntimeException {
+    private static final long serialVersionUID = 1L;
+    private final List<JmxAttribute> attributeNames;
+
+    public JmxAttributeValidationException(JmxAttribute jmxAttribute) {
+        this(Arrays.asList(jmxAttribute));
+    }
+
+    public JmxAttributeValidationException(List<JmxAttribute> jmxAttribute) {
+        this.attributeNames = jmxAttribute;
+    }
+
+    public JmxAttributeValidationException(String message,
+            JmxAttribute jmxAttribute) {
+        this(message, Arrays.asList(jmxAttribute));
+    }
+
+    public JmxAttributeValidationException(String message,
+            List<JmxAttribute> jmxAttributes) {
+        super(message);
+        this.attributeNames = jmxAttributes;
+    }
+
+    public JmxAttributeValidationException(String message, Throwable cause,
+            JmxAttribute jmxAttribute) {
+        this(message, cause, Arrays.asList(jmxAttribute));
+    }
+
+    public JmxAttributeValidationException(String message, Throwable cause,
+            List<JmxAttribute> jmxAttributes) {
+        super(message, cause);
+        this.attributeNames = jmxAttributes;
+    }
+
+    public List<JmxAttribute> getAttributeNames() {
+        return attributeNames;
+    }
+
+    public static <T> T checkNotNull(T param, JmxAttribute jmxAttribute) {
+        String message = "is null";
+        return checkNotNull(param, message, jmxAttribute);
+    }
+
+    public static <T> T checkNotNull(T param, String message,
+            JmxAttribute jmxAttribute) {
+        if (param == null) {
+            throw new JmxAttributeValidationException(
+                    jmxAttribute.getAttributeName() + " " + message,
+                    jmxAttribute);
+        }
+        return param;
+    }
+
+    public static JmxAttributeValidationException wrap(Throwable throwable,
+            JmxAttribute jmxAttribute) throws JmxAttributeValidationException {
+        return wrap(throwable, throwable.getMessage(), jmxAttribute);
+    }
+
+    public static JmxAttributeValidationException wrap(Throwable throwable,
+            String message, JmxAttribute jmxAttribute) {
+
+        throw new JmxAttributeValidationException(
+                jmxAttribute.getAttributeName() + " " + message, throwable,
+                jmxAttribute);
+    }
+
+    public static void checkCondition(boolean condition, String message,
+            JmxAttribute jmxAttribute) throws JmxAttributeValidationException {
+        if (condition == false) {
+            throw new JmxAttributeValidationException(
+                    jmxAttribute.getAttributeName() + " " + message,
+                    jmxAttribute);
+        }
+    }
+}