All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.thucydides.core.requirements.RequirementPersister Maven / Gradle / Ivy

package net.thucydides.core.requirements;

import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import net.thucydides.core.reports.json.gson.CollectionAdapter;
import net.thucydides.core.reports.json.gson.OptionalTypeAdapter;
import net.thucydides.core.requirements.model.Requirement;

import java.io.*;
import java.lang.reflect.Type;
import java.nio.file.Files;
import java.util.Collection;
import java.util.Map;
import java.util.SortedMap;

public class RequirementPersister {
    private final File outputDirectory;
    private final String rootDirectory;
    Gson gson;

    public RequirementPersister(File outputDirectory, String rootDirectory) {
        this.outputDirectory = outputDirectory;
        this.rootDirectory = rootDirectory;
        this.gson = new GsonBuilder()
                .registerTypeAdapterFactory(OptionalTypeAdapter.FACTORY)
                .registerTypeHierarchyAdapter(Collection.class, new CollectionAdapter()).create();

    }

    public SortedMap read() throws IOException{
        SortedMap map = new ChildrenFirstOrderedMap();
        File jsonFile = new File(outputDirectory, rootDirectory + ".json");
        if(!jsonFile.exists()) {
            return map;
        }

        SortedMap storedRequirementsMap;
        Type requirementsMapType = new TypeToken>(){}.getType();
        try(FileReader reader = new FileReader(jsonFile)) {
            storedRequirementsMap = gson.fromJson(reader, requirementsMapType);
            if (storedRequirementsMap == null) {
                storedRequirementsMap = Maps.newTreeMap();
            }
        }
        map.putAll(storedRequirementsMap);

        //reset the parents
        for (Map.Entry entry : storedRequirementsMap.entrySet()) {
            String key = entry.getKey();
            if (key.contains(".")) {
                String parent = key.substring(0, key.lastIndexOf("."));
                Requirement child = entry.getValue();
                updateParentChildren(map, parent, child);
            }
        }
        return map;
    }

    private void updateParentChildren(SortedMap map, String parent, Requirement entry) {
        Requirement parentRequirement = map.get(parent);
        Requirement updatedParentRequirement = parentRequirement.withChild(entry);
        map.remove(parent);
        map.put(parent, updatedParentRequirement);
    }

    public void write(SortedMap map) throws IOException {
        if (!outputDirectory.exists()) {
            Files.createDirectory(outputDirectory.toPath());
        }
        try( Writer writer = new FileWriter(new File(outputDirectory, rootDirectory + ".json"))) {
            gson.toJson(map, writer);
            writer.flush();
            writer.close();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy