/**
  * Call the {@link IDockerConnection#getContainers(boolean)} in a background job to avoid blocking
  * the UI.
  *
  * @param container the selected {@link DockerContainersCategory}
  */
 private void loadContainerInfo(final IDockerContainer container) {
   // only retain expanded tree paths if container was expanded
   final TreePath[] expandedTreePaths =
       this.viewer.getExpandedState(container) ? this.viewer.getExpandedTreePaths() : null;
   final Job loadContainersJob =
       new Job(DVMessages.getString("ContainerInfoLoadJob.msg")) { // $NON-NLS-1$
         @Override
         protected IStatus run(final IProgressMonitor monitor) {
           ((DockerContainer) container).info(true);
           return Status.OK_STATUS;
         }
       };
   loadContainersJob.addJobChangeListener(
       new JobChangeAdapter() {
         @Override
         public void done(final IJobChangeEvent event) {
           event.getResult();
           Display.getDefault()
               .asyncExec(
                   new Runnable() {
                     @Override
                     public void run() {
                       refreshTarget(container);
                       if (expandedTreePaths != null) {
                         viewer.setExpandedTreePaths(expandedTreePaths);
                       }
                     }
                   });
         }
       });
   loadContainersJob.schedule();
 }
  /**
   * Call the {@link IDockerConnection#getContainers(boolean)} in a background job to avoid blocking
   * the UI.
   *
   * @param containersCategory the selected {@link DockerContainersCategory}
   */
  private void loadContainers(final DockerContainersCategory containersCategory) {
    final Job loadContainersJob =
        new Job(DVMessages.getString("ContainersLoadJob.msg")) { // $NON-NLS-1$
          @Override
          protected IStatus run(final IProgressMonitor monitor) {
            containersCategory.getConnection().getContainers(true);
            return Status.OK_STATUS;
          }

          @Override
          public boolean belongsTo(Object family) {
            return family == DockerExplorerView.class;
          }
        };
    loadContainersJob.addJobChangeListener(
        new JobChangeAdapter() {
          @Override
          public void done(final IJobChangeEvent event) {
            event.getResult();
            Display.getDefault()
                .asyncExec(
                    new Runnable() {
                      @Override
                      public void run() {
                        refreshTarget(containersCategory);
                      }
                    });
          }
        });
    loadContainersJob.schedule();
  }
  /**
   * Call the {@link IDockerConnection#getImages(boolean)} in a background job to avoid blocking the
   * UI.
   *
   * @param imagesCategory the selected {@link DockerImagesCategory}
   */
  private void loadImages(final DockerImagesCategory imagesCategory) {
    final Job loadImagesJob = new Job(DVMessages.getString("ImagesLoadJob.msg")) { // $NON-NLS-1$
          @Override
          protected IStatus run(final IProgressMonitor monitor) {
            imagesCategory.getConnection().getImages(true);
            return Status.OK_STATUS;
          }

          @Override
          public boolean belongsTo(Object family) {
            return family == DockerExplorerView.class;
          }
        };
    loadImagesJob.addJobChangeListener(
        new JobChangeAdapter() {
          @Override
          public void done(final IJobChangeEvent event) {
            refreshTarget(imagesCategory);
          }
        });
    loadImagesJob.schedule();
  }