public Composite createComposite(Composite parent, IWizardHandle handle) {
    this.handle = handle;
    handle.setTitle(Messages.ArchiveTitle);
    handle.setDescription(Messages.ArchiveDescription);
    handle.setImageDescriptor(JavaPluginImages.DESC_WIZBAN_ADD_LIBRARY);

    Composite c = new Composite(parent, SWT.NONE);
    PlatformUI.getWorkbench()
        .getHelpSystem()
        .setHelp(c, IJstCommonUIContextIds.DEPLOYMENT_ASSEMBLY_NEW_ARCHIVE_REFERENCE_P1);
    c.setLayout(new GridLayout(2, false));
    viewer = new TreeViewer(c, SWT.MULTI | SWT.BORDER);
    viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
    viewer.setContentProvider(getContentProvider());
    viewer.setLabelProvider(getLabelProvider());
    viewer.setInput(ResourcesPlugin.getWorkspace());

    Composite buttonColumn = new Composite(c, SWT.NONE);
    buttonColumn.setLayoutData(new GridData(GridData.FILL_VERTICAL));

    final GridLayout gl = new GridLayout();
    gl.marginWidth = 0;
    gl.marginHeight = 0;

    buttonColumn.setLayout(gl);

    add = new Button(buttonColumn, SWT.NONE);
    add.setText(Messages.Add);
    GridDataFactory.defaultsFor(add).applyTo(add);

    remove = new Button(buttonColumn, SWT.NONE);
    remove.setText(Messages.Remove);
    GridDataFactory.defaultsFor(remove).applyTo(remove);

    add.addSelectionListener(
        new SelectionListener() {
          public void widgetSelected(SelectionEvent e) {
            buttonPressed();
          }

          public void widgetDefaultSelected(SelectionEvent e) {
            widgetSelected(e);
          }
        });

    remove.addSelectionListener(
        new SelectionListener() {
          public void widgetSelected(SelectionEvent e) {
            removeButtonPressed();
          }

          public void widgetDefaultSelected(SelectionEvent e) {
            widgetSelected(e);
          }
        });
    return c;
  }
  protected void removeButtonPressed() {
    TreeItem[] toRemove = viewer.getTree().getSelection();

    if (toRemove != null && toRemove.length > 0) {
      for (int i = 0; i < toRemove.length; i++) {
        Path path = (Path) toRemove[i].getData();
        if (archives.containsKey(path)) {
          archives.remove(path);
        }
      }

      viewer.refresh();
      if (archives != null && archives.size() > 0) {
        isComplete = true;
      } else {
        isComplete = false;
      }
      handle.update();
    }
  }
  protected void buttonPressed() {
    IProject project = (IProject) getTaskModel().getObject(IReferenceWizardConstants.PROJECT);
    selected = chooseEntries(add.getShell(), project.getFullPath());

    if (selected != null) {
      removeInvalidArchiveFiles();

      for (IPath path : selected) {
        if (!archives.containsKey(path)) {
          archives.put(path, path);
        }
      }

      viewer.refresh();
      if (archives != null && archives.size() > 0) {
        isComplete = true;
      } else {
        isComplete = false;
      }
      handle.update();
    }
  }