Skip to content

Instantly share code, notes, and snippets.

@arielsrv
Created June 29, 2021 18:35
Show Gist options
  • Save arielsrv/831049ed894a06d9e96bc23d25ac79ea to your computer and use it in GitHub Desktop.
Save arielsrv/831049ed894a06d9e96bc23d25ac79ea to your computer and use it in GitHub Desktop.
serializer serializer
package com.ariel;
import com.ariel.core.Application;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.UUID;
/**
* @author apineiro
*/
public class Program {
public static void main(String[] args) throws IOException {
Application application = new Application();
Scanner scanner = new Scanner(System.in);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
Node root = new Folder();
root.name = "root";
Folder music = new Folder();
music.name = "music";
music.parent = root;
Folder rock = new Folder();
rock.name = "rock";
rock.parent = music;
music.add(rock);
File audio1 = new File();
audio1.name = "Back in black.mp4";
audio1.parent = rock;
rock.add(audio1);
Folder documents = new Folder();
documents.name = "documents";
documents.parent = root;
File resume = new File();
resume.name = "CV - John.pdf";
resume.parent = documents;
documents.add(resume);
root.add(music);
root.add(documents);
root.show();
mapper.writeValue(new java.io.File("root.json"), root);
}
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = File.class, name = "file"),
@JsonSubTypes.Type(value = Folder.class, name = "folder")
})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
abstract class Node {
public Node parent;
public String name;
public String id = UUID.randomUUID().toString();
public abstract void show();
public abstract void add(Node node);
}
class File extends Node {
@Override
public void show() {
System.out.println(name);
}
@Override
public void add(Node node) {
}
}
class Folder extends Node {
public ArrayList<Node> nodes = new ArrayList<>();
@Override
public void show() {
System.out.println(name);
for (Node node : this.nodes) {
node.show();
}
}
@Override
public void add(Node node) {
this.nodes.add(node);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment