package com.digiarea.closure.model;
import com.digiarea.closure.model.visitor.CloneVisitor;
import com.digiarea.closure.model.visitor.EqualsVisitor;
import com.digiarea.closure.model.visitor.GenericVisitor;
import com.digiarea.closure.model.visitor.VoidVisitor;
public abstract class Node {
protected Node parent = null;
public final Node getParent() {
return parent;
}
public final void setParent(Node parent) {
this.parent = parent;
}
public Node() {
super();
}
public abstract <C> void accept(VoidVisitor<C> v, C ctx) throws Exception;
public abstract <R, C> R accept(GenericVisitor<R, C> v, C ctx) throws Exception;
private static final CloneVisitor<Void> CLONE = new CloneVisitor<Void>();
@Override
public final Node clone() throws CloneNotSupportedException {
try {
return accept(CLONE, null);
} catch (final Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public final boolean equals(Object obj) {
try {
return EqualsVisitor.equals(this, (Node) obj);
} catch (Exception e) {
return false;
}
}
}