public toDeviceItem()

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


    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;

    }