
com.reprezen.genflow.rapidml.doc.xtend.XGenerateInterfaceDataModels.xtend Maven / Gradle / Ivy
/*******************************************************************************
* Copyright © 2013, 2016 Modelsolv, Inc.
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains the property
* of ModelSolv, Inc. See the file license.html in the root directory of
* this project for further information.
*******************************************************************************/
package com.reprezen.genflow.rapidml.doc.xtend
import com.reprezen.genflow.api.zenmodel.util.CommonServices
import com.reprezen.genflow.common.doc.XDocHelper
import com.reprezen.genflow.common.xtend.XImportHelper
import com.reprezen.genflow.common.xtend.XParameterHelper
import com.reprezen.rapidml.DataModel
import com.reprezen.rapidml.Enumeration
import com.reprezen.rapidml.Feature
import com.reprezen.rapidml.PrimitiveProperty
import com.reprezen.rapidml.ReferenceProperty
import com.reprezen.rapidml.Structure
import com.reprezen.rapidml.UserDefinedType
import com.reprezen.rapidml.ZenModel
class XGenerateInterfaceDataModels {
extension XDocHelper docHelper
val commonServices = new CommonServices
val paramHelper = new XParameterHelper
val XImportHelper importHelper
new(XImportHelper importHelper, XDocHelper docHelper) {
this.importHelper = importHelper
this.docHelper = docHelper
}
def String generateInterfaceDataModels(ZenModel model) {
'''
«FOR interfaceDataModel : model.dataModels»
«generateInterfaceDataModels(interfaceDataModel, false)»
«ENDFOR»
«FOR interfaceDataModel : importHelper.importedTypes.keySet»
«generateInterfaceDataModels(interfaceDataModel, true)»
«ENDFOR»
'''
}
def private generateInterfaceDataModels(DataModel dataModel, boolean imported) {
val alias = importHelper.getAlias(dataModel)
val aliasNote = if (alias !== null) ''' [alias «alias»]'''
'''
«dataModel.nameOrTitle»
«importHelper.getModelFullQualifiedName(dataModel)»«aliasNote»
«dataModel.generateDocItem»
«FOR dataType : if (imported) importHelper.importedTypes.get(dataModel) else dataModel.ownedDataTypes»
«generateType(dataType)»
«ENDFOR»
'''
}
/**
* Generate complex type
*/
def dispatch private String generateType(Structure dataType) {
'''
«dataType.name»
«dataType.generateDocItem»
«IF !dataType.ownedFeatures.empty»
Properties
Name
Type
Documentation
«FOR feature : dataType.ownedFeatures»
«feature.name»
«generatePropertyType(feature)»
«feature.generateDoc»
«ENDFOR»
«ENDIF»
«IF !dataType.ownedOperations.empty»
Operations
Name
Documentation
«FOR operation : dataType.ownedOperations»
«operation.name»
«operation.generateDoc»
«ENDFOR»
«ENDIF»
«IF !dataType.ownedElements.empty»
Owned Elements
«FOR ownedDataType : dataType.ownedElements»
«generateType(ownedDataType)»
«ENDFOR»
«ENDIF»
'''
}
/**
* Generate enumeration.
*/
def dispatch private String generateType(Enumeration dataType) {
'''
«dataType.baseType.name» Enumeration«dataType.
name»
«dataType.generateDocItem»
«IF !dataType.enumConstants.empty»
Enumeration Constants
Name
Value
Documentation
«FOR enumConstant : dataType.enumConstants»
«enumConstant.name»
«IF enumConstant.literalValue !== null»«enumConstant.literalValue»«ELSE»«enumConstant.
integerValue»«ENDIF»
«enumConstant.generateDoc»
«ENDFOR»
«ENDIF»
'''
}
def dispatch private String generateType(UserDefinedType dataType) {
'''
«dataType.name»
«dataType.
baseType.name»
«dataType.generateDocItem»
«dataType.allConstraints.generateConstraints»
'''
}
/**
* Generates property type for ReferenceProperty and PrimitiveProperty
*/
def dispatch private generatePropertyType(ReferenceProperty property) {
'''
«IF property.containment»
containing
«ENDIF»
«IF property.container»
container
«ENDIF»
«generateFeatureType(property)»
«IF property.inverse !== null»
inverse of «property.inverse.name»
«ENDIF»
'''
}
def dispatch private generatePropertyType(PrimitiveProperty property) {
'''
«IF property.type instanceof Enumeration || property.type instanceof UserDefinedType»
«generateFeatureType(property)»
«ELSE»
«generateFeatureType(property)»
«ENDIF»
«property.allConstraints.generateInlineConstraints»
'''
}
def private String generateFeatureType(Feature feature) {
'''
«paramHelper.featureType(feature, importHelper)»
«IF feature.cardinality !== null»«commonServices.getPrettyPrintedMultiplicity(feature)»«ENDIF»
'''
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy