001/* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * docs/licenses/cddl.txt 011 * or http://www.opensource.org/licenses/cddl1.php. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * docs/licenses/cddl.txt. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2011-2021 Ping Identity Corporation 026 */ 027package com.unboundid.directory.sdk.ds.types; 028 029 030import com.unboundid.util.ThreadSafety; 031import com.unboundid.util.ThreadSafetyLevel; 032 033 034/** 035 * This class implements an enumeration that may be used to control 036 * the writability mode for the entire server or for a specific 037 * backend. The writability mode may be "enabled", "disabled", or 038 * "internal-only". 039 */ 040@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 041public enum WritabilityMode 042{ 043 /** 044 * Indicates that all write operations should be allowed. 045 */ 046 ENABLED("enabled"), 047 048 049 050 /** 051 * Indicates that all write operations should be rejected. 052 */ 053 DISABLED("disabled"), 054 055 056 057 /** 058 * Indicates that write operations from clients will be rejected, 059 * but internal operations and updates through replication will 060 * be allowed. 061 */ 062 INTERNAL_ONLY("internal-only"); 063 064 065 066 // The human-readable name for this writability mode. 067 private String modeName; 068 069 070 071 /** 072 * Creates a new {@code WritabilityMode} with the provided name. 073 * 074 * @param modeName The human-readable name for this {@code WritabilityMode}. 075 */ 076 WritabilityMode(final String modeName) 077 { 078 this.modeName = modeName; 079 } 080 081 082 083 /** 084 * Retrieves the {@code WritabilityMode} for the specified name. 085 * 086 * @param modeName The name of the {@code WritabilityMode} to retrieve. 087 * 088 * @return The requested {@code WritabilityMode}, or <CODE>null</CODE> if 089 * the provided value is not the name of a valid mode. 090 */ 091 public static WritabilityMode forName(final String modeName) 092 { 093 String lowerName = modeName.toLowerCase(); 094 if (lowerName.equals("enabled")) 095 { 096 return WritabilityMode.ENABLED; 097 } 098 else if (lowerName.equals("disabled")) 099 { 100 return WritabilityMode.DISABLED; 101 } 102 else if (lowerName.equals("internal-only") || 103 lowerName.equals("internal_only")) 104 { 105 return WritabilityMode.INTERNAL_ONLY; 106 } 107 else 108 { 109 return null; 110 } 111 } 112 113 114 115 /** 116 * Retrieves a string representation of this {@code WritabilityMode}. 117 * 118 * @return A string representation of this {@code WritabilityMode}. 119 */ 120 @Override 121 public String toString() 122 { 123 return modeName; 124 } 125}