private Stream<ParameterMeta> getNestedConfigType(final ParameterMeta parameterMeta) { return concat( (parameterMeta.getJavaType() instanceof Class && parameterMeta .getMetadata() .keySet() .stream() .anyMatch(k -> k.startsWith("tcomp::configurationtype::"))) ? Stream.of(parameterMeta) : Stream.empty(), ofNullable(parameterMeta.getNestedParameters()) .map(Collection::stream) .orElseGet(Stream::empty) .flatMap(this::getNestedConfigType)); }
private Map<String, String> buildMigrationFunction(final ParameterMeta p, final MigrationHandler handler, final String prefix, final Map<String, String> map, final Integer currentVersion) { final String versionPath = String.format("%s.__version", prefix); final String version = map.get(versionPath); final Map<String, String> result = new HashMap<>(map); if (version != null && Integer.parseInt(version.trim()) < currentVersion) { final Map<String, String> toMigrate = stripPrefix(prefix, map); toMigrate.keySet().forEach(result::remove); final Map<String, String> migrated = ofNullable(handler .migrate(Integer.parseInt(version.trim()), toMigrate .entrySet() .stream() .collect(toMap(e -> e.getKey().substring(prefix.length() + 1), Map.Entry::getValue)))) .orElseGet(Collections::emptyMap); result .putAll(migrated .entrySet() .stream() .collect(toMap(e -> prefix + '.' + e.getKey(), Map.Entry::getValue))); result.put(versionPath, currentVersion.toString()); } else { log.debug("No version for {} so skipping any potential migration", p.getJavaType().toString()); } return result; }
private Class<?> toJavaType(final ParameterMeta p) { if (p.getType().equals(OBJECT) || p.getType().equals(ENUM)) { if (Class.class.isInstance(p.getJavaType())) { return Class.class.cast(p.getJavaType()); } throw new IllegalArgumentException("Unsupported type for parameter " + p.getPath() + " (from " + p.getSource().declaringClass() + "), ensure it is a Class<?>"); } if (p.getType().equals(ARRAY) && ParameterizedType.class.isInstance(p.getJavaType())) { final ParameterizedType parameterizedType = ParameterizedType.class.cast(p.getJavaType()); final Type[] arguments = parameterizedType.getActualTypeArguments(); if (arguments.length == 1 && Class.class.isInstance(arguments[0])) { return Class.class.cast(arguments[0]); } throw new IllegalArgumentException("Unsupported type for parameter " + p.getPath() + " (from " + p.getSource().declaringClass() + "), " + "ensure it is a ParameterizedType with one argument"); } throw new IllegalStateException("Parameter '" + p.getName() + "' is not an object."); }
final Type javaType = param.getJavaType(); if (Class.class.isInstance(javaType)) { return new Instance(tryCreatingObjectInstance(javaType), true);
.map(p -> createConfig(familyMeta.getPlugin(), services, p, familyMeta.getName(), familyMeta.getIcon(), migrationHandlerFactory)) .collect(toMap(c -> c.getMeta().getJavaType(), identity(), (config1, config2) -> config1, LinkedHashMap::new)) .values() .stream() .filter(c -> toParamStream(item.getMeta().getNestedParameters()) .anyMatch(p -> p.getJavaType() == c.getMeta().getJavaType())) .findFirst() .map(Config::getChildConfigs) if (configs .stream() .noneMatch(c -> c.getMeta().getJavaType() == item.getMeta().getJavaType())) { configs.add(item);
.map(p -> { final Class<?> jType = Class.class.cast(p.getJavaType()); final MigrationHandler handler = findMigrationHandler(emptyList(), jType, services); if (handler == NO_MIGRATION) { && parameterMetas.iterator().next().getJavaType() == type) { return implicitMigrationHandler;
private ParameterMeta translate(final ParameterMeta config, final int replacedPrefixLen, final String newPrefix) { return new ParameterMeta(config.getSource(), config.getJavaType(), config.getType(), newPrefix + config.getPath().substring(replacedPrefixLen), config.getPath().length() == replacedPrefixLen ? newPrefix : config.getName(), config.getI18nPackages(), config .getNestedParameters() .stream() .map(it -> translate(it, replacedPrefixLen, newPrefix)) .collect(toList()), config.getProposals(), config.getMetadata(), config.isLogMissingResourceBundle()); } }
private Config createConfig(final String plugin, final ComponentManager.AllServices services, final ParameterMeta config, final String familyName, final String familyIcon, final MigrationHandlerFactory migrationHandlerFactory) { final Config c = new Config(); c.setIcon(familyIcon); c.setKey(getKey(familyName, config.getMetadata())); c.setMeta(translate(config, config.getPath().length(), "configuration")); c .setId(IdGenerator .get(plugin, c.getKey().getFamily(), c.getKey().getConfigType(), c.getKey().getConfigName())); if (Class.class.isInstance(config.getJavaType())) { final Class<?> clazz = Class.class.cast(config.getJavaType()); final Version version = clazz.getAnnotation(Version.class); if (version != null) { c.setVersion(version.value()); if (version.migrationHandler() != MigrationHandler.class) { c .setMigrationHandler(migrationHandlerFactory .findMigrationHandler(singletonList(c.getMeta()), clazz, services)); } } else { c.setVersion(-1); } } if (c.getMigrationHandler() == null) { c.setMigrationHandler((v, d) -> d); } return c; }