// fabryka obiektw ContextObject
public class RequestContextFactory {
  public RequestContext createRequestContext(ServletRequest request) {
 
    RequestContext requestContext = null;
    try {
      // pobranie identyfikatora polecenia z obiektu dania
      String commandId = getCommandId(request);
      // rozpoznanie klasy RequestContext dla danego polecenia za pomoc CommandMap
      CommandMapper commandMapper = CommandMapper.getInstance();
      CommandMap mapEntry = commandMapper.getCommandMap(CommandId);
      Class requestContextClass = mapEntry.getContextObjectClass();
 
      // utworzenie instancji obiektu
      requestContext = (RequestContext)requestContextClass.newInstance();
 
      // ustawienie obiektu dania dotyczcego protokou
      requestContext.initialize(request);
    } catch(java.lang.InstantiationException e) {
      // obsuga wyjtku
    } catch (java.lang.IllegalAccessException e) { }
    return requestContext;
  }
 
  private String getCommandId(ServletRequest request) {
    String CommandId = null;
    if (request instanceof HttpServletRequest) {
      String pathInfo = ((HttpServletRequest)request).getPathInfo();
      commandId = pathInfo.substring(1);  // pominicie pocztkowego '/'
    }
    return commandId;
  }
}
