<%
	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 = (String) interfaces.get(i);
   		if (i > 0) {
%>, 
<%
		}
%><%= INTERFACE %>
<%
	}
%> {
