/*******************************************************************************
 * Copyright (c) 2010 BSI Business Systems Integration AG.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     BSI Business Systems Integration AG - initial API and implementation
 ******************************************************************************/
package org.eclipse.scout.rt.shared;

import org.eclipse.scout.service.IService;

/**
 * Indicates whether the osgi is running in offline mode or online mode
 * <p>
 * see {@link IService} for description of this indicator class
 */
public final class OfflineState {
  private static boolean defaultValue = false;
  private static final ThreadLocal<Boolean> THREAD_LOCAL = new ThreadLocal<Boolean>();

  private OfflineState() {
  }

  public static boolean isOfflineDefault() {
    return defaultValue;
  }

  public static boolean isOnlineDefault() {
    return !isOfflineDefault();
  }

  /**
   * Sets the default state. Thread-specific values {@link #setOfflineInCurrentThread()} are not changed by this method.
   */
  public static void setOfflineDefault(boolean b) {
    defaultValue = b;
  }

  public static boolean isOfflineInCurrentThread() {
    Boolean var = THREAD_LOCAL.get();
    if (var != null) {
      return var.booleanValue();
    }
    else {
      return isOfflineDefault();
    }
  }

  public static boolean isOnlineInCurrentThread() {
    return !isOfflineInCurrentThread();
  }

  /**
   * @param b
   *          true, false, null null clears the thread-specific value and uses
   *          the default of {@link #isOfflineDefault()}
   */
  public static void setOfflineInCurrentThread(Boolean b) {
    THREAD_LOCAL.set(b);
  }
}
