ProfileReader.java

58 lines | 2.131 kB Blame History Raw Download
/*
 * 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.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);
            });
        });
        Profile profile = new Profile(urlHasRequestPlan);
        return profile;
    }
}