X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-docgen%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frest%2Fdoc%2Fimpl%2FModelGenerator.java;h=95bb1a094371db4f17d38c310c0043b07006c5c3;hp=755ca7501582e43651d51046de5a057d5adbe038;hb=cf1a8da1f3ee11170ce05611d85d15b1aceed8e8;hpb=f78020d87663c8d9db1e4e33939f7b8b703703f8 diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java index 755ca75015..95bb1a0943 100644 --- a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java +++ b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java @@ -14,7 +14,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; - import org.apache.commons.lang3.BooleanUtils; import org.json.JSONArray; import org.json.JSONException; @@ -26,6 +25,7 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceNode; import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; @@ -86,6 +86,8 @@ public class ModelGenerator { private static final String NUMBER = "number"; private static final String BOOLEAN = "boolean"; private static final String STRING = "string"; + private static final String ID_KEY = "id"; + private static final String SUB_TYPES_KEY = "subTypes"; private static final Map>, String> YANG_TYPE_TO_JSON_TYPE_MAPPING; @@ -116,6 +118,7 @@ public class ModelGenerator { JSONObject models = new JSONObject(); processContainers(module, models); processRPCs(module, models); + processIdentities(module, models); return models; } @@ -123,9 +126,8 @@ public class ModelGenerator { JSONException { String moduleName = module.getName(); - Set childNodes = module.getChildNodes(); - for (DataSchemaNode childNode : childNodes) { + for (DataSchemaNode childNode : module.getChildNodes()) { JSONObject configModuleJSON = null; JSONObject operationalModuleJSON = null; @@ -188,6 +190,58 @@ public class ModelGenerator { } } + /** + * Processes the 'identity' statement in a yang model + * and maps it to a 'model' in the Swagger JSON spec. + * + * @param module The module from which the identity stmt will be processed + * @param models The JSONObject in which the parsed identity will be put as a 'model' obj + * @throws JSONException + */ + private void processIdentities(Module module, JSONObject models) throws JSONException { + + String moduleName = module.getName(); + Set idNodes = module.getIdentities(); + _logger.debug("Processing Identities for module {} . Found {} identity statements", moduleName, idNodes.size()); + + for(IdentitySchemaNode idNode : idNodes){ + JSONObject identityObj=new JSONObject(); + String identityName = idNode.getQName().getLocalName(); + _logger.debug("Processing Identity: {}", identityName); + + identityObj.put(ID_KEY, identityName); + identityObj.put(DESCRIPTION_KEY, idNode.getDescription()); + + JSONObject props = new JSONObject(); + IdentitySchemaNode baseId = idNode.getBaseIdentity(); + + + if(baseId==null) { + /** + * This is a base identity. So lets see if + * it has sub types. If it does, then add them to the model definition. + */ + Set derivedIds = idNode.getDerivedIdentities(); + + if(derivedIds != null) { + JSONArray subTypes = new JSONArray(); + for(IdentitySchemaNode derivedId : derivedIds){ + subTypes.put(derivedId.getQName().getLocalName()); + } + identityObj.put(SUB_TYPES_KEY, subTypes); + } + } else { + /** + * This is a derived entity. Add it's base type & move on. + */ + props.put(TYPE_KEY, baseId.getQName().getLocalName()); + } + + //Add the properties. For a base type, this will be an empty object as required by the Swagger spec. + identityObj.put(PROPERTIES_KEY, props); + models.put(identityName, identityObj); + } + } /** * Processes the container node and populates the moduleJSON * @@ -216,13 +270,12 @@ public class ModelGenerator { String containerDescription = container.getDescription(); moduleJSON.put(DESCRIPTION_KEY, containerDescription); - Set containerChildren = container.getChildNodes(); - JSONObject properties = processChildren(containerChildren, moduleName, models, isConfig); + JSONObject properties = processChildren(container.getChildNodes(), moduleName, models, isConfig); moduleJSON.put(PROPERTIES_KEY, properties); return moduleJSON; } - private JSONObject processChildren(Set nodes, String moduleName, + private JSONObject processChildren(Iterable nodes, String moduleName, JSONObject models) throws JSONException, IOException { return processChildren(nodes, moduleName, models, null); } @@ -237,7 +290,7 @@ public class ModelGenerator { * @throws JSONException * @throws IOException */ - private JSONObject processChildren(Set nodes, String moduleName, + private JSONObject processChildren(Iterable nodes, String moduleName, JSONObject models, Boolean isConfig) throws JSONException, IOException { JSONObject properties = new JSONObject(); @@ -363,11 +416,10 @@ public class ModelGenerator { private JSONObject processListSchemaNode(ListSchemaNode listNode, String moduleName, JSONObject models, Boolean isConfig) throws JSONException, IOException { - Set listChildren = listNode.getChildNodes(); String fileName = (BooleanUtils.isNotFalse(isConfig)?OperationBuilder.CONFIG:OperationBuilder.OPERATIONAL) + listNode.getQName().getLocalName(); - JSONObject childSchemaProperties = processChildren(listChildren, moduleName, models); + JSONObject childSchemaProperties = processChildren(listNode.getChildNodes(), moduleName, models); JSONObject childSchema = getSchemaTemplate(); childSchema.put(TYPE_KEY, OBJECT_TYPE); childSchema.put(PROPERTIES_KEY, childSchemaProperties); @@ -446,7 +498,7 @@ public class ModelGenerator { processUnionType((UnionTypeDefinition) leafTypeDef, property); } else if (leafTypeDef instanceof IdentityrefTypeDefinition) { - property.putOpt(TYPE_KEY, "object"); + property.putOpt(TYPE_KEY, ((IdentityrefTypeDefinition) leafTypeDef).getIdentity().getQName().getLocalName()); } else if (leafTypeDef instanceof BinaryTypeDefinition) { processBinaryType((BinaryTypeDefinition) leafTypeDef, property); } else {