ref #10089 handle RegistrationDTO with TypedEntityReference again in cdmlib
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / ref / TypedEntityReference.java
index 4b9c0ca3e87af1834fe1f89ebd21083bbdeb86fc..92a545f5e47911ef508e3f09ece55349af132be5 100644 (file)
@@ -24,6 +24,10 @@ public class TypedEntityReference<T extends CdmBase> extends EntityReference {
 
     private static final long serialVersionUID = -4619590272174606288L;
 
+    public static <T extends CdmBase> TypedEntityReference<T> fromEntity(T entity) {
+        return TypedEntityReference.fromEntity(entity, true);
+    }
+
     private Class<T> type;
 
     /**
@@ -39,8 +43,7 @@ public class TypedEntityReference<T extends CdmBase> extends EntityReference {
      * @deprecated use factory method instead, should only be used by in DTO sub-class constructors (TODO: to be made protected once no longer used publicly)
      */
     @Deprecated
-    public TypedEntityReference(T entity) {
-        super();
+    protected TypedEntityReference(T entity) {
         this.type = (Class<T>) entity.getClass();
         this.uuid = entity.getUuid();
     }
@@ -66,6 +69,14 @@ public class TypedEntityReference<T extends CdmBase> extends EntityReference {
         }
     }
 
+    public static  <T extends CdmBase> TypedEntityReference<T> fromEntityWithLabel(T entity, String explicitLabel) {
+        if(entity == null) {
+            return null;
+        }
+        entity = HibernateProxyHelper.deproxy(entity);
+        return new TypedEntityReference<>((Class<T>)entity.getClass(), entity.getUuid(), explicitLabel);
+    }
+
     /**
      * Casts the <code>TypedEntityReference</code> to the <code>subType</code> if possible.
      *
@@ -79,10 +90,6 @@ public class TypedEntityReference<T extends CdmBase> extends EntityReference {
         return new TypedEntityReference<>(subType, getUuid());
     }
 
-    public static <T extends CdmBase> TypedEntityReference<T> fromEntity(T entity) {
-        return TypedEntityReference.fromEntity(entity, true);
-    }
-
     public Class<T> getType() {
         return type;
     }