use of io.crnk.gen.typescript.model.TSContainerElement in project crnk-framework by crnk-project.
the class TSMetaDataObjectTransformation method setupParent.
private static void setupParent(TSMetaTransformationContext context, TSInterfaceType interfaceType, MetaDataObject metaDataObject) {
TSContainerElement parent = null;
// move links and meta information to the resource itself
boolean isMeta = TypescriptUtils.isInstance(metaDataObject.getImplementationClass(), "io.crnk.core.resource.meta.MetaInformation");
boolean isLinks = TypescriptUtils.isInstance(metaDataObject.getImplementationClass(), "io.crnk.core.resource.links.LinksInformation");
if ((isMeta || isLinks) && metaDataObject.getImplementationClass().getEnclosingClass() != null) {
MetaElement enclosingMeta = context.getMeta(metaDataObject.getImplementationClass().getEnclosingClass());
if (enclosingMeta instanceof MetaResource) {
TSType enclosingType = (TSType) context.transform(enclosingMeta, TSMetaTransformationOptions.EMPTY);
TSModule module = TypescriptUtils.getNestedTypeContainer(enclosingType, true);
interfaceType.setName(isLinks ? "Links" : "Meta");
parent = module;
}
}
if (parent == null) {
TSSource source = new TSSource();
source.setName(TypescriptUtils.toFileName(metaDataObject.getName()));
source.setNpmPackage(context.getNpmPackage(metaDataObject));
source.setDirectory(context.getDirectory(metaDataObject));
context.addSource(source);
parent = source;
}
parent.getElements().add(interfaceType);
interfaceType.setParent(parent);
}
use of io.crnk.gen.typescript.model.TSContainerElement 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;
}
use of io.crnk.gen.typescript.model.TSContainerElement in project crnk-framework by crnk-project.
the class TypescriptUtils method getNestedTypeContainer.
/**
* Creates a module if the same name as the provided type used to hold nested types.
*/
public static TSModule getNestedTypeContainer(TSType type, boolean create) {
TSContainerElement parent = (TSContainerElement) type.getParent();
if (parent == null) {
return null;
}
int insertionIndex = parent.getElements().indexOf(type);
return getModule(parent, type.getName(), insertionIndex, create);
}
Aggregations