content: package rabbitescape.engine.config;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import rabbitescape.engine.err.RabbitEscapeException;
  
  public class ConfigSchema
  {
      public class KeyNotAllowed extends RabbitEscapeException
      {
          private static final long serialVersionUID = 1L;
  
          public final String key;
  
          public KeyNotAllowed( String key )
          {
              this.key = key;
          }
      }
  
      // ---
  
      public final Map<String, String> defaults = new HashMap<>();
  
      private final Map<String, String> descriptions = new HashMap<>();
  
      public ConfigSchema()
      {
          defaults.put( Config.CFG_VERSION, "0" );
  
          descriptions.put(
              Config.CFG_VERSION, "The version of this config file." );
      }
  
      public void set( String key, String defaultValue, String description )
      {
          if ( key.equals( Config.CFG_VERSION ) )
          {
              throw new KeyNotAllowed( Config.CFG_VERSION );
          }
  
          defaults.put( key, defaultValue );
          descriptions.put( key, description );
      }
  
      public String getDefault( String key )
      {
          String ret = defaults.get( key );
          if ( ret == null )
          {
              throw new Config.UnknownKey( key );
          }
          return ret;
      }
  
      public void checkKeyExists( String key )
      {
          getDefault( key );
      }
  
      public String getDescription( String key )
      {
          String ret = descriptions.get( key );
          if ( ret == null )
          {
              throw new Config.UnknownKey( key );
          }
          return ret;
      }
  }