Package org.eclipse.xtext.xdoc.validation

Source Code of org.eclipse.xtext.xdoc.validation.XdocJavaValidator

package org.eclipse.xtext.xdoc.validation;

import java.util.Collections;
import java.util.List;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.xtext.validation.Check;
import org.eclipse.xtext.validation.ValidationMessageAcceptor;
import org.eclipse.xtext.xdoc.generator.util.LatexUtils;
import org.eclipse.xtext.xdoc.xdoc.AbstractSection;
import org.eclipse.xtext.xdoc.xdoc.CodeBlock;
import org.eclipse.xtext.xdoc.xdoc.CodeRef;
import org.eclipse.xtext.xdoc.xdoc.ImageRef;
import org.eclipse.xtext.xdoc.xdoc.Ref;
import org.eclipse.xtext.xdoc.xdoc.Table;
import org.eclipse.xtext.xdoc.xdoc.TableRow;
import org.eclipse.xtext.xdoc.xdoc.XdocPackage;

public class XdocJavaValidator extends AbstractXdocJavaValidator {

  @Check
  public void checkConsistentNumberOfColumns(Table t) {
    int columns = -1;
    EList<TableRow> rows = t.getRows();
    for (TableRow tableRow : rows) {
      if (columns==-1)
        columns = tableRow.getData().size();
      if (tableRow.getData().size()!=columns) {
        error("Each row must have the same number of entries (expected "+columns+" but was "+tableRow.getData().size()+")",
            tableRow,
            XdocPackage.Literals.TABLE_ROW__DATA,
            ValidationMessageAcceptor.INSIGNIFICANT_INDEX);
      }
    }
  }

  @Check
  public void checkAbstractSectionHasTitle(AbstractSection section) {
    if(section.getTitle() == null)
      warning("This element should have a title.", null,0);
  }

  @Check
  public void checkNoCodeInTitle(CodeBlock code) {
    if(!LatexUtils.inline(code)) {
      EObject tom = code.eContainer();
      while(!(tom.eContainer() instanceof AbstractSection)){
        tom = tom.eContainer();
      }
      if(tom.eContainer() instanceof AbstractSection) {
        AbstractSection section = (AbstractSection) tom.eContainer();
        if(section.getTitle() == tom) {
          error("Headings can not contain code blocks", null);
        }
      }
    }
  }

  @Check
  public void checkImagePath(ImageRef image) {
    URI inPath = URI.createURI(image.eResource().getURI().trimSegments(1).toString() + "/" + image.getPath());
    if(!image.eResource().getResourceSet().getURIConverter().exists(inPath, null))
      error("Cannot find image", XdocPackage.Literals.IMAGE_REF__PATH);
  }

  @Check
  public void checkNestedLinkElements(EObject linkElement) {
    if(isLinkElement(linkElement)) {
      EObject currentElement = linkElement.eContainer();
      while(currentElement != null) {
        if(isLinkElement(currentElement)) {
          error("Cannot nest link element "
              + linkElement.eClass().getName()
              + " in "
              + currentElement.eClass().getName(),
              null);
        }
        currentElement = currentElement.eContainer();
      }
    }
  }
 
  private boolean isLinkElement(EObject element) {
    return element instanceof Ref || element instanceof CodeRef;
  }
 
  @Override
  protected List<EPackage> getEPackages() {
    return Collections.singletonList((EPackage)XdocPackage.eINSTANCE);
  }
}
TOP

Related Classes of org.eclipse.xtext.xdoc.validation.XdocJavaValidator

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.