/*
* 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();
}
}