Package com.typesafe.config

Examples of com.typesafe.config.ConfigObject


            ConfigValue configValue = config.root().get(label);
            String className;
            if (configValue.valueType() == ConfigValueType.STRING) {
                className = (String) configValue.unwrapped();
            } else if (configValue.valueType() == ConfigValueType.OBJECT) {
                ConfigObject configObject = (ConfigObject) configValue;
                className = configObject.toConfig().getString("_class");
                if (configObject.toConfig().hasPath("_inline") &&
                        configObject.toConfig().getBoolean("_inline")) {
                    mutableInlinedAliasSet.add(label);
                }
            } else {
                throw new ConfigException.WrongType(configValue.origin(), label,
                                                    "STRING OR OBJECT", configValue.valueType().toString());
View Full Code Here


        return config;
    }

    @Nonnull public ConfigObject aliasDefaults(String alias) {
        ConfigValue configValue = config.root().get(alias);
        ConfigObject defaults;
        if ((configValue != null) && (configValue.valueType() == ConfigValueType.OBJECT)) {
            defaults = (ConfigObject) configValue;
        } else {
            defaults = ConfigFactory.empty().root();
        }
        String aliasTarget = aliases.get(alias);
        if (aliasTarget != null) {
            defaults = defaults.withFallback(aliasDefaults(aliasTarget));
        }
        return defaults;
    }
View Full Code Here

        Object bean = _deserializeObjectFromInlinedType(objectNode, classField, objectCodec, ctxt);
        if (bean != null) {
            return bean;
        }
        if (idRes.isValidTypeId("_default")) {
            ConfigObject aliasDefaults = pluginMap.aliasDefaults("_default");
            if (!aliasDefaults.isEmpty()) {
                Jackson.merge(objectNode, Jackson.configConverter(aliasDefaults));
            }
            JsonDeserializer<Object> deser = _findDeserializer(ctxt, "_default");
            JsonParser treeParser = objectCodec.treeAsTokens(objectNode);
            treeParser.nextToken();
View Full Code Here

                }
                matched = alias;
            }
        }
        if (matched != null) {
            ConfigObject aliasDefaults = pluginMap.aliasDefaults(matched);
            JsonNode configValue = objectNode.get(matched);
            String primaryField = (String) aliasDefaults.get("_primary").unwrapped();
            objectNode.remove(matched);
            Jackson.setAt(objectNode, configValue, primaryField);
            Jackson.merge(objectNode, Jackson.configConverter(aliasDefaults));
            if (_typeIdVisible) {
                objectNode.put(classField, matched);
View Full Code Here

                                                             String classField,
                                                             ObjectCodec objectCodec,
                                                             DeserializationContext ctxt) throws IOException {
        String singleKeyName = objectNode.fieldNames().next();
        if (idRes.isValidTypeId(singleKeyName)) {
            ConfigObject aliasDefaults = pluginMap.aliasDefaults(singleKeyName);
            String primaryField;
            if (aliasDefaults.containsKey("_primary")) {
                primaryField = (String) aliasDefaults.get("_primary").unwrapped();
            } else {
                primaryField = null;
            }
            boolean unwrapPrimary = false;
            try {
View Full Code Here

        try {
            deser = _findDeserializer(ctxt, type);
        } catch (Throwable cause) {
            throw wrapWithPath(cause, Class.class, classField);
        }
        ConfigObject aliasDefaults = pluginMap.aliasDefaults(type);
        String primaryField;
        if (aliasDefaults.containsKey("_primary")) {
            primaryField = (String) aliasDefaults.get("_primary").unwrapped();
        } else {
            primaryField = null;
        }
        boolean unwrapPrimary = handleDefaultsAndImplicitPrimary(objectNode, aliasDefaults, deser, ctxt);
        try {
View Full Code Here

        baseClass = findBaseClass;

        // find all fields in the class and its parent classes, and aggregate any defaults
        Map<String, Field> fields = new HashMap<>();
        // slower than using unwrapped, mutable conversions but this preserves origins
        ConfigObject buildDefaults = ConfigFactory.empty().root();

        Class<?> ptrForFields = clazz;
        while (ptrForFields != null) {
            String canonicalClassName = ptrForFields.getCanonicalName();
            ConfigObject classDefaults;
            if ((canonicalClassName != null) && globalDefaults.hasPath(canonicalClassName)) {
                classDefaults = globalDefaults.getObject(canonicalClassName);
            } else {
                classDefaults = ConfigFactory.empty().root();
            }
            for (Field field : ptrForFields.getDeclaredFields()) {
                if (fields.get(field.getName()) == null) {
                    fields.put(field.getName(), field);
                } else {
                    classDefaults = classDefaults.withoutKey(field.getName());
                    log.debug("({}) ignoring field in parent class ({}) with duplicate name ({})",
                              clazz, ptrForFields, field.getName());
                }
            }
            for (Map.Entry<String, ConfigValue> pair : classDefaults.entrySet()) {
                if (!buildDefaults.containsKey(pair.getKey())) {
                    buildDefaults = buildDefaults.withValue(pair.getKey(), pair.getValue());
                }
            }
            ptrForFields = ptrForFields.getSuperclass();
View Full Code Here

                /* 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.atPath(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

        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.
View Full Code Here

                                                    "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())) {
            T maybeSingleKey = hydrateSingleKeyObject(pluginMap, configObject);
            if (maybeSingleKey != null) {
                return maybeSingleKey;
            }

            /* 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.withoutKey(matched).toConfig()
                                                        .withValue(primaryField, configValue).root()
                                                        .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

TOP

Related Classes of com.typesafe.config.ConfigObject

Copyright © 2018 www.massapicom. 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.