001/*
002 * Copyright 2002-2017 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      https://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.springframework.core.env;
018
019import java.util.LinkedHashSet;
020import java.util.Set;
021
022/**
023 * Exception thrown when required properties are not found.
024 *
025 * @author Chris Beams
026 * @since 3.1
027 * @see ConfigurablePropertyResolver#setRequiredProperties(String...)
028 * @see ConfigurablePropertyResolver#validateRequiredProperties()
029 * @see org.springframework.context.support.AbstractApplicationContext#prepareRefresh()
030 */
031@SuppressWarnings("serial")
032public class MissingRequiredPropertiesException extends IllegalStateException {
033
034        private final Set<String> missingRequiredProperties = new LinkedHashSet<String>();
035
036
037        void addMissingRequiredProperty(String key) {
038                this.missingRequiredProperties.add(key);
039        }
040
041        @Override
042        public String getMessage() {
043                return "The following properties were declared as required but could not be resolved: " +
044                                getMissingRequiredProperties();
045        }
046
047        /**
048         * Return the set of properties marked as required but not present
049         * upon validation.
050         * @see ConfigurablePropertyResolver#setRequiredProperties(String...)
051         * @see ConfigurablePropertyResolver#validateRequiredProperties()
052         */
053        public Set<String> getMissingRequiredProperties() {
054                return this.missingRequiredProperties;
055        }
056
057}