private static Property getResponseSchema(String responseModelName, boolean inlineResponseSchema, Swagger swagger, Map<String, Integer> modelRefCount) { Property schema = new RefProperty(responseModelName); if (inlineResponseSchema && !modelRefCount.containsKey(responseModelName)) { io.swagger.models.Model model = swagger.getDefinitions().get(responseModelName); //If empty model was generated for response type if (model instanceof ModelImpl) { Map<String, Property> modelProperties = ((ModelImpl) model).getProperties(); if (modelProperties == null || modelProperties.isEmpty()) { String type = ((ModelImpl) model).getType(); if (type != null) { Property property = PropertyBuilder.build(type, ((ModelImpl) model).getFormat(), null); if (property != null) { schema = property; swagger.getDefinitions().remove(responseModelName); } } } } } return schema; }
private static Map<String, io.swagger.models.Model> getDefinitions(RestApi restApi) throws IOException, JsonParseException, JsonMappingException { Map<String, io.swagger.models.Model> result = new HashMap<String, io.swagger.models.Model>(); for (Models models = restApi.getModels(); models != null; models = safeGetNext(models)) { for (Model modelItem : models.getItem()) { String content = modelItem.getSchema(); io.swagger.models.Model model = Json.mapper().readValue(content, io.swagger.models.Model.class); if (model instanceof ModelImpl) { ((ModelImpl) model).setName(modelItem.getName()); } model.setDescription(modelItem.getDescription()); result.put(modelItem.getName(), model); } } return result; }
private static void processModelRefs(io.swagger.models.Model model, Map<String, Integer> modelRefCount) { if (model instanceof RefModel) { String ref = ((RefModel) model).getSimpleRef(); Integer count = modelRefCount.get(ref); modelRefCount.put(ref, count != null ? (count + 1) : 1); } else if (model instanceof ModelImpl) { processPropertyModelRefs(((ModelImpl) model).getProperties(), modelRefCount); processPropertyModelRefs(((ModelImpl) model).getAdditionalProperties(), modelRefCount); } else if (model instanceof ArrayModel) { processPropertyModelRefs(((ArrayModel) model).getProperties(), modelRefCount); processPropertyModelRefs(((ArrayModel) model).getItems(), modelRefCount); } else if (model instanceof ComposedModel) { processPropertyModelRefs(((ComposedModel) model).getProperties(), modelRefCount); processModelRefs(((ComposedModel) model).getChild(), modelRefCount); processModelRefs(((ComposedModel) model).getParent(), modelRefCount); processModelRefs(((ComposedModel) model).getAllOf(), modelRefCount); processModelRefs(((ComposedModel) model).getInterfaces(), modelRefCount); } }
protected List<Model> buildModelList(RestApi api) { List<Model> modelList = new ArrayList<>(); Models models = api.getModels(); modelList.addAll(models.getItem()); while (models._isLinkAvailable("next")) { models = models.getNext(); modelList.addAll(models.getItem()); } return modelList; }
protected void cleanupModels(RestApi api, Set<String> models) { List<Model> existingModels = buildModelList(api); Stream<Model> modelsToDelete = existingModels.stream().filter(model -> !models.contains(model.getName())); modelsToDelete.forEach(model -> { LOG.info("Removing deleted model " + model.getName()); model.deleteModel(); }); }
protected Optional<Model> getModel(RestApi api, String modelName) { try { return Optional.of(api.getModelByName(modelName)); } catch (Exception ignored) { return Optional.empty(); } }
private static void processModelRefs(Collection<? extends io.swagger.models.Model> models, Map<String, Integer> modelRefCount) { if (models != null) { for (io.swagger.models.Model model : models) { processModelRefs(model, modelRefCount); } } }
@Before public void setUp() throws Exception { BasicConfigurator.configure(); Injector injector = Guice.createInjector(new SwaggerApiImporterTestModule()); client = injector.getInstance(ApiGateway.class); importer = injector.getInstance(SwaggerApiFileImporter.class); RestApis mockRestApis = mock(RestApis.class); Integration mockIntegration = Mockito.mock(Integration.class); Method mockMethod = Mockito.mock(Method.class); when(mockMethod.getHttpMethod()).thenReturn("GET"); when(mockMethod.putIntegration(any())).thenReturn(mockIntegration); mockChildResource = Mockito.mock(Resource.class); when(mockChildResource.getPath()).thenReturn("/child"); when(mockChildResource.putMethod(any(), any())).thenReturn(mockMethod); mockResource = Mockito.mock(Resource.class); when(mockResource.getPath()).thenReturn("/"); when(mockResource.createResource(any())).thenReturn(mockChildResource); when(mockResource.putMethod(any(), any())).thenReturn(mockMethod); Resources mockResources = mock(Resources.class); when(mockResources.getItem()).thenReturn(Arrays.asList(mockResource)); Model mockModel = Mockito.mock(Model.class); when(mockModel.getName()).thenReturn("test model"); Models mockModels = mock(Models.class); when(mockModels.getItem()).thenReturn(Arrays.asList(mockModel)); mockRestApi = mock(RestApi.class); when(mockRestApi.getResources()).thenReturn(mockResources); when(mockRestApi.getModels()).thenReturn(mockModels); when(mockRestApi.getResourceById(any())).thenReturn(mockResource); when(client.getRestApis()).thenReturn(mockRestApis); when(client.createRestApi(any())).thenReturn(mockRestApi); importer.importApi(getResourcePath(API_GATEWAY)); }