use of io.sundr.model.Property in project kubernetes-client by fabric8io.
the class AbstractCustomResourceHandler method handle.
public void handle(CustomResourceInfo config) {
final String name = config.crdName();
final String version = config.version();
TypeDef def = config.definition();
SpecReplicasPathDetector specReplicasPathDetector = new SpecReplicasPathDetector();
StatusReplicasPathDetector statusReplicasPathDetector = new StatusReplicasPathDetector();
LabelSelectorPathDetector labelSelectorPathDetector = new LabelSelectorPathDetector();
AdditionalPrinterColumnDetector additionalPrinterColumnDetector = new AdditionalPrinterColumnDetector();
ClassDependenciesVisitor traversedClassesVisitor = new ClassDependenciesVisitor(config.crClassName(), name);
TypeDefBuilder builder = new TypeDefBuilder(def);
if (config.specClassName().isPresent()) {
builder.accept(specReplicasPathDetector);
}
if (config.statusClassName().isPresent()) {
builder.accept(statusReplicasPathDetector);
}
def = builder.accept(labelSelectorPathDetector).accept(additionalPrinterColumnDetector).accept(traversedClassesVisitor).build();
addDecorators(config, def, specReplicasPathDetector.getPath(), statusReplicasPathDetector.getPath(), labelSelectorPathDetector.getPath());
Map<String, Property> additionalPrinterColumns = new HashMap<>(additionalPrinterColumnDetector.getProperties());
additionalPrinterColumns.forEach((path, property) -> {
Map<String, Object> parameters = property.getAnnotations().stream().filter(a -> a.getClassRef().getName().equals("PrinterColumn")).map(AnnotationRef::getParameters).findFirst().orElse(Collections.emptyMap());
String type = AbstractJsonSchema.getSchemaTypeFor(property.getTypeRef());
String column = (String) parameters.get("name");
if (Utils.isNullOrEmpty(column)) {
column = property.getName().toUpperCase();
}
String description = property.getComments().stream().filter(l -> !l.trim().startsWith("@")).collect(Collectors.joining(" ")).trim();
String format = (String) parameters.get("format");
resources.decorate(getPrinterColumnDecorator(name, version, path, type, column, description, format));
});
}
use of io.sundr.model.Property in project kubernetes-client by fabric8io.
the class AnnotatedPropertyPathDetector method visit.
@Override
public void visit(TypeDefBuilder builder) {
TypeDef type = builder.build();
final List<Property> properties = type.getProperties();
for (Property p : properties) {
if (parents.contains(p)) {
continue;
}
List<Property> newParents = new ArrayList<>(parents);
boolean match = p.getAnnotations().stream().anyMatch(a -> a.getClassRef().getName().equals(annotationName));
if (match) {
newParents.add(p);
reference.set(Optional.of(newParents.stream().map(Property::getName).collect(Collectors.joining(DOT, prefix, ""))));
return;
}
}
properties.stream().filter(p -> p.getTypeRef() instanceof ClassRef).forEach(p -> {
if (!parents.contains(p)) {
ClassRef classRef = (ClassRef) p.getTypeRef();
TypeDef propertyType = Types.typeDefFrom(classRef);
if (!propertyType.isEnum()) {
List<Property> newParents = new ArrayList<>(parents);
newParents.add(p);
new TypeDefBuilder(propertyType).accept(new AnnotatedPropertyPathDetector(prefix, annotationName, newParents, reference)).build();
}
}
});
}
use of io.sundr.model.Property in project kubernetes-client by fabric8io.
the class TypesTest method shouldHaveAllTheExpectedProperties.
@Test
void shouldHaveAllTheExpectedProperties() {
final TypeDef def = Types.typeDefFrom(Joke.class);
final List<Property> properties = def.getProperties();
assertEquals(7, properties.size());
}
use of io.sundr.model.Property in project kubernetes-client by fabric8io.
the class TypesTest method shouldFindStatusProperty.
@Test
void shouldFindStatusProperty() {
TypeDef def = Types.typeDefFrom(WebServerWithStatusProperty.class);
Optional<Property> p = Types.findStatusProperty(def);
assertTrue(p.isPresent());
def = Types.typeDefFrom(Basic.class);
p = Types.findStatusProperty(def);
assertTrue(p.isPresent());
}
use of io.sundr.model.Property in project kubernetes-client by fabric8io.
the class TypesTest method shouldFindInheritedStatusProperty.
@Test
void shouldFindInheritedStatusProperty() {
final TypeDef def = Types.typeDefFrom(Child.class);
final Optional<Property> p = Types.findStatusProperty(def);
assertTrue(p.isPresent());
final Property property = p.get();
final TypeRef typeRef = property.getTypeRef();
assertTrue(typeRef instanceof ClassRef);
final ClassRef classRef = (ClassRef) typeRef;
final SpecAndStatus specAndStatus = Types.resolveSpecAndStatusTypes(def);
assertEquals(specAndStatus.getStatusClassName(), classRef.getFullyQualifiedName());
}
Aggregations