
net.thucydides.core.requirements.RequirementPersister Maven / Gradle / Ivy
The newest version!
package net.thucydides.core.requirements;
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.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);
}
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 {
try( Writer writer = new FileWriter(new File(outputDirectory, rootDirectory + ".json"))) {
gson.toJson(map, writer);
writer.flush();
writer.close();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy