// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.core.ui.wizards;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.Wizard;
import org.talend.commons.exception.LoginException;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.ui.runtime.image.ECoreImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.commons.utils.VersionUtils;
import org.talend.core.CorePlugin;
import org.talend.core.context.Context;
import org.talend.core.context.RepositoryContext;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.model.properties.PropertiesFactory;
import org.talend.core.model.properties.Property;
import org.talend.core.model.relationship.RelationshipItemBuilder;
import org.talend.core.model.routines.RoutinesUtil;
import org.talend.designer.core.DesignerPlugin;
import org.talend.designer.core.i18n.Messages;
import org.talend.designer.core.model.utils.emf.talendfile.ParametersType;
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
import org.talend.designer.core.model.utils.emf.talendfile.RoutinesParameterType;
import org.talend.designer.core.model.utils.emf.talendfile.TalendFileFactory;
import org.talend.repository.RepositoryWorkUnit;
import org.talend.repository.model.IProxyRepositoryFactory;
/**
* Wizard for the creation of a new project. <br/>
*
* $Id: NewProcessWizard.java 82047 2012-04-19 08:15:10Z hcyi $
*
*/
public class NewProcessWizard extends Wizard {
/** Main page. */
private NewProcessWizardPage mainPage;
/** Created project. */
private ProcessItem processItem;
private Property property;
private IPath path;
private IProxyRepositoryFactory repositoryFactory;
/**
* Constructs a new NewProjectWizard.
*
* @param author Project author.
* @param server
* @param password
*/
public NewProcessWizard(IPath path) {
super();
this.path = path;
this.property = PropertiesFactory.eINSTANCE.createProperty();
this.property.setAuthor(((RepositoryContext) CorePlugin.getContext().getProperty(Context.REPOSITORY_CONTEXT_KEY))
.getUser());
this.property.setVersion(VersionUtils.DEFAULT_VERSION);
this.property.setStatusCode(""); //$NON-NLS-1$
processItem = PropertiesFactory.eINSTANCE.createProcessItem();
processItem.setProperty(property);
repositoryFactory = DesignerPlugin.getDefault().getRepositoryService().getProxyRepositoryFactory();
setDefaultPageImageDescriptor(ImageProvider.getImageDesc(ECoreImage.PROCESS_WIZ));
}
/**
* Constructs a new NewProjectWizard.
*
* @param author Project author.
* @param server
* @param password
* @param label
*/
public NewProcessWizard(IPath path, String label) {
super();
this.path = path;
this.property = PropertiesFactory.eINSTANCE.createProperty();
this.property.setAuthor(((RepositoryContext) CorePlugin.getContext().getProperty(Context.REPOSITORY_CONTEXT_KEY))
.getUser());
if (label != null) {
property.setLabel(label);
}
this.property.setVersion(VersionUtils.DEFAULT_VERSION);
this.property.setStatusCode(""); //$NON-NLS-1$
processItem = PropertiesFactory.eINSTANCE.createProcessItem();
processItem.setProperty(property);
repositoryFactory = DesignerPlugin.getDefault().getRepositoryService().getProxyRepositoryFactory();
setDefaultPageImageDescriptor(ImageProvider.getImageDesc(ECoreImage.PROCESS_WIZ));
}
/**
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
@Override
public void addPages() {
mainPage = new NewProcessWizardPage(property, path);
// TDI-20399
if (property.getLabel() != null && !"".equals(property.getLabel())) {
mainPage.setNameModifiedByUser(true);
}
addPage(mainPage);
setWindowTitle(Messages.getString("NewProcessWizard.windowTitle")); //$NON-NLS-1$
}
/**
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@SuppressWarnings("unchecked")
@Override
public boolean performFinish() {
try {
property.setId(repositoryFactory.getNextId());
// changed by hqzhang for TDI-19527, label=displayName
property.setLabel(property.getDisplayName());
ProcessType process = TalendFileFactory.eINSTANCE.createProcessType();
ParametersType parameterType = TalendFileFactory.eINSTANCE.createParametersType();
// add depended routines.
List<RoutinesParameterType> dependenciesInPreference = RoutinesUtil.createDependenciesInPreference();
parameterType.getRoutinesParameter().addAll(dependenciesInPreference);
process.setParameters(parameterType);
processItem.setProcess(process);
RepositoryWorkUnit<Object> workUnit = new RepositoryWorkUnit<Object>(this.getWindowTitle(), this) {
@Override
protected void run() throws LoginException, PersistenceException {
repositoryFactory.create(processItem, mainPage.getDestinationPath());
RelationshipItemBuilder.getInstance().addOrUpdateItem(processItem);
}
};
workUnit.setAvoidUnloadResources(true);
repositoryFactory.executeRepositoryWorkUnit(workUnit);
} catch (PersistenceException e) {
MessageDialog.openError(getShell(), Messages.getString("NewProcessWizard.failureTitle"), Messages //$NON-NLS-1$
.getString("NewProcessWizard.failureText") + " : " + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
ExceptionHandler.process(e);
}
return processItem != null;
}
/**
* Getter for project.
*
* @return the project
*/
public ProcessItem getProcess() {
return this.processItem;
}
}