/**
   * Returns the new name to be given to the target resource.
   *
   * @param resource the resource to query status on
   * @return the new name
   */
  protected String queryNewResourceName(final File resource) {
    final IWorkspace workspace = ResourcesPlugin.getWorkspace();
    final IPath prefix = new Path(resource.getAbsolutePath()).removeLastSegments(1);

    IInputValidator validator =
        new IInputValidator() {

          /*
           * (non-Javadoc)
           *
           * @see
           * org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String
           * )
           */
          public String isValid(String string) {
            if (new Path(resource.getName())
                .removeFileExtension()
                .toFile()
                .getName()
                .equals(string)) {
              return Messages.getString("RenameResourceAction.nameExists"); // $NON-NLS-1$
            }

            IPath newPath = new Path(string);

            IStatus status =
                workspace.validateName(
                    newPath.toFile().getName(),
                    resource.isFile() ? IResource.FILE : IResource.FOLDER);

            if (!status.isOK()) {
              return status.getMessage();
            }

            IPath fullPath = prefix.append(string);

            if (fullPath.toFile().exists()) {
              return Messages.getString("RenameResourceAction.nameExists"); // $NON-NLS-1$
            }
            return null;
          }
        };

    InputDialog dialog =
        new InputDialog(
            getShell(),
            Messages.getString("RenameResourceAction.inputDialogTitle"), // $NON-NLS-1$
            Messages.getString("RenameResourceAction.inputDialogMessage"), // $NON-NLS-1$
            new Path(resource.getName()).toFile().getName(),
            validator);

    dialog.setBlockOnOpen(true);
    int result = dialog.open();
    if (result == Window.OK) {
      IPath newPath = new Path(dialog.getValue());

      return newPath.toFile().getName();
    }
    return null;
  }
  /** The behaviour of the action. Checks if the name entered by the user is valid. */
  public void run() {
    ISelection selection = viewer.getSelection();
    if (selection.isEmpty()) {
      this.setEnabled(false);
    }
    TreeObject object = (TreeObject) ((IStructuredSelection) selection).getFirstElement();
    if (object instanceof DocumentTreeObject) {

      String oldValue = object.getValue().toString();

      IInputValidator validator = new TextValidator(oldValue);
      InputDialog dialog =
          new InputDialog(
              parent.getShell(),
              Properties.getProperty("rename"),
              Properties.getProperty("new_name"),
              oldValue,
              validator);
      dialog.setBlockOnOpen(true); // waits for user enter a name

      int res = dialog.open(); // opens the rename dialog

      if (res == InputDialog.OK) {
        String newValue = dialog.getValue();

        String newExtension = GUIUtil.getFileExtension(newValue);
        String oldExtension = GUIUtil.getFileExtension(oldValue);

        if (!newExtension.equalsIgnoreCase(oldExtension)) {
          newValue += oldExtension;
        }

        if (!newValue.equalsIgnoreCase(oldValue)) {
          if (!ProjectManagerController.getInstance().renameDocument(oldValue, newValue)) {
            MessageDialog.openError(
                parent.getShell(),
                Properties.getProperty("error_while_renaming"),
                Properties.getProperty("can_not_rename"));
          }
          try {
            GUIManager.getInstance().refreshViews();
          } catch (TargetException e) {
            MessageDialog.openError(
                this.parent.getShell(),
                Properties.getProperty("error_while_reloading_project"),
                e.getMessage());
            e.printStackTrace();
          }
        }
      }
    }
  }
  /**
   * Return the new name to be given to the target resource.
   *
   * @return java.lang.String
   * @param context IVisualPart
   */
  protected String queryNewResourceName(final IResource resource) {
    final IWorkspace workspace = ModelerCore.getWorkspace();
    final IPath prefix = resource.getFullPath().removeLastSegments(1);
    IInputValidator validator =
        new IInputValidator() {
          /**
           * {@inheritDoc}
           *
           * @see org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String)
           */
          @Override
          public String isValid(String string) {
            if (resource.getName().equals(string)) {
              return UiConstants.Util.getString(
                  "RenameResourceAction.nameMustBeDifferent"); //$NON-NLS-1$
            }
            IStatus status = workspace.validateName(string, resource.getType());
            if (!status.isOK()) {
              return status.getMessage();
            }
            if (workspace.getRoot().exists(prefix.append(string))) {
              return UiConstants.Util.getString("RenameResourceAction.nameExists"); // $NON-NLS-1$
            }
            return null;
          }
        };

    InputDialog dialog =
        new InputDialog(
            getShell(),
            UiConstants.Util.getString("RenameResourceAction.inputDialogTitle"), // $NON-NLS-1$
            UiConstants.Util.getString("RenameResourceAction.inputDialogMessage"), // $NON-NLS-1$
            resource.getName(),
            validator);
    dialog.setBlockOnOpen(true);
    dialog.open();
    return dialog.getValue();
  }