/**
  * Processes an ID query request
  *
  * @param request
  * @return
  */
 public Response IDQueryRequestProcess(Request request) {
   ArrayList<String> responseMessage = new ArrayList<String>();
   if (getInt(this.getID()) < getInt(this.NextPeerID)
       && getInt(request.getPeerID()) > getInt(this.getID())
       && getInt(request.getPeerID()) > getInt(this.getNextPeerID())) {
     responseMessage.add(this.getNextPeerHostName() + " " + this.getNextPeerPort());
     return new Response(Settings.Version, "ID", "1", "301", "redirect", responseMessage);
   } else if (getInt(request.getPeerID()) > getInt(this.getID())
           && getInt(request.getPeerID()) < getInt(this.getNextPeerID())
       || getInt(this.getID()) > getInt(this.NextPeerID)
           && getInt(request.getPeerID()) > getInt(this.getID())) {
     return new Response(Settings.Version, "ID", "0", "200", "ok", responseMessage);
   } else if (this.getID() == this.NextPeerID) {
     if (getInt(this.getID()) > getInt(request.getPeerID())) {
       return new Response(Settings.Version, "ID", "0", "200", "ok", responseMessage);
     } else {
       // This condition requires more coding time
       return NEXTQueryReuqestProcess(request);
     }
   } else if (getInt(request.getPeerID()) == getInt(this.getID())) {
     return new Response(Settings.Version, "ID", "0", "400", "peerexist", responseMessage);
   } else if (!request.getVersion().trim().equals(Settings.Version.trim())) {
     return new Response(Settings.Version, "ID", "0", "401", "versionError", responseMessage);
   } else {
     return new Response(Settings.Version, "ID", "0", "503", "UnknownCondition", responseMessage);
   }
 }