package com.imaginary.ora; 

import javax.jdo.*;

public abstract class Bookshelf {
    static private PersistenceManager getPersistenceManager() {
    PersistenceManagerFactory factory; 
    Properties props = new Properties();

    // zaadowanie waciwoci obiektu JDO
    factory = JDOHelper.getPersistenceManagerFactory(props);
    return factory.getPersistenceManager();
}
static public void createAuthor(Author auth) {
    PersistenceManager mgr = getPersistenceManager(); 
    Transaction trans;

    trans = mgr.currentTransaction(); 
    trans.setOptimistic(false); 
    try {
        trans.begin();
        mgr.makePersistent(auth);
        trans.commit();
    }
    catch( Exception e ) {
        e.printStackTrace();
    }
    finally {
        if( trans.isActive() ) {
            trans.rollback(); 
        }
        mgr.close(); 
    }
}
static public void deleteAuthor(Author auth) {
    PersistenceManager mgr = getPersistenceManager(); 
    Transaction trans;

    trans = mgr.currentTransaction(); 
    try { trans.setOptimistic(true); } 
    catch( JDOUnsupportedOptionException e ) { } 
    try {
        Iterator books = auth.getBooks().iterator();
   
        trans.begin();
        while( it.hasNext() ) {
            mgr.deletePersistent((Book)it.next()); 
        }
        mgr.deletePersistent(auth); 
        trans.commit();
    }
    catch( Exception e ) { 
        e.printStackTrace();
    } 
    finally {
        if( trans.isActive() ) {
            trans.rollback();
        }
        mgr.close(); 
   }
}
static public void createBook(Author auth, Book book) { 
    PersistenceManager mgr = getPersistenceManager(); 
    Transaction trans;
    trans = mgr.currentTransaction(); 
    try { trans.setOptimistic(true); }
    catch( JDOUnsupportedOptionException e ) { } 
    try {
        trans.begin();
        book.setAuthor(auth);
        auth.addBook(book);
        mgr.makePersistent(book);
        trans.commit(); 
    } 
    catch( Exception e ) {
        e.printStackTrace();
    } 
    finally {
        if( trans.isActive() ) { 
            trans.rollback();
        }
        mgr.close();
    }
}

static public void deleteBook(Book book) {
    PersistenceManager mgr = getPersistenceManager(); 
    Transaction trans;

    trans = mgr.currentTransaction(); 
    try { trans.setOptimistic(true); }
    catch( JDOUnsupportedOptionException e ) { } 
    try {
        trans.begin();
        book.getAuthor().removeBook(book);
        mgr.deletePersistent(book);
        trans.commit();
    }
    catch( Exception e ) { 
        e.printStackTrace();
    } 
    finally {
         if( trans.isActive() ) {
             trans.rollback();
         }
         mgr.close();
    } 
  }
}
