Skip to content

Commit 8ff2056

Browse files
authored
Merge branch 'develop' into feature/add-jackson-modules-java8-joda
2 parents 9b660ee + 5dac489 commit 8ff2056

File tree

9 files changed

+241
-198
lines changed

9 files changed

+241
-198
lines changed

ninja-core/src/main/java/ninja/NinjaDefault.java

Lines changed: 138 additions & 152 deletions
Large diffs are not rendered by default.

ninja-core/src/main/java/ninja/i18n/MessagesImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,11 @@ public String getWithDefault(String key,
121121
Optional<String> value = get(key, language, params);
122122
if (value.isPresent()) {
123123
return value.get();
124-
} else {
124+
} else if (defaultMessage != null) {
125125
MessageFormat messageFormat = getMessageFormatForLocale(defaultMessage, language);
126126
return messageFormat.format(params);
127+
} else {
128+
return null;
127129
}
128130
}
129131

ninja-core/src/main/java/ninja/session/SessionImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public void init(Context context) {
121121
// If an expiry time was set previously use that instead of the
122122
// default session expire time.
123123
if (data.containsKey(EXPIRY_TIME_KEY)) {
124-
Long expiryTime = Long.parseLong(data.get(EXPIRY_TIME_KEY));
124+
long expiryTime = Long.parseLong(data.get(EXPIRY_TIME_KEY));
125125
if (expiryTime >= 0) {
126126
sessionExpireTimeInMs = expiryTime;
127127
}
@@ -142,7 +142,7 @@ protected boolean shouldExpire() {
142142
return true;
143143
}
144144

145-
Long timestamp = Long.parseLong(data.get(TIMESTAMP_KEY));
145+
long timestamp = Long.parseLong(data.get(TIMESTAMP_KEY));
146146

147147
return (timestamp + sessionExpireTimeInMs < time.currentTimeMillis());
148148
}

ninja-core/src/site/markdown/developer/changelog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ Version 6.8.2
22
=============
33

44
* 2021-12-18 Added Jackson Module to handle Java8 and Joda data types (thibaultmeyer)
5+
* 2021-12-24 Fixed NullPointerException on "Message::getWithDefault" when value and default value are both null
6+
(thibaultmeyer)
7+
* 2021-12-17 Updated Flyway dependency to 8.2.2 (asolntsev, thibaultmeyer)
58
* 2021-03-19 Streamline tests (asolntsev)
69
* 2021-03-19 Updated Guice dependency to 5.0.1 (asolntsev)
710
* 2021-03-19 Updated dependencies: slf4j:1.7.30, jackson:2.12.2, httpclient:4.5.13, commons-codec:1.15 (asolntsev)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Copyright (C) the original author or authors.
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 or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package ninja.migrations.flyway;
18+
19+
import com.google.inject.Provider;
20+
import com.google.inject.Singleton;
21+
import org.flywaydb.core.Flyway;
22+
import org.flywaydb.core.api.configuration.FluentConfiguration;
23+
24+
/**
25+
* A provider of Flyway Fluent Configuration.
26+
*/
27+
@Singleton
28+
public class FluentConfigurationProvider implements Provider<FluentConfiguration> {
29+
30+
@Override
31+
public FluentConfiguration get() {
32+
return Flyway.configure();
33+
}
34+
35+
}

ninja-db-classic/src/main/java/ninja/migrations/flyway/MigrationEngineFlyway.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,19 @@
2525
import com.google.inject.Inject;
2626
import com.google.inject.Singleton;
2727
import ninja.migrations.MigrationEngine;
28+
import org.flywaydb.core.api.configuration.FluentConfiguration;
2829

2930
@Singleton
3031
public class MigrationEngineFlyway implements MigrationEngine {
3132

3233
private final NinjaProperties ninjaProperties;
33-
private final Provider<Flyway> flywayProvider;
34+
private final Provider<FluentConfiguration> fluentConfigurationProvider;
3435

3536
@Inject
3637
public MigrationEngineFlyway(NinjaProperties ninjaProperties,
37-
Provider<Flyway> flywayProvider) {
38+
Provider<FluentConfiguration> fluentConfigurationProvider) {
3839
this.ninjaProperties = ninjaProperties;
39-
this.flywayProvider = flywayProvider;
40+
this.fluentConfigurationProvider = fluentConfigurationProvider;
4041
}
4142

4243
@Override
@@ -50,20 +51,20 @@ public void migrate() {
5051

5152
// We migrate automatically => if you do not want that (eg in production)
5253
// set ninja.migration.run=false in application.conf
53-
Flyway flyway = flywayProvider.get();
54-
flyway.setDataSource(connectionUrl, connectionUsername, connectionPassword);
55-
56-
if (locations != null) {
57-
flyway.setLocations(locations);
58-
}
54+
FluentConfiguration fluentConfiguration = fluentConfigurationProvider.get();
5955
if (schemas != null) {
60-
flyway.setSchemas(schemas);
56+
fluentConfiguration.schemas(schemas);
6157
}
58+
if (locations != null) {
59+
fluentConfiguration.locations(locations);
60+
}
61+
62+
Flyway flyway = fluentConfiguration.dataSource(connectionUrl, connectionUsername, connectionPassword).load();
6263

6364
// In testmode we are cleaning the database so that subsequent testcases
6465
// get a fresh database.
6566
if (ninjaProperties.getBooleanWithDefault(NinjaConstant.NINJA_MIGRATION_DROP_SCHEMA,
66-
ninjaProperties.isTest() ? true : false )) {
67+
ninjaProperties.isTest())) {
6768
flyway.clean();
6869
}
6970

ninja-db-classic/src/test/java/ninja/migrations/MigrationEngineFlywayTest.java

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import ninja.utils.NinjaMode;
2626
import ninja.utils.NinjaPropertiesImpl;
2727
import org.flywaydb.core.Flyway;
28+
import org.flywaydb.core.api.configuration.FluentConfiguration;
2829
import org.junit.Test;
2930
import org.mockito.InOrder;
3031
import org.mockito.Mockito;
@@ -37,7 +38,9 @@
3738

3839
public class MigrationEngineFlywayTest {
3940

40-
private MigrationEngineFlyway getTestInstance(Flyway flywayInstance,
41+
private Flyway mockedFlyway;
42+
43+
private MigrationEngineFlyway getTestInstance(FluentConfiguration fluentConfiguration,
4144
NinjaMode ninjaMode,
4245
Map<String, String> customProperties) {
4346
NinjaPropertiesImpl ninjaProperties = NinjaPropertiesImpl.builder()
@@ -54,65 +57,78 @@ private MigrationEngineFlyway getTestInstance(Flyway flywayInstance,
5457
protected void configure() {
5558
bind(NinjaProperties.class).toInstance(ninjaProperties);
5659
install(new MigrationClassicModule());
57-
bind(Flyway.class).toInstance(flywayInstance);
60+
bind(FluentConfiguration.class).toInstance(fluentConfiguration);
5861
}
5962
});
6063
return injector.getInstance(MigrationEngineFlyway.class);
6164
}
6265

63-
private Flyway testMockedMigrate(NinjaMode ninjaMode, Map<String, String> customProperties) {
64-
Flyway mockedFlyway = mock(Flyway.class);
65-
MigrationEngineFlyway migrationEngineFlyway = getTestInstance(mockedFlyway, ninjaMode, customProperties);
66+
private FluentConfiguration testMockedMigrate(NinjaMode ninjaMode, Map<String, String> customProperties) {
67+
FluentConfiguration mockedFluentConfiguration = mock(FluentConfiguration.class);
68+
mockedFlyway = mock(Flyway.class);
69+
when(mockedFluentConfiguration.load()).thenReturn(mockedFlyway);
70+
when(mockedFluentConfiguration.dataSource("testurl", "testuser", "testpassword")).thenReturn(mockedFluentConfiguration);
71+
MigrationEngineFlyway migrationEngineFlyway = getTestInstance(mockedFluentConfiguration, ninjaMode, customProperties);
6672
migrationEngineFlyway.migrate();
67-
return mockedFlyway;
73+
return mockedFluentConfiguration;
6874
}
6975

70-
private Flyway testMockedMigrate(NinjaMode ninjaMode) {
76+
private FluentConfiguration testMockedMigrate(NinjaMode ninjaMode) {
7177
return testMockedMigrate(ninjaMode, Collections.emptyMap());
7278
}
7379

7480
@Test
7581
public void testModeDefault() {
76-
Flyway mock = testMockedMigrate(NinjaMode.test);
77-
InOrder inOrder = Mockito.inOrder(mock);
78-
inOrder.verify(mock).setDataSource("testurl", "testuser", "testpassword");
79-
inOrder.verify(mock).clean();
80-
inOrder.verify(mock).migrate();
82+
FluentConfiguration mock = testMockedMigrate(NinjaMode.test);
83+
InOrder inOrder = Mockito.inOrder(mock, mockedFlyway);
84+
85+
inOrder.verify(mock).dataSource("testurl", "testuser", "testpassword");
86+
inOrder.verify(mock).load();
87+
88+
inOrder.verify(mockedFlyway).clean();
89+
inOrder.verify(mockedFlyway).migrate();
8190
}
8291

8392
@Test
8493
public void testModeNoDrop() {
85-
Flyway mock = testMockedMigrate(NinjaMode.test,
94+
FluentConfiguration mock = testMockedMigrate(NinjaMode.test,
8695
ImmutableMap.of(NinjaConstant.NINJA_MIGRATION_DROP_SCHEMA, String.valueOf(false)));
87-
InOrder inOrder = Mockito.inOrder(mock);
88-
inOrder.verify(mock).migrate();
89-
verify(mock, never()).clean();
96+
InOrder inOrder = Mockito.inOrder(mock, mockedFlyway);
97+
98+
inOrder.verify(mock).dataSource("testurl", "testuser", "testpassword");
99+
inOrder.verify(mock).load();
100+
101+
inOrder.verify(mockedFlyway).migrate();
102+
verify(mockedFlyway, never()).clean();
90103
}
91104

92105
@Test
93106
public void prodModeDefault() {
94-
Flyway mock = testMockedMigrate(NinjaMode.prod);
95-
InOrder inOrder = Mockito.inOrder(mock);
96-
inOrder.verify(mock).setDataSource("testurl", "testuser", "testpassword");
97-
inOrder.verify(mock).migrate();
98-
verify(mock, never()).clean();
107+
FluentConfiguration mock = testMockedMigrate(NinjaMode.prod);
108+
InOrder inOrder = Mockito.inOrder(mock, mockedFlyway);
109+
110+
inOrder.verify(mock).dataSource("testurl", "testuser", "testpassword");
111+
inOrder.verify(mock).load();
112+
113+
inOrder.verify(mockedFlyway).migrate();
114+
verify(mockedFlyway, never()).clean();
99115
}
100116

101117
@Test
102118
public void prodModeCustomLocation() {
103-
Flyway mock = testMockedMigrate(NinjaMode.prod,
119+
FluentConfiguration mock = testMockedMigrate(NinjaMode.prod,
104120
ImmutableMap.of(NinjaConstant.NINJA_MIGRATION_LOCATIONS, "location"));
105-
InOrder inOrder = Mockito.inOrder(mock);
106-
inOrder.verify(mock).setLocations("location");
107-
inOrder.verify(mock).migrate();
121+
InOrder inOrder = Mockito.inOrder(mock, mockedFlyway);
122+
inOrder.verify(mock).locations("location");
123+
inOrder.verify(mockedFlyway).migrate();
108124
}
109125

110126
@Test
111127
public void prodModeCustomSchema() {
112-
Flyway mock = testMockedMigrate(NinjaMode.prod,
128+
FluentConfiguration mock = testMockedMigrate(NinjaMode.prod,
113129
ImmutableMap.of(NinjaConstant.NINJA_MIGRATION_SCHEMAS, "schema"));
114-
InOrder inOrder = Mockito.inOrder(mock);
115-
inOrder.verify(mock).setSchemas("schema");
116-
inOrder.verify(mock).migrate();
130+
InOrder inOrder = Mockito.inOrder(mock, mockedFlyway);
131+
inOrder.verify(mock).schemas("schema");
132+
inOrder.verify(mockedFlyway).migrate();
117133
}
118134
}

ninja-maven-plugin/src/main/java/ninja/build/WatchAndRestartMachine.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public void handleNewOrModifiedFile(String newOrMod, Path path) {
219219
log.debug(" matched rule: type={}, pattern={}, proceed={}", match.type, match.pattern, match.proceed);
220220

221221
if (match.proceed) {
222-
log.debug(" will trigger restart", newOrMod, f);
222+
log.debug(" will trigger restart");
223223
restartTrigger.trigger();
224224
}
225225
else {

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -674,12 +674,12 @@
674674
<artifactId>spymemcached</artifactId>
675675
<version>2.12.3</version>
676676
</dependency>
677-
677+
678678
<!-- Migration framework -->
679679
<dependency>
680680
<groupId>org.flywaydb</groupId>
681681
<artifactId>flyway-core</artifactId>
682-
<version>5.2.4</version>
682+
<version>8.2.2</version>
683683
</dependency>
684684

685685
<!-- JPA dependencies -->

0 commit comments

Comments
 (0)