ProfileReader.java
Home
/
src /
main /
java /
br /
ufrgs /
inf /
prosoft /
requestssimulator /
ProfileReader.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package br.ufrgs.inf.prosoft.requestssimulator;
import br.ufrgs.inf.prosoft.requestssimulator.requests.RequestPlan;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
*
* @author romulo
*/
public class ProfileReader {
public static Profile parseFile(String profilePath) {
String fileContent = null;
try (Stream<String> lines = Files.lines(Paths.get(profilePath))) {
fileContent = lines.collect(Collectors.joining());
} catch (IOException ex) {
Logger.getLogger(ProfileReader.class.getName()).log(Level.SEVERE, null, ex);
}
Map<String, RequestPlan> urlHasRequestPlan = new HashMap<>();
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = jsonParser.parse(fileContent).getAsJsonObject();
jsonObject.entrySet().forEach((entry) -> {
RequestPlan requestPlan = gson.fromJson(entry.getValue(), RequestPlan.class);
urlHasRequestPlan.put(entry.getKey(), requestPlan);
});
Map<String, RequestPlan> rootsReferences = new HashMap<>(urlHasRequestPlan);
urlHasRequestPlan.values().forEach(requestPlan -> {
requestPlan.linksReferences().forEach(linkReference -> {
RequestPlan reference = urlHasRequestPlan.get(linkReference);
if (reference == null) {
throw new RuntimeException("link not declared");
}
requestPlan.addLink(reference);
rootsReferences.remove(linkReference);
});
});
Collection<RequestPlan> roots = rootsReferences.values();
Profile profile = new Profile(roots);
return profile;
}
}