<%
	if (model.shouldImplementAbstractMethods()) {
		for (Method method : model.getUnimplementedMethods()) { 
%>

	/**
     * @see <%= method.getContainingJavaClass() %>#<%= method.getName() %>(<%= method.getParamsForJavadoc() %>)
     */
    public <%= method.getReturnType() %> <%= method.getName() %>(<%= method.getParamsForDeclaration() %>) {
        // TODO Auto-generated method stub
<% 
			String defaultReturnValue = method.getDefaultReturnValue();
			if (defaultReturnValue != null) { 
%>
			return <%= defaultReturnValue %>;
<%
			} 
%>
    }
<% 
		}
	} 
%>