forked from LupusNobilis/java-org.hwo
69 lines
1.5 KiB
Java
69 lines
1.5 KiB
Java
package org.hwo.net.serverobjects;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
|
|
import org.hwo.net.ServerObject;
|
|
import org.hwo.net.http.HttpServerRequest;
|
|
|
|
public abstract class AbstractServerObject implements ServerObject {
|
|
|
|
private ServerObject parentObject;
|
|
HashMap<String, ServerObject> mappedChildren;
|
|
|
|
public AbstractServerObject()
|
|
{
|
|
mappedChildren = new HashMap<String, ServerObject>();
|
|
}
|
|
|
|
|
|
@Override
|
|
public ServerObject getRootObject() {
|
|
if (getParent() == null)
|
|
return this;
|
|
return getParent().getRootObject();
|
|
}
|
|
|
|
@Override
|
|
public ServerObject getParent() {
|
|
return parentObject;
|
|
}
|
|
|
|
@Override
|
|
public ServerObject[] getChildren() {
|
|
return (new ArrayList<ServerObject>(mappedChildren.values())).toArray(new ServerObject[0]);
|
|
}
|
|
|
|
@Override
|
|
public void addNamedChild(String childName, ServerObject serverObject) {
|
|
mappedChildren.put(childName, serverObject);
|
|
|
|
}
|
|
|
|
@Override
|
|
public ServerObject getNamedChild(String childName) {
|
|
if (!mappedChildren.containsKey(childName))
|
|
return null;
|
|
return mappedChildren.get(childName);
|
|
}
|
|
|
|
@Override
|
|
public void climb(ServerObjectRequest request) throws IOException {
|
|
String nextChildName = request.popNextElement();
|
|
|
|
if (nextChildName == null)
|
|
{
|
|
request(request);
|
|
} else
|
|
{
|
|
ServerObject nextChild = getNamedChild(nextChildName);
|
|
if (nextChild == null)
|
|
throw new ServerObjectNotFoundException(request,nextChildName);
|
|
nextChild.climb(request);
|
|
}
|
|
|
|
}
|
|
|
|
}
|