/*******************************************************************************
* Copyright (C) 2003, 2004, 2007, 2008, 2013, Guillaume Brocker
*
* 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:
* Guillaume Brocker - Initial API and implementation
*
******************************************************************************/
package eclox.ui.wizard;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import eclox.core.doxygen.Doxygen;
import eclox.core.doxygen.InvokeException;
import eclox.core.doxygen.RunException;
import eclox.ui.Plugin;
/**
* Implement the new file wizard extension to provide a way to create
* new doxyfiles.
*
* @author gbrocker
*/
public class NewDoxyfileWizard extends Wizard implements INewWizard {
private IFile m_doxyfile; ///< The created doxyfile.
private NewDoxyfileWizardPage m_page; ///< The wizard page used to get the file name.
/**
* Retrieves the created doxyfile.
*
* @return the created doxyfile, null if none
*/
public IFile getDoxyfile() {
return m_doxyfile;
}
/**
* @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
*/
public void init( IWorkbench workbench, IStructuredSelection selection ) {
m_page = new NewDoxyfileWizardPage( selection );
addPage( m_page );
setWindowTitle( "New Doxygen Configuration" );
}
/**
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
public boolean performFinish() {
for(;;) {
// Creates the doxyfile resource.
IFile doxyfile = createFile( m_page.getContainerFullPath(), m_page.getFileName() );
// Warn user if the doxyfile exists.
if( doxyfile.exists() ) {
MessageDialog.openWarning(getShell(), "Resource Exists", "The resource " + doxyfile.getFullPath().toString() + " already exists !" );
return false;
}
// Creates the effective resource file.
try {
Doxygen.getDefault().generate( doxyfile );
m_doxyfile = doxyfile;
return true;
}
// Doxygen returned an error.
catch( RunException runException ) {
MessageDialog.openError(getShell(), "Doxygen Error", "An error occured while running doxygen. " + runException.toString());
return true;
}
// Doxygen was impossible to run.
catch( InvokeException invokeException ) {
if( Plugin.editPreferencesAfterDoxygenInvocationFailed() ) {
continue;
}
// Stops the wizard.
return true;
}
}
}
/**
* Create the resource file.
*
* @param containerPath The path to the container for the resource to create.
* @param fileName A string containnig the name of the file resource to create.
*
* @return The created file resource. The file system's file hasn't been created at this step.
*/
private IFile createFile( IPath containerPath, String fileName ) {
IFile result;
IPath filePath;
String fileExtension;
filePath = containerPath.append( fileName );
fileExtension = filePath.getFileExtension();
if( (fileExtension == null || fileExtension.compareToIgnoreCase( "Doxyfile" ) != 0) && fileName.compareToIgnoreCase("Doxyfile") != 0 ) {
filePath = filePath.addFileExtension( "Doxyfile" );
}
result = ResourcesPlugin.getWorkspace().getRoot().getFile( filePath );
return result;
}
}