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

    if (this.listener != null) {
      for (VersionCompatibilityService service : this.services) {
        service.detach(this.listener);
      }
    }
  }
  @Override
  protected Data compute() {
    VersionCompatibilityService.Data data = null;

    for (VersionCompatibilityService service : this.services) {
      data = service.data();

      if (service.compatible() == false) {
        break;
      }
    }

    return data;
  }
  @Override
  protected final void initDataService() {
    this.services = context(Property.class).services(VersionCompatibilityService.class);

    this.listener =
        new Listener() {
          @Override
          public void handle(final Event event) {
            refresh();
          }
        };

    for (VersionCompatibilityService service : this.services) {
      service.attach(this.listener);
    }
  }