public toDeviceItem()

in source/packages/services/assetlibrary-export/src/devices/devices.assembler.ts [71:160]


    public toDeviceItem(node: Node): DeviceItem {
        logger.silly(`device.assembler toDeviceItem: in: node: ${JSON.stringify(node)}`);

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

        const model = new DeviceItem();

        if (node.types.indexOf(TypeCategory.Component) >= 0) {
            model.category = TypeCategory.Component;
        } else {
            model.category = TypeCategory.Device;
        }
        model.templateId = node.types.filter(
            (t) => t !== TypeCategory.Device && t !== TypeCategory.Component
        )[0];
        model.version = node.version;

        Object.keys(node.attributes).forEach((key) => {
            switch (key) {
                case 'deviceId':
                    model.deviceId = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'awsIotThingArn':
                    model.awsIotThingArn = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'description':
                    model.description = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'imageUrl':
                    model.imageUrl = <string>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'connected':
                    model.connected = <boolean>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;
                case 'state':
                    model.state = <DeviceState>(
                        this.fullAssembler.extractPropertyValue(node.attributes[key])
                    );
                    break;

                default:
                    model.attributes[key] = this.fullAssembler.extractPropertyValue(
                        node.attributes[key]
                    );
            }
        });

        this.assembleRelated(model, node.in, 'in');

        this.assembleRelated(model, node.out, 'out');

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

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