Skip to content

Commit 074af81

Browse files
Finished Importer
1 parent 89bc6b0 commit 074af81

File tree

7 files changed

+96
-156
lines changed

7 files changed

+96
-156
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package software.xdev.spring.data.eclipse.store.jpa;
16+
package software.xdev.spring.data.eclipse.store.jpa.integration;
1717

1818
import static org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD;
1919

spring-data-eclipse-store-jpa/src/test/java/software/xdev/spring/data/eclipse/store/jpa/integration/IntegrationTest.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@
2323
import org.springframework.beans.factory.annotation.Autowired;
2424

2525
import software.xdev.spring.data.eclipse.store.importer.EclipseStoreDataImporterComponent;
26-
import software.xdev.spring.data.eclipse.store.jpa.DefaultTestAnnotations;
2726
import software.xdev.spring.data.eclipse.store.jpa.integration.repository.PersonToTestInEclipseStore;
2827
import software.xdev.spring.data.eclipse.store.jpa.integration.repository.PersonToTestInEclipseStoreRepository;
2928
import software.xdev.spring.data.eclipse.store.jpa.integration.repository.PersonToTestInJpa;
3029
import software.xdev.spring.data.eclipse.store.jpa.integration.repository.PersonToTestInJpaRepository;
30+
import software.xdev.spring.data.eclipse.store.repository.EclipseStoreStorage;
3131
import software.xdev.spring.data.eclipse.store.repository.support.SimpleEclipseStoreRepository;
3232

3333

3434
@DefaultTestAnnotations
35-
public class IntegrationTest
35+
class IntegrationTest
3636
{
3737
@Autowired
3838
private PersonToTestInEclipseStoreRepository personToTestInEclipseStoreRepository;
@@ -43,6 +43,9 @@ public class IntegrationTest
4343
@Autowired
4444
private EclipseStoreDataImporterComponent eclipseStoreDataImporter;
4545

46+
@Autowired
47+
private EclipseStoreStorage eclipseStoreStorage;
48+
4649
/**
4750
* Super simple test if there are any start-up errors when running parallel to a JPA configuration
4851
*/
@@ -68,5 +71,21 @@ void testEclipseStoreImport()
6871
Assertions.assertEquals(1, simpleEclipseStoreRepositories.size());
6972
final List<?> allEntities = simpleEclipseStoreRepositories.get(0).findAll();
7073
Assertions.assertEquals(1, allEntities.size());
74+
75+
this.eclipseStoreStorage.stop();
76+
Assertions.assertEquals(
77+
1,
78+
this.eclipseStoreStorage.getEntityCount(PersonToTestInJpa.class),
79+
"After restart the imported entities are not there anymore.");
80+
}
81+
82+
@Test
83+
void testEclipseStoreEmptyImport()
84+
{
85+
final List<SimpleEclipseStoreRepository<?, ?>> simpleEclipseStoreRepositories =
86+
this.eclipseStoreDataImporter.importData();
87+
Assertions.assertEquals(1, simpleEclipseStoreRepositories.size());
88+
final List<?> allEntities = simpleEclipseStoreRepositories.get(0).findAll();
89+
Assertions.assertEquals(0, allEntities.size());
7190
}
7291
}

spring-data-eclipse-store-jpa/src/test/java/software/xdev/spring/data/eclipse/store/jpa/TestConfiguration.java renamed to spring-data-eclipse-store-jpa/src/test/java/software/xdev/spring/data/eclipse/store/jpa/integration/TestConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package software.xdev.spring.data.eclipse.store.jpa;
16+
package software.xdev.spring.data.eclipse.store.jpa.integration;
1717

1818
import java.nio.file.Path;
1919

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/importer/EclipseStoreDataImporter.java

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
import software.xdev.spring.data.eclipse.store.repository.support.copier.working.RecursiveWorkingCopier;
3535

3636

37+
/**
38+
* Imports entities from {@link EntityManagerFactory}s into the EclipseStore storage.
39+
*/
3740
public class EclipseStoreDataImporter
3841
{
3942
private static final Logger LOG = LoggerFactory.getLogger(EclipseStoreDataImporter.class);
@@ -44,12 +47,39 @@ public EclipseStoreDataImporter(final EclipseStoreStorage eclipseStoreStorage)
4447
this.eclipseStoreStorage = eclipseStoreStorage;
4548
}
4649

50+
/**
51+
* Imports entities from all given {@link EntityManagerFactory}s that are available into the EclipseStore storage.
52+
* <p>
53+
* This should be done only once. Otherwise entities may be imported multiple times.
54+
* </p>
55+
* <p>
56+
* After importing all the entities, the existing repositories should be converted to
57+
* {@link software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreRepository}.
58+
* </p>
59+
*
60+
* @param entityManagerFactories which are searched for entities
61+
* @return all the newly created {@link SimpleEclipseStoreRepository} for the specific entities.
62+
*/
4763
@SuppressWarnings("java:S1452")
4864
public List<SimpleEclipseStoreRepository<?, ?>> importData(final EntityManagerFactory... entityManagerFactories)
4965
{
5066
return this.importData(Arrays.stream(entityManagerFactories));
5167
}
5268

