ui5_easy_use
Version:
CLI tool for SAP ui5 and SAPUI5 projects to initialize apps, generate pages, insert form and table components, manage routing, and automate i18n bindings
101 lines (86 loc) • 3.18 kB
JavaScript
sap.ui.define([
"sap/ui/model/json/JSONModel"
], function (JSONModel) {
"use strict";
return class LoadJson {
constructor(controller) {
this._controller = controller;
this.sNamespace = "${ez5.appName}";
}
async loadModelsJson(modelsJson) {
try {
return await Promise.all((modelsJson || []).map(this._loadModelConfig.bind(this)));
} catch (error) {
console.error("Failed to load one or more JSON models", error);
throw error;
}
}
async loadAndSetModel(modelName, modelPath) {
const oModel = this._createJsonModel();
try {
await this._loadJSONData(oModel, modelPath);
this._setControllerModel(oModel, modelName);
return oModel;
} catch (error) {
console.error(`Failed to load model "${modelName}" from ${modelPath}`, error);
throw error;
}
}
/**
* Loads JSON data into a model using promise-based API.
* @param {sap.ui.model.json.JSONModel} oModel - Model to load data into.
* @param {string} sPath - Path to the JSON file.
* @returns {Promise<void>}
* @private
*/
_loadJSONData(oModel, sPath) {
return new Promise((resolve, reject) => {
oModel.loadData(sPath);
oModel.attachRequestCompleted(() => {
resolve(oModel);
});
oModel.attachRequestFailed((event) => {
const error = event.getParameter("response") || event;
reject(error);
});
});
}
generateModelConfig(modelsList, basePath = "model/") {
return (modelsList || []).map(function (modelName) {
return this._toModelConfig(modelName, basePath);
}, this);
}
async getModel(modelsJsonList) {
const modelsJson = this.generateModelConfig(modelsJsonList);
let modelsData = [];
try {
modelsData = await this.loadModelsJson(modelsJson);
} catch (error) {
console.warn("Some models failed to load", error);
}
return {
modelsJson,
modelsData
};
}
async _loadModelConfig(model) {
const oModel = await this.loadAndSetModel(model.modelName, model.modelPath);
return {
modelName: model.modelName,
data: oModel.getData()
};
}
_createJsonModel() {
return new JSONModel();
}
_setControllerModel(oModel, modelName) {
this._controller.setModel(oModel, modelName);
}
_toModelConfig(modelName, basePath) {
return {
modelName: modelName,
modelPath: sap.ui.require.toUrl(`${this.sNamespace}/${basePath}${modelName}.json`)
};
}
};
});