package jws;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import abs.backend.java.observing.COGView;
import abs.backend.java.observing.ObjectView;
public abstract class AbstractObjectGraph implements ObjectGraph {
final Map<COGView, ObjectView> initialObjects = new HashMap<COGView, ObjectView>();
final Map<ObjectView, Integer> objectIDs = new HashMap<ObjectView, Integer>();
final AtomicInteger edgeCounter = new AtomicInteger();
final AtomicInteger nodeCounter = new AtomicInteger();
public AbstractObjectGraph() {
super();
}
protected String getID(ObjectView o) {
Integer id = objectIDs.get(o);
if (id == null) {
id = nodeCounter.incrementAndGet();
objectIDs.put(o,id);
}
return String.valueOf(id);
}
protected String getLabel(ObjectView o) {
return o.getClassName()+" "+o.getID();
}
@Override
public void addObject(ObjectView o) {
addObject(o,false);
}
@Override
public void addObject(ObjectView o, boolean COG) {
if (COG) {
initialObjects.put(o.getCOG(),o);
}
}
@Override
public void addEdge(ObjectView source, ObjectView target) {
addEdge(source,target,false);
}
protected ObjectView getCOGOwner(final ObjectView o) {
return initialObjects.get(o.getCOG());
}
}