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

com.reprezen.genflow.swagger.doc.SchemaHelper.xtend Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * 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.swagger.doc

import io.swagger.models.ArrayModel
import io.swagger.models.Model
import io.swagger.models.ModelImpl
import io.swagger.models.Swagger
import io.swagger.models.properties.ArrayProperty
import io.swagger.models.properties.ObjectProperty
import io.swagger.models.properties.Property

class SchemaHelper implements Helper {

	var Swagger swagger
	extension RefHelper refHelper
	extension AttributeHelper attributeHelper
	extension ArrayHelper arrayHelper

	override init() {
		swagger = HelperHelper.swagger
		refHelper = HelperHelper.refHelper
		attributeHelper = HelperHelper.attributeHelper
		arrayHelper = HelperHelper.arrayHelper
	}

	def renderSchema(Object schema) {
		val resolved = schema.safeResolve
		switch (resolved) {
			ObjectProperty:
				resolved.renderSchemaTable
			ArrayProperty:
				resolved.renderArraySchema
			Property:
				resolved.renderPrimitiveSchema
			ArrayModel:
				resolved.renderArraySchema
			ModelImpl case resolved.properties.empty && resolved.additionalProperties?.safeResolve === null:
				resolved.renderPrimitiveSchema
			Model:
				resolved.renderSchemaTable
		}
	}

	def private renderSchemaTable(Object schema) {
		val table = StructureTable::get(swagger, #["name", "Name"], #["type", "Type"], #["doc", "Description"])
		table.render(schema, null, null)
	}

	def renderArraySchema(Object schema) {
		val typeSpec = schema.arrayTypeSpec
		val eltType = schema.elementType
		val details = new AttrDetails(eltType)
		'''
			«typeSpec»
			«IF eltType.primitive»«details.infoButton»«details.details(true)»«ELSE»«eltType.renderSchemaTable»«ENDIF»
		'''
	}

	def isPrimitive(Object obj) {
		switch (obj) {
			ObjectProperty: false
			ArrayProperty: false
			Property: true
			ModelImpl case obj.properties.empty && obj.additionalProperties?.safeResolve === null: true
			Model: false
		}
	}

	def renderPrimitiveSchema(Object schema) {
		val details = new AttrDetails(schema)
		'''«schema.type»«details.infoButton»«details.details(true)»'''
	}

	def getSchemaTitle(Object schema) {
		val Object resolved = schema.safeResolve
		#[resolved.title, resolved.rzveTypeName].filter[it !== null].last
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy