55 lines
2.1 KiB
Java
55 lines
2.1 KiB
Java
package io.gitlab.jfronny.libjf.config.plugin;
|
|
|
|
import io.gitlab.jfronny.libjf.config.plugin.util.ZipCompressor;
|
|
import org.apache.tools.zip.ZipOutputStream;
|
|
import org.gradle.api.GradleException;
|
|
import org.gradle.api.internal.file.copy.CopyAction;
|
|
import org.gradle.api.internal.file.copy.CopyActionProcessingStream;
|
|
import org.gradle.api.tasks.WorkResult;
|
|
import org.gradle.api.tasks.WorkResults;
|
|
import org.objectweb.asm.Type;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
public class ConfigInjectCopyAction implements CopyAction {
|
|
private final File zipFile;
|
|
private final ZipCompressor compressor;
|
|
private final String encoding;
|
|
private final boolean preserveFileTimestamps;
|
|
private final String modId;
|
|
private final Set<Type> knownConfigClasses = new HashSet<>();
|
|
|
|
public ConfigInjectCopyAction(File zipFile,
|
|
ZipCompressor compressor,
|
|
String encoding,
|
|
boolean preserveFileTimestamps,
|
|
String modId) {
|
|
this.zipFile = zipFile;
|
|
this.compressor = compressor;
|
|
this.encoding = encoding;
|
|
this.preserveFileTimestamps = preserveFileTimestamps;
|
|
this.modId = modId;
|
|
}
|
|
|
|
@Override
|
|
public WorkResult execute(CopyActionProcessingStream stream) {
|
|
try (ZipOutputStream zipOutStr = compressor.createArchiveOutputStream(zipFile)) {
|
|
if (encoding != null) {
|
|
zipOutStr.setEncoding(encoding);
|
|
}
|
|
AtomicBoolean fmjFound = new AtomicBoolean(false);
|
|
stream.process(details -> fmjFound.compareAndSet(false,
|
|
new StreamAction(zipOutStr, zipFile, preserveFileTimestamps, modId, knownConfigClasses)
|
|
.processFile(details)
|
|
));
|
|
} catch (IOException e) {
|
|
throw new GradleException("Could not create ZIP " + zipFile, e);
|
|
}
|
|
return WorkResults.didWork(true);
|
|
}
|
|
}
|