/**
   * Selects the attachment.
   *
   * @param parent the parent shell.
   * @param currentAttachment the original attachment.
   * @param basicNode the node.
   * @return the selected attachment.
   * @see
   *     net.dependableos.dcase.diagram.ui.AttributeDialog.IAttachmentSelector#selectAttachment(java.lang.String)
   */
  public String selectAttachment(Shell parent, String currentAttachment, BasicNode basicNode) {

    SelectFromWebDialog dialog = new SelectFromWebDialog(parent);
    dialog.setUrl(basicNode.getAttachment());
    // displays the dialog.
    if (dialog.open() == Dialog.OK) {

      return dialog.getUrl();
    }
    return null;
  }
  /**
   * Shows a dialog to select the attachment from web.
   *
   * @param event An event
   * @return the result of the execution.
   * @throws ExecutionException if an exception occurred during execution.
   * @see
   *     org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
   */
  public Object execute(ExecutionEvent event) throws ExecutionException {

    // gets the GraphicalEditPart of selected node.
    GraphicalEditPart selectedElement = getSelectedElement(event);

    if (selectedElement != null) {
      // gets the BasicNode object from the GraphicalEditPart.
      BasicNode basicNode = getBasicNode(selectedElement);
      if (basicNode != null) {

        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);

        SelectFromWebDialog dialog = new SelectFromWebDialog(window.getShell());
        dialog.setUrl(basicNode.getAttachment());
        // displays the dialog.
        if (dialog.open() == Dialog.OK) {

          String selectedUrl = dialog.getUrl();

          // create the attribute map.
          Map<AttributeType, Object> attributeMap = new HashMap<AttributeType, Object>();
          // sets the attachment to attribute map.
          attributeMap.put(AttributeType.ATTACHMENT, selectedUrl);

          // creates the command to change the attribute.
          TransactionalEditingDomain currentDomain =
              DcaseEditorUtil.getCurrentArgumentEditPart().getEditingDomain();
          ICommand changeCommand =
              new ChangeBasicNodePropertyTransactionCommand(
                  currentDomain, Menus.SelectAttachmentHandler_0, null, basicNode, attributeMap);

          // executes the command to change the attribute.
          selectedElement
              .getDiagramEditDomain()
              .getDiagramCommandStack()
              .execute(new ICommandProxy(changeCommand));
        }
      }
    }
    return null;
  }