import com.google.common.annotations.Beta;
import java.util.List;
import java.util.Optional;
+import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
/**
* Every Java interface has to be specified with:
* @return YANG source definition, or empty when unavailable.
*/
Optional<YangSourceDefinition> getYangSourceDefinition();
+
+ /**
+ * Get the BindingNamespaceType.
+ *
+ * @return BindingNamespaceType which type belongs to.
+ */
+ BindingNamespaceType getBindingNamespaceType();
}
import org.opendaylight.mdsal.binding.javav2.model.api.Type;
import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment;
import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition;
+import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
import org.opendaylight.yangtools.yang.common.QName;
@Beta
*/
Type setParentTypeForBuilder(Type type);
+ /**
+ * Get the BindingNamespaceType.
+ *
+ * @return BindingNamespaceType which type belongs to.
+ */
+ BindingNamespaceType getBindingNamespaceType();
+
List<MethodSignatureBuilder> getMethodDefinitions();
/**
* @param definition YANG source definition, must not be null
*/
void setYangSourceDefinition(@NonNull YangSourceDefinition definition);
+
+ /**
+ * Set the BindingNamespaceType.
+ *
+ * @param namespaceType BindingNamespaceType which type belongs to, must not be null
+ */
+ void setBindingNamespaceType(@NonNull BindingNamespaceType namespaceType);
}
if (!(targetSchemaNode instanceof ChoiceSchemaNode)) {
genCtx = GenHelperUtil.addRawAugmentGenTypeDefinition(module, augmentPackageName,
- targetTypeBuilder.toInstance(), targetSchemaNode, schemaPathAugmentListEntry.getValue(),
- genTypeBuilders, genCtx, schemaContext, verboseClassComments, typeProvider, BindingNamespaceType.Data);
+ targetTypeBuilder, targetSchemaNode, schemaPathAugmentListEntry.getValue(),
+ genTypeBuilders, genCtx, schemaContext, verboseClassComments, typeProvider,
+ targetTypeBuilder.getBindingNamespaceType());
} else {
genCtx = generateTypesFromAugmentedChoiceCases(schemaContext, module, basePackageName,
targetTypeBuilder.toInstance(), (ChoiceSchemaNode) targetSchemaNode,
schemaPathAugmentListEntry.getValue(),genCtx, verboseClassComments, genTypeBuilders, typeProvider,
- BindingNamespaceType.Data);
+ targetTypeBuilder.getBindingNamespaceType());
}
return genCtx;
}
}
public static boolean hasBuilderClass(final SchemaNode schemaNode, final BindingNamespaceType namespaceType) {
- return (namespaceType.equals(BindingNamespaceType.Data)
+ return (BindingNamespaceType.isData(namespaceType)
&& (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode
|| schemaNode instanceof RpcDefinition || schemaNode instanceof NotificationDefinition
|| schemaNode instanceof CaseSchemaNode));
type.addImplementsType(superType);
if (superChildNode instanceof ListSchemaNode
&& !((ListSchemaNode) superChildNode).getKeyDefinition().isEmpty()) {
- if (namespaceType.equals(BindingNamespaceType.Grouping)) {
+ if (BindingNamespaceType.isGrouping(namespaceType)) {
genCtx.get(module).getKeyType(childNode.getPath())
.addImplementsType(genCtx.get(superModule).getKeyType(superChildNode.getPath()));
- } else if (namespaceType.equals(BindingNamespaceType.Data)) {
+ } else if (BindingNamespaceType.isData(namespaceType)) {
genCtx.get(module).getKeyGenTO(childNode.getPath())
.addImplementsType(genCtx.get(superModule).getKeyType(superChildNode.getPath()));
}
}
static Map<Module, ModuleContext> addRawAugmentGenTypeDefinition(final Module module,
- final String augmentPackageName, final Type targetTypeRef, final SchemaNode targetNode,
+ final String augmentPackageName, final GeneratedTypeBuilder targetTypeBuilder, final SchemaNode targetNode,
final List<AugmentationSchemaNode> schemaPathAugmentListEntry,
final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders,
final Map<Module, ModuleContext> genCtx, final SchemaContext schemaContext,
augTypeBuilder.addImplementsType(BindingTypes.TREE_NODE);
augTypeBuilder.addImplementsType(parameterizedTypeFor(BindingTypes.INSTANTIABLE, augTypeBuilder));
- augTypeBuilder.addImplementsType(Types.augmentationTypeFor(targetTypeRef));
+ augTypeBuilder.addImplementsType(Types.augmentationTypeFor(targetTypeBuilder.toInstance()));
augTypeBuilder.setBasePackageName(BindingMapping.getRootPackageName(module));
augTypeBuilder.setWithBuilder(true);
+ augTypeBuilder.setBindingNamespaceType(namespaceType);
annotateDeprecatedIfNecessary(augSchema.getStatus(), augTypeBuilder);
//produces getters for augTypeBuilder eventually
addImplementedInterfaceFromUses(aug, augTypeBuilder, genCtx);
augSchemaNodeToMethods(module, BindingMapping.getRootPackageName(module), augTypeBuilder, augTypeBuilder,
aug.getChildNodes(), genCtx, schemaContext, verboseClassComments, typeProvider, genTypeBuilders,
- namespaceType);
+ targetTypeBuilder.getBindingNamespaceType());
}
augmentBuilders.put(augTypeBuilder.getName(), augTypeBuilder);
GeneratedTypeBuilder it = addRawInterfaceDefinition(basePackageName, schemaNode, schemaContext, "", "",
verboseClassComments, genTypeBuilders, namespaceType, genCtx.get(module));
-
- if (namespaceType.equals(BindingNamespaceType.Data)) {
+ if (BindingNamespaceType.isData(namespaceType)) {
if (childOf == null) {
it.addImplementsType(BindingTypes.TREE_NODE);
} else {
if (!(schemaNode instanceof ListSchemaNode) ||
- ((ListSchemaNode) schemaNode).getKeyDefinition().isEmpty()) {
+ ((ListSchemaNode) schemaNode).getKeyDefinition().isEmpty()) {
it.addImplementsType(parameterizedTypeFor(BindingTypes.TREE_CHILD_NODE, childOf,
parameterizedTypeFor(BindingTypes.ITEM, it)));
}
}
it.addImplementsType(BindingTypes.augmentable(it));
- } else {
- it.addImplementsType(BindingTypes.TREE_NODE);
}
if (schemaNode instanceof DataNodeContainer) {
genTypeBuilders, final TypeProvider typeProvider, final Map<Module, ModuleContext> genCtx) {
final GeneratedTypeBuilder notificationInterface = addDefaultInterfaceDefinition
(basePackageName, notification, null, module, genCtx, schemaContext,
- verboseClassComments, genTypeBuilders, typeProvider, BindingNamespaceType.Data);
+ verboseClassComments, genTypeBuilders, typeProvider, BindingNamespaceType.Notification);
annotateDeprecatedIfNecessary(notification.getStatus(), notificationInterface);
notificationInterface.addImplementsType(NOTIFICATION);
genCtx.get(module).addChildNodeType(notification, notificationInterface);
// Notification object
resolveDataSchemaNodes(module, basePackageName, notificationInterface,
notificationInterface, notification.getChildNodes(), genCtx, schemaContext,
- verboseClassComments, genTypeBuilders, typeProvider, BindingNamespaceType.Data);
+ verboseClassComments, genTypeBuilders, typeProvider, BindingNamespaceType.Notification);
//in case of tied notification, incorporate parent's localName
final StringBuilder sb = new StringBuilder("on_");
newType.setModuleName(module.getName());
newType.setBasePackageName(BindingMapping.getRootPackageName(module));
newType.setWithBuilder(AuxiliaryGenUtils.hasBuilderClass(schemaNode, namespaceType));
+ newType.setBindingNamespaceType(namespaceType);
if (!genTypeBuilders.containsKey(packageName)) {
final Map<String, GeneratedTypeBuilder> builders = new HashMap<>();
constructGetter(parent, choiceNode.getQName().getLocalName(),
choiceNode.getDescription().orElse(null), choiceTypeBuilder, choiceNode.getStatus());
choiceTypeBuilder.setParentTypeForBuilder(childOf);
- if (namespaceType.equals(BindingNamespaceType.Data)) {
+ if (BindingNamespaceType.isData(namespaceType)) {
choiceTypeBuilder.addImplementsType(parameterizedTypeFor(BindingTypes.INSTANTIABLE, choiceTypeBuilder));
}
annotateDeprecatedIfNecessary(choiceNode.getStatus(), choiceTypeBuilder);
final String nodeName = node.getQName().getLocalName();
Type getterReturnType = Types.listTypeFor(genType);
- if (namespaceType.equals(BindingNamespaceType.Grouping)) {
+ if (BindingNamespaceType.isGrouping(namespaceType)) {
getterReturnType = Types.listTypeFor(wildcardTypeFor(genType.getPackageName(), genType.getName(),
true, true, null));
}
final String packageName = new StringBuilder(packageNameForGeneratedType(basePackageName, node.getPath(),
BindingNamespaceType.Key)).append('.').append(nodeName).toString();
//FIXME: Is it neccessary to generate interface of key and implemented by class?
- if (namespaceType.equals(BindingNamespaceType.Grouping)) {
+ if (BindingNamespaceType.isGrouping(namespaceType)) {
final GeneratedTypeBuilder genTypeBuilder = resolveListKeyTypeBuilder(packageName, node, genCtx.get(module));
for (final DataSchemaNode schemaNode : node.getChildNodes()) {
if (resolveDataSchemaNodesCheck(module, schemaContext, schemaNode)) {
final Type identifiableMarker = Types.parameterizedTypeFor(IDENTIFIABLE, genTOBuilder);
genTOBuilder.addImplementsType(IDENTIFIER);
genType.addImplementsType(identifiableMarker);
- genType.addImplementsType(parameterizedTypeFor(BindingTypes.TREE_CHILD_NODE, childOf, parameterizedTypeFor
- (BindingTypes.IDENTIFIABLE_ITEM, genType, genTOBuilder)));
-
+ if (BindingNamespaceType.isData(namespaceType)) {
+ genType.addImplementsType(parameterizedTypeFor(BindingTypes.TREE_CHILD_NODE, childOf,
+ parameterizedTypeFor(BindingTypes.IDENTIFIABLE_ITEM, genType, genTOBuilder)));
+ }
}
for (final DataSchemaNode schemaNode : node.getChildNodes()) {
checkArgument(typeBuilder != null, "Generated Type Builder cannot be NULL.");
if (keyType != null) {
Type returnKeyType = keyType;
- if (namespaceType.equals(BindingNamespaceType.Grouping)) {
+ if (BindingNamespaceType.isGrouping(namespaceType)) {
returnKeyType = wildcardTypeFor(keyType.getPackageName(), keyType.getName(),
true, true, null);
}
caseTypeBuilder.setParentTypeForBuilder(refChoiceType.getParentTypeForBuilder());
annotateDeprecatedIfNecessary(caseNode.getStatus(), caseTypeBuilder);
genCtx.get(module).addCaseType(caseNode.getPath(), caseTypeBuilder);
- if (namespaceType.equals(BindingNamespaceType.Data)) {
+ if (BindingNamespaceType.isData(namespaceType)) {
genCtx.get(module).addChoiceToCaseMapping(refChoiceType, caseTypeBuilder, caseNode);
}
node.getReference().ifPresent(genType::setReference);
}
genType.setSchemaPath((List) node.getPath().getPathFromRoot());
- genType.setParentTypeForBuilder(childOf);
+ if (BindingNamespaceType.isData(namespaceType)) {
+ genType.setParentTypeForBuilder(childOf);
+ }
+
if (node instanceof DataNodeContainer) {
genCtx.get(module).addChildNodeType(node, genType);
}
if (notification != null) {
resolveNotification(listenerInterface, null, basePackageName, notification, module, schemaContext,
verboseClassComments, genTypeBuilders, typeProvider, genCtx);
- processUsesImplements(notification, module, schemaContext, genCtx, BindingNamespaceType.Data);
+ processUsesImplements(notification, module, schemaContext, genCtx, BindingNamespaceType.Notification);
}
}
resolveNotification(listenerInterface, potential.getQName().getLocalName(), basePackageName,
tiedNotification, module, schemaContext, verboseClassComments, genTypeBuilders,
typeProvider, genCtx);
- processUsesImplements(tiedNotification, module, schemaContext, genCtx, BindingNamespaceType.Data);
+ processUsesImplements(tiedNotification, module, schemaContext, genCtx, BindingNamespaceType.Notification);
}
}
}
for (DataSchemaNode potential : potentials) {
if (resolveDataSchemaNodesCheck(module, schemaContext,potential)) {
BindingNamespaceType namespaceType1 = namespaceType;
- if (namespaceType.equals(BindingNamespaceType.Data)) {
+ if (BindingNamespaceType.isData(namespaceType)) {
if (potential instanceof GroupingDefinition) {
namespaceType1 = BindingNamespaceType.Grouping;
}
checkModuleAndModuleName(module);
resolveActions(module, module, schemaContext, verboseClassComments, genTypeBuilders, genCtx, typeProvider,
- BindingNamespaceType.Data);
+ BindingNamespaceType.Operation);
return genCtx;
}
for (final RpcDefinition rpc : rpcDefinitions) {
final GeneratedTypeBuilder typeBuilder = resolveOperation(null, rpc, module, schemaContext,
verboseClassComments, genTypeBuilders, genCtx, typeProvider, false,
- BindingNamespaceType.Data);
+ BindingNamespaceType.Operation);
genCtx.get(module).addTopLevelNodeType(typeBuilder);
genCtx.get(module).addTypeToSchema(typeBuilder, rpc);
}
final GeneratedTypeBuilder nodeType = addRawInterfaceDefinition(basePackageName, operationNode, schemaContext,
operationName, "", verboseClassComments, genTypeBuilders, namespaceType, genCtx.get(module));
addImplementedInterfaceFromUses(operationNode, nodeType, genCtx);
+
nodeType.addImplementsType(parameterizedTypeFor(BindingTypes.TREE_CHILD_NODE, parent, parameterizedTypeFor
- (BindingTypes.ITEM, nodeType)));
+ (BindingTypes.ITEM, nodeType)));
+
if (isInput) {
nodeType.addImplementsType(parameterizedTypeFor(INPUT, nodeType));
} else {
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder;
+import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
@Beta
abstract class AbstractGeneratedType extends AbstractBaseType implements GeneratedType {
private final List<GeneratedProperty> properties;
private final boolean isAbstract;
private final YangSourceDefinition definition;
+ private final BindingNamespaceType namespaceType;
public AbstractGeneratedType(final AbstractGeneratedTypeBuilder<?> builder) {
super(builder.getPackageName(), builder.getName(), true, null);
this.properties = toUnmodifiableProperties(builder.getProperties());
this.isAbstract = builder.isAbstract();
this.definition = builder.getYangSourceDefinition().orElse(null);
- }
-
- public AbstractGeneratedType(final Type parent, final String packageName, final String name, final TypeComment comment,
- final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
- final List<Type> implementsTypes, final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
- final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<EnumBuilder> enumBuilders,
- final List<Constant> constants, final List<MethodSignatureBuilder> methodBuilders,
- final List<GeneratedPropertyBuilder> propertyBuilders, final Type parentTypeForBuilder) {
- //TODO: not called by actual codebase, fix this up (provide context) if needed - 07/20/2017
- super(packageName, name, null);
- this.parent = parent;
- this.parentTypeForBuilder = parentTypeForBuilder;
- this.comment = comment;
- this.annotations = toUnmodifiableAnnotations(annotationBuilders);
- this.implementsTypes = makeUnmodifiable(implementsTypes);
- this.constants = makeUnmodifiable(constants);
- this.enumerations = toUnmodifiableEnumerations(enumBuilders);
- this.methodSignatures = toUnmodifiableMethods(methodBuilders);
- this.enclosedTypes = toUnmodifiableEnclosedTypes(enclosedGenTypeBuilders, enclosedGenTOBuilders);
- this.properties = toUnmodifiableProperties(propertyBuilders);
- this.isAbstract = isAbstract;
- this.definition = null;
+ this.namespaceType = builder.getBindingNamespaceType();
}
protected static final <T> List<T> makeUnmodifiable(final List<T> list) {
return Optional.ofNullable(definition);
}
+ @Override
+ public BindingNamespaceType getBindingNamespaceType() {
+ return this.namespaceType;
+ }
+
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilderBase;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder;
+import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
import org.opendaylight.yangtools.util.LazyCollections;
@Beta
private boolean isAbstract;
private Type parentTypeForBuilder;
private YangSourceDefinition yangSourceDefinition;
+ private BindingNamespaceType namespaceType;
protected AbstractGeneratedTypeBuilder(final String packageName, final String name, ModuleContext context) {
super(packageName, name, context);
return this.parentTypeForBuilder = type;
}
+ @Override
+ public BindingNamespaceType getBindingNamespaceType() {
+ return namespaceType;
+ }
+
+ @Override
+ public void setBindingNamespaceType(BindingNamespaceType namespaceType) {
+ this.namespaceType = namespaceType;
+ }
+
public boolean containsConstant(final String name) {
Preconditions.checkArgument(name != null, "Parameter name can't be null");
for (Constant constant : constants) {
import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.AnnotationTypeBuilder;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.EnumBuilder;
+import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
import org.opendaylight.yangtools.util.LazyCollections;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.Status;
// TODO Auto-generated method stub
return Optional.empty();
}
+
+ @Override
+ public BindingNamespaceType getBindingNamespaceType() {
+ return BindingNamespaceType.Data;
+ }
}
}
* Namespace containing all derived types, defined from grouping and data namespaces
*
*/
- Typedef("type"), Identity("ident"), Key("key"), Data("data"), Grouping("grp"), Builder("dto"),;
+ Typedef("type"), Identity("ident"), Key("key"), Data("data"), Notification("data"), Operation("data"),
+ Grouping("grp"), Builder("dto");
private final String packagePrefix;
- private BindingNamespaceType(String packagePrefix) {
+ BindingNamespaceType(String packagePrefix) {
this.packagePrefix = Preconditions.checkNotNull(packagePrefix);
}
public String getPackagePrefix() {
return packagePrefix;
}
+
+ public static Boolean isData(final BindingNamespaceType type) {
+ return isTreeData(type) || isNotificationData(type) || isOperationData(type);
+ }
+
+ public static Boolean isTreeData(final BindingNamespaceType type) {
+ return Data.equals(type);
+ }
+
+ public static Boolean isNotificationData(final BindingNamespaceType type) {
+ return Notification.equals(type);
+ }
+
+ public static Boolean isOperationData(final BindingNamespaceType type) {
+ return Operation.equals(type);
+ }
+
+ public static Boolean isGrouping(final BindingNamespaceType type) {
+ return Grouping.equals(type);
+ }
}
/*
- * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2018 ZTE, 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.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.type;
/**
* The reason behind putting it under src/main/java is:
* This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent
* loss of user code.
- * */
+ */
public class Int32StringUnionBuilder {
public static Int32StringUnion getDefaultInstance (java.lang.String defaultValue) {