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