<%
	if (model.isPublic()) { 
%>
public 
<% 
	} 

	if (model.isAbstract()) { 
%>abstract 
<%
	}

	if (model.isFinal()) {
%>final 
<%
	}
%>class <%= model.getClassName() %>
<%
	String superClass = model.getSuperclassName();
 	if (superClass != null && superClass.length() > 0) {
%> extends <%= superClass %>
<%
	}

	List<String> interfaces = model.getInterfaces(); 
 	if ( interfaces.size() > 0) { 
%> implements 
<%
	}
	
 	for (int i = 0; i < interfaces.size(); i++) {
   		String INTERFACE = interfaces.get(i);
   		if (i > 0) {
%>, 
<%
		}
%><%= INTERFACE %>
<%
	}
%> {
