Implement Resource.FallBackResource
parent
943e889cf9
commit
cef4e263b5
|
@ -40,7 +40,10 @@ namespace ln.http.resources
|
||||||
|
|
||||||
public override Resource GetResource(string name)
|
public override Resource GetResource(string name)
|
||||||
{
|
{
|
||||||
return this.resources[name];
|
if (this.resources.ContainsKey(name))
|
||||||
|
return this.resources[name];
|
||||||
|
|
||||||
|
return GetFallBackResource();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerable<Resource> GetResources()
|
public override IEnumerable<Resource> GetResources()
|
||||||
|
@ -54,10 +57,6 @@ namespace ln.http.resources
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public virtual Resource CreateResource(string name)
|
public virtual Resource CreateResource(string name)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
|
|
|
@ -126,7 +126,7 @@ namespace ln.http.resources
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new KeyNotFoundException();
|
return GetFallBackResource();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerable<Resource> GetResources()
|
public override IEnumerable<Resource> GetResources()
|
||||||
|
|
16
Resource.cs
16
Resource.cs
|
@ -10,6 +10,8 @@ namespace ln.http.resources
|
||||||
public Resource Container { get; protected set; }
|
public Resource Container { get; protected set; }
|
||||||
public Resource DefaultResource { get; set; }
|
public Resource DefaultResource { get; set; }
|
||||||
|
|
||||||
|
public Resource FallBackResource { get; set; }
|
||||||
|
|
||||||
public virtual bool HandlesDispatching => false;
|
public virtual bool HandlesDispatching => false;
|
||||||
|
|
||||||
public Resource(String name)
|
public Resource(String name)
|
||||||
|
@ -66,7 +68,8 @@ namespace ln.http.resources
|
||||||
foreach (Resource r in GetResources())
|
foreach (Resource r in GetResources())
|
||||||
if (r.Name.Equals(name))
|
if (r.Name.Equals(name))
|
||||||
return r;
|
return r;
|
||||||
throw new KeyNotFoundException();
|
|
||||||
|
return GetFallBackResource();
|
||||||
}
|
}
|
||||||
public abstract IEnumerable<Resource> GetResources();
|
public abstract IEnumerable<Resource> GetResources();
|
||||||
|
|
||||||
|
@ -75,6 +78,17 @@ namespace ln.http.resources
|
||||||
return this.GetResources().Where((x) => resourceType.IsInstanceOfType(x));
|
return this.GetResources().Where((x) => resourceType.IsInstanceOfType(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual Resource GetFallBackResource()
|
||||||
|
{
|
||||||
|
if (FallBackResource != null)
|
||||||
|
return FallBackResource;
|
||||||
|
|
||||||
|
if (Container != null)
|
||||||
|
return Container.GetFallBackResource();
|
||||||
|
|
||||||
|
throw new KeyNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
public virtual HttpResponse GetResponse(HttpRequest httpRequest, Queue<string> pathStack)
|
public virtual HttpResponse GetResponse(HttpRequest httpRequest, Queue<string> pathStack)
|
||||||
{
|
{
|
||||||
return GetResponse(httpRequest);
|
return GetResponse(httpRequest);
|
||||||
|
|
|
@ -14,22 +14,18 @@ namespace ln.http.resources
|
||||||
|
|
||||||
public override HttpResponse GetResponse(HttpRequest httpRequest)
|
public override HttpResponse GetResponse(HttpRequest httpRequest)
|
||||||
{
|
{
|
||||||
/* TODO: Implement Authentication here... */
|
|
||||||
|
|
||||||
|
|
||||||
Resource currentResource = RootResource;
|
Resource currentResource = RootResource;
|
||||||
Queue<String> pathStack = new Queue<String>(httpRequest.URI.AbsolutePath.Split(new String[] { "/" }, StringSplitOptions.RemoveEmptyEntries));
|
Queue<String> pathStack = new Queue<String>(httpRequest.URI.AbsolutePath.Split(new String[] { "/" }, StringSplitOptions.RemoveEmptyEntries));
|
||||||
|
|
||||||
while ((pathStack.Count > 0) && (!currentResource.HandlesDispatching))
|
while ((pathStack.Count > 0) && (!currentResource.HandlesDispatching))
|
||||||
{
|
{
|
||||||
String next = pathStack.Dequeue();
|
String next = pathStack.Dequeue();
|
||||||
|
|
||||||
if (!currentResource.Contains(next))
|
if (!currentResource.Contains(next))
|
||||||
throw new KeyNotFoundException();
|
{
|
||||||
|
currentResource = currentResource.GetFallBackResource();
|
||||||
|
break;
|
||||||
|
}
|
||||||
currentResource = currentResource.GetResource(next);
|
currentResource = currentResource.GetResource(next);
|
||||||
|
|
||||||
/* TODO: Implement Authorization hook here... */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return currentResource.GetResponse(httpRequest,pathStack);
|
return currentResource.GetResponse(httpRequest,pathStack);
|
||||||
|
|
Loading…
Reference in New Issue