Skip to content

Commit 6b8f038

Browse files
Most tests for lazy working
1 parent 10f29b8 commit 6b8f038

4 files changed

Lines changed: 22 additions & 7 deletions

File tree

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
public class WorkingCopyRegistry
2828
{
2929
private static final Logger LOG = LoggerFactory.getLogger(WorkingCopyRegistry.class);
30+
/**
31+
* Map with Working Copies (key) with the corresponding original object (value).
32+
*/
3033
private Map<Object, Object> currentWorkingCopies = new IdentityHashMap<>();
3134

3235
/**

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import software.xdev.spring.data.eclipse.store.exceptions.LazyNotUnlinkableException;
2626
import software.xdev.spring.data.eclipse.store.repository.access.modifier.FieldAccessModifier;
27+
import software.xdev.spring.data.eclipse.store.repository.support.copier.copier.RegisteringObjectCopier;
2728

2829

2930
/**
@@ -67,6 +68,7 @@ class Default<T> implements SpringDataEclipseStoreLazy<T>
6768
private Lazy<T> wrappedLazy;
6869
private long objectId = Swizzling.notFoundId();
6970
private transient ObjectSwizzling loader;
71+
private transient RegisteringObjectCopier copier;
7072
private transient boolean isStored = false;
7173

7274
private Default(final Lazy<T> lazySubject)
@@ -79,10 +81,11 @@ private Default(final T objectToBeWrapped)
7981
this.objectToBeWrapped = objectToBeWrapped;
8082
}
8183

82-
private Default(final long objectId, final ObjectSwizzling loader)
84+
private Default(final long objectId, final ObjectSwizzling loader, final RegisteringObjectCopier copier)
8385
{
8486
this.objectId = objectId;
8587
this.loader = loader;
88+
this.copier = copier;
8689
// This object is already stored in the real storage. So it can get cleared.
8790
this.setStored();
8891
}
@@ -100,8 +103,9 @@ private Lazy<T> createNewDefaultLazyWithClearableReference()
100103
{
101104
Objects.requireNonNull(this.loader);
102105
Objects.requireNonNull(this.objectId);
106+
Objects.requireNonNull(this.copier);
103107
return Lazy.New(
104-
(T)this.loader.getObject(this.objectId),
108+
(T)this.copier.copy(this.loader.getObject(this.objectId)),
105109
Swizzling.nullId(),
106110
this.loader
107111
);
@@ -211,7 +215,8 @@ public SpringDataEclipseStoreLazy<T> copyOnlyWithReference()
211215
{
212216
return new SpringDataEclipseStoreLazy.Default(
213217
this.objectId(),
214-
this.loader
218+
this.loader,
219+
this.copier
215220
);
216221
}
217222

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.eclipse.serializer.reference.ObjectSwizzling;
3030
import org.eclipse.serializer.reflect.XReflect;
3131

32+
import software.xdev.spring.data.eclipse.store.repository.support.copier.copier.RegisteringObjectCopier;
33+
3234

3335
/**
3436
* This is a complicated one. First off: this handler should only be used for WorkingCopies (see
@@ -58,16 +60,20 @@ public final class SpringDataEclipseStoreLazyBinaryHandler
5860
XReflect.getDeclaredConstructor(
5961
SpringDataEclipseStoreLazy.Default.class,
6062
long.class,
61-
ObjectSwizzling.class
63+
ObjectSwizzling.class,
64+
RegisteringObjectCopier.class
6265
)
6366
);
6467

6568
public static final int OFFSET_UNWRAPPED_OBJECT = 8;
6669
public static final int OFFSET_LAZY = 0;
6770

6871
private final ObjectSwizzling originalStoreLoader;
72+
private final RegisteringObjectCopier copier;
6973

70-
public SpringDataEclipseStoreLazyBinaryHandler(final ObjectSwizzling originalStoreLoader)
74+
public SpringDataEclipseStoreLazyBinaryHandler(
75+
final ObjectSwizzling originalStoreLoader,
76+
final RegisteringObjectCopier copier)
7177
{
7278
super(
7379
SpringDataEclipseStoreLazy.Default.genericType(),
@@ -77,6 +83,7 @@ public SpringDataEclipseStoreLazyBinaryHandler(final ObjectSwizzling originalSto
7783
)
7884
);
7985
this.originalStoreLoader = Objects.requireNonNull(originalStoreLoader);
86+
this.copier = copier;
8087
}
8188

8289
@Override
@@ -112,7 +119,7 @@ public SpringDataEclipseStoreLazy.Default<?> create(final Binary data, final Per
112119
if(objectIdOfUnwrappedObject == 0)
113120
{
114121
return Lazy.register(
115-
XReflect.invoke(CONSTRUCTOR_SURROGATE_LAZY, objectIdOfLazy, this.originalStoreLoader)
122+
XReflect.invoke(CONSTRUCTOR_SURROGATE_LAZY, objectIdOfLazy, this.originalStoreLoader, this.copier)
116123
);
117124
}
118125
return XMemory.instantiateBlank(SpringDataEclipseStoreLazy.Default.class);

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/support/copier/copier/AbstractRegisteringCopier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private PersistenceManager<Binary> createPersistenceManager(
5959
return serializerFoundation
6060
.registerCustomTypeHandler(BinaryHandlerImmutableCollectionsSet12.New())
6161
.registerCustomTypeHandler(BinaryHandlerImmutableCollectionsList12.New())
62-
.registerCustomTypeHandlers(new SpringDataEclipseStoreLazyBinaryHandler(objectSwizzling))
62+
.registerCustomTypeHandlers(new SpringDataEclipseStoreLazyBinaryHandler(objectSwizzling, this))
6363
.createPersistenceManager();
6464
}
6565

0 commit comments

Comments
 (0)