Skip to content

Commit

Permalink
Fix for #15
Browse files Browse the repository at this point in the history
  • Loading branch information
bartoszm committed Sep 15, 2018
1 parent 71d1c97 commit 1785739
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ public interface DataObjectBuilder extends DataObjectRepo {
*/
<T extends SchemaNode & DataNodeContainer> void addModel(T node);

<T extends SchemaNode & DataNodeContainer> void addModel(T node, String definitionId);

/**
* Add model for enum
* @param enumType enum to build swagger model from
* @return definition id like in {@link DataObjectRepo#getDefinitionId(SchemaNode)}
*/
String addModel(EnumTypeDefinition enumType);


<T extends SchemaNode & DataNodeContainer> void addModel(T input, String parentTag);
}
Original file line number Diff line number Diff line change
Expand Up @@ -289,33 +289,15 @@ private static void assignCaseMetadata(Property property, ChoiceSchemaNode choic
/**
* Add model to referenced swagger for given node. All related models are added as well if needed.
* @param node for which build a node
* @param tagName wrapping model name
* @param modelName model name
* @param <T> type of the node
*/
@Override
public <T extends SchemaNode & DataNodeContainer> void addModel(T node, String tagName) {
public <T extends SchemaNode & DataNodeContainer> void addModel(T node, String modelName) {


Model model = build(node);

String modelName = getName(node);

if(tagName != null) {
final ModelImpl wrapper = new ModelImpl();
if(model instanceof ModelImpl) {
wrapper.addProperty(tagName, new ObjectProperty(model.getProperties()));
}

if(model instanceof ComposedModel) {
String internal = modelName + Character.toUpperCase(tagName.charAt(0)) + tagName.substring(1).toLowerCase();
swagger.addDefinition(internal, model);
wrapper.addProperty(tagName, new RefProperty(DEF_PREFIX + internal));
}

modelName = modelName + tagName.substring(0,1).toUpperCase() + tagName.substring(1);

model = wrapper;
}

if(swagger.getDefinitions() != null && swagger.getDefinitions().containsKey(modelName)) {
if(model.equals(swagger.getDefinitions().get(modelName))) {
Expand All @@ -327,11 +309,11 @@ public <T extends SchemaNode & DataNodeContainer> void addModel(T node, String t
swagger.addDefinition(modelName, model);
}

@Override
public <T extends SchemaNode & DataNodeContainer> void addModel(T node) {
addModel(node, null);
addModel(node, getName(node));
}


@Override
public String addModel(EnumTypeDefinition enumType) {
QName qName = enumType.getQName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ private <T extends SchemaNode & DataNodeContainer> boolean isDirectGrouping(Data
if(isAugmented.test(node)) return false;

Set<UsesNode> uses = uses(node);
return uses.size() == 1 && node.getChildNodes().stream().filter(n -> !n.isAddedByUses()).count() == 0;
return uses.size() == 1 && node.getChildNodes().stream().allMatch(DataSchemaNode::isAddedByUses);
}

@Override
Expand Down Expand Up @@ -183,13 +183,17 @@ protected <T extends DataSchemaNode & DataNodeContainer> Property refOrStructure
log.debug("reference to {}", definitionId);
RefProperty prop = new RefProperty(definitionId);

if(treeAugmented && ! existingModels.containsKey(effectiveNode)) {
log.debug("adding referenced model {} for node {} ", definitionId, effectiveNode);
addModel(effectiveNode);
if(treeAugmented) {

if(! existingModels.containsKey(effectiveNode)) {
log.debug("adding referenced model {} for node {} ", definitionId, effectiveNode);
addModel(effectiveNode, getName(effectiveNode));
} else {
return prop;
}
} else if(existingModel(node) == null) {
log.debug("adding referenced model {} for node {} ", definitionId, node);
addModel(node);
addModel(node, getName(node));
}

return prop;
Expand Down Expand Up @@ -338,12 +342,18 @@ private <T extends SchemaNode & DataNodeContainer> Model model(T node) {
}
augmented.setInterfaces(aModels);
model = augmented;
//add to existing models cache only the augmeted model
existingModels.put(node, model);
} else {
//add to existing models cache mapping between original and used for generation
// e.g. to properly support case where model was based on grouping
existingModels.put(toModel, model);
existingModels.put(node, model);
}

verifyModel(node, model);

existingModels.put(toModel, model);
existingModels.put(node, model);


Optional<DataNodeContainer> toRemove = effectiveNode.stream().filter(
n -> n instanceof SchemaNode && ((SchemaNode) n).getQName().equals(node.getQName()))
Expand Down Expand Up @@ -392,8 +402,8 @@ private Set<UsesNode> optimizeInheritance(Set<UsesNode> result) {
}

@Override
public <T extends SchemaNode & DataNodeContainer> void addModel(T node) {
super.addModel(node);
public <T extends SchemaNode & DataNodeContainer> void addModel(T node, String name) {
super.addModel(node, name);
}


Expand Down Expand Up @@ -457,7 +467,7 @@ private Model composed(DataNodeContainer node) {

if (existingModel(def) == null) {
log.debug("adding model {} for grouping", groupingIdx);
addModel(def);
addModel(def, getName(def));
}
models.add(refModel);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import io.swagger.models.*;
import io.swagger.models.parameters.BodyParameter;
import io.swagger.models.parameters.Parameter;
import io.swagger.models.properties.ObjectProperty;
import io.swagger.models.properties.Property;
import io.swagger.models.properties.RefProperty;
import org.junit.After;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package com.mrv.yangtools.codegen;


import com.mrv.yangtools.test.utils.SwaggerWritter;
import io.swagger.models.*;
import io.swagger.models.properties.ArrayProperty;
import io.swagger.models.properties.RefProperty;

import java.io.OutputStreamWriter;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
Expand Down Expand Up @@ -65,18 +63,20 @@ public void testAugGroupEx() {
assertEquals("base.base.C2",c2.getSimpleRef());
}


@org.junit.Test
public void testBug15() {
swaggerFor(p -> p.getParent().getFileName().toString().equals("bug_15"));

// Model base = swagger.getDefinitions().get("base.Base");
// RefProperty c1 = (RefProperty) base.getProperties().get("c1");
// RefProperty c2 = (RefProperty) base.getProperties().get("c2");
//
//
// assertEquals("base.Coll",c1.getSimpleRef());
// assertEquals("base.base.C2",c2.getSimpleRef());
SwaggerWritter.writeSwagger(new OutputStreamWriter(System.out), swagger);
Map<String, ComposedModel> attributeModels = swagger.getDefinitions().entrySet().stream()
.filter(e -> e.getKey().endsWith(".Attributes"))
.collect(Collectors.toMap(Map.Entry::getKey, e -> (ComposedModel) e.getValue()));

assertEquals(2, attributeModels.size());
ComposedModel regular = attributeModels.get("ext1.Attributes");
ComposedModel augmented = attributeModels.get("ext1.job.Attributes");
assertEquals(4, augmented.getAllOf().size());
assertEquals(2, regular.getAllOf().size());
}

@org.junit.Test
Expand Down

0 comments on commit 1785739

Please sign in to comment.