X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fconfig%2Fyang-jmx-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2Fattribute%2FJavaAttribute.java;fp=opendaylight%2Fconfig%2Fyang-jmx-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2Fattribute%2FJavaAttribute.java;h=0000000000000000000000000000000000000000;hb=ac6f2699cd0c1e340cc32e8f0d0ca94c8e9c0cc0;hp=f1c23cb86e4e51554fce22f2aa9deb7b1d6646d0;hpb=f43b01b81319959b1907e3e04537f5169e7f33d8;p=controller.git diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java deleted file mode 100644 index f1c23cb86e..0000000000 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java +++ /dev/null @@ -1,328 +0,0 @@ -/* - * 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.yangjmxgenerator.attribute; - -import com.google.common.base.Preconditions; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import javax.management.openmbean.ArrayType; -import javax.management.openmbean.CompositeType; -import javax.management.openmbean.OpenDataException; -import javax.management.openmbean.OpenType; -import javax.management.openmbean.SimpleType; -import org.opendaylight.controller.config.api.IdentityAttributeRef; -import org.opendaylight.controller.config.yangjmxgenerator.TypeProviderWrapper; -import org.opendaylight.mdsal.binding.model.api.Type; -import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; -import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; -import org.opendaylight.yangtools.yang.model.api.TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.type.CompatUtils; - -public class JavaAttribute extends AbstractAttribute implements TypedAttribute { - - public static final String DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION = "valueOfArtificialUnionProperty"; - - private final Type type; - private final String nullableDescription, nullableDefault, nullableDefaultWrappedForCode; - private final TypeProviderWrapper typeProviderWrapper; - private final TypeDefinition typeDefinition; - - public JavaAttribute(final LeafSchemaNode leaf, - final TypeProviderWrapper typeProviderWrapper) { - super(leaf); - this.type = typeProviderWrapper.getType(leaf); - - this.typeDefinition = CompatUtils.compatLeafType(leaf); - this.typeProviderWrapper = typeProviderWrapper; - - final Optional typeDefault = leaf.getType().getDefaultValue(); - if (typeDefault.isPresent()) { - nullableDefault = (String) typeDefault.get(); - nullableDefaultWrappedForCode = typeProviderWrapper.getDefault(leaf); - } else { - nullableDefault = null; - nullableDefaultWrappedForCode = null; - } - - this.nullableDescription = leaf.getDescription().orElse(null); - } - - public JavaAttribute(final LeafListSchemaNode leaf, - final TypeProviderWrapper typeProviderWrapper) { - super(leaf); - this.type = typeProviderWrapper.getType(leaf); - this.typeDefinition = leaf.getType(); - this.typeProviderWrapper = typeProviderWrapper; - this.nullableDefault = this.nullableDefaultWrappedForCode = null; - this.nullableDescription = leaf.getDescription().orElse(null); - } - - public boolean isUnion() { - final TypeDefinition base = getBaseType(this.typeProviderWrapper, this.typeDefinition); - return base instanceof UnionTypeDefinition; - } - - public boolean isEnum() { - final TypeDefinition base = getBaseType(this.typeProviderWrapper, this.typeDefinition); - return base instanceof EnumTypeDefinition; - } - - public TypeDefinition getTypeDefinition() { - return this.typeDefinition; - } - - /** - * Returns the most base type - */ - private TypeDefinition getBaseType(final TypeProviderWrapper typeProviderWrapper, TypeDefinition baseType) { - while(baseType.getBaseType()!=null) { - baseType = baseType.getBaseType(); - } - return baseType; - } - - public String getNullableDefaultWrappedForCode() { - return this.nullableDefaultWrappedForCode; - } - - @Override - public Type getType() { - return this.type; - } - - @Override - public String getNullableDescription() { - return this.nullableDescription; - } - - @Override - public String getNullableDefault() { - return this.nullableDefault; - } - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - - final JavaAttribute that = (JavaAttribute) o; - - if (this.nullableDefault != null ? !this.nullableDefault - .equals(that.nullableDefault) : that.nullableDefault != null) { - return false; - } - if (this.nullableDescription != null ? !this.nullableDescription - .equals(that.nullableDescription) - : that.nullableDescription != null) { - return false; - } - if (this.type != null ? !this.type.equals(that.type) : that.type != null) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (this.type != null ? this.type.hashCode() : 0); - result = 31 - * result - + (this.nullableDescription != null ? this.nullableDescription.hashCode() - : 0); - result = 31 * result - + (this.nullableDefault != null ? this.nullableDefault.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "JavaAttribute{" + getAttributeYangName() + "," + "type=" + this.type - + '}'; - } - - @Override - public OpenType getOpenType() { - final TypeDefinition baseTypeDefinition = getBaseType(this.typeProviderWrapper, this.typeDefinition); - final Type baseType = this.typeProviderWrapper.getType(baseTypeDefinition, baseTypeDefinition); - - if (isArray()) { - return getArrayType(); - } else if (isEnum()) { - return getEnumType(baseTypeDefinition); - } else if (isUnion()) { - return getCompositeTypeForUnion(baseTypeDefinition); - } else if (isDerivedType(baseType, getType())) { - return getCompositeType(baseType, baseTypeDefinition); - } else if (isIdentityRef()) { - return getCompositeTypeForIdentity(); - } - - return getSimpleType(getType()); - } - - private OpenType getEnumType(final TypeDefinition baseType) { - final String fullyQualifiedName = this.typeProviderWrapper.getType(this.node, getTypeDefinition()).getFullyQualifiedName(); - final String[] items = {"instance"}; - final String description = getNullableDescription() == null ? getAttributeYangName() : getNullableDescription(); - - try { - return new CompositeType(fullyQualifiedName, description, items, items, new OpenType[]{SimpleType.STRING}); - } catch (final OpenDataException e) { - throw new RuntimeException("Unable to create enum type" + fullyQualifiedName + " as open type", e); - } - } - - public boolean isIdentityRef() { - return this.typeDefinition instanceof IdentityrefTypeDefinition; - } - - private OpenType getCompositeTypeForUnion(final TypeDefinition baseTypeDefinition) { - Preconditions.checkArgument(baseTypeDefinition instanceof UnionTypeDefinition, - "Expected %s instance but was %s", UnionTypeDefinition.class, baseTypeDefinition); - - final List> types = ((UnionTypeDefinition) baseTypeDefinition).getTypes(); - - final String[] itemNames = new String[types.size()+1]; - final OpenType[] itemTypes = new OpenType[itemNames.length]; - - addArtificialPropertyToUnionCompositeType(baseTypeDefinition, itemNames, itemTypes); - - final String description = getNullableDescription() == null ? getAttributeYangName() : getNullableDescription(); - - int i = 1; - for (final TypeDefinition innerTypeDefinition : types) { - - final Type innerType = this.typeProviderWrapper.getType(innerTypeDefinition, innerTypeDefinition); - - final TypeDefinition baseInnerTypeDefinition = getBaseType(this.typeProviderWrapper, innerTypeDefinition); - final Type innerTypeBaseType = this.typeProviderWrapper.getType(baseInnerTypeDefinition, baseInnerTypeDefinition); - - OpenType innerCompositeType; - - if(isDerivedType(innerTypeBaseType, innerType)) { - innerCompositeType = baseInnerTypeDefinition instanceof UnionTypeDefinition ? - getCompositeTypeForUnion(baseInnerTypeDefinition) : - getCompositeType(innerTypeBaseType, baseInnerTypeDefinition); - } else { - innerCompositeType = SimpleTypeResolver.getSimpleType(innerType); - } - - itemNames[i] = this.typeProviderWrapper.getJMXParamForUnionInnerType(innerTypeDefinition); - itemTypes[i++] = innerCompositeType; - } - - final String[] descriptions = itemNames.clone(); - descriptions[0] = DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION; - - try { - return new CompositeType(getUpperCaseCammelCase(), description, itemNames, descriptions, itemTypes); - } catch (final OpenDataException e) { - throw new RuntimeException("Unable to create " + CompositeType.class + " with inner elements " - + Arrays.toString(itemTypes), e); - } - } - - public static final Class TYPE_OF_ARTIFICIAL_UNION_PROPERTY = char.class; - - private void addArtificialPropertyToUnionCompositeType(final TypeDefinition baseTypeDefinition, final String[] itemNames, final OpenType[] itemTypes) { - final String artificialPropertyName = this.typeProviderWrapper.getJMXParamForBaseType(baseTypeDefinition); - itemNames[0] = artificialPropertyName; - - final OpenType artificialPropertyType = getArrayOpenTypeForSimpleType(TYPE_OF_ARTIFICIAL_UNION_PROPERTY.getName(), - SimpleTypeResolver.getSimpleType(TYPE_OF_ARTIFICIAL_UNION_PROPERTY.getName())); - itemTypes[0] = artificialPropertyType; - } - - private OpenType getSimpleType(final Type type) { - final SimpleType simpleType = SimpleTypeResolver.getSimpleType(type); - return simpleType; - } - - private OpenType getCompositeType(final Type baseType, final TypeDefinition baseTypeDefinition) { - - final SimpleType innerItemType = SimpleTypeResolver.getSimpleType(baseType); - final String innerItemName = this.typeProviderWrapper.getJMXParamForBaseType(baseTypeDefinition); - - final String[] itemNames = new String[]{innerItemName}; - final String description = getNullableDescription() == null ? getAttributeYangName() : getNullableDescription(); - - final OpenType[] itemTypes = new OpenType[]{innerItemType}; - try { - return new CompositeType(getUpperCaseCammelCase(), description, itemNames, itemNames, itemTypes); - } catch (final OpenDataException e) { - throw new RuntimeException("Unable to create " + CompositeType.class + " with inner element of type " - + itemTypes, e); - } - } - - public OpenType getCompositeTypeForIdentity() { - final String[] itemNames = new String[]{IdentityAttributeRef.QNAME_ATTR_NAME}; - final String description = getNullableDescription() == null ? getAttributeYangName() : getNullableDescription(); - final OpenType[] itemTypes = new OpenType[]{SimpleType.STRING}; - - try { - return new CompositeType(getUpperCaseCammelCase(), description, itemNames, itemNames, itemTypes); - } catch (final OpenDataException e) { - throw new RuntimeException("Unable to create " + CompositeType.class + " with inner element of type " - + itemTypes, e); - } - } - - private OpenType getArrayType() { - final String innerTypeFullyQName = getInnerType(getType()); - final SimpleType innerSimpleType = SimpleTypeResolver.getSimpleType(innerTypeFullyQName); - return getArrayOpenTypeForSimpleType(innerTypeFullyQName, innerSimpleType); - } - - private OpenType getArrayOpenTypeForSimpleType(final String innerTypeFullyQName, final SimpleType innerSimpleType) { - try { - final ArrayType arrayType = isPrimitive(innerTypeFullyQName) ? new ArrayType<>(innerSimpleType, true) - : new ArrayType<>(1, innerSimpleType); - return arrayType; - } catch (final OpenDataException e) { - throw new RuntimeException("Unable to create " + ArrayType.class + " with inner element of type " - + innerSimpleType, e); - } - } - - // TODO verify - private boolean isPrimitive(final String innerTypeFullyQName) { - if (innerTypeFullyQName.contains(".")) { - return false; - } - - return true; - } - - private boolean isArray() { - return this.type.getName().endsWith("[]"); - } - - private boolean isDerivedType(final Type baseType, final Type currentType) { - return baseType.equals(currentType) == false; - } - - private static String getInnerType(final Type type) { - final String fullyQualifiedName = type.getFullyQualifiedName(); - return fullyQualifiedName.substring(0, fullyQualifiedName.length() - 2); - } - -}