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;
+ /**
+ * @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(Class<T> type, UUID uuid, String label) {
super(uuid, label);
this.type = type;
}
+ /**
+ * @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
+ protected TypedEntityReference(T entity) {
+ this.type = (Class<T>) entity.getClass();
+ this.uuid = entity.getUuid();
+ }
+
+ /**
+ * @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(Class<T> type, UUID uuid) {
super(uuid, null);
this.type = type;
}
- public static <T extends CdmBase> TypedEntityReference<T> fromEntity(T entity) {
+ public static <T extends CdmBase> TypedEntityReference<T> fromEntity(T entity, boolean withLabel) {
if(entity == null) {
return null;
}
entity = HibernateProxyHelper.deproxy(entity);
- if(IdentifiableEntity.class.isAssignableFrom(entity.getClass())) {
- return new TypedEntityReference<T>((Class<T>)entity.getClass(), entity.getUuid(), ((IdentifiableEntity)entity).getTitleCache());
+ if(withLabel && IdentifiableEntity.class.isAssignableFrom(entity.getClass())) {
+ return new TypedEntityReference<>((Class<T>)entity.getClass(), entity.getUuid(), ((IdentifiableEntity)entity).getTitleCache());
} else {
- return new TypedEntityReference<T>((Class<T>)entity.getClass(), entity.getUuid());
+ return new TypedEntityReference<>((Class<T>)entity.getClass(), entity.getUuid());
+ }
+ }
+
+ 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.
+ *
+ * @throws ClassCastException
+ * If the {@link #type} is not a super type of <code>subType</code>.
+ */
+ public <S extends CdmBase> TypedEntityReference<S> castTo(Class<S> subType){
+ if(!type.isAssignableFrom(subType)) {
+ throw new ClassCastException("Cannot cast " + type.getName() + " to " + subType.getName());
}
+ return new TypedEntityReference<>(subType, getUuid());
}
public Class<T> getType() {