def setBusinessObjectsAsSerializable(package):
	for jclass in [ jclass for jclass in package.getOwnedElement(Class) if hasStereotype(jclass, 'Entity')]:
		stereoImplements = [it for it in getTagValues(jclass, 'JavaImplements') if 'Serializable' in it] 
		modelImplements = [ ir for ir in jclass.getRealized() if ir.getImplemented().getName() == 'Serializable' ]
		if not stereoImplements and not modelImplements:
			addTagValue(jclass, "JavaImport", "java.io.Serializable")
			addTagValue(jclass, "JavaImplements", "Serializable")
	for subPackage in package.getOwnedElement(Package):
		setBusinessObjectsAsSerializable(subPackage)
def getNodeIP(node): return getTagValues(node, 'ip')
def getFullJavaName(el): return getJavaClassName(el)
	for programInst in [program for program in node.getPart() if hasStereotype(program, 'ProgramInstance') \
																	and hasStereotype(program.getBase(), 'JUNIPERProgram')]:
		program = programInst.getBase()

		if not program in mpiGroups.keys():
			mpiGroups[program] = []

		groupName = 'group_' + node.getName()
		mpiGroupTag = ET.SubElement(topoModelTag, 'mpigroup')
		mpiGroupTag.set('name',  groupName)
		mpiGroups[program].append(groupName)		

		for i in range(max(1,int(node.getMultiplicityMin()))):
			cloudNode = ET.SubElement(deplModelTag, 'cloudnode')

			ipaddrs = getTagValues(node, 'ip')
			if len(ipaddrs) > i:
				ipaddr = ipaddrs[i]
			else:
				ipaddr = '127.0.0.1'

			hostsFileContent += ipaddr + '\n'
			cloudNode.set('hostipaddr', ipaddr)
			cloudNode.set('mpiglobalrank', str(mpiGlobalRank))
				
			memberTag = ET.SubElement(mpiGroupTag, 'member')
			memberTag.set('mpiglobalrank', str(mpiGlobalRank))
			memberTag.set('mpilocalrank', str(mpiLocalRank))
			memberTag.set('programName', program.getName())
	
			mpiGlobalRank = mpiGlobalRank + 1