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

from javax.xml.bind import JAXBContext, Marshaller

from dk.vajhoej.isam.map import PyIsamMap

import AutoMap
import OrdersISAM
import OrderLinesISAM
import OrdersJAXB
import OrdersCollectionJAXB
import OrderLinesJAXB
import OrderLinesCollectionJAXB

# read from index-sequential file
oisqmp = PyIsamMap.createIsamMapRMS("orders.isq", OrdersISAM)
olisqmp = PyIsamMap.createIsamMapRMS("orderlines.isq", OrderLinesISAM)
isamdata = ArrayList()
for oisam in oisqmp.values():
    for olisam in olisqmp.key(1).isInt(oisam.id).values():
        oisam.orderLinesT.add(olisam)
    isamdata.add(oisam)
# convert
mo = AutoMap(OrdersISAM, OrdersJAXB, True)
mol = AutoMap(OrderLinesISAM, OrderLinesJAXB, True)
jaxbdata = OrdersCollectionJAXB()
for oisam in isamdata:
    ojaxb = OrdersJAXB()
    mo.convert(oisam, ojaxb)
    for olisam in oisam.orderLinesT:
        oljaxb = OrderLinesJAXB()
        mol.convert(olisam, oljaxb)
        ojaxb.orderLines.add(oljaxb)
    jaxbdata.add(ojaxb)
# write to XML
jxbctx = JAXBContext.newInstance(OrdersCollectionJAXB, OrdersJAXB, OrderLinesCollectionJAXB, OrderLinesJAXB)
m = jxbctx.createMarshaller()
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, True)
os = FileOutputStream('orders4.xml')
m.marshal(jaxbdata, os)
os.close()
#
print('isq2xml done')
