/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/util/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
import net.sourceforge.pain.db.*;

import java.util.*;

public class PainDBQuickStart {

    public static void main(String[] args) throws Exception {
        final PainDB db = new PainDB("mydbfile");

        // Example 1: new object creation
        db.beginTransaction();
        MyDataObject obj = new MyDataObject(db);
        obj.setMyIntField(10);
        obj.setMyStringField("Hello World!");
        db.commitTransaction();

        // Example 2: transparent collections support
        db.beginTransaction();
        for (int i = 0; i < 100; i++) {
            MyDataObject myReference = new MyDataObject(db);
            myReference.setMyStringField("my_reference");
            obj.getMyReferences().add(myReference);
        }
        db.commitTransaction();


        //Example 3: rollback
        db.beginTransaction();
        for (Iterator it = obj.getMyReferences().iterator(); it.hasNext();) {
            MyDataObject myReference = (MyDataObject) it.next();
            it.remove();
            myReference.delete();
        }
        db.rollbackTransaction(); // here all changes done in  last transaction will be rolled back


        //Example 4: savepoints (subtransactions)
        db.beginTransaction();
        obj.setMyStringField("new value 1");
        db.beginTransaction(); // internal transaction (savepoint)!
        obj.setMyStringField("new value 2");
        db.rollbackTransaction(); // here we rolling back all changes done in internal transaction
        db.commitTransaction(); // commiting all changes done in first level transaction

        //Example 5: transaction wrapper, it's convinient to never write commit or rollback :)
        DbTransaction t = new DbTransaction() {
            public Object execute(Object[] params) {
                MyDataObject myDataObject = new MyDataObject(db);
                myDataObject.setMyStringField("this transaction will be commited if no exception thrown!");
                return null;
            }
        };
        db.execute(t);


        //Example 6: Subtransactions wrapping.
        DbTransaction t1 = new DbTransaction() {
            public Object execute(Object[] params) throws Exception {
                final MyDataObject myDataObject = new MyDataObject(db);
                myDataObject.setMyStringField("value1");
                DbTransaction t2 = new DbTransaction() {
                    public Object execute(Object[] params) throws Exception {
                        myDataObject.setMyStringField("value2");
                        return null;
                    }
                };
                db.execute(t2);
                assert(myDataObject.getMyStringField().equals("value2"));
                return null;
            }
        };
        db.execute(t1);

        //example 7: automatic removal all references during object deletion
        db.beginTransaction();
        MyDataObject obj7_1 = new MyDataObject(db);
        MyDataObject obj7_2 = new MyDataObject(db);
        obj7_1.getMyReferences().add(obj7_2);
        assert (obj7_1.getMyReferences().contains(obj7_2));
        obj7_2.delete();
        assert (obj7_1.getMyReferences().isEmpty());
        db.commitTransaction();

        db.close();
    }
}