Search in sources :

Example 1 with Property

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));
    });
}
Also used : Utils(io.fabric8.kubernetes.client.utils.Utils) Decorator(io.fabric8.crd.generator.decorator.Decorator) io.fabric8.crd.generator.visitor(io.fabric8.crd.generator.visitor) Map(java.util.Map) TypeDef(io.sundr.model.TypeDef) Optional(java.util.Optional) HashMap(java.util.HashMap) AnnotationRef(io.sundr.model.AnnotationRef) TypeDefBuilder(io.sundr.model.TypeDefBuilder) Property(io.sundr.model.Property) Collections(java.util.Collections) Collectors(java.util.stream.Collectors) HashMap(java.util.HashMap) TypeDefBuilder(io.sundr.model.TypeDefBuilder) TypeDef(io.sundr.model.TypeDef) Property(io.sundr.model.Property) AnnotationRef(io.sundr.model.AnnotationRef)

Example 2 with Property

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();
            }
        }
    });
}
Also used : Types(io.fabric8.crd.generator.utils.Types) List(java.util.List) TypedVisitor(io.sundr.builder.TypedVisitor) TypeDef(io.sundr.model.TypeDef) Optional(java.util.Optional) TypeDefBuilder(io.sundr.model.TypeDefBuilder) Property(io.sundr.model.Property) AtomicReference(java.util.concurrent.atomic.AtomicReference) Collectors(java.util.stream.Collectors) ClassRef(io.sundr.model.ClassRef) ArrayList(java.util.ArrayList) TypeDef(io.sundr.model.TypeDef) ClassRef(io.sundr.model.ClassRef) ArrayList(java.util.ArrayList) Property(io.sundr.model.Property) TypeDefBuilder(io.sundr.model.TypeDefBuilder)

Example 3 with Property

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());
}
Also used : TypeDef(io.sundr.model.TypeDef) Property(io.sundr.model.Property) WebServerWithStatusProperty(io.fabric8.crd.example.webserver.WebServerWithStatusProperty) Test(org.junit.jupiter.api.Test)

Example 4 with Property

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());
}
Also used : Basic(io.fabric8.crd.example.basic.Basic) TypeDef(io.sundr.model.TypeDef) Property(io.sundr.model.Property) WebServerWithStatusProperty(io.fabric8.crd.example.webserver.WebServerWithStatusProperty) Test(org.junit.jupiter.api.Test)

Example 5 with Property

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());
}
Also used : TypeDef(io.sundr.model.TypeDef) ClassRef(io.sundr.model.ClassRef) TypeRef(io.sundr.model.TypeRef) SpecAndStatus(io.fabric8.crd.generator.utils.Types.SpecAndStatus) Property(io.sundr.model.Property) WebServerWithStatusProperty(io.fabric8.crd.example.webserver.WebServerWithStatusProperty) Test(org.junit.jupiter.api.Test)

Aggregations

Property (io.sundr.model.Property)25 TypeDef (io.sundr.model.TypeDef)18 ClassRef (io.sundr.model.ClassRef)17 ArrayList (java.util.ArrayList)16 Method (io.sundr.model.Method)15 TypeDefBuilder (io.sundr.model.TypeDefBuilder)13 AnnotationRef (io.sundr.model.AnnotationRef)11 TypeRef (io.sundr.model.TypeRef)10 MethodBuilder (io.sundr.model.MethodBuilder)9 HashMap (java.util.HashMap)9 TypeParamDef (io.sundr.model.TypeParamDef)8 List (java.util.List)8 Collectors (java.util.stream.Collectors)8 AttributeKey (io.sundr.model.AttributeKey)7 PropertyBuilder (io.sundr.model.PropertyBuilder)7 HashSet (java.util.HashSet)7 Map (java.util.Map)7 Kind (io.sundr.model.Kind)6 RichTypeDef (io.sundr.model.RichTypeDef)6 Statement (io.sundr.model.Statement)6