package rtt.annotation.editor.model;
import java.util.Observable;
import rtt.annotation.editor.model.annotation.Annotatable;
import rtt.annotations.Node.Value;
/**
* An abstract class for various java elements.
*
* @author Christian Oelsner <C.Oelsner@web.de>
*
* @see ClassModel
* @see Annotatable
* @see ClassElement
* @see FieldElement
* @sse MethodElement
*
*/
public abstract class ModelElement extends Observable {
@Value private String name = null;
@Value private ModelElement parent = null;
protected ModelElement(ModelElement parent) {
this.parent = parent;
}
public final String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ModelElement getParent() {
return parent;
}
public void setParent(ModelElement parent) {
this.parent = parent;
}
public final void setChanged() {
super.setChanged();
if (parent != null) {
parent.setChanged();
} else {
notifyObservers();
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((parent == null) ? 0 : parent.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
ModelElement other = (ModelElement) obj;
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name)) {
return false;
}
if (parent == null) {
if (other.parent != null) {
return false;
}
} else if (!parent.equals(other.parent)) {
return false;
}
return true;
}
}