package com.canoo.cog.sonar; /* * #%L * code-of-gotham * %% * Copyright (C) 2015 Canoo Engineering AG * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.canoo.cog.sonar.model.BuildingModelImpl; import com.canoo.cog.sonar.model.CityModelImpl; import com.canoo.cog.sonar.model.HoodModelImpl; import com.canoo.cog.sonar.model.SonarProject; import com.canoo.cog.sonar.model.SonarProjectImpl; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; class SonarResultParser { private final JsonParser jsonParser = new JsonParser(); List<SonarProject> parseProjects(String projectResultString) { List<SonarProject> sonarProjects = new ArrayList<>(); JsonElement projects = jsonParser.parse(projectResultString); JsonArray projectArray = projects.getAsJsonArray(); for (JsonElement projectJson : projectArray) { String key = projectJson.getAsJsonObject().get("key").getAsString(); String name = projectJson.getAsJsonObject().get("name").getAsString(); String version = projectJson.getAsJsonObject().get("version").getAsString(); sonarProjects.add(new SonarProjectImpl(key, name, version)); } return sonarProjects; } CityModelImpl parseCity(String cityResultString) { JsonElement cityJson = jsonParser.parse(cityResultString); JsonArray allComponents = cityJson.getAsJsonArray(); // Create city JsonObject cityObject = allComponents.get(0).getAsJsonObject(); JsonToModelConverter jsonToModelConverter = new JsonToModelConverter(); CityModelImpl city = jsonToModelConverter.convertToCity(cityObject); // Sort by name List<JsonObjectWrapper> javaElements = new ArrayList<>(); for (JsonElement component : allComponents) { javaElements.add(new JsonObjectWrapper(component.getAsJsonObject())); } Collections.sort(javaElements); // Add neighborhoods for (JsonObjectWrapper component : javaElements) { JsonObject compObject = component.getObject(); String scopeString = compObject.get("scope").getAsString(); if (scopeString.equals("DIR")) { HoodModelImpl newHood = jsonToModelConverter.convertToHood(compObject); city.addHoodToCity(newHood); } } // Add buildings for (JsonObjectWrapper component : javaElements) { JsonObject compObject = component.getObject(); String scopeString = compObject.get("scope").getAsString(); String qualifierString = compObject.get("qualifier").getAsString(); if (scopeString.equals("FIL") && !qualifierString.equals("UTS")) { BuildingModelImpl buildingModel = jsonToModelConverter.convertToBuilding(compObject); city.addBuildingToCity(buildingModel); } } // drop empty hoods city.removeEmptyHoods(); return city; } }