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.ecore.EClass;
009import org.eclipse.emf.ecore.EDataType;
010import org.eclipse.emf.ecore.EModelElement;
011import org.eclipse.emf.ecore.ENamedElement;
012import org.eclipse.emf.ecore.EPackage;
013import org.nasdanika.common.Context;
014import org.nasdanika.common.ProgressMonitor;
015import org.nasdanika.html.Fragment;
016import org.nasdanika.html.HTMLFactory;
017import org.nasdanika.html.Tag;
018import org.nasdanika.html.TagName;
019import org.nasdanika.html.model.app.Action;
020
021public class EDataTypeActionSupplier extends EClassifierActionSupplier<EDataType> {
022
023        public EDataTypeActionSupplier(
024                        EDataType value, 
025                        Context context, 
026                        java.util.function.Function<EPackage,String> ePackagePathComputer,
027                        java.util.function.Function<String, String> javadocResolver,
028                        java.util.function.Function<String, Object> ePackageResolver,
029                        Predicate<EModelElement> elementPredicate,
030                        BiFunction<ENamedElement, String, String> labelProvider) {
031                super(value, context, ePackagePathComputer, javadocResolver, ePackageResolver, elementPredicate, labelProvider);
032        }
033        
034        @Override
035        public Action execute(EClass contextEClass, ProgressMonitor progressMonitor) {
036                Action action = super.execute(contextEClass, progressMonitor);
037                
038                // Uses
039                Collection<EClass> uses = getUses().stream().sorted((a,b) -> a.getName().compareTo(b.getName())).collect(Collectors.toList());
040                if (!uses.isEmpty()) {
041                        HTMLFactory htmlFactory = context.get(HTMLFactory.class);
042                        Fragment gstf = htmlFactory.fragment(TagName.h3.create("Uses"));
043
044                        Tag list = TagName.ul.create();
045                        gstf.content(list);
046                        
047                        for (EClass use: uses) {
048                                list.content(TagName.li.create(link(use, eObject)));
049                        }
050                        addContent(action, gstf.toString());
051                }
052                
053                return action;
054        }
055        
056}