Manager.java

  1. /**
  2.  *
  3.  * Copyright 2014-2018 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;

  18. import java.lang.ref.WeakReference;
  19. import java.util.concurrent.TimeUnit;

  20. import org.jivesoftware.smack.SmackException.NotLoggedInException;
  21. import org.jivesoftware.smack.util.Objects;

  22. /**
  23.  * Managers provide the high-level API of certain functionality (often standardized by XMPP Extension Protocols).
  24.  */
  25. public abstract class Manager {

  26.     final WeakReference<XMPPConnection> weakConnection;

  27.     public Manager(XMPPConnection connection) {
  28.         Objects.requireNonNull(connection, "XMPPConnection must not be null");

  29.         weakConnection = new WeakReference<>(connection);
  30.     }

  31.     protected final XMPPConnection connection() {
  32.         return weakConnection.get();
  33.     }

  34.     /**
  35.      * Get the XMPPConnection of this Manager if it's authenticated, i.e. logged in. Otherwise throw a {@link NotLoggedInException}.
  36.      *
  37.      * @return the XMPPConnection of this Manager.
  38.      * @throws NotLoggedInException if the connection is not authenticated.
  39.      */
  40.     protected final XMPPConnection getAuthenticatedConnectionOrThrow() throws NotLoggedInException {
  41.         XMPPConnection connection = connection();
  42.         if (!connection.isAuthenticated()) {
  43.             throw new NotLoggedInException();
  44.         }
  45.         return connection;
  46.     }

  47.     protected static final ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit) {
  48.         return schedule(runnable, delay, unit, ScheduledAction.Kind.NonBlocking);
  49.     }

  50.     protected static final ScheduledAction scheduleBlocking(Runnable runnable, long delay, TimeUnit unit) {
  51.         return schedule(runnable, delay, unit, ScheduledAction.Kind.Blocking);
  52.     }

  53.     protected static final ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit, ScheduledAction.Kind scheduledActionKind) {
  54.         return AbstractXMPPConnection.SMACK_REACTOR.schedule(runnable, delay, unit, scheduledActionKind);
  55.     }
  56. }