package fr.adrienbrault.idea.symfony2plugin.routing.webDeployment;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.StreamUtil;
import com.intellij.util.containers.HashMap;
import com.jetbrains.php.lang.psi.PhpPsiElementFactory;
import fr.adrienbrault.idea.symfony2plugin.Settings;
import fr.adrienbrault.idea.symfony2plugin.routing.Route;
import fr.adrienbrault.idea.symfony2plugin.routing.RouteHelper;
import fr.adrienbrault.idea.symfony2plugin.webDeployment.storage.RemoteFileStorageInterface;
import fr.adrienbrault.idea.symfony2plugin.webDeployment.utils.RemoteWebServerUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.vfs2.FileObject;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class RoutingRemoteFileStorage implements RemoteFileStorageInterface<Map<String, Route>> {
private Map<String, Route> routeMap = new HashMap<>();
@NotNull
@Override
public Collection<String> files(@NotNull Project project) {
return RemoteWebServerUtil.getRemoteAbleFiles(Settings.getInstance(project).routingFiles);
}
@Override
public void build(@NotNull Project project, @NotNull Collection<FileObject> fileObjects) {
Map<String, Route> routeMap = new HashMap<>();
for (FileObject file : fileObjects) {
String content;
try {
content = StreamUtil.readText(file.getContent().getInputStream(), "UTF-8");
} catch (IOException e) {
continue;
}
if(StringUtils.isBlank(content)) {
continue;
}
routeMap.putAll(RouteHelper.getRoutesInsideUrlGeneratorFile(
PhpPsiElementFactory.createPsiFileFromText(project, content)
));
}
this.routeMap = routeMap;
}
@NotNull
public Map<String, Route> getState() {
return this.routeMap;
}
@Override
public void clear() {
this.routeMap = new HashMap<>();
}
}