001package org.nasdanika.html.flow; 002 003import java.util.List; 004import java.util.Optional; 005import java.util.function.BiConsumer; 006import java.util.function.Consumer; 007import java.util.stream.Collectors; 008 009import org.eclipse.emf.common.util.EList; 010import org.eclipse.emf.ecore.EObject; 011import org.nasdanika.common.Context; 012import org.nasdanika.common.ProgressMonitor; 013import org.nasdanika.flow.Activity; 014import org.nasdanika.flow.FlowPackage; 015import org.nasdanika.flow.ServiceProvider; 016import org.nasdanika.html.model.app.Action; 017import org.nasdanika.html.model.app.AppFactory; 018import org.nasdanika.ncore.util.NamedElementComparator; 019 020public class ServiceProviderActionBuilder<T extends ServiceProvider<?>> extends PackageElementActionBuilder<T> { 021 022 public ServiceProviderActionBuilder(T value, Context context) { 023 super(value, context); 024 } 025 026 @Override 027 protected Action buildAction( 028 Action action, 029 BiConsumer<EObject, Action> registry, 030 Consumer<org.nasdanika.common.Consumer<org.nasdanika.html.emf.EObjectActionResolver.Context>> resolveConsumer, 031 ProgressMonitor progressMonitor) throws Exception { 032 033 action = super.buildAction(action, registry, resolveConsumer, progressMonitor); 034 List<Activity<?>> services = getTarget().getServices().values().stream().sorted(NamedElementComparator.INSTANCE).collect(Collectors.toList()); 035 if (!services.isEmpty()) { 036 Action group = AppFactory.eINSTANCE.createAction(); 037 group.setText("Services"); 038// group.setDescription("Shared activities or journeys which can be used on their own or be referenced from other journeys."); TODO - description modal. 039 group.setTooltip("Shared activities or journeys which can be used on their own or be referenced from other journeys."); 040 group.setUuid(action.getUuid() + "-services"); 041 EList<Action> anonymous = action.getAnonymous(); 042 for (Activity<?> service: getTarget().getServices().values().stream().sorted(NamedElementComparator.INSTANCE).collect(Collectors.toList())) { 043 anonymous.add(createChildAction(service, registry, resolveConsumer, progressMonitor)); 044 } 045 046 action.getSections().add(group); 047 } 048 049 return action; 050 } 051 052 @Override 053 protected void resolve( 054 Action action, 055 org.nasdanika.html.emf.EObjectActionResolver.Context context, 056 ProgressMonitor progressMonitor) throws Exception { 057 super.resolve(action, context, progressMonitor); 058 059 List<Activity<?>> services = getTarget().getServices().values().stream().sorted(NamedElementComparator.INSTANCE).collect(Collectors.toList()); 060 if (!services.isEmpty()) { 061 String servicesGroupUUID = action.getUuid() + "-services"; 062 Optional<Action> servicesActionOptional = action.getSections().stream() 063 .filter(a -> servicesGroupUUID.equals(a.getUuid())) 064 .findFirst(); 065 066 Action servicesAction = servicesActionOptional.get(); 067 servicesAction.getContent().add(renderList(services, false, null, action, FlowPackage.Literals.SERVICE_PROVIDER__SERVICES, context, progressMonitor)); 068 } 069 } 070 071}