Package org.eclipse.wst.xml.core.internal.validate

Source Code of org.eclipse.wst.xml.core.internal.validate.AbstractPropagatingValidator

/*******************************************************************************
* Copyright (c) 2001, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*     Jens Lukowski/Innoopract - initial renaming/restructuring
*    
*******************************************************************************/
package org.eclipse.wst.xml.core.internal.validate;

import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
import org.eclipse.wst.sse.core.internal.validate.ValidationAdapter;
import org.w3c.dom.Node;


public abstract class AbstractPropagatingValidator extends ValidationComponent {

  /**
   * Constructor for AbstractPropagatingValidator.
   */
  public AbstractPropagatingValidator() {
    super();
  }

  protected abstract ValidationComponent getPropagatee();

  protected abstract ValidationAdapter getValidator();


  public void validate(IndexedRegion node) {
    if (node == null)
      return;
    getValidator().validate(node);

    propagateToChildElements(getPropagatee(), (Node) node);
  }

  private void propagateToChildElements(ValidationComponent validator, Node parent) {
    if (parent == null)
      return;
    Class clazz = validator.getClass();

    Node child = parent.getFirstChild();
    while (child != null) {
      if (child.getNodeType() == Node.ELEMENT_NODE) {
        INodeNotifier notifier = (INodeNotifier) child;
        ValidationAdapter va = (ValidationAdapter) notifier.getExistingAdapter(clazz);
        if (va == null) {
          notifier.addAdapter(validator);
          va = validator;
        }
        // bug 143213 - Can't batch validate open HTML files when
        // as-you-type validation is enabled
        va.setReporter(validator.getReporter());
        va.validate((IndexedRegion) child);
      }
      child = child.getNextSibling();
    }
  }

}
TOP

Related Classes of org.eclipse.wst.xml.core.internal.validate.AbstractPropagatingValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.