package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes;
-import org.opendaylight.controller.config.yangjmxgenerator.attribute.*;
+import javax.management.openmbean.ArrayType;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.OpenType;
+import javax.management.openmbean.SimpleType;
+
+import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc;
+import org.opendaylight.controller.config.yangjmxgenerator.attribute.DependencyAttribute;
+import org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute;
+import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute;
+import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute;
+import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute;
+import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
public abstract class AttributeIfcSwitchStatement<T> {
+ private AttributeIfc lastAttribute;
+
public T switchAttribute(AttributeIfc attributeIfc) {
+ this.lastAttribute = attributeIfc;
+
+ OpenType<?> openType = attributeIfc.getOpenType();
+
if (attributeIfc instanceof JavaAttribute) {
- return caseJavaAttribute((JavaAttribute) attributeIfc);
+ try {
+ if(((JavaAttribute)attributeIfc).getTypeDefinition() instanceof BinaryTypeDefinition) {
+ return caseJavaBinaryAttribute(openType);
+ } else if(((JavaAttribute)attributeIfc).isUnion()) {
+ return caseJavaUnionAttribute(openType);
+ } else if(((JavaAttribute)attributeIfc).isIdentityRef()) {
+ return caseJavaIdentityRefAttribute(openType);
+ } else {
+ return caseJavaAttribute(openType);
+ }
+ } catch (UnknownOpenTypeException e) {
+ throw getIllegalArgumentException(attributeIfc);
+ }
+
} else if (attributeIfc instanceof DependencyAttribute) {
- return caseDependencyAttribute((DependencyAttribute) attributeIfc);
+ return caseDependencyAttribute(((DependencyAttribute) attributeIfc).getOpenType());
} else if (attributeIfc instanceof ListAttribute) {
- return caseListAttribute((ListAttribute) attributeIfc);
+ return caseListAttribute((ArrayType<?>) openType);
+ } else if (attributeIfc instanceof ListDependenciesAttribute) {
+ return caseListDependeciesAttribute((ArrayType<?>) openType);
} else if (attributeIfc instanceof TOAttribute) {
- return caseTOAttribute((TOAttribute) attributeIfc);
+ return caseTOAttribute(((TOAttribute) attributeIfc).getOpenType());
+ }
+
+ throw getIllegalArgumentException(attributeIfc);
+ }
+
+ public AttributeIfc getLastAttribute() {
+ return lastAttribute;
+ }
+
+ protected T caseJavaIdentityRefAttribute(OpenType<?> openType) {
+ return caseJavaAttribute(openType);
+ }
+
+ protected T caseJavaUnionAttribute(OpenType<?> openType) {
+ return caseJavaAttribute(openType);
+ }
+
+ protected T caseJavaBinaryAttribute(OpenType<?> openType) {
+ return caseJavaAttribute(openType);
+ }
+
+ private IllegalArgumentException getIllegalArgumentException(AttributeIfc attributeIfc) {
+ return new IllegalArgumentException("Unknown attribute type " + attributeIfc.getClass() + ", " + attributeIfc
+ + " with open type:" + attributeIfc.getOpenType());
+ }
+
+ public final T caseJavaAttribute(OpenType<?> openType) {
+ if (openType instanceof SimpleType<?>) {
+ return caseJavaSimpleAttribute((SimpleType<?>) openType);
+ } else if (openType instanceof ArrayType<?>) {
+ return caseJavaArrayAttribute((ArrayType<?>) openType);
+ } else if (openType instanceof CompositeType) {
+ return caseJavaCompositeAttribute((CompositeType) openType);
}
- throw new IllegalArgumentException("Unknown attribute type " + attributeIfc.getClass() + ", " + attributeIfc);
+ throw new UnknownOpenTypeException("Unknown attribute open type " + openType);
}
- protected abstract T caseJavaAttribute(JavaAttribute attributeIfc);
+ protected abstract T caseJavaSimpleAttribute(SimpleType<?> openType);
+
+ protected abstract T caseJavaArrayAttribute(ArrayType<?> openType);
- protected abstract T caseDependencyAttribute(DependencyAttribute attributeIfc);
+ protected abstract T caseJavaCompositeAttribute(CompositeType openType);
- protected abstract T caseTOAttribute(TOAttribute attributeIfc);
+ protected abstract T caseDependencyAttribute(SimpleType<?> attributeIfc);
- protected abstract T caseListAttribute(ListAttribute attributeIfc);
+ protected abstract T caseTOAttribute(CompositeType openType);
+
+ protected abstract T caseListAttribute(ArrayType<?> openType);
+
+ protected abstract T caseListDependeciesAttribute(ArrayType<?> openType);
+
+ private static class UnknownOpenTypeException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ public UnknownOpenTypeException(String message) {
+ super(message);
+ }
+ }
}