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/");
}
}