// Path: src/main/java/org/laborra/beantrace/BeanTraceException.java
// public class BeanTraceException extends RuntimeException {
//     public BeanTraceException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: src/main/java/org/laborra/beantrace/model/Vertex.java
// public class Vertex {
//     private Class<?> clazz;
//     private String id;
//     private Set<Edge> references = new HashSet<>();
//     private Set<Attribute> attributes = new HashSet<>();
// 
//     public Vertex(Class<?> clazz, String id) {
//         this(clazz, id, new HashSet<Edge>(), new HashSet<Attribute>());
//     }
// 
//     public Vertex(Class<?> clazz, String id, Set<Edge> references, Set<Attribute> attributes) {
//         this.id = id;
//         this.clazz = clazz;
//         this.references = references;
//         this.attributes = attributes;
//     }
// 
//     public Set<Edge> getReferences() {
//         return references;
//     }
// 
//     public Set<Attribute> getAttributes() {
//         return attributes;
//     }
// 
//     public Class<?> getClazz() {
//         return clazz;
//     }
// 
//     public String getId() {
//         return id;
//     }
// }


import org.laborra.beantrace.BeanTraceException;
import org.laborra.beantrace.model.Vertex;
import java.io.*;
package org.laborra.beantrace.renderers;



public class D3JSRenderer implements GraphRenderer {

    private final Writer destinationWrite;
    private final Reader templateReader;

    public D3JSRenderer(Writer destinationWrite, Reader templateReader) {
        this.destinationWrite = destinationWrite;
        this.templateReader = templateReader;
    }

    @Override
// Path: src/main/java/org/laborra/beantrace/BeanTraceException.java
// public class BeanTraceException extends RuntimeException {
//     public BeanTraceException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: src/main/java/org/laborra/beantrace/model/Vertex.java
// public class Vertex {
//     private Class<?> clazz;
//     private String id;
//     private Set<Edge> references = new HashSet<>();
//     private Set<Attribute> attributes = new HashSet<>();
// 
//     public Vertex(Class<?> clazz, String id) {
//         this(clazz, id, new HashSet<Edge>(), new HashSet<Attribute>());
//     }
// 
//     public Vertex(Class<?> clazz, String id, Set<Edge> references, Set<Attribute> attributes) {
//         this.id = id;
//         this.clazz = clazz;
//         this.references = references;
//         this.attributes = attributes;
//     }
// 
//     public Set<Edge> getReferences() {
//         return references;
//     }
// 
//     public Set<Attribute> getAttributes() {
//         return attributes;
//     }
// 
//     public Class<?> getClazz() {
//         return clazz;
//     }
// 
//     public String getId() {
//         return id;
//     }
// }


// Path: src/main/java/org/laborra/beantrace/renderers/D3JSRenderer.java
import org.laborra.beantrace.BeanTraceException;
import org.laborra.beantrace.model.Vertex;
import java.io.*;

package org.laborra.beantrace.renderers;



public class D3JSRenderer implements GraphRenderer {

    private final Writer destinationWrite;
    private final Reader templateReader;

    public D3JSRenderer(Writer destinationWrite, Reader templateReader) {
        this.destinationWrite = destinationWrite;
        this.templateReader = templateReader;
    }

    @Override
    public void render(Vertex subject) {