org/sonews/storage/StorageManager.java
author cli
Sun May 09 12:38:46 2010 +0200 (2010-05-09)
changeset 30 146b3275b792
permissions -rw-r--r--
The StorageBackendException is catched two times so that the user see the "500 internal server error" only at the second catch (probably fixes #5).
chris@3
     1
/*
chris@3
     2
 *   SONEWS News Server
chris@3
     3
 *   see AUTHORS for the list of contributors
chris@3
     4
 *
chris@3
     5
 *   This program is free software: you can redistribute it and/or modify
chris@3
     6
 *   it under the terms of the GNU General Public License as published by
chris@3
     7
 *   the Free Software Foundation, either version 3 of the License, or
chris@3
     8
 *   (at your option) any later version.
chris@3
     9
 *
chris@3
    10
 *   This program is distributed in the hope that it will be useful,
chris@3
    11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
chris@3
    12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
chris@3
    13
 *   GNU General Public License for more details.
chris@3
    14
 *
chris@3
    15
 *   You should have received a copy of the GNU General Public License
chris@3
    16
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
chris@3
    17
 */
chris@3
    18
chris@3
    19
package org.sonews.storage;
chris@3
    20
chris@3
    21
/**
chris@3
    22
 *
chris@3
    23
 * @author Christian Lins
chris@3
    24
 * @since sonews/1.0
chris@3
    25
 */
chris@3
    26
public final class StorageManager
chris@3
    27
{
chris@3
    28
chris@3
    29
  private static StorageProvider provider;
chris@3
    30
chris@3
    31
  public static Storage current()
chris@3
    32
    throws StorageBackendException
chris@3
    33
  {
chris@3
    34
    synchronized(StorageManager.class)
chris@3
    35
    {
chris@3
    36
      if(provider == null)
chris@3
    37
      {
chris@3
    38
        return null;
chris@3
    39
      }
chris@3
    40
      else
chris@3
    41
      {
chris@3
    42
        return provider.storage(Thread.currentThread());
chris@3
    43
      }
chris@3
    44
    }
chris@3
    45
  }
chris@3
    46
chris@3
    47
  public static StorageProvider loadProvider(String pluginClassName)
chris@3
    48
  {
chris@3
    49
    try
chris@3
    50
    {
chris@3
    51
      Class<?> clazz = Class.forName(pluginClassName);
chris@3
    52
      Object   inst  = clazz.newInstance();
chris@3
    53
      return (StorageProvider)inst;
chris@3
    54
    }
chris@3
    55
    catch(Exception ex)
chris@3
    56
    {
chris@3
    57
      System.err.println(ex);
chris@3
    58
      return null;
chris@3
    59
    }
chris@3
    60
  }
chris@3
    61
chris@3
    62
  /**
chris@3
    63
   * Sets the current storage provider.
chris@3
    64
   * @param provider
chris@3
    65
   */
chris@3
    66
  public static void enableProvider(StorageProvider provider)
chris@3
    67
  {
chris@3
    68
    synchronized(StorageManager.class)
chris@3
    69
    {
chris@3
    70
      if(StorageManager.provider != null)
chris@3
    71
      {
chris@3
    72
        disableProvider();
chris@3
    73
      }
chris@3
    74
      StorageManager.provider = provider;
chris@3
    75
    }
chris@3
    76
  }
chris@3
    77
chris@3
    78
  /**
chris@3
    79
   * Disables the current provider.
chris@3
    80
   */
chris@3
    81
  public static void disableProvider()
chris@3
    82
  {
chris@3
    83
    synchronized(StorageManager.class)
chris@3
    84
    {
chris@3
    85
      provider = null;
chris@3
    86
    }
chris@3
    87
  }
chris@3
    88
chris@3
    89
}