001package org.nasdanika.html.flow;
002
003import java.util.List;
004import java.util.function.BiConsumer;
005import java.util.function.Consumer;
006import java.util.stream.Collectors;
007
008import org.eclipse.emf.common.util.EList;
009import org.eclipse.emf.ecore.EObject;
010import org.eclipse.emf.ecore.ETypedElement;
011import org.nasdanika.common.Context;
012import org.nasdanika.common.ProgressMonitor;
013import org.nasdanika.flow.FlowPackage;
014import org.nasdanika.flow.Resource;
015import org.nasdanika.html.model.app.Action;
016import org.nasdanika.ncore.util.NamedElementComparator;
017
018public class ResourceActionBuilder extends ServiceProviderActionBuilder<Resource> {
019        
020        public ResourceActionBuilder(Resource value, Context context) {
021                super(value, context);
022        }
023        
024        @Override
025        protected Action buildAction(
026                        Action action,
027                        BiConsumer<EObject, Action> registry,
028                        Consumer<org.nasdanika.common.Consumer<org.nasdanika.html.emf.EObjectActionResolver.Context>> resolveConsumer,
029                        ProgressMonitor progressMonitor) throws Exception {
030                
031                action = super.buildAction(action, registry, resolveConsumer, progressMonitor);
032                EList<EObject> children = action.getChildren(); 
033                for (Resource element: getTarget().getChildren().values().stream().sorted(NamedElementComparator.INSTANCE).collect(Collectors.toList())) {
034                        children.add(createChildAction(element, registry, resolveConsumer, progressMonitor));
035                }
036                
037                return action;
038        }       
039        
040        @Override
041        protected List<ETypedElement> getProperties() {
042                List<ETypedElement> properties = super.getProperties();
043                properties.add(FlowPackage.Literals.RESOURCE__ARTIFACTS);
044                properties.add(FlowPackage.Literals.RESOURCE__USED_BY);
045                properties.add(FlowPackage.Literals.RESOURCE__USED_IN);
046                return properties;
047        }
048
049}