@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.talend.repository.ui.actions.ITreeContextualAction#init(org.eclipse.jface.viewers.TreeViewer,
   * org.eclipse.jface.viewers.IStructuredSelection)
   */
  @Override
  public void init(TreeViewer viewer, IStructuredSelection selection) {
    boolean canWork = !selection.isEmpty() && selection.size() == 1;
    IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
    if (factory.isUserReadOnlyOnCurrentProject()) {
      canWork = false;
    }
    if (canWork) {
      Object o = selection.getFirstElement();
      RepositoryNode node = (RepositoryNode) o;
      Object property = node.getProperties(EProperties.CONTENT_TYPE);
      switch (node.getType()) {
        case REPOSITORY_ELEMENT:
        case STABLE_SYSTEM_FOLDER:
          canWork = false;
          break;
        case SYSTEM_FOLDER:
          if (ERepositoryObjectType.GENERATED.equals(property)
              || ERepositoryObjectType.JOBS.equals(property)
              || ERepositoryObjectType.JOBLETS.equals(property)
              || ERepositoryObjectType.SQLPATTERNS.equals(property)
              || ERepositoryObjectType.REFERENCED_PROJECTS.equals(property)
              || ERepositoryObjectType.SVN_ROOT.equals(property)) {
            canWork = false;
          } else if (property != null
              && GlobalServiceRegister.getDefault()
                  .isServiceRegistered(ICamelDesignerCoreService.class)) {
            ICamelDesignerCoreService camelService =
                (ICamelDesignerCoreService)
                    GlobalServiceRegister.getDefault().getService(ICamelDesignerCoreService.class);
            if (property.equals(camelService.getRouteDocsType())) {
              canWork = false;
            }
          }
          break;
        case SIMPLE_FOLDER:
          if (ERepositoryObjectType.JOB_DOC.equals(property)
              || ERepositoryObjectType.JOBLET_DOC.equals(property)
              || (ERepositoryObjectType.SQLPATTERNS.equals(property)
                  && !isUnderUserDefined(node))) {
            canWork = false;
          } else if (property != null
              && GlobalServiceRegister.getDefault()
                  .isServiceRegistered(ICamelDesignerCoreService.class)) {
            ICamelDesignerCoreService camelService =
                (ICamelDesignerCoreService)
                    GlobalServiceRegister.getDefault().getService(ICamelDesignerCoreService.class);
            if (property.equals(camelService.getRouteDocType())) {
              canWork = false;
            }
          }
          if (node.getObject().isDeleted()) {
            canWork = false;
          }
          break;
        default:
          // Nothing to do
      }

      if (canWork && !ProjectManager.getInstance().isInCurrentMainProject(node)) {
        canWork = false;
      }
    }
    setEnabled(canWork);
  }