/*
   * (non-Javadoc)
   *
   * @see
   * org.talend.repository.ui.actions.metadata.AbstractCreateAction#init(org.talend.repository.model.RepositoryNode)
   */
  @Override
  protected void init(RepositoryNode node) {
    ERepositoryObjectType nodeType =
        (ERepositoryObjectType) node.getProperties(EProperties.CONTENT_TYPE);
    IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
    if (factory.isUserReadOnlyOnCurrentProject()
        || !ProjectManager.getInstance().isInCurrentMainProject(node)) {
      setEnabled(false);
    } else {
      if (ENodeType.REPOSITORY_ELEMENT.equals(node.getType())) {
        if (node.getObject().getRepositoryStatus() == ERepositoryStatus.DELETED
            || node.getObject().getRepositoryStatus() == ERepositoryStatus.LOCK_BY_OTHER) {
          setEnabled(false);
          return;
        }
        if ((factory.getStatus(node.getObject()) == ERepositoryStatus.DELETED)
            || (factory.getStatus(node.getObject()) == ERepositoryStatus.LOCK_BY_OTHER)) {
          setEnabled(false);
          return;
        }

        if (ERepositoryObjectType.METADATA_CON_TABLE.equals(nodeType)
            || ERepositoryObjectType.METADATA_CON_COLUMN.equals(nodeType)) {
          RepositoryNode parent = node.getParent();
          if (parent != null
              && HCatalogRepositoryNodeType.HCATALOG.equals(
                  parent.getProperties(EProperties.CONTENT_TYPE))) {
            setText(EDIT_LABEL);
            collectSiblingNames(node);
            setEnabled(true);
            return;
          }
        } else if (HCatalogRepositoryNodeType.HCATALOG.equals(nodeType)) {
          setText(CREATE_LABEL);
          collectChildNames(node);
          setEnabled(true);
          return;
        }
      }
    }
  }
 /*
  * (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;
 }