001package org.nasdanika.html.ecore; 002 003import java.util.Collection; 004import java.util.function.BiFunction; 005import java.util.function.Predicate; 006import java.util.stream.Collectors; 007 008import org.eclipse.emf.common.util.EList; 009import org.eclipse.emf.ecore.EClass; 010import org.eclipse.emf.ecore.EEnum; 011import org.eclipse.emf.ecore.EEnumLiteral; 012import org.eclipse.emf.ecore.EModelElement; 013import org.eclipse.emf.ecore.ENamedElement; 014import org.eclipse.emf.ecore.EPackage; 015import org.nasdanika.common.Context; 016import org.nasdanika.common.ProgressMonitor; 017import org.nasdanika.html.Tag; 018import org.nasdanika.html.TagName; 019import org.nasdanika.html.model.app.Action; 020import org.nasdanika.html.model.app.AppFactory; 021import org.nasdanika.html.model.app.SectionStyle; 022 023public class EEnumActionSupplier extends EClassifierActionSupplier<EEnum> { 024 025 public EEnumActionSupplier( 026 EEnum value, 027 Context context, 028 java.util.function.Function<EPackage,String> ePackagePathComputer, 029 java.util.function.Function<String, String> javadocResolver, 030 java.util.function.Function<String, Object> ePackageResolver, 031 Predicate<EModelElement> elementPredicate, 032 BiFunction<ENamedElement, String, String> labelProvider) { 033 super(value, context, ePackagePathComputer, javadocResolver, ePackageResolver, elementPredicate, labelProvider); 034 } 035 036 @Override 037 public org.nasdanika.html.model.app.Action execute(EClass contextEClass, ProgressMonitor progressMonitor) { 038 Action action = super.execute(contextEClass, progressMonitor); 039 action.setSectionStyle(SectionStyle.HEADER); 040 041 EList<Action> sections = action.getSections(); 042 sections.add(createLiteralsAction(contextEClass, progressMonitor)); 043 Action usesAction = createUsesAction(contextEClass, progressMonitor); 044 if (usesAction != null) { 045 sections.add(usesAction); 046 } 047 048 return action; 049 } 050 051 protected Action createLiteralsAction(EClass contextEClass, ProgressMonitor progressMonitor) { 052 Action literalsAction = AppFactory.eINSTANCE.createAction(); 053 literalsAction.setText("Literals"); 054 literalsAction.setSectionStyle(SectionStyle.TABLE); 055 EList<Action> literals = literalsAction.getSections(); 056 for (EEnumLiteral literal: retainDocumentable(eObject.getELiterals())) { 057 literals.add(adaptChild(literal).execute(contextEClass, progressMonitor)); 058 } 059 return literalsAction; 060 } 061 062 protected Action createUsesAction(EClass contextEClass, ProgressMonitor progressMonitor) { 063 Collection<EClass> uses = getUses().stream().sorted((a,b) -> a.getName().compareTo(b.getName())).collect(Collectors.toList()); 064 if (uses.isEmpty()) { 065 return null; 066 } 067 Action usesAction = AppFactory.eINSTANCE.createAction(); 068 usesAction.setText("Uses"); 069 070 // Uses 071 Tag list = TagName.ul.create(); 072 for (EClass use: uses) { 073 list.content(TagName.li.create(link(use, contextEClass))); 074 } 075 addContent(usesAction, list.toString()); 076 077 return usesAction; 078 } 079 080}