Package org.eclipse.xtext.xdoc.generator

Source Code of org.eclipse.xtext.xdoc.generator.EclipseHelpUriUtil

package org.eclipse.xtext.xdoc.generator;

import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
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.resource.Resource;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.InputOutput;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xdoc.generator.util.EclipseNamingExtensions;
import org.eclipse.xtext.xdoc.xdoc.AbstractSection;
import org.eclipse.xtext.xdoc.xdoc.Chapter;
import org.eclipse.xtext.xdoc.xdoc.ChapterRef;
import org.eclipse.xtext.xdoc.xdoc.Document;
import org.eclipse.xtext.xdoc.xdoc.Identifiable;
import org.eclipse.xtext.xdoc.xdoc.Part;
import org.eclipse.xtext.xdoc.xdoc.PartRef;
import org.eclipse.xtext.xdoc.xdoc.Ref;
import org.eclipse.xtext.xdoc.xdoc.Section;
import org.eclipse.xtext.xdoc.xdoc.Section2;
import org.eclipse.xtext.xdoc.xdoc.Section2Ref;
import org.eclipse.xtext.xdoc.xdoc.SectionRef;

@SuppressWarnings("all")
public class EclipseHelpUriUtil {
  @Inject
  @Extension
  private EclipseNamingExtensions eclipseNamingExtensions;
 
  private Map<AbstractSection, AbstractSection> section2fileSection;
 
  private Document doc;
 
  public void initialize(final Document doc) {
    HashMap<AbstractSection, AbstractSection> _newHashMap = CollectionLiterals.<AbstractSection, AbstractSection>newHashMap();
    this.section2fileSection = _newHashMap;
    this.doc = doc;
    this.populateFileMap(doc);
  }
 
  public String getTargetDocumentName() {
    URI _targetURI = this.getTargetURI(this.doc);
    return _targetURI.lastSegment();
  }
 
  public URI getTargetURI(final Ref it) {
    URI _xblockexpression = null;
    {
      Identifiable _ref = it.getRef();
      final AbstractSection container = EcoreUtil2.<AbstractSection>getContainerOfType(_ref, AbstractSection.class);
      final AbstractSection fileSection = this.section2fileSection.get(container);
      URI _xifexpression = null;
      boolean _equals = Objects.equal(fileSection, null);
      if (_equals) {
        URI _xblockexpression_1 = null;
        {
          Identifiable _ref_1 = it.getRef();
          String _name = _ref_1.getName();
          String _plus = ("error: Cannot resolve reference to " + _name);
          String _plus_1 = (_plus + " from ");
          Identifiable _ref_2 = it.getRef();
          Resource _eResource = _ref_2.eResource();
          URI _uRI = _eResource.getURI();
          String _plus_2 = (_plus_1 + _uRI);
          InputOutput.<String>println(_plus_2);
          _xblockexpression_1 = ((URI) null);
        }
        _xifexpression = _xblockexpression_1;
      } else {
        URI _targetURI = this.targetURI(fileSection);
        Identifiable _ref_1 = it.getRef();
        String _localId = this.eclipseNamingExtensions.getLocalId(_ref_1);
        URI _appendFragment = _targetURI.appendFragment(_localId);
        URI _targetURI_1 = this.getTargetURI(this.doc);
        _xifexpression = _appendFragment.deresolve(_targetURI_1);
      }
      _xblockexpression = _xifexpression;
    }
    return _xblockexpression;
  }
 
  public URI getTargetURI(final AbstractSection it) {
    URI _switchResult = null;
    boolean _matched = false;
    if (!_matched) {
      if (it instanceof PartRef) {
        _matched=true;
        Part _part = ((PartRef)it).getPart();
        _switchResult = this.getTargetURI(_part);
      }
    }
    if (!_matched) {
      if (it instanceof ChapterRef) {
        _matched=true;
        Chapter _chapter = ((ChapterRef)it).getChapter();
        _switchResult = this.getTargetURI(_chapter);
      }
    }
    if (!_matched) {
      if (it instanceof SectionRef) {
        _matched=true;
        Section _section = ((SectionRef)it).getSection();
        _switchResult = this.getTargetURI(_section);
      }
    }
    if (!_matched) {
      if (it instanceof Section2Ref) {
        _matched=true;
        Section2 _section2 = ((Section2Ref)it).getSection2();
        _switchResult = this.getTargetURI(_section2);
      }
    }
    if (!_matched) {
      if (it instanceof Document) {
        _matched=true;
        _switchResult = this.targetURI(((Identifiable) it));
      }
    }
    if (!_matched) {
      URI _xblockexpression = null;
      {
        final AbstractSection container = EcoreUtil2.<AbstractSection>getContainerOfType(it, AbstractSection.class);
        final AbstractSection fileSection = this.section2fileSection.get(container);
        URI _targetURI = this.targetURI(fileSection);
        String _localId = this.eclipseNamingExtensions.getLocalId(it);
        URI _appendFragment = _targetURI.appendFragment(_localId);
        URI _targetURI_1 = this.getTargetURI(this.doc);
        _xblockexpression = _appendFragment.deresolve(_targetURI_1);
      }
      _switchResult = _xblockexpression;
    }
    return _switchResult;
  }
 
