Skip to content

Commit 6e7773d

Browse files
Improved Migration for non reflective scripts
1 parent 8ffb798 commit 6e7773d

File tree

12 files changed

+213
-24
lines changed

12 files changed

+213
-24
lines changed

spring-data-eclipse-store-demo/src/main/java/software/xdev/spring/data/eclipse/store/demo/complex/ComplexDemoApplication.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,7 @@ public void run(final String... args)
5555
*/
5656
private void ownerCalls()
5757
{
58-
this.ownerService.logOwners();
59-
this.ownerService.deleteAll();
60-
this.ownerService.logOwners();
61-
this.ownerService.createNewOwnerAndVisit();
58+
this.ownerService.createNewOwnerAndVisit("Stevie", "Nicks", "Peter");
6259
this.ownerService.logOwnersAndVisits();
6360
}
6461

spring-data-eclipse-store-demo/src/main/java/software/xdev/spring/data/eclipse/store/demo/complex/OwnerService.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,16 @@ public void logOwnersAndVisits()
8888
/**
8989
* Transactional
9090
*/
91-
public void createNewOwnerAndVisit()
91+
public void createNewOwnerAndVisit(final String ownerFirstName, final String ownerLastName, final String petName)
9292
{
9393
new TransactionTemplate(this.transactionManager).execute(
9494
status ->
9595
{
96-
final Owner owner = this.createOwner();
96+
final Owner owner = this.createOwner(ownerFirstName, ownerLastName, petName);
9797
this.ownerRepository.save(owner);
9898

9999
final Visit visit = this.createVisit();
100-
owner.addVisit("Peter", visit);
100+
owner.addVisit(petName, visit);
101101
this.ownerRepository.save(owner);
102102
LOG.info("----Stored new owner and visit----");
103103
return null;
@@ -113,14 +113,14 @@ private Visit createVisit()
113113
}
114114

115115
@SuppressWarnings("checkstyle:MagicNumber")
116-
private Owner createOwner()
116+
private Owner createOwner(final String ownerFirstName, final String ownerLastName, final String petName)
117117
{
118118
final Owner owner = new Owner();
119-
owner.setFirstName("Stevie");
120-
owner.setLastName("Nicks");
119+
owner.setFirstName(ownerFirstName);
120+
owner.setLastName(ownerLastName);
121121
final Pet pet = new Pet();
122122
pet.setBirthDate(LocalDate.now().minusWeeks(6));
123-
pet.setName("Peter");
123+
pet.setName(petName);
124124
final PetType petType = new PetType();
125125
petType.setName("Dog");
126126
pet.setType(petType);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright © 2024 XDEV Software (https://xdev.software)
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+
package software.xdev.spring.data.eclipse.store.demo.complex.migration;
17+
18+
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.stereotype.Component;
20+
21+
import software.xdev.micromigration.eclipsestore.MigrationEmbeddedStorageManager;
22+
import software.xdev.micromigration.scripts.Context;
23+
import software.xdev.micromigration.version.MigrationVersion;
24+
import software.xdev.spring.data.eclipse.store.demo.complex.OwnerService;
25+
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
26+
import software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrationScript;
27+
28+
29+
/**
30+
* This is automatically called by the
31+
* {@link software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrater} through dependency
32+
* injection.
33+
* <p>
34+
* In contrast to {@link v1_0_0_Init} the version of this script is defined in the method {@link #getTargetVersion()}.
35+
*/
36+
@Component
37+
public class CustomNameScriptAddOwner implements DataMigrationScript
38+
{
39+
private final OwnerService service;
40+
41+
public CustomNameScriptAddOwner(@Autowired final OwnerService service)
42+
{
43+
this.service = service;
44+
}
45+
46+
@Override
47+
public MigrationVersion getTargetVersion()
48+
{
49+
return new MigrationVersion(1, 1, 0);
50+
}
51+
52+
@Override
53+
public void migrate(final Context<VersionedRoot, MigrationEmbeddedStorageManager> context)
54+
{
55+
this.service.createNewOwnerAndVisit("John", "McVie", "Ivan");
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright © 2024 XDEV Software (https://xdev.software)
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+
package software.xdev.spring.data.eclipse.store.demo.complex.migration;
17+
18+
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.stereotype.Component;
20+
21+
import software.xdev.micromigration.eclipsestore.MigrationEmbeddedStorageManager;
22+
import software.xdev.micromigration.scripts.Context;
23+
import software.xdev.spring.data.eclipse.store.demo.complex.OwnerService;
24+
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
25+
import software.xdev.spring.data.eclipse.store.repository.root.data.version.ReflectiveDataMigrationScript;
26+
27+
28+
/**
29+
* This is automatically called by the
30+
* {@link software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrater} through dependency
31+
* injection.
32+
* <p>
33+
* In contrast to {@link CustomNameScriptAddOwner} the version of this script is defined by
34+
* <b>the name of the class defines the version</b>.
35+
*/
36+
@SuppressWarnings("CheckStyle")
37+
@Component
38+
public class v1_0_0_Init extends ReflectiveDataMigrationScript
39+
{
40+
private final OwnerService service;
41+
42+
public v1_0_0_Init(@Autowired final OwnerService service)
43+
{
44+
this.service = service;
45+
}
46+
47+
@Override
48+
public void migrate(final Context<VersionedRoot, MigrationEmbeddedStorageManager> context)
49+
{
50+
this.service.createNewOwnerAndVisit("Mick", "Fleetwood", "Isabella");
51+
}
52+
}

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/root/data/version/DataMigrationScript.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import org.springframework.stereotype.Component;
1919

2020
import software.xdev.micromigration.eclipsestore.MigrationEmbeddedStorageManager;
21-
import software.xdev.micromigration.scripts.ReflectiveVersionMigrationScript;
21+
import software.xdev.micromigration.scripts.VersionAgnosticMigrationScript;
2222
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
2323

2424

2525
@Component
26-
public abstract class DataMigrationScript
27-
extends ReflectiveVersionMigrationScript<VersionedRoot, MigrationEmbeddedStorageManager>
26+
public interface DataMigrationScript
27+
extends VersionAgnosticMigrationScript<VersionedRoot, MigrationEmbeddedStorageManager>
2828
{
2929
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright © 2024 XDEV Software (https://xdev.software)
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+
package software.xdev.spring.data.eclipse.store.repository.root.data.version;
17+
18+
import org.springframework.stereotype.Component;
19+
20+
import software.xdev.micromigration.eclipsestore.MigrationEmbeddedStorageManager;
21+
import software.xdev.micromigration.scripts.ReflectiveVersionMigrationScript;
22+
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
23+
24+
25+
@Component
26+
public abstract class ReflectiveDataMigrationScript
27+
extends ReflectiveVersionMigrationScript<VersionedRoot, MigrationEmbeddedStorageManager>
28+
implements DataMigrationScript
29+
{
30+
}

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/data/migration/with/migrater/v1_0_0_Init.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
import software.xdev.micromigration.scripts.Context;
2020
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
2121
import software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrationScript;
22+
import software.xdev.spring.data.eclipse.store.repository.root.data.version.ReflectiveDataMigrationScript;
2223

2324

2425
@SuppressWarnings("CheckStyle")
25-
public class v1_0_0_Init extends DataMigrationScript
26+
public class v1_0_0_Init extends ReflectiveDataMigrationScript
2627
{
2728
private final PersistedEntityRepository
2829
repository;

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/data/migration/with/multiple/scripts/DataMigrationWithMultipleScriptsTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ class DataMigrationWithMultipleScriptsTest
3737
@Test
3838
void assertUpdateV1Executed()
3939
{
40-
Assertions.assertEquals(2, this.repository.count());
40+
Assertions.assertEquals(3, this.repository.count());
4141
Assertions.assertEquals(
42-
new MigrationVersion(1, 1, 0),
42+
new MigrationVersion(1, 2, 0),
4343
this.configuration.getStorageInstance().getRoot().getDataVersion().getVersion());
4444
}
4545

@@ -49,9 +49,9 @@ void assertNotUpdatedAfterMigration()
4949
TestUtil.doBeforeAndAfterRestartOfDatastore(
5050
this.configuration,
5151
() -> {
52-
Assertions.assertEquals(2, this.repository.count());
52+
Assertions.assertEquals(3, this.repository.count());
5353
Assertions.assertEquals(
54-
new MigrationVersion(1, 1, 0),
54+
new MigrationVersion(1, 2, 0),
5555
this.configuration.getStorageInstance().getRoot().getDataVersion().getVersion());
5656
}
5757
);

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/data/migration/with/multiple/scripts/v1_0_0_Init.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
import software.xdev.micromigration.eclipsestore.MigrationEmbeddedStorageManager;
2222
import software.xdev.micromigration.scripts.Context;
2323
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
24-
import software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrationScript;
24+
import software.xdev.spring.data.eclipse.store.repository.root.data.version.ReflectiveDataMigrationScript;
2525

2626

2727
@SuppressWarnings("CheckStyle")
2828
@Component
29-
public class v1_0_0_Init extends DataMigrationScript
29+
public class v1_0_0_Init extends ReflectiveDataMigrationScript
3030
{
3131
private final PersistedEntityRepository
3232
repository;

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/data/migration/with/multiple/scripts/v1_1_0_NextScript.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
import software.xdev.micromigration.scripts.Context;
2323
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
2424
import software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrationScript;
25+
import software.xdev.spring.data.eclipse.store.repository.root.data.version.ReflectiveDataMigrationScript;
2526

2627

2728
@SuppressWarnings("CheckStyle")
2829
@Component
29-
public class v1_1_0_NextScript extends DataMigrationScript
30+
public class v1_1_0_NextScript extends ReflectiveDataMigrationScript
3031
{
3132
private final PersistedEntityRepository
3233
repository;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Copyright © 2024 XDEV Software (https://xdev.software)
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+
package software.xdev.spring.data.eclipse.store.integration.isolated.tests.data.migration.with.multiple.scripts;
17+
18+
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.stereotype.Component;
20+
21+
import software.xdev.micromigration.eclipsestore.MigrationEmbeddedStorageManager;
22+
import software.xdev.micromigration.scripts.Context;
23+
import software.xdev.micromigration.version.MigrationVersion;
24+
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
25+
import software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrationScript;
26+
27+
28+
@SuppressWarnings("CheckStyle")
29+
@Component
30+
public class v1_2_0_CustomNamedScript implements DataMigrationScript
31+
{
32+
private final PersistedEntityRepository
33+
repository;
34+
35+
public v1_2_0_CustomNamedScript(@Autowired final PersistedEntityRepository repository)
36+
{
37+
this.repository = repository;
38+
}
39+
40+
@Override
41+
public MigrationVersion getTargetVersion()
42+
{
43+
return new MigrationVersion(1, 2, 0);
44+
}
45+
46+
@Override
47+
public void migrate(final Context<VersionedRoot, MigrationEmbeddedStorageManager> context)
48+
{
49+
this.repository.save(new PersistedEntity());
50+
}
51+
}

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/data/migration/with/script/v1_0_0_Init.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
import software.xdev.micromigration.eclipsestore.MigrationEmbeddedStorageManager;
2222
import software.xdev.micromigration.scripts.Context;
2323
import software.xdev.spring.data.eclipse.store.repository.root.VersionedRoot;
24-
import software.xdev.spring.data.eclipse.store.repository.root.data.version.DataMigrationScript;
24+
import software.xdev.spring.data.eclipse.store.repository.root.data.version.ReflectiveDataMigrationScript;
2525

2626

2727
@SuppressWarnings("CheckStyle")
2828
@Component
29-
public class v1_0_0_Init extends DataMigrationScript
29+
public class v1_0_0_Init extends ReflectiveDataMigrationScript
3030
{
3131
private final PersistedEntityRepository repository;
3232

0 commit comments

Comments
 (0)