GC gcBuffer = new GC(imageBuffer);
// paint the relationships
for (Iterator iter = relationships.iterator(); iter.hasNext();) {
SimpleRelationship rel = (SimpleRelationship) iter.next();
SimpleNode src = (SimpleNode) rel.getSourceInLayout();
SimpleNode dest = (SimpleNode) rel.getDestinationInLayout();
// highlight the adjacent nodes if one of the nodes is selected
if (src.equals(selectedEntity)) {
dest.setAdjacent();
rel.setSelected();
} else if (dest.equals(selectedEntity)) {
src.setAdjacent();
rel.setSelected();
} else {
rel.setUnSelected();
}
// Add bend points if required
if ((rel).getBendPoints() != null && (rel).getBendPoints().length > 0) {
src = drawBendPoints(rel, gcBuffer); // change source to last bendpoint
}
double srcX = src.getX() + src.getWidth() / 2.0;
double srcY = src.getY() + src.getHeight() / 2.0;
double destX = dest.getX() + dest.getWidth() / 2.0;
double destY = dest.getY() + dest.getHeight() / 2.0;
drawEdge(srcX, srcY, destX, destY, rel, gcBuffer);
}
// paint the nodes
for (Iterator iter = entities.iterator(); iter.hasNext();) {
SimpleNode entity = (SimpleNode) iter.next();
String name = entity.toString();
Point textSize = gcBuffer.stringExtent(name);
int entityX = (int) entity.getX();
int entityY = (int) entity.getY();
//TODO: What about resize from the layout algorithm
int entityWidth = Math.max((int) entity.getWidth(), textSize.x + 8);
int entityHeight = Math.max((int) entity.getHeight(), textSize.y + 2);
gcBuffer.setBackground((Color) entity.getColor());
gcBuffer.fillRoundRectangle(entityX, entityY, entityWidth, entityHeight, 8, 8);
// position the text in the middle of the node
int x = (int) (entityX + (entityWidth / 2.0)) - (textSize.x / 2);
gcBuffer.setForeground(BLACK);
gcBuffer.drawString(name, x, entityY);
gcBuffer.setForeground((Color) entity.getBorderColor());
gcBuffer.setLineWidth(entity.getBorderWidth());
gcBuffer.drawRoundRectangle(entityX, entityY, entityWidth, entityHeight, 8, 8);
}
e.gc.drawImage(imageBuffer, 0, 0);
imageBuffer.dispose();