CachablePainter.java

package swingtree.api;

import java.awt.Graphics2D;
import java.util.Objects;

/**
 *  A painter that paints a given data object using the given graphics context
 *  with {@link Object#hashCode()} and {@link Object#equals(Object)} implemented
 *  to delegate to the data object in order to allow for caching of
 *  what is painted.
 */
final class CachablePainter implements Painter
{
    private final Object data;
    private final Painter painter;


    CachablePainter(Object data, Painter painter ) {
        this.data    = Objects.requireNonNull(data);
        this.painter = Objects.requireNonNull(painter);
    }

    @Override
    public void paint( Graphics2D g2d ) {
        painter.paint(g2d);
    }

    @Override
    public boolean canBeCached() {
        return true;
    }

    @Override
    public int hashCode() {
        return data.hashCode();
    }

    @Override
    public boolean equals( Object obj ) {
        if ( obj == this ) return true;
        if ( obj == null || obj.getClass() != getClass() ) return false;
        return data.equals(((CachablePainter)obj).data);
    }
}