001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau;
018
019import static org.apache.juneau.commons.utils.Utils.*;
020
021import java.text.*;
022
023/**
024 * An exception that typically occurs when trying to perform an invalid operation on a configuration property.
025 *
026 * @serial exclude
027 */
028public class ConfigException extends BasicRuntimeException {
029   private static final long serialVersionUID = 1L;
030
031   /**
032    * Constructor
033    *
034    * @param message The error message.
035    * @param args Optional {@link MessageFormat}-style arguments.
036    */
037   public ConfigException(String message, Object...args) {
038      this(null, message, args);
039   }
040
041   /**
042    * Constructor.
043    *
044    * @param cause The cause of this exception.
045    * @param message The {@link MessageFormat}-style message.
046    * @param args Optional {@link MessageFormat}-style arguments.
047    */
048   public ConfigException(Throwable cause, String message, Object...args) {
049      super(cause, message, args);
050   }
051
052   @Override
053   public String getMessage() {
054      Throwable t = getCause();
055      if (t == null)
056         return super.getMessage();
057      var sb = new StringBuilder(super.getMessage());
058      while (nn(t)) {
059         sb.append("  ").append(t.getMessage());
060         t = t.getCause();
061      }
062      return sb.toString();
063   }
064
065   @Override /* Overridden from BasicRuntimeException */
066   public ConfigException setMessage(String message, Object...args) {
067      super.setMessage(message, args);
068      return this;
069   }
070}