@Override public PersistentCollection instantiate(SharedSessionContractImplementor session, CollectionPersister persister, Serializable key) { return new PersistentSet( session ); }
@Override @SuppressWarnings("unchecked") public void initializeFromCache(CollectionPersister persister, Serializable disassembled, Object owner) throws HibernateException { final Serializable[] array = (Serializable[]) disassembled; final int size = array.length; beforeInitialize( persister, size ); for ( Serializable arrayElement : array ) { final Object assembledArrayElement = persister.getElementType().assemble( arrayElement, getSession(), owner ); if ( assembledArrayElement != null ) { set.add( assembledArrayElement ); } } }
@Override public boolean add(Object value) { final Boolean exists = isOperationQueueEnabled() ? readElementExistence( value ) : null; if ( exists == null ) { initialize( true ); if ( set.add( value ) ) { dirty(); return true; } else { return false; } } else if ( exists ) { return false; } else { queueOperation( new SimpleAdd( value ) ); return true; } }
@Override @SuppressWarnings("unchecked") public int size() { return readSize() ? getCachedSize() : set.size(); }
@Override public Collection getOrphans(Serializable snapshot, String entityName) throws HibernateException { final java.util.Map sn = (java.util.Map) snapshot; return getOrphans( sn.keySet(), set, entityName, getSession() ); }
@Override @SuppressWarnings("unchecked") public boolean retainAll(Collection coll) { initialize( true ); if ( set.retainAll( coll ) ) { dirty(); return true; } else { return false; } }
@Override public boolean remove(Object value) { final Boolean exists = isPutQueueEnabled() ? readElementExistence( value ) : null; if ( exists == null ) { initialize( true ); if ( set.remove( value ) ) { elementRemoved = true; dirty(); return true; } else { return false; } } else if ( exists ) { elementRemoved = true; queueOperation( new SimpleRemove( value ) ); return true; } else { return false; } }
@Override @SuppressWarnings("unchecked") public void clear() { if ( isClearQueueEnabled() ) { queueOperation( new Clear() ); } else { initialize( true ); if ( !set.isEmpty() ) { set.clear(); dirty(); } } }
@Override @SuppressWarnings("unchecked") public boolean needsInserting(Object entry, int i, Type elemType) throws HibernateException { final Object oldValue = ( (java.util.Map) getSnapshot() ).get( entry ); // note that it might be better to iterate the snapshot but this is safe, // assuming the user implements equals() properly, as required by the Set // contract! return ( oldValue == null && entry != null ) || elemType.isDirty( oldValue, entry, getSession() ); }
@Override @SuppressWarnings("unchecked") public boolean needsInserting(Object entry, int i) throws HibernateException { final Object oldValue = ( (java.util.Map) getSnapshot() ).get( entry ); // note that it might be better to iterate the snapshot but this is safe, // assuming the user implements equals() properly, as required by the Set // contract! return ( oldValue == null && entry != null ) || getCollectionDescriptor().isDirty( oldValue, entry, getSession() ); }
PersistentSet persistentSet = new PersistentSet(null, (Set<?>) detachedCollection); changeCollectionOwner(persistentSet, owner); HashMap<Object, Object> snapshot = new HashMap<>(); if (varSnapshotCollection == null) { persistentSet.clearDirty(); varSnapshotCollection = detachedCollection; snapshot.put(snapshotCollectionElement, snapshotCollectionElement); persistentSet.setSnapshot(owner.getId(), collectionRoleName, snapshot); return persistentSet; } else if (detachedCollection instanceof List) {
@Override @SuppressWarnings("unchecked") public Serializable disassemble(CollectionPersister persister) throws HibernateException { final Serializable[] result = new Serializable[ set.size() ]; final Iterator itr = set.iterator(); int i=0; while ( itr.hasNext() ) { result[i++] = persister.getElementType().disassemble( itr.next(), getSession(), null ); } return result; }
@Override @SuppressWarnings("unchecked") public void initializeFromCache( Serializable disassembled, Object owner, PersistentCollectionDescriptor<?,?,E> collectionDescriptor) throws HibernateException { final Serializable[] array = (Serializable[]) disassembled; final int size = array.length; beforeInitialize( size, collectionDescriptor ); for ( Serializable arrayElement : array ) { final Object assembledArrayElement = getCollectionDescriptor().getElementDescriptor() .getJavaTypeDescriptor() .getMutabilityPlan() .assemble( arrayElement ); if ( assembledArrayElement != null ) { set.add( assembledArrayElement ); } } }
@Override public boolean remove(Object value) { final Boolean exists = isPutQueueEnabled() ? readElementExistence( value ) : null; if ( exists == null ) { initialize( true ); if ( set.remove( value ) ) { elementRemoved = true; dirty(); return true; } else { return false; } } else if ( exists ) { elementRemoved = true; queueOperation( new SimpleRemove( value ) ); return true; } else { return false; } }
@Override @SuppressWarnings("unchecked") public void clear() { if ( isClearQueueEnabled() ) { queueOperation( new Clear() ); } else { initialize( true ); if ( !set.isEmpty() ) { set.clear(); dirty(); } } }
@Override @SuppressWarnings("unchecked") public boolean addAll(Collection coll) { if ( coll.size() > 0 ) { initialize( true ); if ( set.addAll( coll ) ) { dirty(); return true; } else { return false; } } else { return false; } }
@Override public boolean equalsSnapshot(CollectionPersister persister) throws HibernateException { final Type elementType = persister.getElementType(); final java.util.Map sn = (java.util.Map) getSnapshot(); if ( sn.size()!=set.size() ) { return false; } else { for ( Object test : set ) { final Object oldValue = sn.get( test ); if ( oldValue == null || elementType.isDirty( oldValue, test, getSession() ) ) { return false; } } return true; } }
@Override @SuppressWarnings("unchecked") public boolean isEmpty() { return readSize() ? getCachedSize()==0 : set.isEmpty(); }
@Override public Collection getOrphans(Serializable snapshot, String entityName) throws HibernateException { final java.util.Map sn = (java.util.Map) snapshot; return getOrphans( sn.keySet(), set, entityName, getSession() ); }
@Override @SuppressWarnings("unchecked") public Object readFrom( ResultSet rs, CollectionPersister persister, CollectionAliases descriptor, Object owner) throws HibernateException, SQLException { final Object element = persister.readElement( rs, owner, descriptor.getSuffixedElementAliases(), getSession() ); if ( element != null ) { tempList.add( element ); } return element; }