public static void doActionHandler(edu.isi.webtools.http.HttpExchange xchg) {
    { Cons keys = edu.isi.webtools.http.Http.parseAndDecodeUrlArguments(edu.isi.webtools.http.HttpExchange.getRequestUriQuery(xchg), '+');
      StringWrapper action = ((StringWrapper)(keys.value));
      StringWrapper objecttype = ((StringWrapper)(keys.rest.value));
      StringWrapper modulename = ((StringWrapper)(keys.rest.rest.value));
      StringWrapper objectname = ((StringWrapper)(keys.fourth()));
      org.powerloom.PrintableStringWriter stream = edu.isi.webtools.http.HttpExchange.getReplyStream(xchg);

      if (keys.length() >= 4) {
        if (Stella.startsWithP(action.wrapperValue, "graph", 0)) {
          OntosaurusUtil.vizServerHandler(xchg);
        }
        else {
          OntosaurusUtil.htmlPowerloomResponse(action.wrapperValue, objecttype.wrapperValue, modulename.wrapperValue, objectname.wrapperValue, stream);
        }
      }
      else {
        edu.isi.webtools.http.HttpExchange.setResponseCode(xchg, OntosaurusUtil.KWD_BAD_REQUEST);
        { String tag008 = OntosaurusUtil.makeHtmlBodyTag(OntosaurusUtil.$ERROR_BACKGROUND_COLOR$);

          stream.print("<" + tag008 + ">");
          stream.println("ERROR: expected four parameters, only received " + keys.length());
          stream.println("<BR><OL>");
          { StringWrapper key = null;
            Cons iter000 = keys;

            for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
              key = ((StringWrapper)(iter000.value));
              stream.println("<LI>" + key + "</LI>");
            }
          }
          stream.println("</OL>");
          stream.println("</" + Native.string_subsequence(tag008, 0, Native.string_position(tag008, ' ', 0)) + ">");
        }
      }
    }
  }