package org.smartly.commons.io.repository.deploy;
import org.smartly.commons.util.PathUtils;
import org.smartly.commons.util.StringUtils;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Wrapper for file deployer settings
*/
public class FileDeployerSettings {
private static final String SUFFIX_MIN = ".mini";
private final Map<String, String> _compileFiles = new HashMap<String, String>(); // pair: source ext, target ext. i.e. ".less", ".css"
private final Set<String> _compressFiles = new HashSet<String>();
private final Set<String> _excludeFiles = new HashSet<String>();
private final Set<String> _preprocessorFiles = new HashSet<String>(); // Arrays.asList(PREPROCESS_FILES)
private final Map<String, String> _preprocessorValues = new HashMap<String, String>();
public FileDeployerSettings() {
}
public FileDeployerSettings(final FileDeployerSettings parent) {
if (null != parent) {
_compileFiles.putAll(parent.getCompileFiles());
_compressFiles.addAll(parent.getCompressFiles());
_excludeFiles.addAll(parent.getExcludeFiles());
_preprocessorFiles.addAll(parent.getPreProcessorFiles());
_preprocessorValues.putAll(parent.getPreprocessorValues());
}
}
public void clear() {
_compileFiles.clear();
_excludeFiles.clear();
_compressFiles.clear();
_preprocessorFiles.clear();
_preprocessorValues.clear();
}
public Set<String> getExcludeFiles() {
return _excludeFiles;
}
public Set<String> getPreProcessorFiles() {
return _preprocessorFiles;
}
public Map<String, String> getPreprocessorValues() {
return _preprocessorValues;
}
public Set<String> getCompressFiles() {
return _compressFiles;
}
public Map<String, String> getCompileFiles() {
return _compileFiles;
}
public boolean isExcluded(final String file_or_ext) {
final String ext = PathUtils.getFilenameExtension(file_or_ext, true);
return StringUtils.hasText(ext)
? _excludeFiles.contains(ext) || _excludeFiles.contains(file_or_ext)
: _excludeFiles.contains(file_or_ext);
}
public boolean isPreProcessableFile(final String filename) {
final String ext = PathUtils.getFilenameExtension(filename, true);
return isPreProcessableExt(ext);
}
public boolean isPreProcessableExt(final String ext) {
return _preprocessorFiles.contains(ext);
}
public boolean isCompilableFile(final String filename) {
final String ext = PathUtils.getFilenameExtension(filename, true);
return isCompilableExt(ext);
}
public boolean isCompilableExt(final String ext) {
return _compileFiles.containsKey(ext);
}
public boolean isCompressibleFile(final String filename) {
final String ext = PathUtils.getFilenameExtension(filename, true);
return isCompressibleExt(ext);
}
public boolean isCompressibleExt(final String ext) {
return _compressFiles.contains(ext);
}
public String getMiniFilename(final String sourcePath) {
if (this.isCompressibleFile(sourcePath)) {
final String name = PathUtils.getFilename(sourcePath, false);
final String ext = PathUtils.getFilenameExtension(sourcePath, true);
if (!name.endsWith(".min") && !name.endsWith("_min") && !name.endsWith("-min")) {
return PathUtils.changeFileName(sourcePath, name.concat(SUFFIX_MIN).concat(ext));
}
}
return null;
}
// ------------------------------------------------------------------------
// p r i v a t e
// ------------------------------------------------------------------------
}