public void onUpdatePhoto() {
    if (!initialised) return;
    photoDetails.setTitle(photoDetailsView.getPhotoTitle().getValue());
    photoDetails.setTags(photoDetailsView.getPhotoTags().getValue());
    appEventBus.fireEvent(new AppBusyEvent());
    rpcService.updatePhotoDetails(
        photoDetails,
        new AsyncCallback<PhotoDetails>() {
          public void onSuccess(PhotoDetails result) {
            madeEdits = true;
            Scheduler.get()
                .scheduleFixedDelay(
                    new RepeatingCommand() {
                      public boolean execute() {
                        appEventBus.fireEvent(new AppFreeEvent());
                        return false;
                      }
                    },
                    1500);
          }

          public void onFailure(Throwable caught) {
            Scheduler.get()
                .scheduleFixedDelay(
                    new RepeatingCommand() {
                      public boolean execute() {
                        appEventBus.fireEvent(new AppFreeEvent());
                        return false;
                      }
                    },
                    500);
          }
        });
  }
 public void bind() {
   photoDetailsView.setPresenter(this);
 }
 public void onStop() {
   if (photoDetailsView != null) photoDetailsView.setPhoto("");
 }