3
3
* Copyright (c) 2021, 2022, Oracle and/or its affiliates.
4
4
* Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
5
5
*/
6
- define ( [ 'accUtils' , 'utils/i18n' , 'knockout' , 'models/wkt-project' , 'utils/url-catalog' , 'utils/wkt-logger ' ,
7
- 'wrc-frontend/core/parsers/yaml' , 'wrc-frontend/integration/viewModels/utils' , 'wdt-model-designer/loader ',
8
- 'ojs/ojinputtext' , 'ojs/ojlabel' , 'ojs/ojbutton' , 'ojs/ojformlayout' ] ,
9
- function ( accUtils , i18n , ko , project , urlCatalog , wktLogger , YamlParser , ViewModelUtils ) {
6
+ define ( [ 'accUtils' , 'utils/i18n' , 'knockout' , 'models/wkt-project' , 'utils/url-catalog' , 'utils/view-helper ' ,
7
+ 'utils/wkt-logger' , ' wrc-frontend/core/parsers/yaml', 'wrc-frontend/integration/viewModels/utils' ,
8
+ 'wdt-model-designer/loader' , ' ojs/ojinputtext', 'ojs/ojlabel' , 'ojs/ojbutton' , 'ojs/ojformlayout' ] ,
9
+ function ( accUtils , i18n , ko , project , urlCatalog , viewHelper , wktLogger , YamlParser , ViewModelUtils ) {
10
10
function ModelDesignViewModel ( ) {
11
11
12
12
let subscriptions = [ ] ;
@@ -18,19 +18,18 @@ function(accUtils, i18n, ko, project, urlCatalog, wktLogger, YamlParser, ViewMod
18
18
19
19
this . connected = ( ) => {
20
20
accUtils . announce ( 'Model design view loaded.' , 'assertive' ) ;
21
+ this . designer = document . getElementById ( 'WdtModelDesigner' ) ;
22
+
21
23
subscriptions . push ( this . project . wdtModel . internal . wlRemoteConsolePort . subscribe ( ( newValue ) => {
22
24
wktLogger . debug ( 'Model Design View got event for Remote Console backend port change to %s' , newValue ) ;
23
- this . showWdtModelDesigner ( newValue , this ) ;
25
+ this . showWdtModelDesigner ( newValue , this . designer ) ;
24
26
} , this ) ) ;
25
27
26
- // eslint-disable-next-line no-unused-vars
27
- subscriptions . push ( this . project . wdtModel . modelContent . subscribe ( ( newValue ) => {
28
+ subscriptions . push ( this . project . wdtModel . modelContent . subscribe ( ( ) => {
28
29
wktLogger . debug ( 'Model Design View got event for Model contents changed' ) ;
29
30
30
31
if ( this . designer ) {
31
- // FIXME - There doesn't seem to be a way to update the data of the data provider.
32
- // Please fix this accordingly and delete this comment...
33
- //
32
+ this . createRemoteConsoleProvider ( this . designer , true ) ;
34
33
}
35
34
} , this ) ) ;
36
35
@@ -40,12 +39,11 @@ function(accUtils, i18n, ko, project, urlCatalog, wktLogger, YamlParser, ViewMod
40
39
if ( typeof port !== 'undefined' ) {
41
40
wktLogger . debug ( 'direct connected: port=%s' , port ) ;
42
41
43
- // FIXME - There seems to be a race condition where the JET component does not seem to
44
- // be fully loaded by the time we get to this point. Working around it for now...
45
- //
46
- setTimeout ( ( ) => {
47
- this . showWdtModelDesigner ( port ) ;
48
- } , 1000 ) ;
42
+ if ( this . designer ) {
43
+ viewHelper . componentReady ( this . designer ) . then ( ( ) => {
44
+ this . showWdtModelDesigner ( port , this . designer ) ;
45
+ } ) ;
46
+ }
49
47
}
50
48
} ;
51
49
@@ -55,7 +53,8 @@ function(accUtils, i18n, ko, project, urlCatalog, wktLogger, YamlParser, ViewMod
55
53
} ) ;
56
54
57
55
if ( this . designer ) {
58
- this . designer . deactivateProvider ( self . dataProvider ) ;
56
+ wktLogger . debug ( 'disconnected() dataProvider = %s' , JSON . stringify ( this . dataProvider ) ) ;
57
+ this . designer . deactivateProvider ( this . dataProvider ) ;
59
58
}
60
59
} ;
61
60
@@ -67,13 +66,15 @@ function(accUtils, i18n, ko, project, urlCatalog, wktLogger, YamlParser, ViewMod
67
66
return window . api . process . isLinux ( ) ;
68
67
} ;
69
68
70
- this . showWdtModelDesigner = ( backendPort ) => {
69
+ this . showWdtModelDesigner = ( backendPort , wdtModelDesigner ) => {
71
70
wktLogger . info ( 'showWdtModelDesigner using backendPort %s' , backendPort ) ;
72
71
if ( ! backendPort ) {
73
72
return ;
74
73
}
75
74
76
- self . designer = document . getElementById ( 'WdtModelDesigner' ) ;
75
+ if ( ! wdtModelDesigner ) {
76
+ return ;
77
+ }
77
78
78
79
// We cannot use <oj-bind-if> to control the visibility of
79
80
// the <wdt-model-designer> JET composite, because it prevents
@@ -84,25 +85,18 @@ function(accUtils, i18n, ko, project, urlCatalog, wktLogger, YamlParser, ViewMod
84
85
// that controls its visibility. The default value for that
85
86
// property is false.
86
87
//
87
- self . designer . visible = this . showRemoteConsoleComponent ( ) ;
88
- self . designer . setBackendUrlPort ( backendPort ) ;
88
+ wdtModelDesigner . visible = this . showRemoteConsoleComponent ( ) ;
89
+ wdtModelDesigner . setBackendUrlPort ( backendPort ) ;
89
90
90
91
// ResizeObserver needs to be set on the parent element
91
92
// of the <wdt-model-designer> tag.
92
93
//
93
- const parentElement = self . designer . parentElement ;
94
+ const parentElement = wdtModelDesigner . parentElement ;
94
95
new ResizeObserver ( ( ) => {
95
- self . designer . resize ( ) ;
96
+ wdtModelDesigner . resize ( ) ;
96
97
} ) . observe ( parentElement ) ;
97
98
98
- // TODO - Do we need to use the Remote Console parser or can we just use js-yaml?
99
- //
100
- const providerOptions = this . getRemoteConsoleProviderOptions ( ) ;
101
- YamlParser . parse ( providerOptions . fileContents ) . then ( data => {
102
- self . designer . createProvider ( providerOptions . name , data ) ;
103
- } ) . catch ( err => {
104
- ViewModelUtils . failureResponseDefaultHandling ( err ) ;
105
- } ) ;
99
+ this . createRemoteConsoleProvider ( wdtModelDesigner ) ;
106
100
} ;
107
101
108
102
// We need to support several use cases:
@@ -120,7 +114,7 @@ function(accUtils, i18n, ko, project, urlCatalog, wktLogger, YamlParser, ViewMod
120
114
} ;
121
115
122
116
if ( ! providerOptions . fileContents ) {
123
- const modelTemplates = self . designer . getProperty ( 'modelTemplate' ) ;
117
+ const modelTemplates = this . designer . getProperty ( 'modelTemplate' ) ;
124
118
providerOptions . fileContents = modelTemplates . sparse ;
125
119
}
126
120
@@ -130,35 +124,55 @@ function(accUtils, i18n, ko, project, urlCatalog, wktLogger, YamlParser, ViewMod
130
124
return providerOptions ;
131
125
} ;
132
126
127
+ this . createRemoteConsoleProvider = ( wdtModelDesigner , resetExistingDataProvider = false ) => {
128
+ if ( ! wdtModelDesigner ) {
129
+ return ;
130
+ }
131
+
132
+ if ( resetExistingDataProvider ) {
133
+ wdtModelDesigner . deactivateProvider ( this . dataProvider ) ;
134
+ }
135
+
136
+ const providerOptions = this . getRemoteConsoleProviderOptions ( ) ;
137
+ // TODO - Do we need to use the Remote Console parser or can we just use js-yaml?
138
+ //
139
+ YamlParser . parse ( providerOptions . fileContents ) . then ( data => {
140
+ wdtModelDesigner . createProvider ( providerOptions . name , data ) ;
141
+ } ) . catch ( err => {
142
+ ViewModelUtils . failureResponseDefaultHandling ( err ) ;
143
+ } ) ;
144
+ } ;
145
+
133
146
// Triggered when WDT Model File provider has been activated with the WRC backend.
134
147
//
135
148
this . providerActivated = ( event ) => {
136
- self . dataProvider = event . detail . value ;
137
- self . designer . selectLastVisitedSlice ( ) ;
149
+ this . dataProvider = event . detail . value ;
150
+ this . designer . selectLastVisitedSlice ( ) ;
138
151
} ;
139
152
140
153
// Triggered when changes have been downloaded from the WRC backend, for the active WDT Model File provider.
141
154
//
142
155
this . changesAutoDownloaded = ( event ) => {
143
- self . project . wdtModel . modelContent ( event . detail . value ) ;
156
+ wktLogger . debug ( 'changesAutoDownloaded event: %s' , event . detail . value ) ;
157
+ this . project . wdtModel . modelContent ( event . detail . value ) ;
144
158
} ;
145
159
146
160
// Triggered when WDT Model File provider has been deactivated with the WRC backend.
147
161
//
148
162
this . providerDeactivated = ( event ) => {
149
163
const result = event . detail . value ;
150
164
delete result . data ;
151
- self . dataProvider = { state : 'disconnected' } ;
165
+ this . dataProvider = { state : 'disconnected' } ;
152
166
} ;
153
167
154
168
// Triggered when WDT Model Designer has lost its connection to the WRC backend.
155
169
//
156
170
this . connectionLostRefused = ( event ) => {
157
171
wktLogger . debug ( 'connectionLostRefused: backendUrl=%s' , event . detail . value ) ;
158
- if ( self . designer ) {
159
- self . designer . visible = false ;
172
+ if ( this . designer ) {
173
+ this . designer . visible = false ;
160
174
}
161
- self . project . wdtModel . internal . wlRemoteConsolePort ( undefined ) ;
175
+ this . project . wdtModel . internal . wlRemoteConsolePort ( undefined ) ;
162
176
} ;
163
177
164
178
const wrcInitialText = this . labelMapper ( 'wrc-install-description' ) ;
0 commit comments