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;
}
Aggregations