use of org.apache.ignite.configuration.annotation.Value in project ignite-3 by apache.
the class DirectPropertiesTest method testNamedListDirectNestedProperties.
/**
* Same as {@link #testDirectProperties} but checks Named List properties.
*/
@Test
public void testNamedListDirectNestedProperties() throws Exception {
DirectConfiguration cfg = registry.getConfiguration(DirectConfiguration.KEY);
cfg.children().change(list -> list.create("foo", e -> e.changeChildren2(list2 -> list2.create("boo", e2 -> {
})))).get(1, TimeUnit.SECONDS);
UUID fooId = cfg.children().get("foo").id().value();
UUID booId = cfg.children().get("foo").children2().get("boo").id().value();
assertThat(booId, is(notNullValue()));
// Check all possible ways to access "str", just to be sure. Some of these checks are clearly excessive, but they look organic.
// Using names in both lists.
assertThat(directProxy(cfg).value().children().get("foo").children2().get("boo").str(), is("bar"));
assertThat(directProxy(cfg).children().value().get("foo").children2().get("boo").str(), is("bar"));
assertThat(directProxy(cfg).children().get("foo").value().children2().get("boo").str(), is("bar"));
assertThat(directProxy(cfg).children().get("foo").children2().value().get("boo").str(), is("bar"));
assertThat(directProxy(cfg).children().get("foo").children2().get("boo").value().str(), is("bar"));
assertThat(directProxy(cfg).children().get("foo").children2().get("boo").str().value(), is("bar"));
assertThat(directProxy(cfg.children()).value().get("foo").children2().get("boo").str(), is("bar"));
assertThat(directProxy(cfg.children()).get("foo").value().children2().get("boo").str(), is("bar"));
assertThat(directProxy(cfg.children()).get("foo").children2().value().get("boo").str(), is("bar"));
assertThat(directProxy(cfg.children()).get("foo").children2().get("boo").value().str(), is("bar"));
assertThat(directProxy(cfg.children()).get("foo").children2().get("boo").str().value(), is("bar"));
assertThat(directProxy(cfg.children().get("foo")).value().children2().get("boo").str(), is("bar"));
assertThat(directProxy(cfg.children().get("foo")).children2().value().get("boo").str(), is("bar"));
assertThat(directProxy(cfg.children().get("foo")).children2().get("boo").value().str(), is("bar"));
assertThat(directProxy(cfg.children().get("foo")).children2().get("boo").str().value(), is("bar"));
assertThat(directProxy(cfg.children().get("foo").children2()).value().get("boo").str(), is("bar"));
assertThat(directProxy(cfg.children().get("foo").children2()).get("boo").value().str(), is("bar"));
assertThat(directProxy(cfg.children().get("foo").children2()).get("boo").str().value(), is("bar"));
assertThat(directProxy(cfg.children().get("foo").children2().get("boo")).value().str(), is("bar"));
assertThat(directProxy(cfg.children().get("foo").children2().get("boo")).str().value(), is("bar"));
assertThat(directProxy(cfg.children().get("foo").children2().get("boo").str()).value(), is("bar"));
// Using internalId and name.
assertThat(getByInternalId(directProxy(cfg).value().children(), fooId).children2().get("boo").str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children().value(), fooId).children2().get("boo").str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children(), fooId).value().children2().get("boo").str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children(), fooId).children2().value().get("boo").str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children(), fooId).children2().get("boo").value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children(), fooId).children2().get("boo").str().value(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()).value(), fooId).children2().get("boo").str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()), fooId).value().children2().get("boo").str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()), fooId).children2().value().get("boo").str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()), fooId).children2().get("boo").value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()), fooId).children2().get("boo").str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId)).value().children2().get("boo").str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId)).children2().value().get("boo").str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId)).children2().get("boo").value().str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId)).children2().get("boo").str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId).children2()).value().get("boo").str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId).children2()).get("boo").value().str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId).children2()).get("boo").str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId).children2().get("boo")).value().str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId).children2().get("boo")).str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId).children2().get("boo").str()).value(), is("bar"));
// Using name and internalId.
assertThat(getByInternalId(directProxy(cfg).value().children().get("foo").children2(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children().value().get("foo").children2(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children().get("foo").value().children2(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children().get("foo").children2().value(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children().get("foo").children2(), booId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children().get("foo").children2(), booId).str().value(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()).value().get("foo").children2(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()).get("foo").value().children2(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()).get("foo").children2().value(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()).get("foo").children2(), booId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()).get("foo").children2(), booId).str().value(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children().get("foo")).value().children2(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children().get("foo")).children2().value(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children().get("foo")).children2(), booId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children().get("foo")).children2(), booId).str().value(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children().get("foo").children2()).value(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children().get("foo").children2()), booId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children().get("foo").children2()), booId).str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children().get("foo").children2(), booId)).value().str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children().get("foo").children2(), booId)).str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children().get("foo").children2(), booId).str()).value(), is("bar"));
// Using internalId and internalId.
assertThat(getByInternalId(getByInternalId(directProxy(cfg).value().children(), fooId).children2(), booId).str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg).children().value(), fooId).children2(), booId).str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg).children(), fooId).value().children2(), booId).str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg).children(), fooId).children2().value(), booId).str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg).children(), fooId).children2(), booId).value().str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg).children(), fooId).children2(), booId).str().value(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg.children()).value(), fooId).children2(), booId).str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg.children()), fooId).value().children2(), booId).str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg.children()), fooId).children2().value(), booId).str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg.children()), fooId).children2(), booId).value().str(), is("bar"));
assertThat(getByInternalId(getByInternalId(directProxy(cfg.children()), fooId).children2(), booId).str().value(), is("bar"));
assertThat(getByInternalId(directProxy(getByInternalId(cfg.children(), fooId)).value().children2(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(getByInternalId(cfg.children(), fooId)).children2().value(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(getByInternalId(cfg.children(), fooId)).children2(), booId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(getByInternalId(cfg.children(), fooId)).children2(), booId).str().value(), is("bar"));
assertThat(getByInternalId(directProxy(getByInternalId(cfg.children(), fooId).children2()).value(), booId).str(), is("bar"));
assertThat(getByInternalId(directProxy(getByInternalId(cfg.children(), fooId).children2()), booId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(getByInternalId(cfg.children(), fooId).children2()), booId).str().value(), is("bar"));
assertThat(directProxy(getByInternalId(getByInternalId(cfg.children(), fooId).children2(), booId)).value().str(), is("bar"));
assertThat(directProxy(getByInternalId(getByInternalId(cfg.children(), fooId).children2(), booId)).str().value(), is("bar"));
assertThat(directProxy(getByInternalId(getByInternalId(cfg.children(), fooId).children2(), booId).str()).value(), is("bar"));
}
use of org.apache.ignite.configuration.annotation.Value in project ignite-3 by apache.
the class DirectPropertiesTest method testNamedListDirectProperties.
/**
* Same as {@link #testDirectProperties} but checks Named List properties.
*/
@Test
public void testNamedListDirectProperties() throws Exception {
DirectConfiguration cfg = registry.getConfiguration(DirectConfiguration.KEY);
cfg.children().change(change -> change.create("foo", value -> {
})).get(1, TimeUnit.SECONDS);
UUID fooId = cfg.children().get("foo").id().value();
assertThat(fooId, is(notNullValue()));
// Check all possible ways to access "str" of element named "foo".
assertThat(directProxy(cfg).value().children().get("foo").str(), is("bar"));
assertThat(directProxy(cfg).children().value().get("foo").str(), is("bar"));
assertThat(directProxy(cfg).children().get("foo").value().str(), is("bar"));
assertThat(directProxy(cfg).children().get("foo").str().value(), is("bar"));
assertThat(directProxy(cfg.children()).value().get("foo").str(), is("bar"));
assertThat(directProxy(cfg.children()).get("foo").value().str(), is("bar"));
assertThat(directProxy(cfg.children()).get("foo").str().value(), is("bar"));
assertThat(directProxy(cfg.children().get("foo")).value().str(), is("bar"));
assertThat(directProxy(cfg.children().get("foo")).str().value(), is("bar"));
assertThat(directProxy(cfg.children().get("foo").str()).value(), is("bar"));
// Check all possible ways to access "str" of element with given internal id.
assertThat(getByInternalId(directProxy(cfg).value().children(), fooId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children().value(), fooId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children(), fooId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg).children(), fooId).str().value(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()).value(), fooId).str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()), fooId).value().str(), is("bar"));
assertThat(getByInternalId(directProxy(cfg.children()), fooId).str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId)).value().str(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId)).str().value(), is("bar"));
assertThat(directProxy(getByInternalId(cfg.children(), fooId).str()).value(), is("bar"));
}
use of org.apache.ignite.configuration.annotation.Value in project ignite-3 by apache.
the class ConfigurationUtilTest method findSuccessfully.
/**
* Tests that {@link ConfigurationUtil#find(List, TraversableTreeNode, boolean)} finds proper node when provided with correct path.
*/
@Test
public void findSuccessfully() {
InnerNode parentNode = newNodeInstance(ParentConfigurationSchema.class);
ParentChange parentChange = (ParentChange) parentNode;
parentChange.changeElements(elements -> elements.createOrUpdate("name", element -> element.changeChild(child -> child.changeStr("value"))));
assertSame(parentNode, ConfigurationUtil.find(List.of(), parentNode, true));
assertSame(parentChange.elements(), ConfigurationUtil.find(List.of("elements"), parentNode, true));
assertSame(parentChange.elements().get("name"), ConfigurationUtil.find(List.of("elements", "name"), parentNode, true));
assertSame(parentChange.elements().get("name").child(), ConfigurationUtil.find(List.of("elements", "name", "child"), parentNode, true));
assertSame(parentChange.elements().get("name").child().str(), ConfigurationUtil.find(List.of("elements", "name", "child", "str"), parentNode, true));
}
use of org.apache.ignite.configuration.annotation.Value in project ignite-3 by apache.
the class Processor method getInterfaceGetMethodType.
/**
* Get types for configuration classes generation.
*
* @param field Field.
* @return Bundle with all types for configuration
*/
private static TypeName getInterfaceGetMethodType(VariableElement field) {
TypeName interfaceGetMethodType = null;
TypeName baseType = TypeName.get(field.asType());
ConfigValue confAnnotation = field.getAnnotation(ConfigValue.class);
if (confAnnotation != null) {
interfaceGetMethodType = Utils.getConfigurationInterfaceName((ClassName) baseType);
}
NamedConfigValue namedConfigAnnotation = field.getAnnotation(NamedConfigValue.class);
if (namedConfigAnnotation != null) {
ClassName interfaceGetType = Utils.getConfigurationInterfaceName((ClassName) baseType);
TypeName viewClassType = Utils.getViewName((ClassName) baseType);
TypeName changeClassType = Utils.getChangeName((ClassName) baseType);
interfaceGetMethodType = ParameterizedTypeName.get(ClassName.get(NamedConfigurationTree.class), interfaceGetType, viewClassType, changeClassType);
}
Value valueAnnotation = field.getAnnotation(Value.class);
PolymorphicId polymorphicIdAnnotation = field.getAnnotation(PolymorphicId.class);
InjectedName injectedNameAnnotation = field.getAnnotation(InjectedName.class);
InternalId internalIdAnnotation = field.getAnnotation(InternalId.class);
if (valueAnnotation != null || polymorphicIdAnnotation != null || injectedNameAnnotation != null || internalIdAnnotation != null) {
// It is necessary to use class names without loading classes so that we won't
// accidentally get NoClassDefFoundError
ClassName confValueClass = ClassName.get("org.apache.ignite.configuration", "ConfigurationValue");
TypeName genericType = baseType;
if (genericType.isPrimitive()) {
genericType = genericType.box();
}
interfaceGetMethodType = ParameterizedTypeName.get(confValueClass, genericType);
}
return interfaceGetMethodType;
}
use of org.apache.ignite.configuration.annotation.Value in project ignite-3 by apache.
the class Processor method process0.
/**
* Processes a set of annotation types on type elements.
*
* @param roundEnvironment Processing environment.
* @return Whether the set of annotation types are claimed by this processor.
*/
private boolean process0(RoundEnvironment roundEnvironment) {
Elements elementUtils = processingEnv.getElementUtils();
// All classes annotated with {@link #supportedAnnotationTypes}.
List<TypeElement> annotatedConfigs = roundEnvironment.getElementsAnnotatedWithAny(supportedAnnotationTypes()).stream().filter(element -> element.getKind() == ElementKind.CLASS).map(TypeElement.class::cast).collect(toList());
if (annotatedConfigs.isEmpty()) {
return false;
}
for (TypeElement clazz : annotatedConfigs) {
// Find all the fields of the schema.
List<VariableElement> fields = fields(clazz);
validate(clazz, fields);
// Get package name of the schema class
String packageName = elementUtils.getPackageOf(clazz).getQualifiedName().toString();
ClassName schemaClassName = ClassName.get(packageName, clazz.getSimpleName().toString());
// Get name for generated configuration interface.
ClassName configInterface = Utils.getConfigurationInterfaceName(schemaClassName);
TypeSpec.Builder configurationInterfaceBuilder = TypeSpec.interfaceBuilder(configInterface).addModifiers(PUBLIC);
for (VariableElement field : fields) {
if (!field.getModifiers().contains(PUBLIC)) {
throw new ProcessorException("Field " + clazz.getQualifiedName() + "." + field + " must be public");
}
final String fieldName = field.getSimpleName().toString();
// Get configuration types (VIEW, CHANGE and so on)
final TypeName interfaceGetMethodType = getInterfaceGetMethodType(field);
if (field.getAnnotation(ConfigValue.class) != null) {
checkConfigField(field, ConfigValue.class);
checkMissingNameForInjectedName(field);
}
if (field.getAnnotation(NamedConfigValue.class) != null) {
checkConfigField(field, NamedConfigValue.class);
}
Value valueAnnotation = field.getAnnotation(Value.class);
if (valueAnnotation != null) {
// Must be a primitive or an array of the primitives (including java.lang.String)
if (!isPrimitiveOrArray(field.asType())) {
throw new ProcessorException("@Value " + clazz.getQualifiedName() + "." + field.getSimpleName() + " field must" + " have one of the following types: boolean, int, long, double, String or an array of " + "aforementioned type.");
}
}
PolymorphicId polymorphicId = field.getAnnotation(PolymorphicId.class);
if (polymorphicId != null) {
if (!isClass(field.asType(), String.class)) {
throw new ProcessorException(String.format(FIELD_MUST_BE_SPECIFIC_CLASS_ERROR_FORMAT, simpleName(PolymorphicId.class), clazz.getQualifiedName(), field.getSimpleName(), String.class.getSimpleName()));
}
}
if (field.getAnnotation(InternalId.class) != null) {
if (!isClass(field.asType(), UUID.class)) {
throw new ProcessorException(String.format(FIELD_MUST_BE_SPECIFIC_CLASS_ERROR_FORMAT, simpleName(InternalId.class), clazz.getQualifiedName(), field.getSimpleName(), UUID.class.getSimpleName()));
}
}
createGetters(configurationInterfaceBuilder, fieldName, interfaceGetMethodType);
}
// Is root of the configuration.
boolean isRootConfig = clazz.getAnnotation(ConfigurationRoot.class) != null;
// Is the internal configuration.
boolean isInternalConfig = clazz.getAnnotation(InternalConfiguration.class) != null;
// Is a polymorphic configuration.
boolean isPolymorphicConfig = clazz.getAnnotation(PolymorphicConfig.class) != null;
// Is an instance of a polymorphic configuration.
boolean isPolymorphicInstance = clazz.getAnnotation(PolymorphicConfigInstance.class) != null;
// Create VIEW and CHANGE classes.
createPojoBindings(fields, schemaClassName, configurationInterfaceBuilder, (isInternalConfig && !isRootConfig) || isPolymorphicInstance, clazz, isPolymorphicConfig, isPolymorphicInstance);
if (isRootConfig) {
createRootKeyField(configInterface, configurationInterfaceBuilder, schemaClassName, clazz);
}
// Write configuration interface
buildClass(packageName, configurationInterfaceBuilder.build());
}
return true;
}
Aggregations