All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.reprezen.genflow.rapidml.wadl.xtend.TraceHelper.xtend Maven / Gradle / Ivy

The newest version!
package com.reprezen.genflow.rapidml.wadl.xtend

import com.google.common.collect.Maps
import com.reprezen.genflow.api.source.ILocator
import com.reprezen.genflow.api.template.IGenTemplateContext
import com.reprezen.genflow.api.trace.GenTemplateTrace
import com.reprezen.genflow.api.trace.GenTemplateTraceItem
import com.reprezen.genflow.api.trace.GenTemplateTraceUtils
import com.reprezen.genflow.api.zenmodel.ZenModelLocator
import com.reprezen.rapidml.ResourceAPI
import com.reprezen.rapidml.ResourceDefinition
import com.reprezen.rapidml.ZenModel
import java.nio.file.Paths
import java.util.Map
import org.eclipse.emf.ecore.EObject

class TraceHelper {
	val IGenTemplateContext context
	val ILocator locator
	val GenTemplateTrace xsdTrace
	val Map namesItems = Maps.newHashMap
	val Map apiItems = Maps.newHashMap

	new(IGenTemplateContext context, ZenModel model) {
		this.context = context
		this.locator = new ZenModelLocator(model)
		this.xsdTrace = context.getPrerequisiteTrace('xsdGenerator')
		for (item : GenTemplateTraceUtils::getTraceItemsOfType(xsdTrace, 'namesInSchema')) {
			namesItems.put(item.locator, item)
		}
		for (api : model.resourceAPIs) {
			apiItems.put(api, GenTemplateTraceUtils::getTraceItem(xsdTrace, 'resourceAPI', 'sourceData', locator.locate(api)))
		}
	}

	def getTypeName(EObject obj) {
		obj.namesProperty('typeName')
	}

	def getRootElementName(EObject obj) {
		obj.namesProperty('rootElementName')
	}

	def getElementName(EObject obj) {
		obj.namesProperty('elementName')
	}

	def getListElementName(EObject obj) {
		obj.namesProperty('listElementName')
	}

	def getListItemElementName(EObject obj) {
		obj.namesProperty('listItemElementName')
	}

	def getAttributeName(EObject obj) {
		obj.namesProperty('attributeName')
	}

	def getIdInTrace(EObject obj) {
		obj.namesProperty('id')
	}

	def namesProperty(EObject obj, String property) {
		namesItems.get(locator.locate(obj))?.properties?.get(property)
	}

	def String getXsdFilePath(ResourceAPI resourceAPI) {
		val item = GenTemplateTraceUtils::getTraceItem(xsdTrace, 'file', 'sourceData', locator.locate(resourceAPI))
		val outDir = Paths::get(context.outputDirectory.absolutePath)
		val file = Paths::get(item.outputFile.absolutePath)
		return outDir.relativize(file).join('/')
	}

	def String getNsPrefix(ResourceAPI resourceAPI) {
		apiItems.get(resourceAPI).properties.get('namespacePrefix')
	}

	def String getNamespace(ResourceAPI resourceAPI) {
		apiItems.get(resourceAPI).properties.get('namespace')
	}

	def String getComplexTypeQName(ResourceDefinition resource) {
		val api = resource.eContainer as ResourceAPI
		api.nsPrefix + ':' + resource.typeName
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy