# 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 PrintWriter
from java.util import ArrayList

from javax.persistence import Persistence

from com.google.gson import GsonBuilder

import AutoMap
import OrdersJPA
import OrderLinesJPA
import Orders
import OrderLines

# 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, Orders, True)
mol = AutoMap(OrderLinesJPA, OrderLines, True)
data = ArrayList()
for ojpa in jpadata:
    o = Orders()
    mo.convert(ojpa, o)
    for oljpa in ojpa.orderLines:
        ol = OrderLines();
        mol.convert(oljpa, ol)
        o.orderLines.add(ol)
    data.add(o)
# write to JSON
gson = GsonBuilder().setPrettyPrinting().create()
pw = PrintWriter('orders2.json')
pw.println(gson.toJson(data))
pw.close()
#
print('db2json done')
