/** @author <a href="mailto:[email protected]">Konstantin Komissarchik</a> */
public final class ContactImageService extends ImageService {
  private static final ImageServiceData IMG_PERSON =
      new ImageServiceData(ImageData.readFromClassLoader(Contact.class, "Contact.png"));
  private static final ImageServiceData IMG_PERSON_FADED =
      new ImageServiceData(ImageData.readFromClassLoader(Contact.class, "ContactFaded.png"));

  private Listener listener;

  @Override
  protected void initImageService() {
    this.listener =
        new FilteredListener<PropertyContentEvent>() {
          @Override
          protected void handleTypedEvent(final PropertyContentEvent event) {
            refresh();
          }
        };

    context(IModelElement.class).attach(this.listener, "EMail");
  }

  @Override
  protected ImageServiceData compute() {
    if (context(Contact.class).getEMail().getContent() == null) {
      return IMG_PERSON_FADED;
    } else {
      return IMG_PERSON;
    }
  }

  @Override
  public void dispose() {
    super.dispose();

    context(IModelElement.class).detach(this.listener, "EMail");
  }
}