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}