Skip to content

Commit b7d833d

Browse files
committed
Merge pull request #1929 from devysf
* pr/1929: Polish "Add configuration file format radio buttons" Add configuration file format radio buttons Closes gh-1929
2 parents d43cab5 + e7633cb commit b7d833d

File tree

7 files changed

+100
-16
lines changed

7 files changed

+100
-16
lines changed

start-client/dev/api.mock.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
{
22
"_links": {
33
"maven-project": {
4-
"href": "https://start.spring.io/starter.zip?type=maven-project{&dependencies,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
4+
"href": "https://start.spring.io/starter.zip?type=maven-project{&dependencies,packaging,configurationFileFormat,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
55
"templated": true
66
},
77
"maven-build": {
8-
"href": "https://start.spring.io/pom.xml?type=maven-build{&dependencies,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
8+
"href": "https://start.spring.io/pom.xml?type=maven-build{&dependencies,packaging,configurationFileFormat,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
99
"templated": true
1010
},
1111
"gradle-project": {
12-
"href": "https://start.spring.io/starter.zip?type=gradle-project{&dependencies,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
12+
"href": "https://start.spring.io/starter.zip?type=gradle-project{&dependencies,packaging,configurationFileFormat,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
1313
"templated": true
1414
},
1515
"gradle-build": {
16-
"href": "https://start.spring.io/build.gradle?type=gradle-build{&dependencies,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
16+
"href": "https://start.spring.io/build.gradle?type=gradle-build{&dependencies,packaging,configurationFileFormat,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
1717
"templated": true
1818
},
1919
"dependencies": {
@@ -1393,6 +1393,14 @@
13931393
{ "id": "war", "name": "War" }
13941394
]
13951395
},
1396+
"configurationFileFormat": {
1397+
"type": "single-select",
1398+
"default": "properties",
1399+
"values": [
1400+
{ "id": "properties", "name": "Properties" },
1401+
{ "id": "yaml", "name": "YAML" }
1402+
]
1403+
},
13961404
"javaVersion": {
13971405
"type": "single-select",
13981406
"default": "1.8",

start-client/src/components/common/builder/Fields.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,15 @@ function Fields({
158158
update({ meta: { packaging: value } })
159159
}}
160160
/>
161+
<FieldRadio
162+
id='input-configurationFileFormat'
163+
value={get(values, 'meta.configurationFileFormat')}
164+
text='Configuration'
165+
options={get(config, 'lists.meta.configurationFileFormat')}
166+
onChange={value => {
167+
update({ meta: { configurationFileFormat: value } })
168+
}}
169+
/>
161170
<FieldRadio
162171
id='input-java'
163172
value={get(values, 'meta.java')}

start-client/src/components/common/builder/Loading.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ export default function Loading() {
6565
<Placeholder type='radio' width='20px' />
6666
<Placeholder type='radio' width='20px' />
6767
</div>
68+
<div
69+
className='control control-inline control-placeholder'
70+
style={{ height: 30 }}
71+
>
72+
<span className='placeholder-label' style={{ marginRight: 20 }}>
73+
Configuration
74+
</span>
75+
<Placeholder type='radio' width='20px' />
76+
<Placeholder type='radio' width='20px' />
77+
</div>
6878
<div
6979
className='control control-inline control-placeholder'
7080
style={{ height: 30 }}

start-client/src/components/reducer/Initializr.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export const defaultInitializrContext = {
1818
packaging: '',
1919
packageName: '',
2020
java: '',
21+
configurationFileFormat: '',
2122
},
2223
dependencies: [],
2324
},
@@ -52,10 +53,12 @@ const getPersistedOrDefault = json => {
5253
get(json, 'defaultValues.meta').packaging,
5354
java:
5455
localStorage.getItem('java') || get(json, 'defaultValues.meta').java,
56+
configurationFileFormat:
57+
localStorage.getItem('configurationFileFormat') || get(json, 'defaultValues.meta').configurationFileFormat,
5558
},
5659
dependencies: [],
5760
}
58-
const checks = ['project', 'language', 'meta.java', 'meta.packaging']
61+
const checks = ['project', 'language', 'meta.java', 'meta.packaging', 'meta.configurationFileFormat']
5962
checks.forEach(key => {
6063
const item = get(json, `lists.${key}`)?.find(
6164
it => it.key === get(values, key)
@@ -80,6 +83,9 @@ const persist = changes => {
8083
if (get(changes, 'meta.java')) {
8184
localStorage.setItem('java', get(changes, 'meta.java'))
8285
}
86+
if (get(changes, 'meta.configurationFileFormat')) {
87+
localStorage.setItem('configurationFileFormat', get(changes, 'meta.configurationFileFormat'))
88+
}
8389
}
8490

8591
export function reducer(state, action) {

start-client/src/components/reducer/__tests__/Initializr.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ describe('COMPLETE action', () => {
3131
packaging: '',
3232
packageName: '',
3333
java: '',
34+
configurationFileFormat: '',
3435
},
3536
dependencies: [],
3637
},
@@ -47,7 +48,7 @@ describe('COMPLETE action', () => {
4748
},
4849
})
4950
expect(get(result, 'share')).toBe(
50-
'type=maven-project&language=java&platformVersion=2.2.0.RELEASE&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies='
51+
'type=maven-project&language=java&platformVersion=2.2.0.RELEASE&packaging=jar&configurationFileFormat=properties&jvmVersion=1.8&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies='
5152
)
5253
expect(get(result, 'values.project')).toBe('maven-project')
5354
expect(get(result, 'values.language')).toBe('java')
@@ -181,6 +182,17 @@ describe('UPDATE action', () => {
181182
})
182183
expect(get(result, 'values.meta.packaging')).toBe('war')
183184
})
185+
it('should reduce the state (configuration file format)', () => {
186+
const result = reducer(state, {
187+
type: 'UPDATE',
188+
payload: {
189+
meta: {
190+
configurationFileFormat: 'yaml',
191+
},
192+
},
193+
})
194+
expect(get(result, 'values.meta.configurationFileFormat')).toBe('yaml')
195+
})
184196
it('should reduce the state (meta packageName)', () => {
185197
const result = reducer(state, {
186198
type: 'UPDATE',
@@ -217,6 +229,7 @@ describe('LOAD action', () => {
217229
description: 'Demo1 project for Spring Boot',
218230
groupId: 'com.example1',
219231
jvmVersion: '1.8',
232+
configurationFileFormat: 'yaml',
220233
language: 'java',
221234
name: 'demo1',
222235
packageName: 'com.example1.demo1',
@@ -239,6 +252,7 @@ describe('LOAD action', () => {
239252
expect(get(result, 'values.meta.packaging')).toBe('war')
240253
expect(get(result, 'values.meta.packageName')).toBe('com.example1.demo1')
241254
expect(get(result, 'values.meta.java')).toBe('1.8')
255+
expect(get(result, 'values.meta.configurationFileFormat')).toBe('yaml')
242256
expect(get(result, 'values.dependencies').length).toBe(0)
243257
expect(Object.keys(get(result, 'errors')).length).toBe(0)
244258
expect(Object.keys(get(result, 'warnings')).length).toBe(0)

start-client/src/components/utils/ApiUtils.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const PROPERTIES_MAPPING_URL = {
1010
language: 'language',
1111
platformVersion: 'boot',
1212
packaging: 'meta.packaging',
13+
configurationFileFormat: 'meta.configurationFileFormat',
1314
jvmVersion: 'meta.java',
1415
groupId: 'meta.group',
1516
artifactId: 'meta.artifact',
@@ -24,7 +25,7 @@ export const getInfo = function getInfo(url) {
2425
fetch(`${url}`, {
2526
method: 'GET',
2627
headers: {
27-
Accept: 'application/vnd.initializr.v2.2+json',
28+
Accept: 'application/vnd.initializr.v2.3+json',
2829
},
2930
})
3031
.then(
@@ -82,6 +83,7 @@ export const parseParams = (values, queryParams, lists) => {
8283
case 'project':
8384
case 'language':
8485
case 'meta.packaging':
86+
case 'meta.configurationFileFormat':
8587
case 'meta.java': {
8688
const list = get(lists, key, [])
8789
const res = list.find(a => a.key.toLowerCase() === value)
@@ -228,6 +230,10 @@ export const getLists = json => {
228230
key: `${packaging.id}`,
229231
text: `${packaging.name}`,
230232
})),
233+
configurationFileFormat: get(json, 'configurationFileFormat.values', []).map(configurationFileFormat => ({
234+
key: `${configurationFileFormat.id}`,
235+
text: `${configurationFileFormat.name}`,
236+
})),
231237
},
232238
dependencies: deps,
233239
}
@@ -246,6 +252,7 @@ export const getDefaultValues = json => {
246252
packaging: get(json, 'packaging.default'),
247253
packageName: get(json, 'packageName.default'),
248254
java: get(json, 'javaVersion.default'),
255+
configurationFileFormat: get(json, 'configurationFileFormat.default'),
249256
},
250257
dependencies: [],
251258
}
@@ -281,6 +288,7 @@ export const getProject = function getProject(url, values, config) {
281288
packageName: get(values, 'meta.packageName'),
282289
packaging: get(values, 'meta.packaging'),
283290
javaVersion: get(values, 'meta.java'),
291+
configurationFileFormat: get(values, 'meta.configurationFileFormat'),
284292
})
285293
let paramsDependencies = get(values, 'dependencies', [])
286294
.map(dependency => {

start-client/src/components/utils/__tests__/ApiUtils.js

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ describe('getDefaultValues', () => {
3838
expect(get(defaultValues, 'meta.packaging')).toBe(
3939
get(MockClient, 'packaging.default')
4040
)
41+
expect(get(defaultValues, 'meta.configurationFileFormat')).toBe(
42+
get(MockClient, 'configurationFileFormat.default')
43+
)
4144
expect(get(defaultValues, 'meta.packageName')).toBe(
4245
get(MockClient, 'packageName.default')
4346
)
@@ -113,6 +116,18 @@ describe('getListValues', () => {
113116
}
114117
})
115118

119+
it('parse correctly the list of configuration file formats', () => {
120+
const json = { ...MockClient }
121+
const listsValues = getLists(json)
122+
const listFormats = get(listsValues, 'meta.configurationFileFormat')
123+
const mockFormats = get(MockClient, 'configurationFileFormat.values')
124+
expect(listFormats.length).toBe(mockFormats.length)
125+
for (let i = 0; i < mockFormats.length; i += 1) {
126+
expect(listFormats[i].key).toBe(mockFormats[i].id)
127+
expect(listFormats[i].text).toBe(mockFormats[i].name)
128+
}
129+
})
130+
116131
it('parse correctly the list of dependencies', () => {
117132
const json = { ...MockClient }
118133
const listsValues = getLists(json)
@@ -151,6 +166,7 @@ describe('parseParams', () => {
151166
language: 'kotlin',
152167
platformVersion: get(defaultValues, 'boot'),
153168
packaging: 'war',
169+
configurationFileFormat: 'yaml',
154170
jvmVersion: '11',
155171
groupId: 'com.example2',
156172
artifactId: 'demo2',
@@ -168,6 +184,7 @@ describe('parseParams', () => {
168184
expect(get(result, 'values.language')).toBe('kotlin')
169185
expect(get(result, 'values.boot')).toBe(get(defaultValues, 'boot'))
170186
expect(get(result, 'values.meta.packaging')).toBe('war')
187+
expect(get(result, 'values.meta.configurationFileFormat')).toBe('yaml')
171188
expect(get(result, 'values.meta.java')).toBe('11')
172189
expect(get(result, 'values.meta.group')).toBe('com.example2')
173190
expect(get(result, 'values.meta.artifact')).toBe('demo2')
@@ -191,6 +208,7 @@ describe('parseParams', () => {
191208
language: 'php',
192209
platformVersion: get(defaultValues, 'boot'),
193210
packaging: 'tar',
211+
configurationFileFormat: 'xml',
194212
jvmVersion: '1',
195213
groupId: 'com.example',
196214
artifactId: 'demo',
@@ -205,6 +223,7 @@ describe('parseParams', () => {
205223
expect(get(result, 'warnings.language.value')).toBe('php')
206224
expect(get(result, 'warnings.meta.packaging.value')).toBe('tar')
207225
expect(get(result, 'warnings.meta.java.value')).toBe('1')
226+
expect(get(result, 'warnings.meta.configurationFileFormat.value')).toBe('xml')
208227

209228
expect(get(result, 'values.meta.group')).toBe('com.example')
210229
expect(get(result, 'values.meta.artifact')).toBe('demo')
@@ -221,6 +240,7 @@ describe('parseParams', () => {
221240
expect(get(result, 'values.boot')).toBe(get(defaultValues, 'boot'))
222241
expect(get(result, 'values.meta.packaging')).toBe('jar')
223242
expect(get(result, 'values.meta.java')).toBe('1.8')
243+
expect(get(result, 'values.meta.configurationFileFormat')).toBe('properties')
224244
})
225245

226246
it('return parameters, no warning and error', () => {
@@ -235,6 +255,7 @@ describe('parseParams', () => {
235255
language: 'kotlin',
236256
platformVersion: '1.1.1',
237257
packaging: 'war',
258+
configurationFileFormat: 'properties',
238259
jvmVersion: '11',
239260
groupId: 'com.example2',
240261
artifactId: 'demo2',
@@ -253,6 +274,7 @@ describe('parseParams', () => {
253274
expect(get(result, 'values.boot')).toBe(get(defaultValues, 'boot'))
254275
expect(get(result, 'values.meta.packaging')).toBe('war')
255276
expect(get(result, 'values.meta.java')).toBe('11')
277+
expect(get(result, 'values.meta.configurationFileFormat')).toBe('properties')
256278
expect(get(result, 'values.meta.group')).toBe('com.example2')
257279
expect(get(result, 'values.meta.artifact')).toBe('demo2')
258280
expect(get(result, 'values.meta.name')).toBe('demo2')
@@ -276,6 +298,7 @@ describe('parseParams', () => {
276298
language: 'php',
277299
platformVersion: '1.1.1',
278300
packaging: 'tar',
301+
configurationFileFormat: 'xml',
279302
jvmVersion: '1',
280303
groupId: 'com.example',
281304
artifactId: 'demo',
@@ -290,6 +313,7 @@ describe('parseParams', () => {
290313
expect(get(result, 'warnings.language.value')).toBe('php')
291314
expect(get(result, 'warnings.meta.packaging.value')).toBe('tar')
292315
expect(get(result, 'warnings.meta.java.value')).toBe('1')
316+
expect(get(result, 'warnings.meta.configurationFileFormat.value')).toBe('xml')
293317

294318
expect(get(result, 'errors.boot.value')).toBe('1.1.1')
295319

@@ -308,6 +332,7 @@ describe('parseParams', () => {
308332
expect(get(result, 'values.boot')).toBe(get(defaultValues, 'boot'))
309333
expect(get(result, 'values.meta.packaging')).toBe('jar')
310334
expect(get(result, 'values.meta.java')).toBe('1.8')
335+
expect(get(result, 'values.meta.configurationFileFormat')).toBe('properties')
311336
})
312337
})
313338

@@ -328,11 +353,12 @@ describe('getShareUrl', () => {
328353
name: 'foo8',
329354
description: 'foo9',
330355
packageName: 'foo10',
356+
configurationFileFormat: 'foo11',
331357
},
332-
dependencies: ['foo11', 'foo12'],
358+
dependencies: ['foo12', 'foo13'],
333359
})
334360
expect(result).toBe(
335-
'type=foo1&language=foo2&platformVersion=foo3&packaging=foo4&jvmVersion=foo5&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&dependencies=foo11,foo12'
361+
'type=foo1&language=foo2&platformVersion=foo3&packaging=foo4&configurationFileFormat=foo11&jvmVersion=foo5&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&dependencies=foo12,foo13'
336362
)
337363
})
338364
})
@@ -358,16 +384,17 @@ describe('getProject', () => {
358384
name: 'foo8',
359385
description: 'foo9',
360386
packageName: 'foo10',
387+
configurationFileFormat: 'foo11',
361388
},
362-
dependencies: ['foo11', 'foo12'],
389+
dependencies: ['foo12', 'foo13'],
363390
}
364391
getProject('http://demo/starter.zip', values, [
365-
{ id: 'foo11' },
366392
{ id: 'foo12' },
393+
{ id: 'foo13' },
367394
])
368395
expect(fetch.mock.calls.length).toEqual(1)
369396
expect(fetch.mock.calls[0][0]).toEqual(
370-
'http://demo/starter.zip?type=foo1&language=foo2&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&dependencies=foo11,foo12'
397+
'http://demo/starter.zip?type=foo1&language=foo2&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&configurationFileFormat=foo11&dependencies=foo12,foo13'
371398
)
372399
})
373400

@@ -384,13 +411,14 @@ describe('getProject', () => {
384411
name: 'foo8',
385412
description: 'foo9',
386413
packageName: 'foo10',
414+
configurationFileFormat: 'foo11',
387415
},
388-
dependencies: ['foo11', 'foo12'],
416+
dependencies: ['foo12', 'foo13'],
389417
}
390-
getProject('http://demo/starter.zip', values, [{ id: 'foo11' }])
418+
getProject('http://demo/starter.zip', values, [{ id: 'foo12' }])
391419
expect(fetch.mock.calls.length).toEqual(1)
392420
expect(fetch.mock.calls[0][0]).toEqual(
393-
'http://demo/starter.zip?type=foo1&language=foo2&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&dependencies=foo11'
421+
'http://demo/starter.zip?type=foo1&language=foo2&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&configurationFileFormat=foo11&dependencies=foo12'
394422
)
395423
})
396424

@@ -407,12 +435,13 @@ describe('getProject', () => {
407435
name: 'foo8',
408436
description: 'foo9',
409437
packageName: 'foo10',
438+
configurationFileFormat: 'foo11',
410439
},
411440
}
412441
getProject('http://demo/starter.zip', values, [])
413442
expect(fetch.mock.calls.length).toEqual(1)
414443
expect(fetch.mock.calls[0][0]).toEqual(
415-
'http://demo/starter.zip?type=foo1&language=foo2&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5'
444+
'http://demo/starter.zip?type=foo1&language=foo2&bootVersion=foo3&baseDir=foo7&groupId=foo6&artifactId=foo7&name=foo8&description=foo9&packageName=foo10&packaging=foo4&javaVersion=foo5&configurationFileFormat=foo11'
416445
)
417446
})
418447
})

0 commit comments

Comments
 (0)