001/*
002 * Copyright 2011-2016 UnboundID Corp.
003 *
004 * This program is free software; you can redistribute it and/or modify
005 * it under the terms of the GNU General Public License (GPLv2 only)
006 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
007 * as published by the Free Software Foundation.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, see <http://www.gnu.org/licenses>.
016 */
017
018package com.unboundid.scim.sdk;
019
020import static com.unboundid.scim.sdk.StaticUtils.*;
021
022
023
024/**
025 * This enumeration defines a set of debugging types that are used by the SCIM
026 * SDK.
027 */
028public enum DebugType
029{
030  /**
031   * The debug type that will be used for debugging information about
032   * exceptions that are caught.
033   */
034  EXCEPTION("exception"),
035
036
037
038  /**
039   * The debug type that will be used for information about coding errors or
040   * other types of incorrect uses of the SCIM SDK.
041   */
042  CODING_ERROR("coding-error"),
043
044
045
046  /**
047   * The debug type that will be used for debug messages not applicable to any
048   * of the other categories.
049   */
050  OTHER("other");
051
052
053
054  // The name for this debug type.
055  private final String name;
056
057
058
059  /**
060   * Creates a new debug type with the specified name.
061   *
062   * @param  name  The name for this debug type.  It should be in all lowercase
063   *               characters.
064   */
065  private DebugType(final String name)
066  {
067    this.name = name;
068  }
069
070
071
072  /**
073   * Retrieves the name for this debug type.
074   *
075   * @return  The name for this debug type.
076   */
077  public String getName()
078  {
079    return name;
080  }
081
082
083
084  /**
085   * Retrieves the debug type with the specified name.
086   *
087   * @param  name  The name of the debug type to retrieve.
088   *
089   * @return  The requested debug type, or {@code null} if there is no such
090   *          debug type.
091   */
092  public static DebugType forName(final String name)
093  {
094    final String lowerName = toLowerCase(name);
095
096    if (lowerName.equals("exception"))
097    {
098      return EXCEPTION;
099    }
100    else if (lowerName.equals("coding-error"))
101    {
102      return CODING_ERROR;
103    }
104    else if (lowerName.equals("other"))
105    {
106      return OTHER;
107    }
108
109    return null;
110  }
111
112
113
114  /**
115   * Retrieves a comma-delimited list of the defined debug type names.
116   *
117   * @return  A comma-delimited list of the defined debug type names.
118   */
119  public static String getTypeNameList()
120  {
121    final StringBuilder buffer = new StringBuilder();
122
123    final DebugType[] types = DebugType.values();
124    for (int i=0; i < types.length; i++)
125    {
126      if (i > 0)
127      {
128        buffer.append(", ");
129      }
130
131      buffer.append(types[i].getName());
132    }
133
134    return buffer.toString();
135  }
136
137
138
139  /**
140   * Retrieves a string representation of this debug type.
141   *
142   * @return  A string representation of this debug type.
143   */
144  @Override()
145  public String toString()
146  {
147    return name;
148  }
149}