package jetbrains.mps.lang.resources.plugin;
/*Generated by MPS */
import jetbrains.mps.make.facet.IFacet;
import java.util.List;
import jetbrains.mps.make.facet.ITarget;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.make.resources.IPropertiesPersistence;
import jetbrains.mps.make.facet.ITargetEx2;
import jetbrains.mps.make.script.IJob;
import jetbrains.mps.make.script.IResult;
import jetbrains.mps.make.resources.IResource;
import jetbrains.mps.make.script.IJobMonitor;
import jetbrains.mps.make.resources.IPropertiesAccessor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.smodel.resources.MResource;
import java.util.Map;
import jetbrains.mps.vfs.IFile;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import jetbrains.mps.make.delta.IDelta;
import org.jetbrains.mps.openapi.module.SRepository;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import jetbrains.mps.smodel.SModelOperations;
import jetbrains.mps.make.facets.Make_Facet.Target_make;
import jetbrains.mps.internal.make.runtime.util.FilesDelta;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.internal.collections.runtime.IVisitor;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.baseLanguage.tuples.runtime.Tuples;
import jetbrains.mps.lang.resources.behavior.Resource__BehaviorDescriptor;
import jetbrains.mps.internal.make.runtime.util.StaleFilesCollector;
import jetbrains.mps.smodel.resources.DResource;
import jetbrains.mps.vfs.FileSystem;
import jetbrains.mps.internal.collections.runtime.IMapping;
import jetbrains.mps.make.script.IFeedback;
import java.io.OutputStream;
import java.io.IOException;
import jetbrains.mps.util.FileUtil;
import jetbrains.mps.make.script.IConfig;
import jetbrains.mps.make.script.IPropertiesPool;
public class Binaries_Facet extends IFacet.Stub {
private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>());
private IFacet.Name name = new IFacet.Name("jetbrains.mps.lang.resources.Binaries");
public Binaries_Facet() {
ListSequence.fromList(targets).addElement(new Binaries_Facet.Target_copyBinaries());
}
public Iterable<ITarget> targets() {
return targets;
}
public Iterable<IFacet.Name> optional() {
return null;
}
public Iterable<IFacet.Name> required() {
return Sequence.fromArray(new IFacet.Name[]{new IFacet.Name("jetbrains.mps.make.facets.Make"), new IFacet.Name("jetbrains.mps.lang.core.Generate")});
}
public Iterable<IFacet.Name> extended() {
return null;
}
public IFacet.Name getName() {
return this.name;
}
public IPropertiesPersistence propertiesPersistence() {
return new Binaries_Facet.TargetProperties();
}
public static class Target_copyBinaries implements ITargetEx2 {
private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.resources.Binaries.copyBinaries");
public Target_copyBinaries() {
}
public IJob createJob() {
return new IJob.Stub() {
@Override
public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) {
Iterable<IResource> _output_8acy7z_a0a = null;
final Iterable<MResource> input = (Iterable<MResource>) (Iterable) rawInput;
switch (0) {
case 0:
progressMonitor.start("Copying resources", 2);
progressMonitor.step("Collecting");
try {
final Map<IFile, byte[]> dataToWrite = MapSequence.fromMap(new HashMap<IFile, byte[]>());
final List<IDelta> deltaList = ListSequence.fromList(new ArrayList<IDelta>());
// XXX there seems to be no need to depend from Generate task now?
final SRepository repository = monitor.getSession().getProject().getRepository();
repository.getModelAccess().runReadAction(new Runnable() {
public void run() {
Iterable<SModel> models = Sequence.fromIterable(input).translate(new ITranslator2<MResource, SModel>() {
public Iterable<SModel> translate(MResource res) {
return Sequence.fromIterable(res.models()).ofType(SModel.class).where(new IWhereFilter<SModel>() {
public boolean accept(SModel it) {
return SModelOperations.getOutputLocation(it) != null;
}
});
}
});
for (SModel model : Sequence.fromIterable(models)) {
final IFile outputDir = Target_make.vars(pa.global()).pathToFile().invoke(SModelOperations.getOutputLocation(model).getPath());
final FilesDelta fd = new FilesDelta(outputDir);
ListSequence.fromList(jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations.nodes(model, MetaAdapterFactory.getInterfaceConcept(0x982eb8df2c964bd7L, 0x996311712ea622e5L, 0x7c8b08a50a39c6caL, "jetbrains.mps.lang.resources.structure.Resource"))).visitAll(new IVisitor<SNode>() {
public void visit(SNode it) {
List<Tuples._2<IFile, byte[]>> data = Resource__BehaviorDescriptor.generate_id7Mb2akaesv8.invoke(it, outputDir);
for (Tuples._2<IFile, byte[]> d : ListSequence.fromList(data).where(new IWhereFilter<Tuples._2<IFile, byte[]>>() {
public boolean accept(Tuples._2<IFile, byte[]> it) {
return it != null;
}
})) {
if (d._1() != null) {
MapSequence.fromMap(dataToWrite).put(d._0(), d._1());
fd.written(d._0());
}
}
}
});
new StaleFilesCollector(outputDir).updateDelta(fd);
ListSequence.fromList(deltaList).addElement(fd);
}
}
});
_output_8acy7z_a0a = Sequence.fromIterable(_output_8acy7z_a0a).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new DResource(deltaList))));
progressMonitor.advance(1);
progressMonitor.step("Copying content");
FileSystem.getInstance().runWriteTransaction(new Runnable() {
public void run() {
MapSequence.fromMap(dataToWrite).visitAll(new IVisitor<IMapping<IFile, byte[]>>() {
public void visit(IMapping<IFile, byte[]> ftc) {
if (!(ftc.key().createNewFile())) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("cannot write to file " + ftc.key().getPath())));
return;
}
OutputStream os = null;
try {
os = ftc.key().openOutputStream();
os.write(ftc.value());
} catch (IOException e) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf(e)));
} finally {
FileUtil.closeFileSafe(os);
}
}
});
}
});
} finally {
progressMonitor.done();
}
default:
progressMonitor.done();
return new IResult.SUCCESS(_output_8acy7z_a0a);
}
}
};
}
public IConfig createConfig() {
return null;
}
public Iterable<ITarget.Name> notAfter() {
return null;
}
public Iterable<ITarget.Name> after() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.Generate.configure")});
}
public Iterable<ITarget.Name> notBefore() {
return null;
}
public Iterable<ITarget.Name> before() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.make.facets.Make.make"), new ITarget.Name("jetbrains.mps.make.facets.Make.reconcile")});
}
public ITarget.Name getName() {
return name;
}
public boolean isOptional() {
return false;
}
public boolean requiresInput() {
return true;
}
public boolean producesOutput() {
return true;
}
public Iterable<Class<? extends IResource>> expectedInput() {
List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>());
ListSequence.fromList(rv).addElement(MResource.class);
return rv;
}
public Iterable<Class<? extends IResource>> expectedOutput() {
return null;
}
public <T> T createParameters(Class<T> cls) {
return null;
}
public <T> T createParameters(Class<T> cls, T copyFrom) {
T t = createParameters(cls);
return t;
}
public int workEstimate() {
return 100;
}
}
public static class TargetProperties implements IPropertiesPersistence {
public TargetProperties() {
}
public void storeValues(Map<String, String> store, IPropertiesPool properties) {
}
public void loadValues(Map<String, String> store, IPropertiesPool properties) {
try {
} catch (RuntimeException re) {
}
}
}
}