package rtt.annotation.editor.ui.viewer.provider; import java.util.ArrayList; import java.util.List; import rtt.annotation.editor.model.ClassElement; import rtt.annotation.editor.model.ClassElement.ClassType; import rtt.annotation.editor.model.ClassModel; import rtt.annotation.editor.model.ClassModel.PackageElement; public final class NodeViewerItemProvider extends ViewerItemProvider { private final class ClassElementItem extends ModelElementViewerItem<ClassElement> { private ClassElementItem(ViewerItem parent, ClassElement element) { super(parent, element); } @Override protected ItemColor getItemColor(ClassElement element) { if (element.hasAnnotation()) { return ItemColor.ANNOTATED; } if (element.hasAnnotatedValueMembers()) { return ItemColor.ANNOTATED_MEMBER; } if (element.hasExtendedAnnotation()) { return ItemColor.ANNOTATED_EXTEND; } return super.getItemColor(element); } @Override protected ItemFont getItemFont(ClassElement element) { if (element.hasAnnotation()) { return ItemFont.BOLD_FONT; } if (element.getType() == ClassType.ABSTRACT || element.getType() == ClassType.INTERFACE) { return ItemFont.ITALIC_FONT; } return super.getItemFont(element); } } List<ViewerItem> packages = new ArrayList<>(0); @Override List<ViewerItem> setInput(Object input, ViewerItem parent) { ClassModel model = (ClassModel) input; packages.clear(); for (PackageElement packageElement : model.getPackages()) { ViewerItem packageTree = new ModelElementViewerItem<PackageElement>(parent, packageElement); createClassItems(model.getClasses(packageElement.getName()), packageTree); packages.add(packageTree); } return packages; } public void createClassItems(List<ClassElement> classes, ViewerItem parent) { for (ClassElement classElement : classes) { ViewerItem item = new ClassElementItem(parent, classElement); parent.add(item); } } @Override boolean hasElements(Object parentElement) { return parentElement instanceof ClassModel; } }