code: public void setStatus(Presence.Mode presenceMode, String status) throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
          if (!online) {
              throw new IllegalStateException("Cannot set status when the agent is not online.");
          }
  
          if (presenceMode == null) {
              presenceMode = Presence.Mode.available;
          }
          this.presenceMode = presenceMode;
  
          Presence presence = new Presence(Presence.Type.available);
          presence.setMode(presenceMode);
          presence.setTo(this.getWorkgroupJID());
  
          if (status != null) {
              presence.setStatus(status);
          }
          presence.addExtension(new MetaData(this.metaData));
  
          StanzaCollector collector = this.connection.createStanzaCollectorAndSend(new AndFilter(new StanzaTypeFilter(Presence.class),
                  FromMatchesFilter.create(workgroupJID)), presence);
  
          collector.nextResultOrThrow();
      }
docs: Sets the agent's current status with the workgroup. The presence mode affects how offers
  are routed to the agent. The possible presence modes with their meanings are as follows:<ul>
  
  <li>Presence.Mode.AVAILABLE -- (Default) the agent is available for more chats
  (equivalent to Presence.Mode.CHAT).
  <li>Presence.Mode.DO_NOT_DISTURB -- the agent is busy and should not be disturbed.
  However, special case, or extreme urgency chats may still be offered to the agent.
  <li>Presence.Mode.AWAY -- the agent is not available and should not
  have a chat routed to them (equivalent to Presence.Mode.EXTENDED_AWAY).</ul>
  
  @param presenceMode the presence mode of the agent.
  @param status       sets the status message of the presence update.
  @throws XMPPErrorException
  @throws NoResponseException
  @throws NotConnectedException
  @throws InterruptedException
  @throws IllegalStateException if the agent is not online with the workgroup.