/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
/**
*
*/
package org.ebayopensource.turmeric.eclipse.errorlibrary.ui.wizards;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger;
import org.ebayopensource.turmeric.eclipse.core.model.BaseServiceParamModel;
import org.ebayopensource.turmeric.eclipse.errorlibrary.buildsystem.ErrorTypeCreator;
import org.ebayopensource.turmeric.eclipse.errorlibrary.providers.ErrorLibraryProviderFactory;
import org.ebayopensource.turmeric.eclipse.errorlibrary.providers.IErrorLibraryProvider;
import org.ebayopensource.turmeric.eclipse.errorlibrary.providers.ISOAErrorLibraryWizardPageProvider;
import org.ebayopensource.turmeric.eclipse.errorlibrary.resources.SOAMessages;
import org.ebayopensource.turmeric.eclipse.errorlibrary.ui.model.ErrorParamModel;
import org.ebayopensource.turmeric.eclipse.exception.resources.SOAErrorTypeCreationFailedException;
import org.ebayopensource.turmeric.eclipse.exception.resources.SOAGetErrorLibraryProviderFailedException;
import org.ebayopensource.turmeric.eclipse.exception.validation.ValidationInterruptedException;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.TrackingEvent;
import org.ebayopensource.turmeric.eclipse.ui.SOABaseWizard;
import org.ebayopensource.turmeric.eclipse.utils.lang.StringUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.EclipseMessageUtils;
import org.ebayopensource.turmeric.eclipse.utils.plugin.ProgressUtil;
import org.ebayopensource.turmeric.eclipse.utils.ui.UIUtil;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
/**
<<<<<<< HEAD
* The Class NewErrorWizard.
*
=======
>>>>>>> TURMERIC-1351
* @author yayu
* @since 1.0.0
*/
public final class NewErrorWizard extends SOABaseWizard {
private ErrorLibraryProviderFactory factory = ErrorLibraryProviderFactory.getInstance();
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.eclipse.ui.SOABaseWizard#preValidate()
*/
@Override
public IStatus preValidate() throws ValidationInterruptedException {
// checking for valid providers
try {
ErrorLibraryProviderFactory.getInstance().getPreferredProvider();
} catch (SOAGetErrorLibraryProviderFailedException e) {
return EclipseMessageUtils.createErrorStatus(e);
}
return Status.OK_STATUS;
}
private ISOAErrorLibraryWizardPageProvider wizardProvider;
private static final SOALogger logger = SOALogger.getLogger();
/**
* Instantiates a new new error wizard.
*/
public NewErrorWizard() {
super();
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.eclipse.ui.SOABaseWizard#getContentPages()
*/
@Override
public IWizardPage[] getContentPages() {
final List<IWizardPage> pages = new ArrayList<IWizardPage>();
IErrorLibraryProvider errorLibProvider;
try {
errorLibProvider = ErrorLibraryProviderFactory.getInstance()
.getPreferredProvider();
if (errorLibProvider != null
&& errorLibProvider.getErrorWizardPageProvider() != null) {
wizardProvider = errorLibProvider.getErrorWizardPageProvider();
pages.addAll(wizardProvider.getWizardpages(getSelection()));
}
} catch (SOAGetErrorLibraryProviderFailedException e) {
SOALogger.getLogger().error(e);
UIUtil.showErrorDialog(e);
}
return pages.toArray(new IWizardPage[0]);
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.eclipse.ui.SOABaseWizard#performFinish()
*/
@Override
public boolean performFinish() {
if (wizardProvider != null) {
try {
final BaseServiceParamModel uimodel = wizardProvider
.performFinish();
if ((uimodel instanceof ErrorParamModel) == false) {
return false;
}
final ErrorParamModel model = (ErrorParamModel) uimodel;
final WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
@Override
protected void execute(IProgressMonitor monitor)
throws CoreException, InvocationTargetException,
InterruptedException {
final long startTime = System.currentTimeMillis();
final int totalWork = ProgressUtil.PROGRESS_STEP * 50;
monitor.beginTask(StringUtil.formatString(
SOAMessages.CREATING_ERR, model.getErrorID()),
totalWork);
ProgressUtil.progressOneStep(monitor);
try {
ErrorTypeCreator.createErrorType(model, monitor);
final TrackingEvent event = new TrackingEvent(
SOAMessages.NEW_ERR, new Date(startTime),
System.currentTimeMillis() - startTime);
GlobalRepositorySystem.instanceOf()
.getActiveRepositorySystem().trackingUsage(
event);
} catch (Exception e) {
logger.error(e);
throw new SOAErrorTypeCreationFailedException(
"Failed to generate error->"
+ model.getName(), e);
} finally {
monitor.done();
}
}
};
ErrorLibraryProviderFactory.getInstance().getPreferredProvider()
.getErrorTypeCreator().preCreation(model);
getContainer().run(false, true, operation);
// http://www.nbweekly.com/Print/Page/844,62.shtml
// No change if just resource created inside a project
// changePerspective();
} catch (Exception e) {
logger.error(e);
UIUtil.showErrorDialog(SOAMessages.CREATE_ERR_ERR, e);
if (SOALogger.DEBUG)
logger.exiting(false);
return false;
}
}
return true;
}
}