
<%
/**
 * Copyright (c) 2002-2004 IBM Corporation and others.
 * All rights reserved.   This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 * 
 * Contributors: 
 *   IBM - Initial API and implementation
 */
%>
<%GenModel genModel = (GenModel)argument;%>
<%@ egf:patternCall patternId="platform:/plugin/org.eclipse.egf.emf.pattern.base/egf/EMF_Pattern_Base.fcore#LogicalName=org.eclipse.egf.emf.pattern.base.HeaderProperties" args="parameter:argument"%>

pluginName = <%=genModel.getModelBundleName()%>
providerName = <%=genModel.getModelBundleVendorName()%>
<%boolean first = true; for (GenPackage genPackage : genModel.getAllGenPackagesWithClassifiers()) {%>
  <%if (genPackage.isContentType()) {%>
    <%if (first) { first = false;%>

    <%}%>
_UI_<%=genPackage.getPrefix()%>_content_type = <%=genPackage.getPrefix()%> File
  <%}%>
<%}%>
