001package org.nasdanika.html.model.app.graph.emf;
002
003import java.util.concurrent.CompletionStage;
004import java.util.function.BiConsumer;
005import java.util.function.Consumer;
006
007import org.nasdanika.common.ProgressMonitor;
008import org.nasdanika.graph.Element;
009import org.nasdanika.graph.processor.ConnectionProcessorConfig;
010import org.nasdanika.graph.processor.ProcessorConfig;
011import org.nasdanika.graph.processor.ProcessorInfo;
012import org.nasdanika.graph.processor.ReflectiveProcessorFactoryProvider;
013import org.nasdanika.html.model.app.graph.WidgetFactory;
014
015public class EObjectReflectiveProcessorFactoryProvider extends ReflectiveProcessorFactoryProvider<Object, WidgetFactory, WidgetFactory> {
016
017        public EObjectReflectiveProcessorFactoryProvider(Object... targets) {
018                super(targets);
019        }
020        
021        @SuppressWarnings("unchecked")
022        @Override
023        protected Object createProcessor(
024                        ProcessorConfig config,
025                        boolean parallel,
026                        BiConsumer<Element, BiConsumer<ProcessorInfo<Object>,ProgressMonitor>> infoProvider,
027                        Consumer<CompletionStage<?>> endpointWiringStageConsumer, 
028                        ProgressMonitor progressMonitor) {
029                
030                Object processor = super.createProcessor(config, parallel, infoProvider, endpointWiringStageConsumer, progressMonitor);
031                if (processor == null && config instanceof ConnectionProcessorConfig) {
032                        return new ConnectionProcessor((ConnectionProcessorConfig<WidgetFactory, WidgetFactory>) config, isCompactPath());
033                }
034                        
035                return processor;
036        }
037        
038        /**
039         * Override to return true for compact reference and operation paths
040         * @return
041         */
042        protected boolean isCompactPath() {
043                return false;
044        }
045
046}