src/main/java/com/workplacesystems/utilsj/collections/TransactionalBidiTreeMap.java
public void rollback() {

        if (auto_commit)
            return;
        
        String id = getCurrentThreadId();

        ArrayList<Entry<K,V>> list = new ArrayList<Entry<K,V>>(allEntrySet());
        for (Iterator<Entry<K,V>> i = list.iterator(); i.hasNext(); ) {
            final Node<K,V> node = (Node<K,V>)i.next();

            if (node.is(Node.ADDED, id)) {
                doRedBlackDelete(node);
                if (rollback_notifiers != null)
                {
                    SyncUtils.synchronizeRead(rollback_notifiers, new Callback() {
                        @Override
                        protected void doAction()
                        {
                            for (Iterator i2 = rollback_notifiers.iterator(); i2.hasNext(); )
                                ((TransactionNotifiable)i2.next()).removedFromMap(node.getKey(), node.getValue());
                        }
                    });
                }
            }

            if (node.is(Node.DELETED, id)) {
                node.setStatus(Node.NO_CHANGE, null);
                if (rollback_notifiers != null)
                {
                    SyncUtils.synchronizeRead(rollback_notifiers, new Callback() {
                        @Override
                        protected void doAction()
                        {
                            for (Iterator i2 = rollback_notifiers.iterator(); i2.hasNext(); )
                                ((TransactionNotifiable)i2.next()).addedToMap(node.getKey(), node.getValue());
                        }
                    });
                }
            }
        }
    }
public void rollback() {

        if (auto_commit)
            return;
        
        String id = getCurrentThreadId();

        ArrayList<Entry<K,V>> list = new ArrayList<Entry<K,V>>(allEntrySet());
        for (Iterator<Entry<K,V>> i = list.iterator(); i.hasNext(); ) {
            final Node<K,V> node = (Node<K,V>)i.next();

            if (node.is(Node.ADDED, id)) {
                doRedBlackDelete(node);
                if (rollback_notifiers != null)
                {
                    SyncUtils.synchronizeRead(rollback_notifiers, new Callback() {
                        @Override
                        protected void doAction()
                        {
                            for (Iterator i2 = rollback_notifiers.iterator(); i2.hasNext(); )
                                ((TransactionNotifiable)i2.next()).removedFromMap(node.getKey(), node.getValue());
                        }
                    });
                }
            }

            if (node.is(Node.DELETED, id)) {
                node.setStatus(Node.NO_CHANGE, null);
                if (rollback_notifiers != null)
                {
                    SyncUtils.synchronizeRead(rollback_notifiers, new Callback() {
                        @Override
                        protected void doAction()
                        {
                            for (Iterator i2 = rollback_notifiers.iterator(); i2.hasNext(); )
                                ((TransactionNotifiable)i2.next()).addedToMap(node.getKey(), node.getValue());
                        }
                    });
                }
            }
        }
    }
Rolls back the changes to the map.