@@ -19,11 +19,11 @@ qx.Class.define("osparc.store.Services", {
1919 type : "static" ,
2020
2121 statics : {
22- servicesCached : { } ,
22+ __servicesCached : { } ,
2323
2424 getServicesLatest : function ( useCache = true ) {
2525 return new Promise ( resolve => {
26- if ( useCache && Object . keys ( this . servicesCached ) ) {
26+ if ( useCache && Object . keys ( this . __servicesCached ) ) {
2727 // return latest only
2828 const latest = this . __getLatestCached ( ) ;
2929 resolve ( latest ) ;
@@ -56,7 +56,7 @@ qx.Class.define("osparc.store.Services", {
5656 } ,
5757
5858 getLatest : function ( key ) {
59- const services = this . servicesCached ;
59+ const services = this . __servicesCached ;
6060 if ( key in services ) {
6161 const versions = this . getVersions ( key , true ) ;
6262 if ( versions . length ) {
@@ -66,10 +66,50 @@ qx.Class.define("osparc.store.Services", {
6666 return null ;
6767 } ,
6868
69+ getLatestCompatible : function ( key , version ) {
70+ const services = this . __servicesCached ;
71+ if ( key in services && version in services [ key ] ) {
72+ const serviceMD = services [ key ] [ version ] ;
73+ if ( serviceMD [ "compatibility" ] && serviceMD [ "compatibility" ] [ "canUpdateTo" ] ) {
74+ const canUpdateTo = serviceMD [ "compatibility" ] [ "canUpdateTo" ] ;
75+ return {
76+ key : "key" in canUpdateTo ? canUpdateTo [ "key" ] : key , // key is optional
77+ version : canUpdateTo [ "version" ]
78+ }
79+ }
80+ // the provided key/version itself is the latest compatible
81+ return {
82+ key,
83+ version
84+ }
85+ }
86+ return null ;
87+ } ,
88+
89+ getVersionDisplay : function ( key , version ) {
90+ const services = this . __servicesCached ;
91+ if ( key in services && version in services [ key ] ) {
92+ return this . extractVersionDisplay ( services [ key ] [ version ] ) ;
93+ }
94+ return null ;
95+ } ,
96+
97+ getReleasedDate : function ( key , version ) {
98+ const services = this . __servicesCached ;
99+ if (
100+ key in services &&
101+ version in services [ key ] &&
102+ "released" in services [ key ] [ version ]
103+ ) {
104+ return services [ key ] [ version ] [ "released" ] ;
105+ }
106+ return null ;
107+ } ,
108+
69109 getService : function ( key , version , useCache = true ) {
70110 return new Promise ( resolve => {
71111 if ( useCache && this . __isInCache ( key , version ) ) {
72- resolve ( this . servicesCached [ key ] [ version ] ) ;
112+ resolve ( this . __servicesCached [ key ] [ version ] ) ;
73113 return ;
74114 }
75115
@@ -89,16 +129,16 @@ qx.Class.define("osparc.store.Services", {
89129 } ,
90130
91131 __getVersionsFromCache : function ( key , version , filterDeprecated = true ) {
92- if ( this . servicesCached [ key ] [ version ] [ "history" ] ) {
93- const versions = this . servicesCached [ key ] [ version ] [ "history" ]
132+ if ( this . __servicesCached [ key ] [ version ] [ "history" ] ) {
133+ const versions = this . __servicesCached [ key ] [ version ] [ "history" ]
94134 . filter ( entry => ! filterDeprecated || entry [ "retired" ] === null )
95135 . map ( entry => entry [ "version" ] ) ;
96136 return versions ;
97137 }
98138 return [ ] ;
99139 } ,
100140
101- getVersions : function ( key , version , filterDeprecated = true ) {
141+ getVersions2 : function ( key , version , filterDeprecated = true ) {
102142 return new Promise ( resolve => {
103143 if ( this . __isInCache ( key , version ) ) {
104144 const versions = this . __getVersionsFromCache ( key , version , filterDeprecated ) ;
@@ -113,6 +153,25 @@ qx.Class.define("osparc.store.Services", {
113153 } ) ;
114154 } ,
115155
156+ getVersions : function ( key , filterDeprecated = true ) {
157+ const services = this . __servicesCached ;
158+ let versions = [ ] ;
159+ if ( key in services ) {
160+ const serviceVersions = services [ key ] ;
161+ versions = versions . concat ( Object . keys ( serviceVersions ) ) ;
162+ if ( filterDeprecated ) {
163+ versions = versions . filter ( version => {
164+ if ( services [ key ] [ version ] [ "retired" ] ) {
165+ return false ;
166+ }
167+ return true ;
168+ } ) ;
169+ }
170+ versions . sort ( osparc . utils . Utils . compareVersionNumbers ) ;
171+ }
172+ return versions . reverse ( ) ;
173+ } ,
174+
116175 getServicesLatestList : function ( excludeFrontend = true , excludeDeprecated = true ) {
117176 return new Promise ( resolve => {
118177 const servicesList = [ ] ;
@@ -128,11 +187,11 @@ qx.Class.define("osparc.store.Services", {
128187 }
129188 if ( excludeDeprecated && serviceLatest [ "retired" ] ) {
130189 // first check if a previous version of this service isn't retired
131- let versions = Object . keys ( this . servicesCached [ key ] ) ;
190+ let versions = Object . keys ( this . __servicesCached [ key ] ) ;
132191 versions = versions . sort ( osparc . utils . Utils . compareVersionNumbers ) . reverse ( ) ;
133192 for ( let j = 0 ; j < versions . length ; j ++ ) {
134193 const version = versions [ j ] ;
135- if ( ! this . servicesCached [ key ] [ version ] [ "retired" ] ) {
194+ if ( ! this . __servicesCached [ key ] [ version ] [ "retired" ] ) {
136195 // one older non retired version found
137196 serviceLatest = await this . getService ( key , version ) ;
138197 break ;
@@ -157,9 +216,9 @@ qx.Class.define("osparc.store.Services", {
157216 return new Promise ( resolve => {
158217 if (
159218 this . __isInCache ( key , version ) &&
160- "resources" in this . servicesCached [ key ] [ version ]
219+ "resources" in this . __servicesCached [ key ] [ version ]
161220 ) {
162- resolve ( this . servicesCached [ key ] [ version ] [ "resources" ] ) ;
221+ resolve ( this . __servicesCached [ key ] [ version ] [ "resources" ] ) ;
163222 return ;
164223 }
165224
@@ -168,15 +227,15 @@ qx.Class.define("osparc.store.Services", {
168227 } ;
169228 osparc . data . Resources . get ( "serviceResources" , params )
170229 . then ( resources => {
171- this . servicesCached [ key ] [ version ] [ "resources" ] = resources ;
230+ this . __servicesCached [ key ] [ version ] [ "resources" ] = resources ;
172231 resolve ( resources ) ;
173232 } ) ;
174233 } ) ;
175234 } ,
176235
177236 getMetadata : function ( key , version ) {
178237 if ( this . __isInCache ( key , version ) ) {
179- return this . servicesCached [ key ] [ version ] ;
238+ return this . __servicesCached [ key ] [ version ] ;
180239 }
181240 return null ;
182241 } ,
@@ -192,13 +251,13 @@ qx.Class.define("osparc.store.Services", {
192251 } ;
193252 return osparc . data . Resources . fetch ( "servicesV2" , "patch" , params )
194253 . then ( ( ) => {
195- this . servicesCached [ key ] [ version ] [ fieldKey ] = value ;
254+ this . __servicesCached [ key ] [ version ] [ fieldKey ] = value ;
196255 serviceData [ fieldKey ] = value ;
197256 } ) ;
198257 } ,
199258
200259 getInaccessibleServices : function ( workbench ) {
201- const allServices = this . servicesCached ;
260+ const allServices = this . __servicesCached ;
202261 const unaccessibleServices = [ ] ;
203262 const wbServices = new Set ( this . extractUniqueServices ( workbench ) ) ;
204263 wbServices . forEach ( srv => {
@@ -229,22 +288,22 @@ qx.Class.define("osparc.store.Services", {
229288 __addToCache : function ( service ) {
230289 const key = service . key ;
231290 const version = service . version ;
232- if ( ! ( key in this . servicesCached ) ) {
233- this . servicesCached [ key ] = { } ;
291+ if ( ! ( key in this . __servicesCached ) ) {
292+ this . __servicesCached [ key ] = { } ;
234293 }
235- this . servicesCached [ key ] [ version ] = service ;
294+ this . __servicesCached [ key ] [ version ] = service ;
236295
237296 if ( "history" in service ) {
238- this . servicesCached [ key ] [ version ] [ "cached" ] = true ;
297+ this . __servicesCached [ key ] [ version ] [ "cached" ] = true ;
239298 service [ "history" ] . forEach ( historyEntry => {
240299 const hVersion = historyEntry . version ;
241- if ( ! ( hVersion in this . servicesCached [ key ] ) ) {
242- this . servicesCached [ key ] [ hVersion ] = { } ;
243- this . servicesCached [ key ] [ hVersion ] [ "cached" ] = false ;
300+ if ( ! ( hVersion in this . __servicesCached [ key ] ) ) {
301+ this . __servicesCached [ key ] [ hVersion ] = { } ;
302+ this . __servicesCached [ key ] [ hVersion ] [ "cached" ] = false ;
244303 }
245304 // merge history data into current metadata
246- this . servicesCached [ key ] [ hVersion ] = {
247- ...this . servicesCached [ key ] [ hVersion ] ,
305+ this . __servicesCached [ key ] [ hVersion ] = {
306+ ...this . __servicesCached [ key ] [ hVersion ] ,
248307 ...historyEntry
249308 } ;
250309 } ) ;
@@ -253,18 +312,18 @@ qx.Class.define("osparc.store.Services", {
253312
254313 __isInCache : function ( key , version ) {
255314 return (
256- key in this . servicesCached &&
257- version in this . servicesCached [ key ] &&
258- this . servicesCached [ key ] [ version ] [ "cached" ]
315+ key in this . __servicesCached &&
316+ version in this . __servicesCached [ key ] &&
317+ this . __servicesCached [ key ] [ version ] [ "cached" ]
259318 ) ;
260319 } ,
261320
262321 __getLatestCached : function ( ) {
263322 const latestServices = { } ;
264- for ( const key in this . servicesCached ) {
265- let versions = Object . keys ( this . servicesCached [ key ] ) ;
323+ for ( const key in this . __servicesCached ) {
324+ let versions = Object . keys ( this . __servicesCached [ key ] ) ;
266325 versions = versions . sort ( osparc . utils . Utils . compareVersionNumbers ) . reverse ( ) ;
267- const latest = this . servicesCached [ key ] [ versions [ 0 ] ] ;
326+ const latest = this . __servicesCached [ key ] [ versions [ 0 ] ] ;
268327 latestServices [ key ] = osparc . utils . Utils . deepCloneObject ( latest ) ;
269328 }
270329 return latestServices ;
0 commit comments