/*******************************************************************************
* Copyright (c) 2008, 2012 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.eef.codegen.extended.flow;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.eef.codegen.flow.StepWithInput;
import org.eclipse.emf.eef.codegen.flow.util.GenmodelHelper;
import org.eclipse.emf.eef.runtime.ui.EEFExtendedRuntime;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
/**
* @author <a href="mailto:goulwen.lefur@obeo.fr">Goulwen Le Fur</a>
*
*/
public class CleanEEFEditorSources extends StepWithInput {
private static final String PLUGIN_XML = "plugin.xml";
private static final String PLUGIN_PROPERTIES = "plugin.properties";
private static final String BUILD_PROPERTIES = "build.properties";
private GenmodelHelper helper;
private IFile ecoreModel;
private IContainer targetFolder;
private boolean genmodel;
private boolean emfModelCode;
private boolean emfEditCode;
private boolean emfEditorCode;
private boolean eefPropertiesModels;
private boolean eefEditorModels;
/**
* @param name task name
* @param activeShell the active shell
*/
public CleanEEFEditorSources(String name, IFile ecoreModel, IContainer targetFolder) {
super(name);
this.ecoreModel = ecoreModel;
this.targetFolder = targetFolder;
genmodel = true;
emfModelCode = true;
emfEditCode = true;
emfEditorCode = true;
eefPropertiesModels = true;
eefEditorModels = false;
}
/**
* {@inheritDoc}
* @see org.eclipse.emf.eef.codegen.flow.Step#execute(org.eclipse.core.runtime.IProgressMonitor)
*/
public IStatus execute(IProgressMonitor monitor) {
try {
GenModel genModel = helper.getGenModel();
if (genModel != null) {
String modelDirectory = genModel.getModelDirectory();
String editDirectory = genModel.getEditDirectory();
String editorDirectory = genModel.getEditorDirectory();
if (genmodel) {
deleteGenmodel(monitor);
}
if (emfModelCode) {
deleteProject(modelDirectory, monitor);
}
if (emfEditCode) {
deleteProject(editDirectory, monitor);
}
if (emfEditorCode) {
deleteProject(editorDirectory, monitor);
}
if (eefPropertiesModels) {
deleteEEFPropertiesModels(monitor);
}
if (eefEditorModels) {
deleteEEFEditorModels(monitor);
}
}
} catch (CoreException e) {
return new Status(IStatus.ERROR, EEFExtendedRuntime.PLUGIN_ID, "Unable to delete genmodel file.", e);
}
return Status.OK_STATUS;
}
/**
* {@inheritDoc}
* @see org.eclipse.emf.eef.codegen.flow.StepWithInput#getInputPages()
*/
public List<WizardPage> getInputPages() {
helper = new GenmodelHelper(resourceSet, ecoreModel, targetFolder);
CleanEEFEditorSourcesWizardPage cleanEEFEditorSourcesWizardPage = new CleanEEFEditorSourcesWizardPage("Clean EEF Editor sources page");
List<WizardPage> pages = new ArrayList<WizardPage>();
pages.add(cleanEEFEditorSourcesWizardPage);
return pages;
}
/**
* @param monitor
* @throws CoreException
*/
protected void deleteGenmodel(IProgressMonitor monitor) throws CoreException {
IFile genModelFile = helper.getGenModelFile();
if (genModelFile.isAccessible()) {
genModelFile.delete(true, monitor);
helper.getTargetFolder().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
}
/**
* @param srcFolderDirectory
* @param monitor
* @throws CoreException
*/
protected void deleteProject(String srcFolderDirectory, IProgressMonitor monitor) throws CoreException {
IFolder srcFolder = ecoreModel.getWorkspace().getRoot().getFolder(new Path(srcFolderDirectory));
IProject project = srcFolder.getProject();
IFile pluginXML = project.getFile(new Path(PLUGIN_XML));
IFile pluginProperties = project.getFile(new Path(PLUGIN_PROPERTIES));
IFile buildProperties = project.getFile(new Path(BUILD_PROPERTIES));
if (srcFolder.isAccessible()) {
srcFolder.delete(true, monitor);
}
if (pluginXML.isAccessible()) {
pluginXML.delete(true, monitor);
}
if (pluginProperties.isAccessible()) {
pluginProperties.delete(true, monitor);
}
if (buildProperties.isAccessible()) {
buildProperties.delete(true, monitor);
}
project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
/**
* @param monitor
* @throws CoreException
*/
protected void deleteEEFPropertiesModels(IProgressMonitor monitor) throws CoreException {
IFile eefPropertiesComponentsModel = helper.getEEFPropertiesComponentsModel();
if (eefPropertiesComponentsModel.isAccessible()) {
eefPropertiesComponentsModel.delete(true, monitor);
}
IFile eefPropertiesEEFGenModel = helper.getEEFPropertiesEEFGenModel();
if (eefPropertiesEEFGenModel.isAccessible()) {
eefPropertiesEEFGenModel.delete(true, monitor);
}
helper.getEEFModelsFolder().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
/**
* @param monitor
* @throws CoreException
*/
protected void deleteEEFEditorModels(IProgressMonitor monitor) throws CoreException {
IFile eefEditorComponentsModel = helper.getEEFEditorComponentsModel();
if (eefEditorComponentsModel.isAccessible()) {
eefEditorComponentsModel.delete(true, monitor);
}
IFile eefEditorEEFGenModel = helper.getEEFEditorEEFGenModel();
if (eefEditorEEFGenModel.isAccessible()) {
eefEditorEEFGenModel.delete(true, monitor);
}
helper.getEEFModelsFolder().refreshLocal(IResource.DEPTH_INFINITE, monitor);
}
private class CleanEEFEditorSourcesWizardPage extends WizardPage {
private Button genmodelButton;
private Button emfModelCodeButton;
private Button emfEditCodeButton;
private Button emfEditorCodeButton;
private Button eefPropertiesModelsButton;
private Button eefEditorModelsButton;
/**
* @param pageName
*/
public CleanEEFEditorSourcesWizardPage(String pageName) {
super(pageName);
setTitle("EEF editor sources cleaning");
setDescription("Choose actions you want to perform");
}
/**
* {@inheritDoc}
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
container.setLayout(layout);
genmodelButton = new Button(container, SWT.CHECK);
genmodelButton.setText("Delete generated 'genmodel' file");
genmodelButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
genmodel = !genmodel;
}
});
if (helper.getGenModelFile().exists()) {
genmodelButton.setSelection(genmodel);
} else {
genmodelButton.setEnabled(false);
genmodel = false;
}
emfModelCodeButton = new Button(container, SWT.CHECK);
emfModelCodeButton.setText("Delete generated EMF model code");
emfModelCodeButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
emfModelCode = !emfModelCode;
}
});
IFolder emfModelSrcFolder = helper.getEMFModelSrcFolder();
if (emfModelSrcFolder != null && emfModelSrcFolder.isAccessible()) {
emfModelCodeButton.setSelection(emfModelCode);
} else {
emfModelCodeButton.setEnabled(false);
emfModelCode = false;
}
emfEditCodeButton = new Button(container, SWT.CHECK);
emfEditCodeButton.setText("Delete generated EMF edit code");
emfEditCodeButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
emfEditCode = !emfEditCode;
}
});
IFolder emfEditSrcFolder = helper.getEMFEditSrcFolder();
if (emfEditSrcFolder != null && emfEditSrcFolder.isAccessible()) {
emfEditCodeButton.setSelection(emfEditCode);
} else {
emfEditCodeButton.setEnabled(false);
emfEditCode = false;
}
emfEditorCodeButton = new Button(container, SWT.CHECK);
emfEditorCodeButton.setText("Delete generated EMF editor code");
emfEditorCodeButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
emfEditorCode = !emfEditorCode;
}
});
IFolder emfEditorSrcFolder = helper.getEMFEditorSrcFolder();
if (emfEditorSrcFolder != null && emfEditorSrcFolder.isAccessible()) {
emfEditorCodeButton.setSelection(emfEditorCode);
} else {
emfEditorCodeButton.setEnabled(false);
emfEditorCode = false;
}
eefPropertiesModelsButton = new Button(container, SWT.CHECK);
eefPropertiesModelsButton.setText("Delete generated EEF models for properties views");
eefPropertiesModelsButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
eefPropertiesModels = !eefPropertiesModels;
}
});
if (helper.getEEFPropertiesComponentsModel().exists() || helper.getEEFPropertiesEEFGenModel().exists()) {
eefPropertiesModelsButton.setSelection(eefPropertiesModels);
} else {
eefPropertiesModelsButton.setEnabled(false);
eefPropertiesModels = false;
}
eefEditorModelsButton = new Button(container, SWT.CHECK);
eefEditorModelsButton.setText("Delete generated EEF models for EEF editor");
eefEditorModelsButton.setSelection(true);
eefEditorModelsButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
eefEditorModels = !eefEditorModels;
}
});
if (helper.getEEFEditorComponentsModel().exists() || helper.getEEFEditorEEFGenModel().exists()) {
eefEditorModelsButton.setSelection(eefEditorModels);
} else {
eefEditorModelsButton.setEnabled(false);
eefEditorModels = false;
}
setControl(container);
}
}
}