  protected void _populateFileMap(final Document it) {
    this.section2fileSection.put(it, it);
    EList<Chapter> _chapters = it.getChapters();
    final Procedure1<Chapter> _function = new Procedure1<Chapter>() {
      public void apply(final Chapter it) {
        EclipseHelpUriUtil.this.populateFileMap(it);
      }
    };
    IterableExtensions.<Chapter>forEach(_chapters, _function);
    EList<Part> _parts = it.getParts();
    final Procedure1<Part> _function_1 = new Procedure1<Part>() {
      public void apply(final Part it) {
        EclipseHelpUriUtil.this.populateFileMap(it);
      }
    };
    IterableExtensions.<Part>forEach(_parts, _function_1);
  }
 
  protected void _populateFileMap(final Chapter it) {
    this.section2fileSection.put(it, it);
    EList<Section> _subSections = it.getSubSections();
    final Procedure1<Section> _function = new Procedure1<Section>() {
      public void apply(final Section section) {
        EclipseHelpUriUtil.this.populateFileMap(section, it);
      }
    };
    IterableExtensions.<Section>forEach(_subSections, _function);
  }
 
  protected void _populateFileMap(final ChapterRef it) {
    Chapter _chapter = it.getChapter();
    this.populateFileMap(_chapter);
  }
 
  protected void _populateFileMap(final Part it) {
    this.section2fileSection.put(it, it);
    EList<Chapter> _chapters = it.getChapters();
    final Procedure1<Chapter> _function = new Procedure1<Chapter>() {
      public void apply(final Chapter chapter) {
        EclipseHelpUriUtil.this.populateFileMap(chapter);
      }
    };
    IterableExtensions.<Chapter>forEach(_chapters, _function);
  }
 
  protected void _populateFileMap(final PartRef it) {
    Part _part = it.getPart();
    this.populateFileMap(_part);
  }
 
  protected void _populateFileMap(final AbstractSection it, final AbstractSection fileSection) {
    this.section2fileSection.put(it, fileSection);
    EList<EObject> _eContents = it.eContents();
    Iterable<AbstractSection> _filter = Iterables.<AbstractSection>filter(_eContents, AbstractSection.class);
    final Procedure1<AbstractSection> _function = new Procedure1<AbstractSection>() {
      public void apply(final AbstractSection section) {
        EclipseHelpUriUtil.this.populateFileMap(section, fileSection);
      }
    };
    IterableExtensions.<AbstractSection>forEach(_filter, _function);
  }
 
  protected void _populateFileMap(final Section2Ref it, final AbstractSection fileSection) {
    Section2 _section2 = it.getSection2();
    this.populateFileMap(_section2, fileSection);
  }
 
  protected void _populateFileMap(final SectionRef it, final AbstractSection fileSection) {
    Section _section = it.getSection();
    this.populateFileMap(_section, fileSection);
  }
 
  private URI targetURI(final Identifiable it) {
    URI _xblockexpression = null;
    {
      Resource _eResource = it.eResource();
      final URI resourceURI = _eResource.getURI();
      String _fullURL = this.eclipseNamingExtensions.getFullURL(it);
      final URI fullURL = URI.createURI(_fullURL);
      int _segmentCount = resourceURI.segmentCount();
      int _minus = (_segmentCount - 2);
      URI _trimSegments = resourceURI.trimSegments(_minus);
      URI _appendSegment = _trimSegments.appendSegment("contents");
      String[] _segments = fullURL.segments();
      _xblockexpression = _appendSegment.appendSegments(_segments);
    }
    return _xblockexpression;
  }
 
  public void populateFileMap(final AbstractSection it) {
    if (it instanceof ChapterRef) {
      _populateFileMap((ChapterRef)it);
      return;
    } else if (it instanceof PartRef) {
      _populateFileMap((PartRef)it);
      return;
    } else if (it instanceof Chapter) {
      _populateFileMap((Chapter)it);
      return;
    } else if (it instanceof Document) {
      _populateFileMap((Document)it);
      return;
    } else if (it instanceof Part) {
      _populateFileMap((Part)it);
      return;
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(it).toString());
    }
  }
 
  public void populateFileMap(final AbstractSection it, final AbstractSection fileSection) {
    if (it instanceof Section2Ref) {
      _populateFileMap((Section2Ref)it, fileSection);
      return;
    } else if (it instanceof SectionRef) {
      _populateFileMap((SectionRef)it, fileSection);
      return;
    } else if (it != null) {
      _populateFileMap(it, fileSection);
      return;
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(it, fileSection).toString());
    }
  }
}
TOP

Related Classes of org.eclipse.xtext.xdoc.generator.EclipseHelpUriUtil

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.