Search in sources :

Example 1 with MetaResourceRepository

use of io.crnk.meta.model.resource.MetaResourceRepository in project crnk-framework by crnk-project.

the class TSMetaResourceRepositoryTransformation method transform.

@Override
public TSElement transform(MetaElement element, TSMetaTransformationContext context, TSMetaTransformationOptions options) {
    MetaResourceRepository metaRepository = (MetaResourceRepository) element;
    MetaResource metaResource = metaRepository.getResourceType();
    TSType resourceType = context.transform(metaResource, TSMetaTransformationOptions.EMPTY).asType();
    TSContainerElement parent = (TSContainerElement) resourceType.getParent();
    MetaDataObject metaListLinks = metaRepository.getListLinksType();
    MetaDataObject metaListMeta = metaRepository.getListMetaType();
    TSInterfaceType oneResultType = new TSInterfaceType();
    oneResultType.setName(metaResource.getName() + "Result");
    oneResultType.setExported(true);
    oneResultType.getImplementedInterfaces().add(NgrxJsonApiLibrary.ONE_QUERY_RESULT);
    oneResultType.addDeclaredMember(newDataField(context, resourceType, false));
    parent.addElement(oneResultType);
    TSInterfaceType manyResultType = new TSInterfaceType();
    manyResultType.setName(metaResource.getName() + "ListResult");
    manyResultType.setExported(true);
    manyResultType.getImplementedInterfaces().add(NgrxJsonApiLibrary.MANY_QUERY_RESULT);
    manyResultType.addDeclaredMember(newDataField(context, resourceType, true));
    parent.addElement(manyResultType);
    if (metaListLinks != null) {
        TSMetaTransformationOptions listOptions = new TSMetaTransformationOptions();
        listOptions.setParent(TypescriptUtils.getNestedTypeContainer(manyResultType, true));
        TSType linksType = context.transform(metaListLinks, listOptions).asType();
        TSField field = new TSField();
        field.setName("links");
        field.setNullable(true);
        field.setType(linksType);
        manyResultType.addDeclaredMember(field);
    }
    if (metaListMeta != null) {
        TSMetaTransformationOptions listOptions = new TSMetaTransformationOptions();
        listOptions.setParent(TypescriptUtils.getNestedTypeContainer(manyResultType, true));
        TSType metaType = context.transform(metaListMeta, listOptions).asType();
        TSField field = new TSField();
        field.setName("meta");
        field.setNullable(true);
        field.setType(metaType);
        manyResultType.addDeclaredMember(field);
    }
    return null;
}
Also used : TSField(io.crnk.gen.typescript.model.TSField) TSContainerElement(io.crnk.gen.typescript.model.TSContainerElement) MetaResourceRepository(io.crnk.meta.model.resource.MetaResourceRepository) MetaDataObject(io.crnk.meta.model.MetaDataObject) MetaResource(io.crnk.meta.model.resource.MetaResource) TSType(io.crnk.gen.typescript.model.TSType) TSInterfaceType(io.crnk.gen.typescript.model.TSInterfaceType)

Aggregations

TSContainerElement (io.crnk.gen.typescript.model.TSContainerElement)1 TSField (io.crnk.gen.typescript.model.TSField)1 TSInterfaceType (io.crnk.gen.typescript.model.TSInterfaceType)1 TSType (io.crnk.gen.typescript.model.TSType)1 MetaDataObject (io.crnk.meta.model.MetaDataObject)1 MetaResource (io.crnk.meta.model.resource.MetaResource)1 MetaResourceRepository (io.crnk.meta.model.resource.MetaResourceRepository)1