/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package fr.inria.diverse.k3.ui.templates.k3al;
import java.io.IOException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.osgi.framework.BundleException;
import fr.inria.diverse.commons.eclipse.pde.classpath.ClasspathHelper;
import fr.inria.diverse.commons.eclipse.pde.manifest.ManifestChanger;
import fr.inria.diverse.commons.eclipse.pde.wizards.pages.pde.ui.BaseProjectWizardFields;
import fr.inria.diverse.commons.eclipse.pde.wizards.pages.pde.ui.templates.NewProjectTemplateWizard;
import fr.inria.diverse.commons.eclipse.resources.IFolderUtils;
import fr.inria.diverse.k3.ui.templates.Activator;
import fr.inria.diverse.k3.ui.templates.IHelpContextIds;
import fr.inria.diverse.k3.ui.templates.K3TemplateMessages;
import fr.inria.diverse.k3.ui.wizards.pages.NewK3ProjectWizardFields.KindsOfProject;
public class UserEcoreBasicAspectWithMelangeTemplate extends UserEcoreBasicAspectTemplate {
public static final String KEY_MELANGE_FILE_NAME = "melangeFileName"; //$NON-NLS-1$
public static final String MELANGE_FILE_NAME = "sample"; //$NON-NLS-1$
public static final String KEY_METAMODEL_NAME = "metamodelName"; //$NON-NLS-1$
public static final String METAMODEL_NAME = "MyMetamodel"; //$NON-NLS-1$
/**
* Constructor for HelloWorldTemplate.
*/
public UserEcoreBasicAspectWithMelangeTemplate(NewProjectTemplateWizard hostWizard) {
super(hostWizard);
}
@Override
protected void createOptions() {
super.createOptions();
addOption(KEY_MELANGE_FILE_NAME, K3TemplateMessages.UserEcoreBasicAspectWithMelangeTemplate_melangeFileName, (String) null, 0);
addOption(KEY_METAMODEL_NAME, K3TemplateMessages.UserEcoreBasicAspectWithMelangeTemplate_melangeMetamodelName, (String) null, 0);
}
/**
* used to retrieve the template folder
*/
public String getSectionId() {
return "userEcoreBasicAspectWithMelange"; //$NON-NLS-1$
}
@Override
public void addPages(Wizard wizard) {
WizardPage page = createPage(0, IHelpContextIds.TEMPLATE_ECORE_ASPECT_WITH_MELANGE);
page.setTitle(K3TemplateMessages.UserEcoreBasicAspectWithMelangeTemplate_title);
page.setDescription(K3TemplateMessages.UserEcoreBasicAspectWithMelangeTemplate_desc);
wizard.addPage(page);
markPagesAdded();
}
public boolean isDependentOnParentWizard() {
return true;
}
protected void initializeFields(BaseProjectWizardFields data) {
super.initializeFields(data);
if(_data.ecoreIFile != null){
String ecoreBaseName = _data.ecoreIFile.getLocation().removeFileExtension().lastSegment();
initializeOption(KEY_METAMODEL_NAME,Character.toUpperCase(ecoreBaseName.charAt(0)) + ecoreBaseName.substring(1));
initializeOption(KEY_MELANGE_FILE_NAME,ecoreBaseName);
}
else{
initializeOption(KEY_METAMODEL_NAME,METAMODEL_NAME);
initializeOption(KEY_MELANGE_FILE_NAME,MELANGE_FILE_NAME);
}
}
/* (non-Javadoc)
* @see fr.inria.diverse.k3.ui.templates.K3TemplateSection#generateFiles(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected void generateFiles(IProgressMonitor monitor) throws CoreException {
updateDataFromOptions();
super.generateFiles(monitor);
// now add the melange stuff
// If this is a plugin
if(_data.kindsOfProject == KindsOfProject.PLUGIN){
ManifestChanger manifestChanger;
try {
manifestChanger = new ManifestChanger(project.getFile("META-INF/MANIFEST.MF"));
manifestChanger.addPluginDependency(_data.ecoreIFile.getProject().getName(), "0.0.0", false, true);
manifestChanger.addPluginDependency("fr.inria.diverse.melange.lib", "0.0.0", false, true);
manifestChanger.commit();
IFolderUtils.createFolder("src-gen", project, monitor);
IJavaProject javaProject = (IJavaProject)project.getNature(JavaCore.NATURE_ID);
ClasspathHelper.addEntry(project, JavaCore.newSourceEntry(javaProject.getPackageFragmentRoot(project.getFolder("src-gen")).getPath()), monitor);
} catch (IOException | BundleException e) {
Activator.logErrorMessage(e.getMessage(), e);
}
}
}
public void updateDataFromOptions() {
super.updateDataFromOptions();
}
}