package org.asciidoc.intellij.structureView;
import com.intellij.ide.structureView.StructureViewTreeElement;
import com.intellij.ide.structureView.impl.common.PsiTreeElementBase;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.asciidoc.intellij.psi.AsciiDocBlock;
import org.asciidoc.intellij.psi.AsciiDocSection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author yole
*/
public class AsciiDocStructureViewElement extends PsiTreeElementBase<PsiElement> {
public AsciiDocStructureViewElement(PsiElement psiElement) {
super(psiElement);
}
@NotNull
@Override
public Collection<StructureViewTreeElement> getChildrenBase() {
List<StructureViewTreeElement> result = new ArrayList<StructureViewTreeElement>();
for (PsiElement childElement : getElement().getChildren()) {
if (!getPresentableElementText(childElement).isEmpty()) {
result.add(new AsciiDocStructureViewElement(childElement));
}
}
return result;
}
@Nullable
@Override
public String getPresentableText() {
return getPresentableElementText(getElement());
}
private static String getPresentableElementText(PsiElement element) {
if (element instanceof AsciiDocSection) {
return ((AsciiDocSection)element).getTitle();
}
if (element instanceof PsiFile) {
return ((PsiFile)element).getName();
}
if (element instanceof AsciiDocBlock) {
AsciiDocBlock block = (AsciiDocBlock)element;
String title = block.getTitle();
if (title != null) {
String style = block.getStyle();
if (style != null) {
return "[" + style + "] " + title;
}
return title;
}
}
return "";
}
}