class EdgeDraftImpl extends ElementDraftImpl implements EdgeDraft {

    //Topology
    private NodeDraftImpl source;
    private NodeDraftImpl target;
    private double weight = 1.0;
    private Object type;
    private EdgeDirection direction;

    public EdgeDraftImpl(ImportContainerImpl container, String id) {
        super(container, id);
    }

    //GETTERS
    @Override
    public NodeDraftImpl getSource() {
        return source;
    }

    @Override
    public void setSource(NodeDraft nodeSource) {
        this.source = (NodeDraftImpl) nodeSource;
    }

    @Override
    public NodeDraftImpl getTarget() {
        return target;
    }

    @Override
    public void setTarget(NodeDraft nodeTarget) {
        this.target = (NodeDraftImpl) nodeTarget;
    }

    @Override
    public double getWeight() {
        return weight;
    }

    //SETTERS
    @Override
    public void setWeight(double weight) {
        if (getGraphInterval() != null || getGraphTimestamp() != null) {
            // Slice mode
            ColumnDraft draftColumn = container.getEdgeColumn("weight");
            if (draftColumn != null && draftColumn.isDynamic()) {
                if (getGraphInterval() != null) {
                    setValue("weight", weight, getGraphInterval().getLow(), getGraphInterval().getHigh());
                } else {
                    setValue("weight", weight, getGraphTimestamp());
                }
                return;
            }
        }
        this.weight = weight;
    }

    @Override
    public EdgeDirection getDirection() {
        return direction;
    }

    @Override
    public void setDirection(EdgeDirection direction) {
        this.direction = direction;
    }

    @Override
    public Object getType() {
        return type;
    }

    @Override
    public void setType(Object type) {
        this.type = type;
    }

    @Override
    public boolean isSelfLoop() {
        return source != null && source == target;
    }

    @Override
    public Object getValue(String key) {<FILL_FUNCTION_BODY>}

    @Override
    ColumnDraft getColumn(String key, Class type) {
        return container.addEdgeColumn(key, type);
    }

    @Override
    ColumnDraft getColumn(String key) {
        return container.getEdgeColumn(key);
    }

    @Override
    public Iterable<ColumnDraft> getColumns() {
        return container.getEdgeColumns();
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(source.getId());
        sb.append(" -> ");
        sb.append(target.getId());

        sb.append(" (id = ");
        sb.append(id);

        if (type != null && !type.toString().isEmpty()) {
            sb.append("; type = ");
            sb.append(type);
        }
        sb.append(")");

        if (direction != null) {
            sb.append(" direction = " + direction.name());
        }

        return sb.toString();
    }
}

        ColumnDraft column = container.getEdgeColumn(key);
        if (column != null) {
            return getAttributeValue(((ColumnDraftImpl) column).getIndex());
        }
        return null;
    
<methods>public void <init>(org.gephi.io.importer.impl.ImportContainerImpl, java.lang.String) ,public void addInterval(java.lang.String, java.lang.String) ,public void addInterval(double, double) ,public void addIntervals(java.lang.String) ,public void addTimestamp(java.lang.String) ,public void addTimestamp(double) ,public void addTimestamps(java.lang.String) ,public java.awt.Color getColor() ,public Interval getGraphInterval() ,public java.lang.Double getGraphTimestamp() ,public java.lang.String getId() ,public java.lang.String getLabel() ,public java.awt.Color getLabelColor() ,public float getLabelSize() ,public TimeSet getTimeSet() ,public java.lang.Object getValue(java.lang.String) ,public boolean hasDynamicAttributes() ,public boolean isDynamic() ,public boolean isLabelVisible() ,public void parseAndSetValue(java.lang.String, java.lang.String) ,public void parseAndSetValue(java.lang.String, java.lang.String, java.lang.String) ,public void parseAndSetValue(java.lang.String, java.lang.String, double) ,public void parseAndSetValue(java.lang.String, java.lang.String, java.lang.String, java.lang.String) ,public void parseAndSetValue(java.lang.String, java.lang.String, double, double) ,public void setColor(java.awt.Color) ,public void setColor(java.lang.String) ,public void setColor(java.lang.String, java.lang.String, java.lang.String) ,public void setColor(float, float, float) ,public void setColor(int, int, int) ,public void setLabel(java.lang.String) ,public void setLabelColor(java.awt.Color) ,public void setLabelColor(java.lang.String) ,public void setLabelColor(java.lang.String, java.lang.String, java.lang.String) ,public void setLabelColor(float, float, float) ,public void setLabelColor(int, int, int) ,public void setLabelSize(float) ,public void setLabelVisible(boolean) ,public void setValue(java.lang.String, java.lang.Object) ,public void setValue(java.lang.String, java.lang.Object, java.lang.String) ,public void setValue(java.lang.String, java.lang.Object, double) ,public void setValue(java.lang.String, java.lang.Object, java.lang.String, java.lang.String) ,public void setValue(java.lang.String, java.lang.Object, double, double) <variables>protected java.lang.Object[] attributes,protected java.awt.Color color,protected final non-sealed org.gephi.io.importer.impl.ImportContainerImpl container,protected final non-sealed java.lang.String id,protected java.lang.String label,protected java.awt.Color labelColor,protected float labelSize,protected boolean labelVisible,protected TimeSet timeSet