/*******************************************************************************
 * 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 StatusClassTemplate implements ITemplate {
		
	override getContent(FunctionblockModel model) {
		'''
		package «ModuleUtil.getModelPackage(model)»;
		
		import org.codehaus.jackson.map.annotate.JsonSerialize;
		
		@JsonSerialize
		public class «model.name»Status {			
		«IF model.functionblock.status!=null»
			«FOR StatusField : model.functionblock.status.properties»	
			«IF StatusField instanceof PrimitiveProperty»			
				«var primitiveType = (StatusField as PrimitiveProperty).type»
				«var primitiveJavaType = PropertyUtil.toJavaFieldType(primitiveType)»
				
					private «primitiveJavaType» «StatusField.propName» = «PropertyUtil.getDefaultValue(primitiveType)»;
				
					public «primitiveJavaType» get«StatusField.propName.toFirstUpper»() {
						return «StatusField.propName»;
					}
							
					public void set«StatusField.propName.toFirstUpper»(«primitiveJavaType» «StatusField.propName») {
						this.«StatusField.propName» = «StatusField.propName»;
					}		
		    «ENDIF»
			«ENDFOR»						
		«ENDIF»			
		}'''
	}
}