/* * generated by Xtext */ package org.eclipse.xtext.xdoc.ui.labeling; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider; import org.eclipse.xtext.util.PolymorphicDispatcher; import org.eclipse.xtext.xdoc.xdoc.AbstractSection; import org.eclipse.xtext.xdoc.xdoc.Document; import org.eclipse.xtext.xdoc.xdoc.TextOrMarkup; import org.eclipse.xtext.xdoc.xdoc.TextPart; import com.google.inject.Inject; /** * Provides labels for a EObjects. * * see * http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider */ public class XdocLabelProvider extends DefaultEObjectLabelProvider { private PolymorphicDispatcher<String> version = PolymorphicDispatcher .createForSingleTarget("version", this); @Inject public XdocLabelProvider(AdapterFactoryLabelProvider delegate) { super(delegate); } String text(AbstractSection ele) { return toString(version.invoke(ele), ele.getTitle()); } protected String version(Document s) { return (s.eContainer().eContents().indexOf(s) + 1) + ""; } protected String version(AbstractSection section) { if (section.eContainer() instanceof AbstractSection || section.eContainer() instanceof Document) { List<?> siblings = (List<?>) section.eContainer().eGet(section.eContainingFeature()); int idx = siblings.indexOf(section) + 1; String superSectionVersion = version.invoke(section.eContainer()); return superSectionVersion + "." + idx; } else { return String.valueOf(1); } } protected String toString(String number, TextOrMarkup title) { StringBuilder sb = new StringBuilder(number).append(" - "); for (EObject text : title.getContents()) { if (text instanceof TextPart) sb.append(((TextPart) text).getText()); } return sb.toString(); } }