<%@ jet package="org.eclipse.e4.internal.tools.wizards.classes.templates" class="PartTemplate" imports="org.eclipse.e4.internal.tools.wizards.classes.NewPartClassWizard.PartClass" %>
<% PartClass domainClass = (PartClass)argument; %> 
<% if( domainClass.getPackageFragment() != null && domainClass.getPackageFragment().getElementName().trim().length() > 0 ) { %>
package <%= domainClass.getPackageFragment().getElementName() %>;
<% } %>

import javax.inject.Inject;
<% if( domainClass.isUsePostConstruct() ) { %>
import javax.annotation.PostConstruct;
import org.eclipse.swt.widgets.Composite;
<% } %>
<% if( domainClass.isUsePredestroy() ) { %>
import javax.annotation.PreDestroy;
<% } %>
<% if( domainClass.isUseFocus() ) { %>
import org.eclipse.e4.ui.di.Focus;
<% } %>
<% if( domainClass.isUsePersist() ) { %>
import org.eclipse.e4.ui.di.Persist;
<% } %>

public class <%= domainClass.getName() %> {
	@Inject
	public <%= domainClass.getName() %>() {
		
	}
	<% if( domainClass.isUsePostConstruct() ) { %>
	@PostConstruct
	public void <%= domainClass.getPostConstructMethodName()  %>(Composite parent) {
		
	}
	<% } %>
	<% if( domainClass.isUsePredestroy() ) { %>
	@PreDestroy
	public void <%= domainClass.getPreDestroyMethodName()  %>() {
		
	}
	<% } %>
	<% if( domainClass.isUseFocus() ) { %>
	@Focus
	public void <%= domainClass.getFocusMethodName() %>() {
		
	}
	<% } %>
	<% if( domainClass.isUsePersist() ) { %>
	@Persist
	public void <%= domainClass.getPersistMethodName() %>() {
		
	}
	<% } %>
}