[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / openecomp-ui / src / sdc-app / flows / SequenceDiagramModelHelper.js
1 /*!
2  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13  * or implied. See the License for the specific language governing
14  * permissions and limitations under the License.
15  */
16 import emptyModel from './emptyModel.json';
17
18 function mergeLifelines(oldLifelines, newLifelines) {
19         let oldLifelinesMap = new Map(oldLifelines.map(lifeline => [lifeline.id, lifeline]));
20         let newLifelinesMap = new Map(newLifelines.map(lifeline => [lifeline.id, lifeline]));
21
22         let updatedLifelines = oldLifelines.map(lifeline => {
23                 let newLifeline = newLifelinesMap.get(lifeline.id);
24                 return {
25                         ...lifeline,
26                         name: newLifeline ? newLifeline.name : lifeline.name
27                 };
28         });
29
30         let addedLifelines = newLifelines.filter(lifeline => !oldLifelinesMap.has(lifeline.id));
31
32         return [
33                 ...updatedLifelines,
34                 ...addedLifelines
35         ];
36 }
37
38
39 const SequenceDiagramModelHelper = Object.freeze({
40
41         createModel(options) {
42                 return SequenceDiagramModelHelper.updateModel(emptyModel, options);
43         },
44
45         updateModel(model, options) {
46                 const diagram = model.diagram;
47                 const metadata = diagram.metadata || model.metadata;
48                 const id = options.id || metadata.id;
49                 const name = options.name || metadata.name;
50                 const lifelines = options.lifelines ? mergeLifelines(diagram.lifelines, options.lifelines) : diagram.lifelines;
51
52                 return {
53                         diagram: {
54                                 ...diagram,
55                                 metadata: {
56                                         ...metadata,
57                                         id,
58                                         name
59                                 },
60                                 lifelines
61                         }
62                 };
63         }
64 });
65
66 export default SequenceDiagramModelHelper;