function generateSettings()

in lib/VisualGenerator.js [131:219]


function generateSettings(targetPath, verbose) {
    let capabilitiesFileName = targetPath + '/capabilities.json';

    fs.readJson(capabilitiesFileName, (err, packageObj) => {
        if (err) {
            console.error(err);
            return;
        }
        if (verbose) {
            console.log('parse capabilities.json. Searching for settings');
            console.log(packageObj.dataRoles[0].displayName);
        }
        let VisualSettingsMethods = 'export class VisualSettings extends DataViewObjectsParser {\n';
        if (packageObj.objects) {
            let subClassesDefinitionArray = [];
            for (let settingsSubClass in packageObj.objects) {
                if (verbose) {
                    console.log('Settings sub class: ' + settingsSubClass);
                }
                let subClassProperties = packageObj.objects[settingsSubClass].properties;
                VisualSettingsMethods += '      public ' + settingsSubClass + ': ' +
                    settingsSubClass + 'Settings = new ' + settingsSubClass + 'Settings();\n';

                let settingsSubClassDefinition = '\n    export class ' + settingsSubClass + 'Settings {\n';

                if (subClassProperties) {
                    for (let property in subClassProperties) {
                        if (verbose) {
                            console.log('property: ' + subClassProperties[property].displayName);
                        }
                        let propertyType = subClassProperties[property].type;
                        if (verbose) {
                            console.log('prop type: ' + propertyType);
                        }
                        // add some spaghetti to this meals
                        settingsSubClassDefinition += '     // ' + subClassProperties[property].displayName +
                            '\n      public ' + property;

                        if (verbose) {
                            console.log(propertyType.keys);
                        }
                        if (propertyType.bool) {
                            if (verbose) {
                                console.log('bool');
                            }
                            settingsSubClassDefinition += ': boolean = true;\n';
                        } else if (propertyType.fill) {
                            if (verbose) {
                                console.log('fill');
                            }
                            settingsSubClassDefinition += ': string = "";\n';
                        } else if (propertyType.formatting) {
                            if (verbose) {
                                console.log('formatting');
                            }
                            if (propertyType.formatting.fontSize) {
                                settingsSubClassDefinition += ': number = 12;\n';
                            }
                        }
                    }
                }
                settingsSubClassDefinition += '     }\n';
                subClassesDefinitionArray.push(settingsSubClassDefinition);
            }
            VisualSettingsMethods += '      }\n';
            // Add properties class per each setting
            for (let subDefinitions in subClassesDefinitionArray) {
                VisualSettingsMethods += subClassesDefinitionArray[subDefinitions];
            }
            if (verbose) {
                console.log('final text: ' + VisualSettingsMethods);
            }

        } else {
            if (verbose) {
                console.log('Settings not found');
            }
            VisualSettingsMethods += '// TODO: fill all visual settings here\n ' +
                '// public dataPoint: DataPointSettings = new DataPointSettings();\n }\n' +
                '// TODO: fill all visual settings here\n// export class DataPointSettings ' +
                '{ \n //    public fill: string = "#005c55";\n// }';
        }
        // read file and update
        let settingsFileName = targetPath + '/src/settings.ts';
        let setingsFileContents = fs.readFileSync(settingsFileName, 'utf8');
        setingsFileContents = setingsFileContents.replace('<%= visualSettingsClasses %>', VisualSettingsMethods);
        fs.writeFileSync(settingsFileName, setingsFileContents);
    });
}