/*******************************************************************************
 * Copyright (c) 2014 Bosch Software Innovations GmbH and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 *
 * The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * The Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 * Bosch Software Innovations GmbH - Please refer to git log
 *
 *******************************************************************************/
 package org.eclipse.vorto.codegen.examples.webdevice.tasks.templates

import org.eclipse.vorto.functionblock.FunctionblockModel
import org.eclipse.vorto.functionblock.PrimitiveProperty
import org.eclipse.vorto.codegen.examples.webdevice.tasks.ModuleUtil
import org.eclipse.vorto.codegen.api.tasks.ITemplate

class ConfigurationClassTemplate implements ITemplate {
		
	override getContent(FunctionblockModel model) {
		'''
		package «ModuleUtil.getModelPackage(model)»;

		import org.codehaus.jackson.map.annotate.JsonSerialize;
		
		@JsonSerialize
		public class «model.name»Configuration {			
		«IF model.functionblock.configuration!=null»
			«FOR configurationField : model.functionblock.configuration.properties»	
			«IF configurationField instanceof PrimitiveProperty»			
				«var primitiveType = (configurationField as PrimitiveProperty).type»
				«var primitiveJavaType = PropertyUtil.toJavaFieldType(primitiveType)»
				
					private «primitiveJavaType» «configurationField.propName» = «PropertyUtil.getDefaultValue(primitiveType)»;
				
					public «primitiveJavaType» get«configurationField.propName.toFirstUpper»() {
						return «configurationField.propName»;
					}
							
					public void set«configurationField.propName.toFirstUpper»(«primitiveJavaType» «configurationField.propName») {
						this.«configurationField.propName» = «configurationField.propName»;
					}		
		    «ENDIF»
			«ENDFOR»						
		«ENDIF»			
		}'''
	}
}