public INodeBinder getNodeBinder(ISyntaxNode node) {
   INodeBinder binder =
       binderFactory == null ? null : binderFactory.getNodeBinder(node, configurationContext);
   if (binder != null) {
     return binder;
   }
   return parent == null ? null : parent.getNodeBinder(node);
 }
  public synchronized void validate(IConfigurableResourceContext cxt)
      throws OpenConfigurationException {
    if (grammarFactory != null) {
      grammarFactory.validate(cxt);
    } else if (parent == null) {
      throw new OpenConfigurationException("Grammar class is not set", getUri(), null);
    }

    if (binderFactory != null) {
      binderFactory.validate(cxt);
    } else if (parent == null) {
      throw new OpenConfigurationException("Bindings are not set", getUri(), null);
    }

    // Methods and casts are optional
    // else if (parent == null)
    // throw new OpenConfigurationException("Methods are not set", getUri(),
    // null);

    if (methodFactory != null) {
      methodFactory.validate(cxt);
    }

    if (typeCastFactory != null) {
      typeCastFactory.validate(cxt);
    }

    if (typeFactory != null) {
      typeFactory.validate(cxt);
    }

    if (openFactories != null) {
      for (Iterator<IOpenFactoryConfiguration> iter = openFactories.values().iterator();
          iter.hasNext(); ) {
        IOpenFactoryConfiguration factory = iter.next();
        factory.validate(cxt);
      }
    }
  }