java-org.hwo/src/org/hwo/net/serverobjects/AbstractServerObject.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);
}
}
}