package jetbrains.mps.build.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.ITargetEx;
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.lang.core.plugin.TextGenOutcomeResource;
import java.util.stream.IntStream;
import jetbrains.mps.internal.make.runtime.java.FileProcessor;
import jetbrains.mps.internal.make.runtime.util.FilesDelta;
import jetbrains.mps.text.TextGenResult;
import jetbrains.mps.text.TextUnit;
import jetbrains.mps.util.CopyFacetUtil;
import jetbrains.mps.make.script.IFeedback;
import jetbrains.mps.vfs.IFile;
import jetbrains.mps.vfs.FileSystem;
import jetbrains.mps.make.delta.IDelta;
import jetbrains.mps.internal.collections.runtime.ILeftCombinator;
import jetbrains.mps.smodel.resources.DResource;
import jetbrains.mps.make.script.IConfig;
import java.util.Map;
import jetbrains.mps.make.script.IPropertiesPool;
public class CopyGeneratedScripts_Facet extends IFacet.Stub {
private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>());
private IFacet.Name name = new IFacet.Name("jetbrains.mps.build.CopyGeneratedScripts");
public CopyGeneratedScripts_Facet() {
ListSequence.fromList(targets).addElement(new CopyGeneratedScripts_Facet.Target_copyFiles());
}
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.lang.core.Generate"), new IFacet.Name("jetbrains.mps.lang.core.TextGen")});
}
public Iterable<IFacet.Name> extended() {
return null;
}
public IFacet.Name getName() {
return this.name;
}
public IPropertiesPersistence propertiesPersistence() {
return new CopyGeneratedScripts_Facet.TargetProperties();
}
public static class Target_copyFiles implements ITargetEx {
private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.build.CopyGeneratedScripts.copyFiles");
public Target_copyFiles() {
}
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_ixa0pj_a0a = null;
final Iterable<TextGenOutcomeResource> input = (Iterable<TextGenOutcomeResource>) (Iterable) rawInput;
progressMonitor.start("", IntStream.of(1000).sum());
switch (0) {
case 0:
final FileProcessor fp = new FileProcessor();
List<FilesDelta> deltas = ListSequence.fromList(new ArrayList<FilesDelta>());
final ProgressMonitor subProgress_c0a0a = progressMonitor.subTask(1000);
subProgress_c0a0a.start("Build language ANT files", Sequence.fromIterable(input).count() + 2);
for (TextGenOutcomeResource res : Sequence.fromIterable(input)) {
subProgress_c0a0a.advance(1);
subProgress_c0a0a.step(res.getModel().getModelName());
TextGenResult textGenResult = res.getTextGenResult();
for (TextUnit tu : textGenResult.getUnits()) {
String targetXml = CopyFacetUtil.getTargetPath(tu.getStartNode());
if (targetXml != null) {
String fileName = tu.getFileName();
if (!(fileName.endsWith(".xml"))) {
String ext = Utils.getExtensionWithDot(fileName);
if ((ext == null || ext.length() == 0)) {
// do not copy
monitor.reportFeedback(new IFeedback.WARNING(String.valueOf("Ignored " + fileName)));
continue;
}
targetXml = Utils.withoutExtension(targetXml) + ext;
}
monitor.reportFeedback(new IFeedback.INFORMATION(String.valueOf(String.format("copy generated script: %s --> %s", fileName, targetXml))));
IFile destFile = FileSystem.getInstance().getFileByPath(targetXml);
boolean changed = fp.saveContent(destFile, tu.getBytes());
FilesDelta d = new FilesDelta(destFile.getParent());
if (changed) {
d.written(destFile);
} else {
d.kept(destFile);
}
ListSequence.fromList(deltas).addElement(d);
}
}
}
if (ListSequence.fromList(deltas).isNotEmpty()) {
IDelta folded = ListSequence.fromList(deltas).ofType(IDelta.class).reduceLeft(new ILeftCombinator<IDelta, IDelta>() {
public IDelta combine(IDelta a, IDelta b) {
return a.merge(b);
}
});
_output_ixa0pj_a0a = Sequence.fromIterable(_output_ixa0pj_a0a).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new DResource(Sequence.<IDelta>singleton(folded)))));
}
subProgress_c0a0a.advance(1);
subProgress_c0a0a.step("writing...");
FileSystem.getInstance().runWriteTransaction(new Runnable() {
@Override
public void run() {
fp.flushChanges();
}
});
subProgress_c0a0a.done();
default:
progressMonitor.done();
return new IResult.SUCCESS(_output_ixa0pj_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.TextGen.textGen")});
}
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.reconcile")});
}
public ITarget.Name getName() {
return name;
}
public boolean isOptional() {
return true;
}
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(TextGenOutcomeResource.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 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) {
}
}
}
}