You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/09/05 07:19:46 UTC

[cayenne] 01/02: Minor cleanup

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit bf7953e910d5d47e6a25878a457e977c3d10c39d
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Fri Aug 26 18:37:50 2022 +0300

    Minor cleanup
---
 .../cayenne/reflect/EmbeddedFieldAccessor.java     |  9 ++----
 .../cayenne/reflect/FieldEmbeddableDescriptor.java | 32 ++++++----------------
 .../reflect/PersistentDescriptorFactory.java       | 10 +++----
 .../testdo/embeddable/auto/_EmbedChild.java        |  4 +++
 .../testdo/embeddable/auto/_EmbedEntity1.java      |  4 +++
 .../testdo/embeddable/auto/_EmbedEntity2.java      |  3 ++
 .../cayenne/testdo/embeddable/auto/_EmbedRoot.java |  4 +++
 7 files changed, 31 insertions(+), 35 deletions(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/EmbeddedFieldAccessor.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/EmbeddedFieldAccessor.java
index fade22485..4844471ce 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/EmbeddedFieldAccessor.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/EmbeddedFieldAccessor.java
@@ -32,10 +32,8 @@ public class EmbeddedFieldAccessor implements Accessor {
     protected EmbeddableDescriptor embeddableDescriptor;
 
     public EmbeddedFieldAccessor(EmbeddableDescriptor embeddableDescriptor,
-            Accessor embeddedAccessor, Accessor embeddableAccessor) {
-        this.propertyPath = embeddedAccessor.getName()
-                + "."
-                + embeddableAccessor.getName();
+                                 Accessor embeddedAccessor, Accessor embeddableAccessor) {
+        this.propertyPath = embeddedAccessor.getName() + "." + embeddableAccessor.getName();
         this.embeddableDescriptor = embeddableDescriptor;
         this.embeddableAccessor = embeddableAccessor;
         this.embeddedAccessor = embeddedAccessor;
@@ -60,8 +58,7 @@ public class EmbeddedFieldAccessor implements Accessor {
     protected Object getEmbeddable(Object owner) {
         Object embeddable = embeddedAccessor.getValue(owner);
         if (embeddable == null) {
-            embeddable = embeddableDescriptor.createObject(owner, embeddedAccessor
-                    .getName());
+            embeddable = embeddableDescriptor.createObject(owner, embeddedAccessor.getName());
             embeddedAccessor.setValue(owner, embeddable);
         }
 
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java
index 543952ed7..d442672e0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java
@@ -19,6 +19,7 @@
 package org.apache.cayenne.reflect;
 
 import org.apache.cayenne.Persistent;
+import org.apache.cayenne.di.AdhocObjectFactory;
 import org.apache.cayenne.map.Embeddable;
 
 /**
@@ -33,37 +34,20 @@ public class FieldEmbeddableDescriptor implements EmbeddableDescriptor {
     protected Accessor ownerAccessor;
     protected Accessor embeddedPropertyAccessor;
 
-    public FieldEmbeddableDescriptor(Embeddable embeddable, String ownerProperty,
-            String embeddedPropertyProperty) {
+    public FieldEmbeddableDescriptor(AdhocObjectFactory objectFactory, Embeddable embeddable,
+                                     String ownerProperty, String embeddedPropertyProperty) {
         this.embeddable = embeddable;
-        try {
-            this.embeddableClass = Class.forName(embeddable.getClassName(), true, Thread
-                    .currentThread()
-                    .getContextClassLoader());
-        }
-        catch (ClassNotFoundException e) {
-            throw new PropertyException("Class not found", e);
-        }
-
-        this.ownerAccessor = new FieldAccessor(
-                embeddableClass,
-                ownerProperty,
-                Persistent.class);
-        this.embeddedPropertyAccessor = new FieldAccessor(
-                embeddableClass,
-                embeddedPropertyProperty,
-                String.class);
+        this.embeddableClass = objectFactory.getJavaClass(embeddable.getClassName());
+        this.ownerAccessor = new FieldAccessor(embeddableClass, ownerProperty, Persistent.class);
+        this.embeddedPropertyAccessor = new FieldAccessor(embeddableClass, embeddedPropertyProperty, String.class);
     }
 
     public Object createObject(Object owner, String embeddedProperty) {
         Object embeddable;
         try {
             embeddable = embeddableClass.getDeclaredConstructor().newInstance();
-        }
-        catch (Throwable e) {
-            throw new PropertyException("Error creating embeddable object of class '"
-                    + embeddableClass.getName()
-                    + "'", e);
+        } catch (Throwable e) {
+            throw new PropertyException("Error creating embeddable object of class '" + embeddableClass.getName() + "'", e);
         }
 
         ownerAccessor.setValue(embeddable, owner);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
index 83eaf7aa0..b6c8fe2d7 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
@@ -370,7 +370,7 @@ public abstract class PersistentDescriptorFactory implements ClassDescriptorFact
      * Creates an accessor for the property of the embeddable class.
      */
     protected Accessor createEmbeddableAccessor(EmbeddableDescriptor descriptor, String propertyName,
-            Class<?> propertyType) {
+                                                Class<?> propertyType) {
         return new FieldAccessor(descriptor.getObjectClass(), propertyName, propertyType);
     }
 
@@ -378,9 +378,9 @@ public abstract class PersistentDescriptorFactory implements ClassDescriptorFact
      * Creates a descriptor of the embedded property.
      */
     protected EmbeddableDescriptor createEmbeddableDescriptor(EmbeddedAttribute embeddedAttribute) {
-        // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every
-        // property of
-        // embeddable; look up reusable descriptor instead.
-        return new FieldEmbeddableDescriptor(embeddedAttribute.getEmbeddable(), "owner", "embeddedProperty");
+        // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every property of embeddable;
+        //       look up reusable descriptor instead.
+        return new FieldEmbeddableDescriptor(descriptorMap.getResolver().getObjectFactory(),
+                embeddedAttribute.getEmbeddable(), "owner", "embeddedProperty");
     }
 }
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedChild.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedChild.java
index a43726a21..e8ce11563 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedChild.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedChild.java
@@ -4,8 +4,10 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 
+import org.apache.cayenne.exp.property.EntityProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
+import org.apache.cayenne.testdo.embeddable.EmbedChild;
 import org.apache.cayenne.testdo.embeddable.EmbedRoot;
 
 /**
@@ -18,6 +20,8 @@ public abstract class _EmbedChild extends EmbedRoot {
 
     private static final long serialVersionUID = 1L;
 
+    public static final EntityProperty<EmbedChild> SELF = PropertyFactory.createSelf(EmbedChild.class);
+
     public static final String ID_PK_COLUMN = "ID";
 
     public static final StringProperty<String> CHILD_ATTR = PropertyFactory.createString("childAttr", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java
index 82b8a1d5a..155d1d3c0 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java
@@ -7,9 +7,11 @@ import java.util.List;
 
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.exp.property.EmbeddableProperty;
+import org.apache.cayenne.exp.property.EntityProperty;
 import org.apache.cayenne.exp.property.ListProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
+import org.apache.cayenne.testdo.embeddable.EmbedEntity1;
 import org.apache.cayenne.testdo.embeddable.EmbedEntity2;
 import org.apache.cayenne.testdo.embeddable.Embeddable1;
 
@@ -23,6 +25,8 @@ public abstract class _EmbedEntity1 extends BaseDataObject {
 
     private static final long serialVersionUID = 1L;
 
+    public static final EntityProperty<EmbedEntity1> SELF = PropertyFactory.createSelf(EmbedEntity1.class);
+
     public static final String ID_PK_COLUMN = "ID";
 
     public static final EmbeddableProperty<Embeddable1> EMBEDDED1 = PropertyFactory.createEmbeddable("embedded1", Embeddable1.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity2.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity2.java
index c4875ebfa..f3116a3d2 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity2.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity2.java
@@ -10,6 +10,7 @@ import org.apache.cayenne.exp.property.EntityProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
 import org.apache.cayenne.testdo.embeddable.EmbedEntity1;
+import org.apache.cayenne.testdo.embeddable.EmbedEntity2;
 import org.apache.cayenne.testdo.embeddable.Embeddable1;
 
 /**
@@ -22,6 +23,8 @@ public abstract class _EmbedEntity2 extends BaseDataObject {
 
     private static final long serialVersionUID = 1L;
 
+    public static final EntityProperty<EmbedEntity2> SELF = PropertyFactory.createSelf(EmbedEntity2.class);
+
     public static final String ID_PK_COLUMN = "ID";
 
     public static final EmbeddableProperty<Embeddable1> EMBEDDED = PropertyFactory.createEmbeddable("embedded", Embeddable1.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedRoot.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedRoot.java
index 0d12baec9..6467f9dbf 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedRoot.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedRoot.java
@@ -6,9 +6,11 @@ import java.io.ObjectOutputStream;
 
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.exp.property.EmbeddableProperty;
+import org.apache.cayenne.exp.property.EntityProperty;
 import org.apache.cayenne.exp.property.NumericProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.exp.property.StringProperty;
+import org.apache.cayenne.testdo.embeddable.EmbedRoot;
 import org.apache.cayenne.testdo.embeddable.Embeddable1;
 
 /**
@@ -21,6 +23,8 @@ public abstract class _EmbedRoot extends BaseDataObject {
 
     private static final long serialVersionUID = 1L;
 
+    public static final EntityProperty<EmbedRoot> SELF = PropertyFactory.createSelf(EmbedRoot.class);
+
     public static final String ID_PK_COLUMN = "ID";
 
     public static final EmbeddableProperty<Embeddable1> EMBEDDED = PropertyFactory.createEmbeddable("embedded", Embeddable1.class);