com.github.cleydyr.dart.system.io.AbstractDartSassExecutableExtractor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dart-sass-maven-plugin Show documentation
Show all versions of dart-sass-maven-plugin Show documentation
A Maven plugin that allows to compile SASS using Dart Sass
package com.github.cleydyr.dart.system.io;
import com.github.cleydyr.dart.command.exception.SassCommandException;
import com.github.cleydyr.dart.release.DartSassReleaseParameter;
import com.github.cleydyr.dart.system.OSDetector;
import com.github.cleydyr.dart.system.io.utils.SystemUtils;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
public abstract class AbstractDartSassExecutableExtractor implements DartSassExecutableExtractor {
protected Collection resourceNames;
protected DartSassReleaseParameter dartSassReleaseParameter;
protected ExecutableResourcesProvider executableResourcesProvider;
public AbstractDartSassExecutableExtractor(
DartSassReleaseParameter dartSassReleaseParameter,
ExecutableResourcesProvider executableResourcesProvider,
Collection resourceNames) {
this.dartSassReleaseParameter = dartSassReleaseParameter;
this.executableResourcesProvider = executableResourcesProvider;
this.resourceNames = resourceNames;
}
public void extract() throws Exception {
extractResourcesToFolder(createExecutableFolder());
}
private Path createExecutableFolder() throws IOException {
Path executableFolder = SystemUtils.getExecutableTempFolder(dartSassReleaseParameter);
if (!Files.isDirectory(executableFolder)) {
Files.createDirectories(executableFolder);
}
Path srcDir = executableFolder.resolve("src");
if (!Files.isDirectory(srcDir)) {
Files.createDirectory(srcDir);
}
return executableFolder;
}
private void extractResourcesToFolder(Path executableFolder) throws SassCommandException, IOException {
for (String resourceName : resourceNames) {
try (InputStream resourceInputStream = getResourceInputStream("dart-sass/" + resourceName)) {
if (resourceInputStream == null) {
throw new SassCommandException(String.format(
"Can't extract file for system %s and architecture %s",
OSDetector.getOSName(), OSDetector.getOSArchitecture()));
}
Path resourcePath = executableFolder.resolve(resourceName);
if (Files.exists(resourcePath)) {
continue;
}
Files.copy(resourceInputStream, resourcePath);
setResourcePermissions(resourcePath);
}
}
}
private InputStream getResourceInputStream(String resourceName) throws IOException {
return executableResourcesProvider.getInputStream(dartSassReleaseParameter, resourceName);
}
void setResourcePermissions(Path resourcePath) throws IOException {}
}