package requirejs;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class RequirePaths {
public RequirejsProjectComponent component;
public Map<String, RequirePathAlias> paths = new ConcurrentHashMap<String, RequirePathAlias>();
public RequirePaths(RequirejsProjectComponent requirejsProjectComponent) {
component = requirejsProjectComponent;
}
public void clear() {
paths.clear();
}
public boolean isEmpty() {
return paths.isEmpty();
}
public void addPath(RequirePathAlias pathAlias) {
paths.put(pathAlias.alias, pathAlias);
}
public PsiElement resolve(Path path) {
RequirePathAlias fileAlias = paths.get(path.getPath());
if (null != fileAlias) {
path.setPath(fileAlias.path);
return path.resolve();
}
PsiElement result;
for (RequirePathAlias pathAlias : paths.values()) {
if (path.getPath().startsWith(pathAlias.alias)) {
path.setPath(path.getPath().replaceFirst(pathAlias.alias, pathAlias.path));
result = path.resolve();
if (null != result) {
return result;
}
}
}
return null;
}
public List<String> getAllFilesOnPaths() {
List<String> files = new ArrayList<String>();
for (RequirePathAlias pathAlias : paths.values()) {
VirtualFile directory = component.resolvePath(pathAlias.path);
if (null != directory && directory.isDirectory()) {
files.addAll(
FileUtils.getAllFilesInDirectory(
directory,
directory.getPath(),
pathAlias.alias
)
);
}
}
return files;
}
public List<String> getAliasToFiles() {
List<String> aliases = new ArrayList<String>();
for (RequirePathAlias pathAlias : paths.values()) {
VirtualFile directory = component.resolvePath(pathAlias.path);
if (null != directory && !directory.isDirectory()) {
aliases.add(pathAlias.alias);
}
}
return aliases;
}
}