private void submitJob() {

    mask();

    final Map<String, String> jobProperties;
    try {
      jobProperties = calculateJobProperties();
    } catch (JobCreationException e) {
      unmask();
      e.printStackTrace();
      Window.alert(e.getLocalizedMessage());
      return;
    }

    final MessageBox box =
        MessageBox.progress(
            "Please wait",
            "Submitting job " + jobProperties.get(Constants.JOBNAME_KEY) + "...",
            "Initializing...");
    final ProgressBar bar = box.getProgressBar();
    final Timer t =
        new Timer() {
          float i;

          @Override
          public void run() {

            GrisuClientService.Util.getInstance()
                .getCurrentStatus(
                    jobProperties.get(Constants.JOBNAME_KEY),
                    new AsyncCallback<DtoActionStatus>() {

                      public void onFailure(Throwable arg0) {

                        box.close();
                        unmask();

                        cancel();
                        arg0.printStackTrace();
                      }

                      public void onSuccess(DtoActionStatus arg0) {

                        try {

                          if (arg0 != null && arg0.getFinished()) {

                            box.close();
                            unmask();

                            cancel();

                            if (!arg0.getFailed()) {
                              UserEnvironment.getInstance()
                                  .setUserProperty(
                                      Constants.DEFAULT_VERSION + lastCalculatedExecutable,
                                      jobProperties.get(Constants.APPLICATIONVERSION_KEY));
                            }
                          }

                          if (arg0 == null) {
                            bar.updateProgress(0, "Contacting...");
                            return;
                          }
                          double current = arg0.getCurrentElements();
                          double total = arg0.getTotalElements();

                          bar.updateProgress(
                              current / total,
                              arg0.getLog().get(arg0.getLog().size() - 1).getLogMessage());

                        } catch (Exception e) {
                          e.printStackTrace();
                        }
                      }
                    });
          }
        };
    t.scheduleRepeating(500);

    UserEnvironment.getInstance().submitJob(jobProperties);
  }