From 7923d2e9a833908f0d98d37fdad30c1b8c72c98a Mon Sep 17 00:00:00 2001 From: lsedlak Date: Tue, 7 May 2013 13:11:59 +0200 Subject: [PATCH] Added support for implements and extends of GeneratedType; Added functionality to store List of implementing Generation Types into GeneratedType and GeneratedTypeBuilder; Added functionality to store Extending Transfer Object for GeneratedTransferObject and GeneratedTOBuilder; Fixed: DataNodeIterator no longer returns augmented containers, lists, leafs and leaflists - only non augmented module schema tree; Added findDataSchemaNode for given SchemaPath into SchemaContextUtil; Signed-off-by: Lukas Sedlak --- .../type/builder/GeneratedTOBuilderImpl.java | 40 ++++++++++++++++- .../builder/GeneratedTypeBuilderImpl.java | 25 +++++++++-- .../model/api/GeneratedTransferObject.java | 2 + .../sal/binding/model/api/GeneratedType.java | 2 + .../api/type/builder/GeneratedTOBuilder.java | 4 +- .../type/builder/GeneratedTypeBuilder.java | 2 + .../yang/model/util/DataNodeIterator.java | 3 ++ .../yang/model/util/SchemaContextUtil.java | 43 ++++++++++++++++++- 8 files changed, 112 insertions(+), 9 deletions(-) diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java index e2cb0aa381..81104d244e 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java @@ -17,6 +17,7 @@ import org.opendaylight.controller.sal.binding.model.api.Constant; import org.opendaylight.controller.sal.binding.model.api.Enumeration; import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty; import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.controller.sal.binding.model.api.GeneratedType; import org.opendaylight.controller.sal.binding.model.api.MethodSignature; import org.opendaylight.controller.sal.binding.model.api.Type; import org.opendaylight.controller.sal.binding.model.api.type.builder.AnnotationTypeBuilder; @@ -30,7 +31,9 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { private String packageName; private final String name; private String comment = ""; - + + private GeneratedTransferObject extendsType; + private final List implementsTypes = new ArrayList(); private final List enumerations = new ArrayList(); private final List properties = new ArrayList(); private final List equalsProperties = new ArrayList(); @@ -79,7 +82,24 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { } return null; } + + @Override + public boolean addImplementsType(final GeneratedType genType) { + if (genType != null) { + return implementsTypes.add(genType); + } + return false; + } + @Override + public boolean addExtendsType(final GeneratedTransferObject genTransObj) { + if (genTransObj != null) { + extendsType = genTransObj; + return true; + } + return false; + } + @Override public EnumBuilder addEnumeration(String name) { final EnumBuilder builder = new EnumerationBuilderImpl(packageName, @@ -130,7 +150,7 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { @Override public GeneratedTransferObject toInstance() { return new GeneratedTransferObjectImpl(packageName, name, comment, - annotationBuilders, constantDefintions, enumerations, + annotationBuilders, extendsType, implementsTypes, constantDefintions, enumerations, methodDefinitions, properties, equalsProperties, hashProperties, toStringProperties); } @@ -388,11 +408,15 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { private final List stringProperties; private final List annotations; private final List methods; + private final GeneratedTransferObject extendsType; + private final List implementsTypes; public GeneratedTransferObjectImpl(final String packageName, final String name, final String comment, final List annotationBuilders, + final GeneratedTransferObject extendsType, + final List implementsTypes, final List constantBuilders, final List enumBuilders, final List methodBuilders, @@ -405,6 +429,8 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { this.name = name; this.comment = comment; this.annotations = toUnmodifiableAnnotations(annotationBuilders); + this.extendsType = extendsType; + this.implementsTypes = Collections.unmodifiableList(implementsTypes); this.constants = toUnmodifiableConstant(constantBuilders); this.enumerations = toUnmodifiableEnumerations(enumBuilders); this.properties = toUnmodifiableProperties(propBuilers); @@ -483,7 +509,17 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { public List getAnnotations() { return annotations; } + + @Override + public List getImplements() { + return implementsTypes; + } + @Override + public GeneratedTransferObject getExtends() { + return extendsType; + } + @Override public List getEnumDefintions() { return enumerations; diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTypeBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTypeBuilderImpl.java index deeda771b7..46b5cf46a8 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTypeBuilderImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-util/src/main/java/org/opendaylight/controller/binding/generator/util/generated/type/builder/GeneratedTypeBuilderImpl.java @@ -29,10 +29,11 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { private String comment = ""; private final String name; private final List annotationBuilders = new ArrayList(); + private final List implementsTypes = new ArrayList(); private final List enumDefinitions = new ArrayList(); private final List constantDefintions = new ArrayList(); private final List methodDefinitions = new ArrayList(); - + public GeneratedTypeBuilderImpl(final String packageName, final String name) { this.packageName = packageName; this.name = name; @@ -95,13 +96,21 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { return builder; } + @Override + public boolean addImplementsType(final GeneratedType genType) { + if (genType != null) { + return implementsTypes.add(genType); + } + return false; + } + @Override public GeneratedType toInstance() { return new GeneratedTypeImpl(this, packageName, name, comment, - annotationBuilders, enumDefinitions, constantDefintions, + annotationBuilders, implementsTypes, enumDefinitions, constantDefintions, methodDefinitions); } - + private static final class GeneratedTypeImpl implements GeneratedType { private final Type parent; @@ -109,6 +118,7 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { private final String name; private final String comment; private final List annotations; + private final List implementsTypes; private final List enumDefinitions; private final List constantDefintions; private final List methodDefinitions; @@ -116,6 +126,7 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { public GeneratedTypeImpl(final Type parent, final String packageName, final String name, final String comment, final List annotationBuilders, + final List implementsTypes, final List enumBuilders, final List constantBuilders, final List methodBuilders) { @@ -125,6 +136,7 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { this.name = name; this.comment = comment; this.annotations = toUnmodifiableAnnotations(annotationBuilders); + this.implementsTypes = Collections.unmodifiableList(implementsTypes); this.constantDefintions = toUnmodifiableConstants(constantBuilders); this.enumDefinitions = toUnmodifiableEnums(enumBuilders); this.methodDefinitions = toUnmodifiableMethods(methodBuilders); @@ -190,7 +202,12 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { public List getAnnotations() { return annotations; } - + + @Override + public List getImplements() { + return implementsTypes; + } + @Override public List getEnumDefintions() { return enumDefinitions; diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java index 95a1ec9fb4..6fa551e821 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java @@ -11,6 +11,8 @@ import java.util.List; public interface GeneratedTransferObject extends GeneratedType { + public GeneratedTransferObject getExtends(); + public List getProperties(); public List getEqualsIdentifiers(); diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java index 2f70ac5bf5..f15d33bd68 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java @@ -36,6 +36,8 @@ public interface GeneratedType extends Type { public List getAnnotations(); + public List getImplements(); + /** * Returns Set of all Enumerator definitions associated with interface. * diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java index 2fc4ccf02f..c01425407d 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java @@ -13,7 +13,9 @@ import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject */ public interface GeneratedTOBuilder extends GeneratedTypeBuilder { - + + public boolean addExtendsType(final GeneratedTransferObject genTransObj); + public GeneratedPropertyBuilder addProperty(final String name); public boolean addEqualsIdentity(final GeneratedPropertyBuilder property); diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java index 55c6abca6e..55da97a6eb 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java @@ -22,6 +22,8 @@ public interface GeneratedTypeBuilder extends Type { public AnnotationTypeBuilder addAnnotation(final String packageName, final String name); + public boolean addImplementsType(final GeneratedType genType); + public ConstantBuilder addConstant(final Type type, final String name, final Object value); diff --git a/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java b/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java index ded4a75179..b4eaed775c 100644 --- a/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java +++ b/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java @@ -61,6 +61,9 @@ public class DataNodeIterator implements Iterator { final Set childs = dataNode.getChildNodes(); if (childs != null) { for (DataSchemaNode childNode : childs) { + if (childNode.isAugmenting()) { + continue; + } allChilds.add(childNode); if (childNode instanceof ContainerSchemaNode) { final ContainerSchemaNode container = (ContainerSchemaNode) childNode; diff --git a/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/SchemaContextUtil.java b/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/SchemaContextUtil.java index ab50982f4f..8554f68219 100644 --- a/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/SchemaContextUtil.java +++ b/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/SchemaContextUtil.java @@ -31,7 +31,23 @@ public final class SchemaContextUtil { public SchemaContextUtil(final SchemaContext context) { this.context = context; } - + + public SchemaContext getContext() { + return context; + } + + public DataSchemaNode findDataSchemaNode(final SchemaPath schemaPath) { + if (schemaPath != null) { + final Module module = resolveModuleFromSchemaPath(schemaPath); + final Queue prefixedPath = schemaPathToQueuedPath(schemaPath); + + if ((module != null) && (prefixedPath != null)) { + return findSchemaNodeForGivenPath(module, prefixedPath); + } + } + return null; + } + public DataSchemaNode findDataSchemaNode(final Module module, final RevisionAwareXPath nonCondXPath) { if (nonCondXPath != null) { @@ -187,7 +203,30 @@ public final class SchemaContextUtil { } return retQueue; } - + + private Queue schemaPathToQueuedPath(final SchemaPath schemaPath) { + final Queue retQueue = new LinkedList(); + if ((schemaPath != null) && (schemaPath.getPath() != null)) { + final List listPath = schemaPath.getPath(); + + for (final QName qname : listPath) { + if (qname != null) { + final String prefix = qname.getPrefix(); + final String localName = qname.getLocalName(); + + final StringBuilder builder = new StringBuilder(); + if (prefix != null) { + builder.append(prefix); + builder.append(":"); + } + builder.append(localName); + retQueue.add(builder.toString()); + } + } + } + return retQueue; + } + private Queue resolveRelativeXPath( final RevisionAwareXPath relativeXPath, final SchemaPath leafrefSchemaPath) { -- 2.36.6