# THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
# APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
# HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
# OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
# IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
# ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

# IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
# WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
# THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
# GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
# USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
# DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
# PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
# EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGES.

# Copyright (c) 2018 Dr. Oliver Barth <info@drb-electronic.de>
# Manages motion files (not part of the basic package)

import xml.etree.ElementTree
from xml.etree.ElementTree import ElementTree, Element, SubElement, tostring

#
# writes to and reads motion data from XML-file
#
class MotionFile:
	def __init__(self):
		pass
		
	def read(self, filename, posList):
		#
		root = xml.etree.ElementTree.parse(filename).getroot()
		for pos in root.findall('pos'):
			#
			dat = {'name':'', 'a1':'0.0', 'a2':'0.0', 'a3':'0.0', 'a4':'0.0', 'a5':'0.0', 'a6':'0.0',
			'a7':'0.0', 'a8':'0.0', 'a9':'0.0', 'a10':'0.0'}
			dat['name'] = pos.get('name')
			dat['a1']= pos.get('a1')
			dat['a2'] = pos.get('a2')
			dat['a3'] = pos.get('a3')
			dat['a4'] = pos.get('a4')
			dat['a5'] = pos.get('a5')
			dat['a6'] = pos.get('a6')
			dat['a7'] = pos.get('a7')
			dat['a8']= pos.get('a8')
			dat['a9'] = pos.get('a9')
			dat['a10'] = pos.get('a10')
			posList.append(dat)
	#
	def write(self, filename, pl):
		pos = Element('positions')
		for i in range (0, len(pl)):
			val1 = str(pl[i]['a1'])
			val2 = str(pl[i]['a2'])
			val3 = str(pl[i]['a3'])
			val4 = str(pl[i]['a4'])
			val5 = str(pl[i]['a5'])
			val6 = str(pl[i]['a6'])
			name = SubElement(pos, 'pos', name=pl[i]['name'], a1=val1, a2=val2, a3=val3, a4=val4, a5=val5, a6=val6)
			
		self.indent(pos)
		print tostring(pos)
		ElementTree(pos).write(filename)
		
	#
	def indent(self, elem, level=0):
		i = "\n" + level*"  "
		if len(elem):
			if not elem.text or not elem.text.strip():
				elem.text = i + "  "
			if not elem.tail or not elem.tail.strip():
				elem.tail = i
			for elem in elem:
				self.indent(elem, level+1)
			if not elem.tail or not elem.tail.strip():
				elem.tail = i
		else:
			if level and (not elem.tail or not elem.tail.strip()):
				elem.tail = i
