package com.cadrlife.devsearch.agent.service.stash.model; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.cadrlife.devsearch.domain.Project; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Throwables; public class StashJsonParser { ObjectMapper mapper = new ObjectMapper(); public List<StashProject> extractStashProjects(String jsonString) { List<StashProject> stashObjects = new ArrayList<>(); try { JsonNode valuesNode = mapper.readTree(jsonString).get("values"); Iterator <JsonNode> iter = valuesNode.elements(); while (iter.hasNext()) { JsonNode valNode = iter.next(); stashObjects.add(new StashProject(getString(valNode, "key"), getString(valNode, "name"))); } } catch (Exception e) { System.err.println("dataType: " + "project" + " jsonString: " + jsonString); Throwables.propagate(e); } return stashObjects; } public List<Project> extractCodeProjects(String codeRepoName, String jsonString) { List<Project> stashObjects = new ArrayList<>(); try { JsonNode valuesNode = mapper.readTree(jsonString).get("values"); Iterator <JsonNode> iter = valuesNode.elements(); while (iter.hasNext()) { JsonNode valNode = iter.next(); String name = getString(valNode, "name"); String url = convertToSSHProtocol(getString(valNode, "cloneUrl")); String slug = getString(valNode, "slug"); String cloneCommand = "git clone " + url; stashObjects.add(new Project().setName(name).setCloneUrl(url).setCloneCommand(cloneCommand).setRepo(codeRepoName).setSlug(slug)); } } catch (Exception e) { System.err.println("dataType: " + "repository" + " jsonString: " + jsonString); Throwables.propagate(e); } return stashObjects; } private String getString(JsonNode valNode, String fieldName) { return valNode.get(fieldName).asText().trim(); } public String convertToSSHProtocol(String cloneUrl) { // HTTP becomes ssh and strip username out return cloneUrl.replaceFirst("http://[^@]*@stash/scm/","ssh://git@stash:7999/"); } }