001package org.nasdanika.html.ecore; 002 003import java.util.Collection; 004import java.util.Objects; 005import java.util.function.BiFunction; 006import java.util.function.Function; 007import java.util.function.Predicate; 008 009import org.eclipse.emf.ecore.EClass; 010import org.eclipse.emf.ecore.EClassifier; 011import org.eclipse.emf.ecore.EModelElement; 012import org.eclipse.emf.ecore.ENamedElement; 013import org.eclipse.emf.ecore.EPackage; 014import org.nasdanika.common.Context; 015import org.nasdanika.common.ProgressMonitor; 016import org.nasdanika.exec.content.ContentFactory; 017import org.nasdanika.exec.content.Text; 018import org.nasdanika.html.model.app.Action; 019 020public class EClassifierActionSupplier<T extends EClassifier> extends ENamedElementActionSupplier<T> { 021 022 private Function<String, String> javadocResolver; 023 protected Class<?> instanceClass; 024 protected Function<String, Object> ePackageResolver; 025 026 public EClassifierActionSupplier( 027 T value, 028 Context context, 029 java.util.function.Function<EPackage,String> ePackagePathComputer, 030 java.util.function.Function<String, String> javadocResolver, 031 java.util.function.Function<String, Object> ePackageResolver, 032 Predicate<EModelElement> elementPredicate, 033 BiFunction<ENamedElement, String, String> labelProvider) { 034 super(value, context, ePackagePathComputer, elementPredicate, labelProvider); 035 this.javadocResolver = javadocResolver; 036 this.ePackageResolver = ePackageResolver; 037 instanceClass = getInstanceClass(value, ePackageResolver); 038 } 039 040 @Override 041 protected void header(Action action, ProgressMonitor progressMonitor) { 042 if (instanceClass != null) { 043 String instanceClassName = instanceClass.getName(); 044 if (javadocResolver != null) { 045 instanceClassName = javadocResolver.apply(instanceClassName); 046 } 047 048 Text text = ContentFactory.eINSTANCE.createText(); 049 text.setContent("<div class='text-monospace'>" + instanceClassName + "</div>"); 050 action.getContent().add(text); 051 } 052 } 053 054 @Override 055 public Action execute(EClass contextEClass, ProgressMonitor progressMonitor) { 056 Action action = super.execute(contextEClass, progressMonitor); 057 action.setLocation(eObject.getName() + ".html"); 058 action.setId(eObject.eClass().getName() + "-" + encodeEPackage(eObject.getEPackage()) + "-" + eObject.getName()); 059 action.getUris().add(eObject.getEPackage().getNsURI() + "#" + eObject.getName()); 060 return action; 061 } 062 063 @Override 064 protected String getDefaultLabel(ProgressMonitor progressMonitor) { 065 return eObject.getName() + typeParameters(eObject); 066 } 067 068 /** 069 * Finds all type uses in the resourceset. 070 * @return 071 */ 072 protected Collection<EClass> getUses() { 073 return getUses(eObject); 074 } 075 076}