Package org.agilewiki.jactor2.core.impl.blades.transmutable.tssmTransactions

Source Code of org.agilewiki.jactor2.core.impl.blades.transmutable.tssmTransactions.TSSMTransactionTest

package org.agilewiki.jactor2.core.impl.blades.transmutable.tssmTransactions;

import org.agilewiki.jactor2.core.blades.pubSub.RequestBus;
import org.agilewiki.jactor2.core.blades.pubSub.SubscribeAOp;
import org.agilewiki.jactor2.core.blades.transmutable.tssmTransactions.TSSMChange;
import org.agilewiki.jactor2.core.blades.transmutable.tssmTransactions.TSSMChanges;
import org.agilewiki.jactor2.core.blades.transmutable.tssmTransactions.TSSMReference;
import org.agilewiki.jactor2.core.blades.transmutable.tssmTransactions.TSSMUpdateTransaction;
import org.agilewiki.jactor2.core.impl.CallTestBase;
import org.agilewiki.jactor2.core.impl.Plant;
import org.agilewiki.jactor2.core.reactors.CommonReactor;
import org.agilewiki.jactor2.core.reactors.NonBlockingReactor;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.SortedMap;

public class TSSMTransactionTest extends CallTestBase {
    public void testI() throws Exception {
        new Plant();
        try {
            final TSSMReference<String> propertiesReference = new TSSMReference<String>();
            final CommonReactor reactor = new NonBlockingReactor();

            final RequestBus<TSSMChanges<String>> validationBus = propertiesReference.validationBus;
            call(new SubscribeAOp<TSSMChanges<String>>(validationBus,
                    reactor) {
                @Override
                protected void processContent(
                        final TSSMChanges<String> _content)
                        throws Exception {
                    final List<TSSMChange<String>> readOnlyChanges = _content.unmodifiableChanges;
                    final Iterator<TSSMChange<String>> it = readOnlyChanges.iterator();
                    while (it.hasNext()) {
                        final TSSMChange<String> propertyChange = it
                                .next();
                        if (propertyChange.name.equals("fudge")) {
                            throw new IOException("no way");
                        }
                    }
                }
            });

            final RequestBus<TSSMChanges<String>> changeBus = propertiesReference.changeBus;
            call(new SubscribeAOp<TSSMChanges<String>>(changeBus, reactor) {
                @Override
                protected void processContent(
                        final TSSMChanges<String> _content)
                        throws Exception {
                    final List<TSSMChange<String>> readOnlyChanges = _content.unmodifiableChanges;
                    System.out.println("\nchanges: " + readOnlyChanges.size());
                    final Iterator<TSSMChange<String>> it = readOnlyChanges.iterator();
                    while (it.hasNext()) {
                        final TSSMChange<String> propertyChange = it
                                .next();
                        System.out.println("key=" + propertyChange.name
                                + " old=" + propertyChange.oldValue + " new="
                                + propertyChange.newValue);
                    }
                }
            });

            SortedMap<String, String> immutableState = propertiesReference.getUnmodifiable();
            assertEquals(0, immutableState.size());

            call(propertiesReference.applyAOp(new TSSMUpdateTransaction<String>("1", "first")));
            assertEquals(0, immutableState.size());
            immutableState = propertiesReference.getUnmodifiable();
            assertEquals(1, immutableState.size());

            call(propertiesReference.applyAOp(new TSSMUpdateTransaction<String>("1", "second")));
            assertEquals(1, immutableState.size());
            immutableState = propertiesReference.getUnmodifiable();
            assertEquals(1, immutableState.size());

            String msg = null;
            try {
                call(propertiesReference.applyAOp(new TSSMUpdateTransaction<String>("fudge", "second")));
            } catch (final IOException e) {
                msg = e.getMessage();
            }

            assertEquals("no way", msg);
            assertEquals(1, immutableState.size());
            immutableState = propertiesReference.getUnmodifiable();
            assertEquals(1, immutableState.size());

            TSSMUpdateTransaction ut = new TSSMUpdateTransaction<String>("1", (String) null);
            call(propertiesReference.applyAOp(ut));
            System.out.println(ut);
            immutableState = propertiesReference.getUnmodifiable();
            assertEquals(0, immutableState.size());
        } finally {
            Plant.close();
        }
    }
}
TOP

Related Classes of org.agilewiki.jactor2.core.impl.blades.transmutable.tssmTransactions.TSSMTransactionTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.