001package org.nasdanika.html.model.html.gen;
002
003import java.io.IOException;
004import java.io.InputStream;
005import java.util.Objects;
006
007import org.eclipse.emf.common.notify.impl.AdapterImpl;
008import org.eclipse.emf.ecore.EObject;
009import org.nasdanika.common.Context;
010import org.nasdanika.common.ExecutionException;
011import org.nasdanika.common.Function;
012import org.nasdanika.common.FunctionFactory;
013import org.nasdanika.common.ProgressMonitor;
014import org.nasdanika.common.Supplier;
015import org.nasdanika.common.SupplierFactory;
016import org.nasdanika.common.Util;
017import org.nasdanika.emf.EObjectAdaptable;
018import org.nasdanika.exec.content.Filter;
019import org.nasdanika.html.HTMLFactory;
020import org.nasdanika.html.TagName;
021import org.nasdanika.html.model.html.Script;
022
023public class ScriptSupplierFactoryAdapter extends AdapterImpl implements SupplierFactory<org.nasdanika.html.Tag> {
024        
025        protected ScriptSupplierFactoryAdapter(Script script) {
026                setTarget(script);
027        }
028        
029        private FunctionFactory<InputStream,org.nasdanika.html.Tag> filterFactory = ctx -> new Function<InputStream, org.nasdanika.html.Tag>() {
030
031                @Override
032                public double size() {
033                        return 1;
034                }
035
036                @Override
037                public String name() {
038                        return "Script";
039                }
040
041                @Override
042                public org.nasdanika.html.Tag execute(InputStream input, ProgressMonitor progressMonitor) {
043                        HTMLFactory htmlFactory = ctx.get(HTMLFactory.class, HTMLFactory.INSTANCE);
044                        try {
045                                return htmlFactory.tag(TagName.script, Util.toString(ctx, input));
046                        } catch (IOException e) {
047                                throw new ExecutionException(e, this);
048                        }
049                }
050                
051        };
052                
053        @Override
054        public Supplier<org.nasdanika.html.Tag> create(Context context) {
055                EObject source = ((Filter) getTarget()).getSource();
056                SupplierFactory<InputStream> ssf = Objects.requireNonNull(EObjectAdaptable.adaptToSupplierFactory(source, InputStream.class), "Cannot adapt to SupplierFactory: " + source);
057                return ssf.then(filterFactory).create(context);
058        }
059
060}
061