package ovh.gasser.newshapes.shapes; import ovh.gasser.newshapes.attributes.Attributes; import java.awt.*; import java.util.Map; import java.util.TreeMap; public abstract class AbstractShape implements Shape { private final Map attributes = new TreeMap<>(); private final Rectangle bounds; AbstractShape() { this(null); } AbstractShape(Rectangle bounds) { this.bounds = bounds; } @Override public Attributes getAttributes(String key) { return attributes.get(key); } @Override public void addAttributes(Attributes attrs) { attributes.put(attrs.getID(), attrs); } @Override public void setLoc(Point newLoc) { getBounds().setLocation(newLoc); } @Override public void translate(int dx, int dy) { getBounds().translate(dx, dy); } @Override public Rectangle getBounds() { return this.bounds; } @Override public String toString() { return String.format("x=%d, y=%d, width=%d, height=%d", bounds.x, bounds.y, bounds.width, bounds.height); } @Override public abstract Shape clone(); }