/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.oneandone.idev.johanna.protocol;
import org.oneandone.idev.johanna.protocol.impl.SessionCreateRequest;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.oneandone.idev.johanna.protocol.impl.HangupRequest;
import org.oneandone.idev.johanna.protocol.impl.SessionIsValidRequest;
import org.oneandone.idev.johanna.protocol.impl.SessionKeysRequest;
import org.oneandone.idev.johanna.protocol.impl.SessionSetTimeoutRequest;
import org.oneandone.idev.johanna.protocol.impl.SessionTerminateRequest;
import org.oneandone.idev.johanna.protocol.impl.VarDeleteRequest;
import org.oneandone.idev.johanna.protocol.impl.VarReadRequest;
import org.oneandone.idev.johanna.protocol.impl.VarWriteRequest;
/**
*
* @author kiesel
*/
public class RequestFactory {
private Map<String, Class> cmds;
public RequestFactory() {
this.cmds= new HashMap<>();
this.cmds.put("session_create", SessionCreateRequest.class);
this.cmds.put("session_terminate", SessionTerminateRequest.class);
this.cmds.put("session_isvalid", SessionIsValidRequest.class);
this.cmds.put("session_settimeout", SessionSetTimeoutRequest.class);
this.cmds.put("session_keys", SessionKeysRequest.class);
this.cmds.put("var_write", VarWriteRequest.class);
this.cmds.put("var_read", VarReadRequest.class);
this.cmds.put("var_delete", VarDeleteRequest.class);
this.cmds.put("bye", HangupRequest.class);
this.cmds.put("exit", HangupRequest.class);
}
public Request createRequest(String i) throws InstantiationException, IllegalAccessException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
String[] parts= i.split(" ");
if (!this.cmds.containsKey(parts[0])) {
throw new IllegalArgumentException("Invalid session command.");
}
return (Request)this.cmds.get(parts[0]).getConstructor(String.class).newInstance(i);
}
}