69+
/**
70+
* Imports entities from all given {@link EntityManagerFactory}s that are available into the EclipseStore storage.
71+
* <p>
72+
* This should be done only once. Otherwise entities may be imported multiple times.
73+
* </p>
74+
* <p>
75+
* After importing all the entities, the existing repositories should be converted to
76+
* {@link software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreRepository}.
77+
* </p>
78+
*
79+
* @param entityManagerFactories which are searched for entities
80+
*
81+
* @return all the newly created {@link SimpleEclipseStoreRepository} for the specific entities.
82+
*/
5383
@SuppressWarnings("java:S1452")
5484
public List<SimpleEclipseStoreRepository<?, ?>> importData(
5585
final Iterable<EntityManagerFactory> entityManagerFactories
@@ -58,6 +88,20 @@ public EclipseStoreDataImporter(final EclipseStoreStorage eclipseStoreStorage)
5888
return this.importData(StreamSupport.stream(entityManagerFactories.spliterator(), false));
5989
}
6090

91+
/**
92+
* Imports entities from all given {@link EntityManagerFactory}s that are available into the EclipseStore storage.
93+
* <p>
94+
* This should be done only once. Otherwise entities may be imported multiple times.
95+
* </p>
96+
* <p>
97+
* After importing all the entities, the existing repositories should be converted to
98+
* {@link software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreRepository}.
99+
* </p>
100+
*
101+
* @param entityManagerFactories which are searched for entities
102+
*
103+
* @return all the newly created {@link SimpleEclipseStoreRepository} for the specific entities.
104+
*/
61105
@SuppressWarnings({"java:S1452", "java:S6204"})
62106
public List<SimpleEclipseStoreRepository<?, ?>> importData(
63107
final Stream<EntityManagerFactory> entityManagerFactories
@@ -78,7 +122,8 @@ public EclipseStoreDataImporter(final EclipseStoreStorage eclipseStoreStorage)
78122
entityManagerFactoryRepositoryListPair
79123
.classRepositoryPairs
80124
.forEach(
81-
classRepositoryPair -> copyData(entityManagerFactoryRepositoryListPair, classRepositoryPair)
125+
classRepositoryPair ->
126+
this.copyData(entityManagerFactoryRepositoryListPair, classRepositoryPair)
82127
)
83128
);
84129
LOG.info("Done importing data from JPA Repositories to EclipseStore.");
@@ -91,7 +136,7 @@ public EclipseStoreDataImporter(final EclipseStoreStorage eclipseStoreStorage)
91136
.collect(Collectors.toList());
92137
}
93138

94-
private static <T> void copyData(
139+
private <T> void copyData(
95140
final EntityManagerFactoryRepositoryListPair entityManagerFactoryRepositoryListPair,
96141
final ClassRepositoryPair<T> classRepositoryPair)
97142
{
@@ -103,7 +148,10 @@ private static <T> void copyData(
103148
{
104149
final List<T> existingEntitiesToExport =
105150
entityManager
106-
.createQuery("SELECT c FROM " + className + " c", classRepositoryPair.domainClass)
151+
.createQuery(
152+
"SELECT c FROM " + className + " c",
153+
classRepositoryPair.domainClass
154+
)
107155
.getResultList();
108156

109157
LOG.info(

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/importer/EclipseStoreDataImporterComponent.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import software.xdev.spring.data.eclipse.store.repository.support.SimpleEclipseStoreRepository;
2828

2929

30+
/**
31+
* Imports entities from {@link EntityManagerFactory}s into the EclipseStore storage.
32+
*/
3033
@Component
3134
public class EclipseStoreDataImporterComponent
3235
{
@@ -41,6 +44,18 @@ public EclipseStoreDataImporterComponent(
4144
this.applicationContext = applicationContext;
4245
}
4346

47+
/**
48+
* Imports entities from all {@link EntityManagerFactory}s that are available into the EclipseStore storage.
49+
* <p>
50+
* This should be done only once. Otherwise entities may be imported multiple times.
51+
* </p>
52+
* <p>
53+
* After importing all the entities, the existing repositories should be converted to
54+
* {@link software.xdev.spring.data.eclipse.store.repository.interfaces.EclipseStoreRepository}.
55+
* </p>
56+
*
57+
* @return all the newly created {@link SimpleEclipseStoreRepository} for the specific entities.
58+
*/
4459
public List<SimpleEclipseStoreRepository<?,?>> importData()
4560
{
4661
final Map<String, EntityManagerFactory> beansOfEms =

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/importer/EclipseStoreSingleRepositoryImporter.java

Lines changed: 0 additions & 147 deletions
This file was deleted.

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/EclipseStoreStorage.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.eclipse.store.storage.types.StorageManager;
3333
import org.slf4j.Logger;
3434
import org.slf4j.LoggerFactory;
35-
import org.springframework.beans.factory.annotation.Autowired;
3635
import org.springframework.stereotype.Component;
3736

3837
import software.xdev.spring.data.eclipse.store.core.IdentitySet;
@@ -60,7 +59,6 @@ public class EclipseStoreStorage
6059
private final WorkingCopyRegistry registry = new WorkingCopyRegistry();
6160
private RepositorySynchronizer repositorySynchronizer;
6261

63-
@Autowired
6462
public EclipseStoreStorage(
6563
final EclipseStoreProperties storeConfiguration,
6664
final EclipseStoreProvider storeProvider)
@@ -138,6 +136,13 @@ public synchronized <T> void registerEntity(final Class<T> classToRegister)
138136
throw new AlreadyRegisteredException(entityName);
139137
}
140138
this.entityClassToRepositoryName.put(classToRegister, entityName);
139+
140+
// If the storage is running and a new entity is registered, we need to stop the storage to restart
141+
// again with the registered entity.
142+
if(this.storageManager != null)
143+
{
144+
this.stop();
145+
}
141146
}
142147

143148
private <T> String getEntityName(final Class<T> classToRegister)

0 commit comments

Comments
 (0)