@Override
  protected void doRun() {
    RepositoryNode routineNode = getCurrentRepositoryNode();

    if (isToolbar()) {
      if (routineNode != null && routineNode.getContentType() != ERepositoryObjectType.PIG_UDF) {
        routineNode = null;
      }
      if (routineNode == null) {
        routineNode = getRepositoryNodeForDefault(ERepositoryObjectType.PIG_UDF);
      }
    }
    RepositoryNode node = null;
    IPath path = null;
    if (!isToolbar()) {
      ISelection selection = getSelection();
      Object obj = ((IStructuredSelection) selection).getFirstElement();
      node = (RepositoryNode) obj;
      path = RepositoryNodeUtilities.getPath(node);
    }

    NewPigudfWizard routineWizard = new NewPigudfWizard(path);
    WizardDialog dlg = new WizardDialog(Display.getCurrent().getActiveShell(), routineWizard);

    if (dlg.open() == Window.OK) {

      try {
        openRoutineEditor(routineWizard.getPigudf(), false);
      } catch (PartInitException e) {
        MessageBoxExceptionHandler.process(e);
      } catch (SystemException e) {
        MessageBoxExceptionHandler.process(e);
      }
    }
  }
 @Override
 public boolean select(Viewer viewer, Object parentElement, Object element) {
   if (element instanceof RepositoryNode) {
     RepositoryNode node = (RepositoryNode) element;
     if (ERepositoryObjectType.REFERENCED_PROJECTS.equals(node.getContentType())) {
       return true;
     }
     IRepositoryNode typeNode = node.getRoot().getRootRepositoryNode(repositoryType);
     if (typeNode == node) {
       return true;
     }
     if (repositoryType.equals(node.getContentType())) {
       return true;
     }
     return false;
   }
   return true; // if others, no filter
 }
 /*
  * (non-Javadoc)
  *
  * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object,
  * java.lang.Object)
  */
 @Override
 public boolean select(Viewer viewer, Object parentElement, Object element) {
   if (element instanceof TreeItem) {
     Object data = ((TreeItem) element).getData();
     if (parentElement instanceof TreeItem) {
       Object parentData = ((TreeItem) parentElement).getData();
       return select(viewer, parentData, data);
     }
     return select(viewer, parentElement, data);
   } else if (element instanceof RepositoryNode) {
     RepositoryNode node = ((RepositoryNode) element);
     // only for folders , not for element nodes.
     if (!ENodeType.REPOSITORY_ELEMENT.equals(node.getType())) {
       // add all or only the content types
       if (contentTypes == null || contentTypes.contains(node.getContentType())) {
         return true;
       }
     }
   }
   return false;
 }