sharp-application-server/resources/DirectoryResource.cs

57 lines
1.8 KiB
C#

using System;
using System.IO;
using appsrv.server;
using System.Collections.Generic;
using appsrv.exceptions;
namespace appsrv.resources
{
public class DirectoryResource : Resource
{
public DirectoryInfo DirectoryInfo { get; }
public bool IndexingEnabled { get; set; }
public DirectoryResource(DirectoryInfo directoryInfo)
:this(directoryInfo,null)
{
}
public DirectoryResource(DirectoryInfo directoryInfo,Resource container)
:base(directoryInfo.Name,container)
{
DirectoryInfo = directoryInfo;
}
public override void Hit(Stack<string> requestPath, HttpRequest request)
{
if (requestPath.Count > 0)
{
String nextResourceName = requestPath.Pop();
DirectoryInfo[] directoryInfos = DirectoryInfo.GetDirectories(nextResourceName);
if (directoryInfos.Length == 1){
DirectoryResource directoryResource = new DirectoryResource(directoryInfos[0],this);
directoryResource.Request(requestPath, request);
} else {
FileInfo[] fileInfos = DirectoryInfo.GetFiles(nextResourceName);
if (fileInfos.Length == 1){
FileResource fileResource = new FileResource(fileInfos[0],this);
fileResource.Request(requestPath, request);
} else {
throw new ResourceNotFoundException(Path, nextResourceName);
}
}
} else {
if (IndexingEnabled){
// ToDo: Create index...
} else {
base.Hit(requestPath, request);
}
}
}
}
}