diff options
author | Herbert Eiselt <herbert.eiselt@highstreet-technologies.com> | 2019-04-03 17:12:30 +0200 |
---|---|---|
committer | Herbert Eiselt <herbert.eiselt@highstreet-technologies.com> | 2019-04-03 17:13:01 +0200 |
commit | 97fa6d943c57a784a52462aaacb329ce93cf42d6 (patch) | |
tree | b5f0f2484c0a886fcade7b9bcf1d230e6f9e9501 /sdnr/wt/odlux/apps/configurationApp/src/actions | |
parent | 3d6dd098db8ec243ca716a09fc55decbdd23b726 (diff) |
SDN-R odlux configuration
Add odlux configuration app
Change-Id: Ifecd3f6e1e3060a1fd1008f1f625a70cb2475a8a
Issue-ID: SDNC-584
Signed-off-by: Herbert Eiselt <herbert.eiselt@highstreet-technologies.com>
Diffstat (limited to 'sdnr/wt/odlux/apps/configurationApp/src/actions')
-rw-r--r-- | sdnr/wt/odlux/apps/configurationApp/src/actions/configurationActions.ts | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/actions/configurationActions.ts b/sdnr/wt/odlux/apps/configurationApp/src/actions/configurationActions.ts new file mode 100644 index 000000000..82055a761 --- /dev/null +++ b/sdnr/wt/odlux/apps/configurationApp/src/actions/configurationActions.ts @@ -0,0 +1,137 @@ +import { Action } from '../../../../framework/src/flux/action'; +import { Dispatch } from '../../../../framework/src/flux/store'; + +import { CoreModelNetworkElement, LpResponse } from '../models/coreModel'; +import configurationService, { getValueByName } from '../services/configurationService'; +import { ViewSpecification } from 'models/uiModels'; +import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore'; +import { AddSnackbarNotification } from '../../../../framework/src/actions/snackbarActions'; + +export class ConfigurationApplicationBaseAction extends Action { } + +export class UpdateLoading extends ConfigurationApplicationBaseAction { + constructor (public loading: boolean) { + super(); + + } +} + +export class UpdateCoreModel extends ConfigurationApplicationBaseAction { + constructor (public nodeId?: string, public coreModel?: CoreModelNetworkElement) { + super(); + + } +} + +export class UpdateLp extends ConfigurationApplicationBaseAction { + constructor (public lpId?: string, public capability?: string, public conditionalPackage?: string, public viewSpecifications: ViewSpecification[] = []) { + super(); + + } +} + +export class UpdateViewData extends ConfigurationApplicationBaseAction { + constructor (public viewId?: string, public indexValues: string = "", public viewData: {} = {}) { + super(); + + } +} + + +export const updateMountIdAsyncActionCreator = (nodeId: string | undefined) => async (dispatch: Dispatch) => { + if (!nodeId) { + dispatch(new UpdateCoreModel()); + return; + } + dispatch(new UpdateLoading(true)); + const coreModel = await configurationService.getCoreModelByNodeId(nodeId); + dispatch(new UpdateLoading(false)); + + return coreModel + ? dispatch(new UpdateCoreModel(nodeId, coreModel)) + : dispatch(new UpdateCoreModel()); +} + +export const updateLpIdAsyncActionCreator = (lpId: string | undefined) => async (dispatch: Dispatch, getState: () => IApplicationStoreState) => { + const { configuration: { coreModel: coreModel, nodeId: nodeId } } = getState(); + if (! nodeId || !lpId || !coreModel) { + dispatch(new UpdateLp()); + return; + } + + // find the lp with its unique uuid + let lpData: LpResponse | null = null; + for (let ltp of coreModel.ltp) { + const lp = ltp.lp.find(pl => pl.uuid === lpId); + if (lp) { + lpData = lp; + break; + } + } + + // urn:onf:params:xml:ns:yang:microwave-model?module=microwave-model => microwave-model + let capability: string | null = lpData && getValueByName("capability", lpData.extension, null); + if (capability) { + const paramIndex = capability.indexOf('?'); + if (paramIndex > -1) { + capability = capability.slice(paramIndex+1); + } + const params = capability.split("&").map(p => (p || "=").split("=")); + const capParam = params.find(p => p[0] === "module") || null; + capability = capParam && capParam[1] || null; + } + + const revision: string | null = lpData && getValueByName("revision", lpData.extension, null); + const conditionalPackage: string | null = lpData && getValueByName("conditional-package", lpData.extension, null); + + dispatch(new UpdateLoading(true)); + const viewSpecifications = capability && await configurationService.getUIDescriptionByCapability(capability, revision) || []; + dispatch(new UpdateLoading(false)); + + return coreModel ? + dispatch(new UpdateLp(lpId, capability || undefined, conditionalPackage || undefined, viewSpecifications)) : + dispatch(new UpdateLp()); +} + +export const updateViewDataAsyncActionCreator = (viewId: string | undefined, indexValues: string[] = []) => async (dispatch: Dispatch, getState: () => IApplicationStoreState) => { + const { configuration: { nodeId, lpId, capability, conditionalPackage, viewSpecifications } } = getState(); + if (!viewId || !capability || !nodeId || !lpId || !conditionalPackage) { + dispatch(new AddSnackbarNotification({ message: `Error invalid parameter !${JSON.stringify({viewId ,capability ,nodeId ,lpId ,conditionalPackage}, null,2)}`, options: { variant: 'error' } })); + dispatch(new UpdateViewData()); + return; + } + + const viewSpecification = viewSpecifications.find(desc => desc.id === viewId); + if (!viewSpecification) { + dispatch(new AddSnackbarNotification({ message: `Error viewId ${viewId} not found !`, options: { variant: 'error' } })); + dispatch(new UpdateViewData()); + return; + } + + const url = viewSpecification.url.replace(/\$\$NODEID\$\$/g, nodeId).replace(/\$\$LPUUID\$\$/g, lpId); + + dispatch(new UpdateLoading(true)); + const data = capability && await configurationService.getViewData(url) || { }; + dispatch(new UpdateLoading(false)); + + let viewData: { [path: string]: {} } = data; + + const pathElements = viewSpecification.dataPath && + viewSpecification.dataPath.replace( + /\/\$\$INDEX:(\d+):?([a-z\-]+)?\$\$/ig, + (_, indexStr, keyStr) => { + const index = +indexStr; + return indexValues[index] && '/' + indexValues[index] || ''; + }).split("/") || []; + + for (let path of pathElements) { + if (path === "") { + break; + } + viewData = viewData[path]; + } + + return viewData ? + dispatch(new UpdateViewData(viewId, indexValues.length > 0 ? indexValues.join("/") : "", viewData)) : + dispatch(new UpdateViewData()); +}
\ No newline at end of file |