Examples of ConfigObject


Examples of com.typesafe.config.ConfigObject

        /** if config value is a list, see if the base class has an _array alias */
        if (configValue.valueType() == ConfigValueType.LIST) {
            Class<T> arrayType = (Class<T>) pluginMap.arraySugar();
            if (arrayType != null) {
                Config aliasDefaults = pluginMap.aliasDefaults("_array").toConfig();
                ConfigObject fieldsValues = configValue.atKey(aliasDefaults.getString("_primary")).root()
                                                       .withFallback(aliasDefaults);
                CodableClassInfo arrayInfo = getOrCreateClassInfo(arrayType);
                return createAndPopulate(arrayInfo, arrayType, fieldsValues);
            } // else just let the error get thrown below
        }
View Full Code Here

Examples of com.typesafe.config.ConfigObject

                                                    "STRING", typeValue.valueType().toString());
            }
            String stype = (String) typeValue.unwrapped();
            try {
                Class<T> normalType = (Class<T>) pluginMap.getClass(stype);
                ConfigObject aliasDefaults = pluginMap.aliasDefaults(stype);
                ConfigObject fieldValues = configObject.withoutKey(classField).withFallback(aliasDefaults);
                CodableClassInfo normalInfo = getOrCreateClassInfo(normalType);
                return createAndPopulate(normalInfo, normalType, fieldValues);
            } catch (ClassNotFoundException e) {
                String helpMessage = Plugins.classNameSuggestions(pluginRegistry, pluginMap, stype);
                throw new ConfigException.UnresolvedSubstitution(configObject.origin(), helpMessage, e);
            }
        }

        /** if no chance of instantiating current type, try to get a new type from various special syntax/ settings */
        if ((type == null) || Modifier.isAbstract(type.getModifiers()) || Modifier.isInterface(type.getModifiers())) {

            /** "type-value : {...}"  syntax; ie. if there is only one key, see if it would be a valid type */
            if (configObject.size() == 1) {
                String sugarType = configObject.keySet().iterator().next();
                try {
                    Class<T> singleKeyType = (Class<T>) pluginMap.getClass(sugarType);
                    ConfigObject aliasDefaults = pluginMap.aliasDefaults(sugarType);
                    ConfigValue configValue = configObject.get(sugarType);
                    // if value is not an object, try supporting _primary syntax to derive one
                    if (configValue.valueType() != ConfigValueType.OBJECT) {
                        if (aliasDefaults.get("_primary") != null) {
                            configValue = configValue.atPath((String) aliasDefaults.get("_primary").unwrapped()).root();
                        } else {
                            throw new ConfigException.WrongType(configValue.origin(), sugarType,
                                                                "OBJECT", configValue.valueType().toString());
                        }
                    }
                    ConfigObject fieldValues = ((ConfigObject) configValue).withFallback(aliasDefaults);
                    CodableClassInfo singleKeyInfo = getOrCreateClassInfo(singleKeyType);
                    return createAndPopulate(singleKeyInfo, singleKeyType, fieldValues);
                } catch (ClassNotFoundException ignored) {
                    // expected when the single key is not a valid alias or class. could avoid exception if we dropped
                    // support for single-keys that are just classes (ie. anonymous aliases), but we'll leave it in
                    // until we have some, more concrete, reason to remove it.
                }
            }

            /** inlined types syntax ie "{ type-value: some-value, some-field: some-other-value, ...}".
             *  Opt-in is on a per alias basis, and the target type must be unambiguous amongst aliases
             *  that have opted in. The recognized alias label is then replaced with the _primary field. */
            String matched = null;
            for (String alias : pluginMap.inlinedAliases()) {
                if (configObject.get(alias) != null) {
                    if (matched != null) {
                        String message = String.format(
                                "no type specified, more than one key, and both %s and %s match for inlined types.",
                                matched, alias);
                        throw new ConfigException.Parse(configObject.origin(), message);
                    }
                    matched = alias;
                }
            }
            if (matched != null) {
                Class<T> inlinedType = (Class<T>) pluginMap.getClassIfConfigured(matched);
                assert inlinedType != null : "matched is always a key from the pluginMap's inlinedAliases set";
                CodableClassInfo inlinedInfo = getOrCreateClassInfo(inlinedType);
                ConfigObject aliasDefaults = pluginMap.aliasDefaults(matched);
                ConfigValue configValue = configObject.get(matched);
                String primaryField = (String) aliasDefaults.get("_primary").unwrapped();
                ConfigObject fieldValues =  configObject.toConfig().withValue(primaryField, configValue).root()
                                                        .withoutKey(matched)
                                                        .withFallback(aliasDefaults);
                return createAndPopulate(inlinedInfo, inlinedType, fieldValues);
            }

            /** lastly, check for a _default type. */
            Class<T> defaultType = (Class<T>) pluginMap.defaultSugar();
            if (defaultType != null) {
                CodableClassInfo defaultInfo = getOrCreateClassInfo(defaultType);
                ConfigObject aliasDefaults = pluginMap.aliasDefaults("_default");
                ConfigObject fieldValues = configObject.withFallback(aliasDefaults);
                return createAndPopulate(defaultInfo, defaultType, fieldValues);
            }

            /** we know it is not a type we can instantiate, and none of our syntactic sugar picked up anything. */
            throw new ConfigException.Parse(configObject.origin(),
View Full Code Here

Examples of com.typesafe.config.ConfigObject

    }

    public static ConfigObject expandSugar(Class<?> type, ConfigValue config, CodecConfig codec) {
        CodableClassInfo typeInfo = codec.getOrCreateClassInfo(type);
        PluginMap pluginMap = typeInfo.getPluginMap();
        ConfigObject root = resolveType(type, config, pluginMap);
        String classField = pluginMap.classField();
        if (root.get(classField) != null) {
            try {
                type = pluginMap.getClass((String) root.get(classField).unwrapped());
            } catch (ClassNotFoundException ignored) {
                // try not to throw exceptions or at least checked exceptions from this helper method
            }
        }
        return expandSugarSkipResolve(type, root, codec);
View Full Code Here

Examples of com.typesafe.config.ConfigObject

        return expandSugarSkipResolve(type, root, codec);
    }

    private static ConfigObject expandSugarSkipResolve(Class<?> type, ConfigObject root, CodecConfig codec) {
        CodableClassInfo resolvedTypeInfo = codec.getOrCreateClassInfo(type);
        ConfigObject fieldDefaults = resolvedTypeInfo.getFieldDefaults().root();
        for (CodableFieldInfo fieldInfo : resolvedTypeInfo.values()) {
            String fieldName = fieldInfo.getName();
            ConfigValue fieldValue = root.get(fieldName);
            if ((fieldValue == null) && (fieldDefaults.get(fieldName) != null)) {
                ConfigValue fieldDefault = fieldDefaults.get(fieldName);
                fieldValue = ConfigValueFactory.fromAnyRef(
                        fieldDefault.unwrapped(), "global default : " + fieldDefault.origin().description());
                root = root.withValue(fieldName, fieldValue);
            }
            if (fieldValue == null) {
                continue;
            }
            if ((fieldInfo.isArray() || fieldInfo.isCollection()) &&
                (fieldValue.valueType() != ConfigValueType.LIST) && fieldInfo.autoArrayEnabled()) {
                fieldValue = ConfigValueFactory.fromIterable(
                        Collections.singletonList(fieldValue.unwrapped()), "auto collection of " +
                                                                           fieldValue.origin().description());
                root = root.withValue(fieldName, fieldValue);
            }
            if (!isCodableType(fieldInfo)) {
                continue;
            }
            if (fieldInfo.isArray() || fieldInfo.isCollection()) {
                if (fieldValue.valueType() != ConfigValueType.LIST) {
                    throw new ConfigException.WrongType(fieldValue.origin(), fieldName,
                                                        ConfigValueType.LIST.name(), fieldValue.valueType().name());
                }
                Class<?> elementType = elementType(fieldInfo);
                boolean nested = fieldInfo.isCollectionArray();
                fieldValue = expandSugarArray(fieldValue, elementType, codec, nested);
            } else if (fieldInfo.isMap()) {
                if (fieldValue.valueType() != ConfigValueType.OBJECT) {
                    throw new ConfigException.WrongType(fieldValue.origin(), fieldName,
                                                        ConfigValueType.OBJECT.name(), fieldValue.valueType().name());
                }
                Class<?> elementType = elementType(fieldInfo);
                boolean nested = fieldInfo.isMapValueArray();
                ConfigObject fieldMap = (ConfigObject) fieldValue;
                Map<String, Object> newMap = new HashMap<>(fieldMap.size());
                for (Map.Entry<String, ConfigValue> mapEntry : fieldMap.entrySet()) {
                    ConfigValue mapValue = mapEntry.getValue();
                    String mapKey = mapEntry.getKey();
                    ConfigValue resolvedMapObject;
                    if (nested) {
                        resolvedMapObject = expandSugarArray(mapValue, elementType, codec, false);
                    } else {
                        resolvedMapObject = expandSugar(elementType, mapValue, codec);
                    }
                    newMap.put(mapKey, resolvedMapObject.unwrapped());
                }
                fieldValue = ConfigValueFactory.fromMap(newMap, fieldMap.origin().description());
            } else {
                fieldValue = expandSugar(fieldInfo.getType(), fieldValue, codec);
            }
            root = root.withValue(fieldName, fieldValue);
        }
View Full Code Here

Examples of com.typesafe.config.ConfigObject

    private static ConfigObject resolveType(Class<?> type, ConfigValue objectOrArray, PluginMap pluginMap) {
        String classField = pluginMap.classField();
        if (objectOrArray.valueType() == ConfigValueType.LIST) {
            Class<?> arrayType = pluginMap.arraySugar();
            if (arrayType != null) {
                ConfigObject aliasDefaults = pluginMap.aliasDefaults("_array");
                String arrayFieldName = aliasDefaults.toConfig().getString("_primary");
                String arraySugarName = pluginMap.getLastAlias("_array");
                return ConfigFactory.empty().withValue(
                        classField, ConfigValueFactory.fromAnyRef(
                                arraySugarName, pluginMap.category() + " array sugar : " +
                                                pluginMap.config().root().get("_array").origin().description()))
                                    .withValue(arrayFieldName, objectOrArray)
                                    .withFallback(aliasDefaults)
                                    .root();
            } else {
                throw new ConfigException.WrongType(objectOrArray.origin(),
                                                    "found an array instead of an object, but no array type set");
            }
        }
        if (objectOrArray.valueType() != ConfigValueType.OBJECT) {
            throw new ConfigException.WrongType(objectOrArray.origin(),
                                                "invalid config type of " + objectOrArray.valueType() +
                                                " for " + pluginMap);
        }
        ConfigObject root = (ConfigObject) objectOrArray;
        ConfigValue classValue = root.get(classField);
        // normal, explicit typing
        if ((classValue != null) && (classValue.valueType() == ConfigValueType.STRING)) {
            String classValueString = (String) classValue.unwrapped();
            ConfigObject aliasDefaults = pluginMap.aliasDefaults(classValueString);
            return root.withFallback(aliasDefaults);
        }

        if ((type == null) || Modifier.isAbstract(type.getModifiers()) || Modifier.isInterface(type.getModifiers())) {
            // single key as type
            if (root.size() == 1) {
                String onlyKey = root.keySet().iterator().next();
                try {
                    pluginMap.getClass(onlyKey); // make sure key is a valid type
                    ConfigValue configValue = root.values().iterator().next();
                    ConfigObject aliasDefaults = pluginMap.aliasDefaults(onlyKey);
                    if (configValue.valueType() != ConfigValueType.OBJECT) {
                        if (aliasDefaults.get("_primary") != null) {
                            configValue = configValue.atPath((String) aliasDefaults.get("_primary").unwrapped()).root();
                        } else {
                            throw new ConfigException.WrongType(configValue.origin(), onlyKey,
                                                                "OBJECT", configValue.valueType().toString());
                        }
                    }
                    ConfigObject fieldValues = (ConfigObject) configValue;
                    return fieldValues.withValue(classField, ConfigValueFactory.fromAnyRef(
                            onlyKey, "single key to type from " + root.origin().description()))
                                      .withFallback(aliasDefaults);
                } catch (ClassNotFoundException ignored) {
                }
            }

            // inlined type
            String matched = null;
            for (String alias : pluginMap.inlinedAliases()) {
                if (root.get(alias) != null) {
                    if (matched != null) {
                        String message = String.format(
                                "no type specified, more than one key, and both %s and %s match for inlined types.",
                                matched, alias);
                        throw new ConfigException.Parse(root.origin(), message);
                    }
                    matched = alias;
                }
            }
            if (matched != null) {
                ConfigObject aliasDefaults = pluginMap.aliasDefaults(matched);
                ConfigValue configValue = root.get(matched);
                String primaryField = (String) aliasDefaults.get("_primary").unwrapped();
                ConfigObject fieldValues =  root.toConfig().withValue(primaryField, configValue).root()
                                                        .withoutKey(matched)
                                                        .withFallback(aliasDefaults);
                return fieldValues.withValue(classField, ConfigValueFactory.fromAnyRef(
                        matched, "inlined key to type from " + root.origin().description()));
            }

            // default type
            ConfigValue defaultObject = pluginMap.config().root().get("_default");
            if (defaultObject != null) {
                String defaultName = pluginMap.getLastAlias("_default");
                ConfigObject aliasDefaults = pluginMap.aliasDefaults("_default");
                return root.withValue(classField, ConfigValueFactory.fromAnyRef(
                        defaultName, pluginMap.category() + " default type : "
                                     + defaultObject.origin().description()))
                           .withFallback(aliasDefaults);
            }
View Full Code Here

Examples of com.typesafe.config.ConfigObject

                /* if config value is a list see if the base class has an _array alias */
                if (configValue.valueType() == ConfigValueType.LIST) {
                    Class<T> arrayType = (Class<T>) pluginMap.arraySugar();
                    if (arrayType != null) {
                        Config aliasDefaults = pluginMap.aliasDefaults("_array").toConfig();
                        ConfigObject fieldsValues = configValue.atKey(aliasDefaults.getString("_primary")).root()
                                                               .withFallback(aliasDefaults);
                        CodableClassInfo arrayInfo = getOrCreateClassInfo(arrayType);
                        return createAndPopulate(arrayInfo, arrayType, fieldsValues);
                    } // else just let the error get thrown below
                }
View Full Code Here

Examples of com.typesafe.config.ConfigObject

                                                    "STRING", typeValue.valueType().toString());
            }
            String stype = (String) typeValue.unwrapped();
            try {
                Class<T> normalType = (Class<T>) pluginMap.getClass(stype);
                ConfigObject aliasDefaults = pluginMap.aliasDefaults(stype);
                ConfigObject fieldValues = configObject.withoutKey(classField).withFallback(aliasDefaults);
                CodableClassInfo normalInfo = getOrCreateClassInfo(normalType);
                return createAndPopulate(normalInfo, normalType, fieldValues);
            } catch (ClassNotFoundException e) {
                String helpMessage = Plugins.classNameSuggestions(pluginRegistry, pluginMap, stype);
                throw new ConfigException.UnresolvedSubstitution(configObject.origin(), helpMessage, e);
            }
        }

        /* if no chance of instantiating current type, try to get a new type from various special syntax/ settings */
        if ((type == null) || Modifier.isAbstract(type.getModifiers()) || Modifier.isInterface(type.getModifiers())) {

            /* "type-value : {...}"  syntax; ie. if there is only one key, see if it would be a valid type */
            if (configObject.size() == 1) {
                String singleKeyName = configObject.keySet().iterator().next();
                try {
                    Class<T> singleKeyType = (Class<T>) pluginMap.getClass(singleKeyName);
                    CodableClassInfo singleKeyInfo = getOrCreateClassInfo(singleKeyType);
                    ConfigObject aliasDefaults = pluginMap.aliasDefaults(singleKeyName);
                    ConfigValue configValue = configObject.get(singleKeyName);
                    if (configValue.valueType() != ConfigValueType.OBJECT) {
                        if (aliasDefaults.get("_primary") != null) {
                            // if value is not an object, try supporting _primary syntax to derive one
                            configValue = configValue.atPath((String) aliasDefaults.get("_primary").unwrapped()).root();
                        } else if (ValueCodable.class.isAssignableFrom(singleKeyType)) {
                            // see if the resolved type is innately okay with non-objects
                            try {
                                T objectShell = singleKeyType.newInstance();
                                Config fieldDefaults = singleKeyInfo.getFieldDefaults();
                                // do not merge objects between global defaults and user defaults (incl. alias defaults)
                                ConfigObject mergedDefaults = aliasDefaults;
                                for (Map.Entry<String, ConfigValue> pair : fieldDefaults.entrySet()) {
                                    if (!mergedDefaults.containsKey(pair.getKey())) {
                                        mergedDefaults = mergedDefaults.withValue(pair.getKey(), pair.getValue());
                                    }
                                }
                                ((ValueCodable) objectShell).fromConfigValue(configValue, mergedDefaults);
                                return objectShell;
                            } catch (InstantiationException | IllegalAccessException | RuntimeException ex) {
                                throw new ConfigException.BadValue(configValue.origin(), singleKeyType.getName(),
                                                                   "exception during instantiation of a ValueCodable", ex);
                            }
                        } else {
                            throw new ConfigException.WrongType(configValue.origin(), singleKeyName,
                                                                "OBJECT", configValue.valueType().toString());
                        }
                    }
                    ConfigObject fieldValues = ((ConfigObject) configValue).withFallback(aliasDefaults);
                    return createAndPopulate(singleKeyInfo, singleKeyType, fieldValues);
                } catch (ClassNotFoundException ignored) {
                    // expected when the single key is not a valid alias or class. could avoid exception if we dropped
                    // support for single-keys that are just classes (ie. anonymous aliases), but we'll leave it in
                    // until we have some, more concrete, reason to remove it.
                }
            }

            /* inlined types syntax ie "{ type-value: some-value, some-field: some-other-value, ...}".
             * Opt-in is on a per alias basis, and the target type must be unambiguous amongst aliases
             * that have opted in. The recognized alias label is then replaced with the _primary field. */
            String matched = null;
            for (String alias : pluginMap.inlinedAliases()) {
                if (configObject.get(alias) != null) {
                    if (matched != null) {
                        String message = String.format(
                                "no type specified, more than one key, and both %s and %s match for inlined types.",
                                matched, alias);
                        throw new ConfigException.Parse(configObject.origin(), message);
                    }
                    matched = alias;
                }
            }
            if (matched != null) {
                Class<T> inlinedType = (Class<T>) pluginMap.getClassIfConfigured(matched);
                assert inlinedType != null : "matched is always a key from the pluginMap's inlinedAliases set";
                CodableClassInfo inlinedInfo = getOrCreateClassInfo(inlinedType);
                ConfigObject aliasDefaults = pluginMap.aliasDefaults(matched);
                ConfigValue configValue = configObject.get(matched);
                String primaryField = (String) aliasDefaults.get("_primary").unwrapped();
                ConfigObject fieldValues =  configObject.toConfig().withValue(primaryField, configValue).root()
                                                        .withoutKey(matched)
                                                        .withFallback(aliasDefaults);
                return createAndPopulate(inlinedInfo, inlinedType, fieldValues);
            }

            /* lastly, check for a _default type. */
            Class<T> defaultType = (Class<T>) pluginMap.defaultSugar();
            if (defaultType != null) {
                CodableClassInfo defaultInfo = getOrCreateClassInfo(defaultType);
                ConfigObject aliasDefaults = pluginMap.aliasDefaults("_default");
                ConfigObject fieldValues = configObject.withFallback(aliasDefaults);
                return createAndPopulate(defaultInfo, defaultType, fieldValues);
            }

            /* we know it is not a type we can instantiate, and none of our syntactic sugar picked up anything. */
            throw new ConfigException.Parse(configObject.origin(),
View Full Code Here

Examples of groovy.util.ConfigObject

            }
            else {
                this.config = new PropertySourcesConfig();
                if(ClassUtils.isPresent("Config", classLoader)) {
                    try {
                        ConfigObject co = new ConfigSlurper().parse(ClassUtils.forName("Config", classLoader));
                        this.config.merge(co);
                    } catch (ClassNotFoundException e) {
                        // ignore
                    }
                }
View Full Code Here

Examples of groovy.util.ConfigObject

     * @return The currently bound GrailsApplication instance
     * @since 2.0
     */
    public static Map currentConfiguration() {
        GrailsApplication application = currentApplication();
        return application == null ? new ConfigObject() : application.getConfig();
    }
View Full Code Here

Examples of groovy.util.ConfigObject

    }

    public void informOfClassChange(File file, @SuppressWarnings("rawtypes") Class cls) {
        if (cls != null && (cls.getName().equals(CONFIG_FILE) || cls.getName().equals(GrailsApplication.DATA_SOURCE_CLASS))) {
            ConfigSlurper configSlurper = ConfigurationHelper.getConfigSlurper(Environment.getCurrent().getName(), application);
            ConfigObject c;
            try {
                c = configSlurper.parse(file.toURI().toURL());
                application.getConfig().merge(c);
                application.configChanged();
                informPluginsOfConfigChange();
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.