I am a beginner in Java programming and I desperatly need help. I have a Programm with a GUI interface where I have to Serialize Jobs and Resources and save them into a Json File. THen when opening the program again I need the saved Items to still be in the Gui and I am at a poit where I just want to give up so any help would greatly be appreciated. I will only post the Job Serialation because the Resource one will be just the same. I am using a jackson seriaizer and deserializer.
This is my Job Class
package de.hft_stuttgart.ip1.common;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import java.beans.ConstructorProperties;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id", scope=Job.class)
public class Job implements Serializable {
@JsonProperty(index=0)
private long id;
@JsonProperty(index=1)
private String name;
@JsonProperty(index=2)
private List<ResourceConsumption> consumingResources;
@JsonProperty(index=3)
private List<Integer> dependencies;
@ConstructorProperties({"id", "name"})
public Job(long id, String name) {
this.id = id;
this.name = name;
consumingResources = new ArrayList<>();
dependencies = new ArrayList<>();
if ( id == -1 ) {
id = System.currentTimeMillis();
}
}
public long getId() {
return id;
}
public String getName() {
return name;
}
public List<ResourceConsumption> getConsumptions() {
return consumingResources;
}
public List<Integer> getDependencies() {
return dependencies;
}
public void setName(String name) {
this.name = name;
}
public void setId(int id) { this.id = id;
}
public void setConsumptions(List<ResourceConsumption> consumptions) {
this.consumingResources = consumptions;
}
public void setDependencies(List<Integer> dependencies) {
this.dependencies = dependencies;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Job job = (Job) o;
return id == job.id && name.equals(job.name) && consumingResources.equals(job.consumingResources) && dependencies.equals(job.dependencies);
}
@Override
public String toString() {
return name + " / " + consumingResources + " / " + dependencies;
}
@Override
public int hashCode() {
return Objects.hash(id, name, consumingResources, dependencies);
}
}
This is my Job Serializer
package de.hft_stuttgart.ip1.common;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class JobSerializer extends StdSerializer<Job> {
public JobSerializer() {
this(null);
}
public JobSerializer(Class<Job> t) {
super(t);
}
@Override
public void serialize(Job job, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(job.getId());
jsonGenerator.writeString(job.getName());
jsonGenerator.writeObject(job.getConsumptions());
jsonGenerator.writeObject(job.getDependencies());
}
}
This is my Deserializer
package de.hft_stuttgart.ip1.common;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.List;
public class JobDeserializer extends StdDeserializer{
public JobDeserializer() {
this(null);
}
public JobDeserializer(Class<Job> t) {
super(t);
}
@Override
public Job deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
Job job = new Job(1234,"Herbert");
JsonNode jsonNode = jsonParser.getCodec().readTree(jsonParser);
JsonNode customIdNode = jsonNode.get("id");
JsonNode customNameNode = jsonNode.get("name");
// JsonNode customDependenciesNode = jsonNode.get("dependencies");
// JsonNode customConsumptionNode = jsonNode.get("consumptions");
int id = customIdNode.asInt();
String name = customNameNode.asText();
// Object dependencies = customDependenciesNode.asText();
// Object consumptions = customConsumptionNode.asText();
job.setId(id);
job.setName(name);
// job.setConsumptions((List<ResourceConsumption>) consumptions);
// job.setDependencies((List<Integer>) dependencies);
return job;
}
}
This is my Save Action Class where I save my Jtree nodes into a json file
package de.hft_stuttgart.ip1.client.actions;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import de.hft_stuttgart.ip1.common.Job;
import de.hft_stuttgart.ip1.common.JobSerializer;
import de.hft_stuttgart.ip1.common.Resource;
import de.hft_stuttgart.ip1.common.ResourceSerializer;
import de.hft_stuttgart.ip1.gui.MainFrame;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.awt.event.ActionEvent;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.InputEvent;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
public class SaveAction extends AbstractAction{
private MainFrame mainFrame;
private JTree tree;
public SaveAction(MainFrame mainFrame, JTree tree) {
this.mainFrame = mainFrame;
this.tree = tree;
putValue(Action.NAME, "Speichern");
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot();
DefaultMutableTreeNode resourceParent = (DefaultMutableTreeNode) root.getChildAt(0);
int resourceChildsNum = resourceParent.getChildCount();
ArrayList<Object> resourceChildsArr = new ArrayList<>();
for (int i = 0; i < resourceChildsNum; i++) {
DefaultMutableTreeNode iChild = (DefaultMutableTreeNode) resourceParent.getChildAt(i);
if (!iChild.getUserObject().equals("<Neue Ressource>")) {
resourceChildsArr.add((Resource) iChild.getUserObject());
}
}
DefaultMutableTreeNode jobParent = (DefaultMutableTreeNode) root.getChildAt(1);
int jobChildsNum = jobParent.getChildCount();
ArrayList<Object> jobChildsArr = new ArrayList<>();
for (int i = 0; i < jobChildsNum; i++) {
DefaultMutableTreeNode iChild = (DefaultMutableTreeNode) jobParent.getChildAt(i);
if (!iChild.getUserObject().equals("<Neuer Job>")) {
jobChildsArr.add((Job) iChild.getUserObject());
}
}
ArrayList<ArrayList<Object>> serializeArr = new ArrayList<>();
serializeArr.add(resourceChildsArr);
serializeArr.add(jobChildsArr);
File file = new File("SoSe22/A_091_ProjectPlanner/src/main/java/saves/jsonFile.json");
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Job.class, new JobSerializer());
module.addSerializer(Resource.class, new ResourceSerializer());
mapper.registerModule(module);
try {
mapper.writeValue(file, serializeArr);
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
}
}
And how to get the json file and map it onto the Jtree I have no Idea what to do or what to google.