public toGroupItem()

in source/packages/services/assetlibrary-export/src/groups/groups.assembler.ts [74:180]


    public toGroupItem(node: Node): GroupItem {
        logger.silly(`groups.assembler toGroupItem: in: node: ${JSON.stringify(node)}`);

        if (node === undefined) {
            logger.silly(`groups.assembler toGroupItem: exit: model: undefined`);
            return undefined;
        }

        const model = new GroupItem();
        model.category = TypeCategory.Group;
        model.version = node.version;

        try {
            model.templateId = node.types.filter((t) => t !== TypeCategory.Group)[0];
        } catch (err) {
            // do nothing, as templates don't exist in 'lite' mode
        }

        Object.keys(node.attributes).forEach((key) => {
            switch (key) {
                case 'name':
                    model.name = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'groupPath':
                    model.groupPath = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'parentPath':
                    model.parentPath = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'description':
                    model.description = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                default:
                    model.attributes[key] = this.fullAssembler.extractPropertyValue(
                        node.attributes[key]
                    );
            }
        });

        if (model.name === undefined) {
            model.name = model.groupPath;
        }

        Object.keys(node.in).forEach((key) => {
            const others = node.in[key];
            if (others !== undefined) {
                if (model.groups === undefined) {
                    model.groups = {};
                }
                if (model.groups.in === undefined) {
                    model.groups.in = {};
                }
                others.forEach((other) => {
                    if (other.category === TypeCategory.Group) {
                        if (model.groups.in[key] === undefined) {
                            model.groups.in[key] = [];
                        }
                        model.groups.in[key].push((other.attributes['groupPath'] as string[])[0]);
                    }
                });
            }
        });

        Object.keys(node.out).forEach((key) => {
            const others = node.out[key];
            if (others !== undefined) {
                if (model.groups === undefined) {
                    model.groups = {};
                }
                if (model.groups.out === undefined) {
                    model.groups.out = {};
                }
                others.forEach((other) => {
                    if (other.category === TypeCategory.Group) {
                        if (model.groups.out[key] === undefined) {
                            model.groups.out[key] = [];
                        }
                        model.groups.out[key].push((other.attributes['groupPath'] as string[])[0]);
                    }
                });
            }
        });

        // remove any empty collection attributes
        if (model.groups) {
            if (model.groups.in && Object.keys(model.groups.in).length === 0) {
                delete model.groups.in;
            }
            if (model.groups.out && Object.keys(model.groups.out).length === 0) {
                delete model.groups.out;
            }
            if (Object.keys(model.groups).length === 0) {
                delete model.groups;
            }
        }

        logger.silly(`groups.assembler toGroupItem: exit: model: ${JSON.stringify(model)}`);
        return model;
    }