private void drawWindow() {
    shell =
        new Shell(SWT.ON_TOP | SWT.APPLICATION_MODAL | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE);

    // Setup Title
    shell.setText("Artifact Information");

    // Setup Icon
    Image image = ArtifactImageManager.getImage(CoreArtifactTypes.Artifact);
    shell.setImage(image);

    // Setup Form Layout
    FormLayout layout = new FormLayout();
    layout.marginHeight = 5;
    layout.marginWidth = 5;
    shell.setLayout(layout);

    SashForm sashForm = new SashForm(shell, SWT.VERTICAL);

    // Create valid artifact fields
    FormLayout validLayout = new FormLayout();
    validLayout.spacing = 5;

    Composite validComposite = new Composite(sashForm, SWT.NONE);
    validComposite.setLayout(validLayout);

    Label validLabel = new Label(validComposite, SWT.LEFT);
    validLabel.setText("Valid artifacts - will be added");

    Table validTable =
        new Table(
            validComposite,
            SWT.MULTI
                | SWT.BORDER
                | SWT.H_SCROLL
                | SWT.V_SCROLL
                | SWT.FULL_SELECTION
                | SWT.HIDE_SELECTION);
    validTable.setLinesVisible(true);
    validTable.setHeaderVisible(true);

    // Create invalid artifacts fields
    FormLayout invalidLayout = new FormLayout();
    invalidLayout.spacing = 5;

    Composite invalidComposite = new Composite(sashForm, SWT.NONE);
    invalidComposite.setLayout(invalidLayout);

    Label invalidLabel = new Label(invalidComposite, SWT.LEFT);
    invalidLabel.setText("Invalid artifacts - will not be added");

    Table invalidTable =
        new Table(
            invalidComposite,
            SWT.MULTI
                | SWT.BORDER
                | SWT.H_SCROLL
                | SWT.V_SCROLL
                | SWT.FULL_SELECTION
                | SWT.HIDE_SELECTION);
    invalidTable.setLinesVisible(true);
    invalidTable.setHeaderVisible(true);

    // Create the Buttons
    Button okButton = new Button(invalidComposite, SWT.PUSH);
    okButton.setText("OK");

    Button cancelButton = new Button(invalidComposite, SWT.PUSH);
    cancelButton.setText("Cancel");

    // Attach validLabel to top-left corner
    FormData data = new FormData();
    data.top = new FormAttachment(0);
    data.left = new FormAttachment(0);
    validLabel.setLayoutData(data);

    // Attach validTable to bottom of validLabel
    data = new FormData();
    data.top = new FormAttachment(validLabel);
    data.bottom = new FormAttachment(100);
    data.left = new FormAttachment(0);
    data.right = new FormAttachment(100);
    data.height = validTable.getItemHeight() * 10;
    validTable.setLayoutData(data);

    // Attach invalidLabel to top-left corner
    data = new FormData();
    data.top = new FormAttachment(0);
    data.left = new FormAttachment(0);
    invalidLabel.setLayoutData(data);

    // Attach invalidTable to bottom of invalidLabel
    data = new FormData();
    data.top = new FormAttachment(invalidLabel);
    data.bottom = new FormAttachment(okButton);
    data.left = new FormAttachment(0);
    data.right = new FormAttachment(100);
    data.height = validTable.getItemHeight() * 10;
    invalidTable.setLayoutData(data);

    // Attach sashForm to top-left corner of shell
    data = new FormData();
    data.top = new FormAttachment(0);
    data.bottom = new FormAttachment(100);
    data.left = new FormAttachment(0);
    data.right = new FormAttachment(100);
    sashForm.setLayoutData(data);

    // Attach buttons to bottom of sashForm
    data = new FormData();
    data.bottom = new FormAttachment(100);
    data.right = new FormAttachment(100);
    cancelButton.setLayoutData(data);

    data = new FormData();
    data.bottom = new FormAttachment(100);
    data.right = new FormAttachment(cancelButton);
    okButton.setLayoutData(data);

    // Populate Tables
    relationTableViewer = new RelationTableViewer(validTable, invalidTable, branch);
    for (int i = 0; i < validArtifacts.size(); i++) {
      relationTableViewer.addValidItem(validArtifacts.get(i));
    }
    for (int i = 0; i < invalidName.size(); i++) {
      relationTableViewer.addInvalidItem(invalidName.get(i), invalidReason.get(i));
    }

    // Add Listeners to buttons
    okButton.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            okSelected();
          }
        });

    cancelButton.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            cancelSelected();
          }
        });

    // Add shell resize listener
    shell.addControlListener(
        new ControlListener() {

          @Override
          public void controlMoved(ControlEvent e) {
            // do nothing
          }

          @Override
          public void controlResized(ControlEvent e) {
            relationTableViewer.resizeTable(((Shell) e.widget).getClientArea().width);
            shell.layout();
          }
        });

    if (needWindow) {
      shell.pack();
      shell.open();
    } else {
      okSelected();
    }
  }