/* (non-Javadoc)
   * @see org.eclipse.ui.part.WorkbenchPart#dispose()
   */
  @Override
  public void dispose() {
    // Dispose the constraint panel
    constraintPanel.dispose();

    // Remove the selection listener
    getSite().getPage().removePostSelectionListener(this);
  }
  /*
   *  As the selection changes, we see if the selection contains an EObject and update the context of the constraint panel
   *  with this object.
   */
  @Override
  public void selectionChanged(final IWorkbenchPart p_part, final ISelection p_selection) {
    // Reset the context for evaluating the entered constraint.
    EObject context = null;

    if (p_selection instanceof IStructuredSelection) {
      final IStructuredSelection structSel = (IStructuredSelection) p_selection;

      if (structSel.size() == 1) {
        final Object element =
            AdapterFactoryEditingDomain.unwrap(
                ((IStructuredSelection) p_selection).getFirstElement());

        // Set the context as the selected EObject if any.
        if (element instanceof EObject) {
          context = (EObject) element;
        } else if (element instanceof IAdaptable) {
          context = (EObject) ((IAdaptable) element).getAdapter(EObject.class);
        }
      }
    }

    constraintPanel.getActionHandler().setContext(context);
  }
 /** Passing the focus request to the viewer's control. */
 @Override
 public void setFocus() {
   constraintPanel.setFocus();
 }