# Collection of code snippets by Arne Vajhøj 
# (from articles on eksperten.dk / vajhoej.dk written sometime between 2004 and now) 
from java.io import FileWriter
from java.util import ArrayList

from javax.persistence import Persistence

from com.opencsv.bean import StatefulBeanToCsvBuilder

import AutoMap
import OrdersJPA
import OrderLinesJPA
import OrdersCSV
import OrderLinesCSV

# read from database
emf = Persistence.createEntityManagerFactory('orders')
em = emf.createEntityManager()
jpadata = em.createQuery('SELECT DISTINCT o FROM OrdersJPA AS o JOIN FETCH o.orderLines ol', OrdersJPA).getResultList()
em.close()
emf.close()
# convert
mo = AutoMap(OrdersJPA, OrdersCSV, True)
mol = AutoMap(OrderLinesJPA, OrderLinesCSV, True)
odata = ArrayList()
oldata = ArrayList()
for ojpa in jpadata:
    ocsv = OrdersCSV()
    mo.convert(ojpa, ocsv)
    for oljpa in ojpa.orderLines:
        olcsv = OrderLinesCSV()
        mol.convert(oljpa, olcsv)
        oldata.add(olcsv)
    odata.add(ocsv)
# write to CSV
ow = FileWriter('orders2.csv')
ocsv = StatefulBeanToCsvBuilder(ow).withSeparator(',').withQuotechar('"').build()
ocsv.write(odata)
ow.close()
olw = FileWriter('orderlines2.csv')
olcsv = StatefulBeanToCsvBuilder(olw).withSeparator(',').withQuotechar('"').build()
olcsv.write(oldata)
olw.close()
#
print('db2csv done')
