protected Object newCollection(AbstractExternalizablePersistentCollection value, Property field) { final Type target = field.getType(); final boolean initialized = value.isInitialized(); final Object[] content = value.getContent(); final boolean sorted = ( SortedSet.class.isAssignableFrom(TypeUtil.classOfType(target)) ||
protected PersistentCollection newHibernateCollection(AbstractExternalizablePersistentCollection value, Property field) { final Type target = field.getType(); final boolean initialized = value.isInitialized(); final String metadata = value.getMetadata(); final boolean dirty = value.isDirty(); final boolean sorted = ( SortedSet.class.isAssignableFrom(TypeUtil.classOfType(target)) ||
protected AbstractExternalizablePersistentCollection newExternalizableCollection(PersistentCollection value) { final boolean initialized = Hibernate.isInitialized(value); final boolean dirty = value.isDirty(); AbstractExternalizablePersistentCollection coll = null; if (value instanceof PersistentSet) coll = new ExternalizablePersistentSet(initialized ? (Set<?>)value : null, initialized, dirty); else if (value instanceof PersistentList) coll = new ExternalizablePersistentList(initialized ? (List<?>)value : null, initialized, dirty); else if (value instanceof PersistentBag) coll = new ExternalizablePersistentBag(initialized ? (List<?>)value : null, initialized, dirty); else if (value instanceof PersistentMap) coll = new ExternalizablePersistentMap(initialized ? (Map<?, ?>)value : null, initialized, dirty); else throw new UnsupportedOperationException("Unsupported Hibernate collection type: " + value); if (serializeMetadata != SerializeMetadata.NO && (serializeMetadata == SerializeMetadata.YES || !initialized) && value.getRole() != null) { char[] hexKey = StringUtil.bytesToHexChars(serializeSerializable(value.getKey())); char[] hexSnapshot = StringUtil.bytesToHexChars(serializeSerializable(value.getStoredSnapshot())); String metadata = new StringBuilder(hexKey.length + 1 + hexSnapshot.length + 1 + value.getRole().length()) .append(hexKey).append(':') .append(hexSnapshot).append(':') .append(value.getRole()) .toString(); coll.setMetadata(metadata); } return coll; }