/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.schema;

/**
 * Enum for an attribute usage schema element.
 *
 * <pre>
   AttributeUsage =
     "userApplications"     /
     "directoryOperation"   /
     "distributedOperation" / ; DSA-shared
     "dSAOperation"           ; DSA-specific, value depends on server
 * </pre>
 *
 * @author  Middleware Services
 */
public enum AttributeUsage {

  /** user applications. */
  USER_APPLICATIONS("userApplications", false),

  /** directory operation. */
  DIRECTORY_OPERATION("directoryOperation", true),

  /** distributed operation. */
  DISTRIBUTED_OPERATION("distributedOperation", true),

  /** dSA operation. */
  DSA_OPERATION("dSAOperation", true);

  /** Name of this attribute usage. */
  private final String name;

  /** Whether this attribute usage is operational. */
  private final boolean operational;


  /**
   * Creates a new attribute usage.
   *
   * @param  s  name of this usage
   * @param  b  whether this usage is operational
   */
  AttributeUsage(final String s, final boolean b)
  {
    name = s;
    operational = b;
  }


  /**
   * Returns the name.
   *
   * @return  attribute usage name
   */
  public String getName()
  {
    return name;
  }


  /**
   * Whether this attribute usage is operational.
   *
   * @return  whether this attribute usage is operational
   */
  public boolean isOperational()
  {
    return operational;
  }


  /**
   * Returns the attribute usage for the supplied string name.
   *
   * @param  s  case-insensitive name to find attribute usage for
   *
   * @return  attribute usage or null if name cannot be found
   */
  public static AttributeUsage parse(final String s)
  {
    for (AttributeUsage usage : AttributeUsage.values()) {
      if (usage.getName().equalsIgnoreCase(s)) {
        return usage;
      }
    }
    return null;
  }
}
