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

import java.util.List;

import org.eclipse.e4.ui.di.AboutToShow;
<% if( domainClass.isUseAboutToHide() )  { %>
import org.eclipse.e4.ui.di.AboutToHide;
<% } %>

import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;

public class <%= domainClass.getName() %> {
	@AboutToShow
	public void <%= domainClass.getAboutToShowMethodName() %>(List<MMenuElement> items) {
		
	}
	<% if( domainClass.isUseAboutToHide() )  { %>
	
	@AboutToHide
	public void <%= domainClass.getAboutToHideMethodName() %>(List<MMenuElement> items) {
		
	}
	<% } %>	
}