001package org.nasdanika.html.model.app.graph.emf; 002 003import java.util.concurrent.CompletionStage; 004import java.util.function.Consumer; 005import java.util.function.Function; 006 007import org.eclipse.emf.ecore.util.EcoreUtil; 008import org.nasdanika.common.Context; 009import org.nasdanika.common.ProgressMonitor; 010import org.nasdanika.graph.Element; 011import org.nasdanika.graph.emf.EObjectNode; 012import org.nasdanika.graph.emf.EReferenceConnection; 013import org.nasdanika.graph.processor.ConnectionProcessorConfig; 014import org.nasdanika.graph.processor.NodeProcessorConfig; 015import org.nasdanika.graph.processor.NodeProcessorInfo; 016import org.nasdanika.graph.processor.ProcessorConfig; 017import org.nasdanika.graph.processor.ProcessorFactory; 018import org.nasdanika.graph.processor.ProcessorInfo; 019import org.nasdanika.html.model.app.graph.WidgetFactory; 020 021/** 022 * Processor factory which uses EObjet URI's as identifiers and adapters to create node processors. 023 * @author Pavel 024 * 025 */ 026public class EObjectProcessorFactory extends ProcessorFactory<Object> { 027 028 @SuppressWarnings("unchecked") 029 @Override 030 protected ProcessorInfo<Object> createProcessor( 031 ProcessorConfig config, 032 boolean parallel, 033 Function<Element, CompletionStage<ProcessorInfo<Object>>> infoProvider, 034 Consumer<CompletionStage<?>> stageConsumer, ProgressMonitor progressMonitor) { 035 036 if (config.getElement() instanceof EReferenceConnection) { 037 return config.toInfo(new ConnectionProcessor((ConnectionProcessorConfig<WidgetFactory, WidgetFactory>) config)); 038 } 039 040 if (config.getElement() instanceof EObjectNode) { 041 Object adapter = EcoreUtil.getRegisteredAdapter(((EObjectNode) config.getElement()).get(), NodeProcessorInfo.Factory.class); 042 if (adapter instanceof NodeProcessorInfo.Factory) { 043 return ((NodeProcessorInfo.Factory<Object,WidgetFactory,WidgetFactory>) adapter).create((NodeProcessorConfig<WidgetFactory, WidgetFactory>) config, parallel, infoProvider, stageConsumer, getContext(), progressMonitor); 044 } 045 } 046 047 return super.createProcessor(config, parallel, infoProvider, stageConsumer, progressMonitor); 048 } 049 050 protected Context getContext() { 051 return Context.EMPTY_CONTEXT; 052 } 053 054}