PresenceBuilder.java

  1. /**
  2.  *
  3.  * Copyright 2019 Florian Schmaus
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *     http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.jivesoftware.smack.packet;

  18. import org.jivesoftware.smack.packet.Presence.Mode;
  19. import org.jivesoftware.smack.packet.id.StanzaIdSource;
  20. import org.jivesoftware.smack.util.Objects;
  21. import org.jivesoftware.smack.util.ToStringUtil;

  22. public final class PresenceBuilder extends MessageOrPresenceBuilder<Presence, PresenceBuilder> implements PresenceView {
  23.     static final PresenceBuilder EMPTY = new PresenceBuilder(() -> {
  24.         return null;
  25.     });

  26.     Presence.Type type = Presence.Type.available;

  27.     String status;

  28.     Byte priority;

  29.     Presence.Mode mode;

  30.     PresenceBuilder(Presence presence, String stanzaId) {
  31.         super(presence, stanzaId);
  32.         copyFromPresence(presence);
  33.     }

  34.     PresenceBuilder(Presence presence, StanzaIdSource stanzaIdSource) {
  35.         super(presence, stanzaIdSource);
  36.         copyFromPresence(presence);
  37.     }

  38.     PresenceBuilder(StanzaIdSource stanzaIdSource) {
  39.         super(stanzaIdSource);
  40.     }

  41.     PresenceBuilder(String stanzaId) {
  42.         super(stanzaId);
  43.     }

  44.     private void copyFromPresence(Presence presence) {
  45.         type = presence.getType();
  46.         status = presence.getStatus();
  47.         priority = presence.getPriorityByte();
  48.         mode = presence.getMode();
  49.     }

  50.     @Override
  51.     protected void addStanzaSpecificAttributes(ToStringUtil.Builder builder) {
  52.         builder.addValue("type", type)
  53.                .addValue("mode", mode)
  54.                .addValue("priority", priority)
  55.                .addValue("status", status)
  56.                ;
  57.     }

  58.     public PresenceBuilder ofType(Presence.Type type) {
  59.         this.type = Objects.requireNonNull(type, "Type cannot be null");
  60.         return getThis();
  61.     }

  62.     public PresenceBuilder setStatus(String status) {
  63.         this.status = status;
  64.         return getThis();
  65.     }

  66.     public PresenceBuilder setPriority(int priority) {
  67.         if (priority < -128 || priority > 127) {
  68.             throw new IllegalArgumentException("Priority value " + priority +
  69.                     " is not valid. Valid range is -128 through 127.");
  70.         }
  71.         Byte priorityByte = (byte) priority;
  72.         return setPriority(priorityByte);
  73.     }

  74.     public PresenceBuilder setPriority(Byte priority) {
  75.         this.priority = priority;
  76.         return getThis();
  77.     }

  78.     public PresenceBuilder setMode(Presence.Mode mode) {
  79.         this.mode = mode;
  80.         return getThis();
  81.     }

  82.     @Override
  83.     public PresenceBuilder getThis() {
  84.         return this;
  85.     }

  86.     @Override
  87.     public Presence build() {
  88.         return new Presence(this);
  89.     }

  90.     @Override
  91.     public Presence.Type getType() {
  92.         return type;
  93.     }

  94.     @Override
  95.     public String getStatus() {
  96.         return status;
  97.     }

  98.     @Override
  99.     public int getPriority() {
  100.         return getPriorityByte();
  101.     }

  102.     @Override
  103.     public byte getPriorityByte() {
  104.         if (priority == null) {
  105.             return 0;
  106.         }
  107.         return priority;
  108.     }

  109.     @Override
  110.     public Presence.Mode getMode() {
  111.         if (mode == null) {
  112.             return Mode.available;
  113.         }
  114.         return mode;
  115.    }

  116. }