// ============================================================================
//
// 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 org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.part.EditorPart;
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.core.CorePlugin;
import org.talend.core.model.process.IProcess2;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.model.properties.PropertiesFactory;
import org.talend.core.model.properties.Property;
import org.talend.designer.core.DesignerPlugin;
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
import org.talend.repository.editor.JobEditorInput;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.IRepositoryService;
import org.talend.repository.model.RepositoryNode;
/**
* Wizard for the creation of a new project. <br/>
*
* $Id: NewProcessWizard.java 46332 2010-08-05 06:48:56Z cli $
*
*/
public class SaveAsProcessWizard extends Wizard {
/** Main page. */
private NewProcessWizardPage mainPage;
/** Created project. */
private ProcessItem processItem;
private Property property;
private IPath path;
private IProxyRepositoryFactory repositoryFactory;
private JobEditorInput jobEditorInput;
private ProcessItem oldProcessItem;
private Property oldProperty;
private boolean isUpdate;
public SaveAsProcessWizard(EditorPart editorPart) {
this.jobEditorInput = (JobEditorInput) editorPart.getEditorInput();
RepositoryNode repositoryNode = jobEditorInput.getRepositoryNode();
// see: RepositoryEditorInput.setRepositoryNode(IRepositoryNode repositoryNode)
if (repositoryNode == null) {
repositoryNode = (RepositoryNode) CorePlugin.getDefault().getRepositoryService().getRepositoryNode(
jobEditorInput.getItem().getProperty().getId(), false);
}
IRepositoryService service = DesignerPlugin.getDefault().getRepositoryService();
this.path = service.getRepositoryPath((RepositoryNode) repositoryNode);
this.oldProcessItem = (ProcessItem) jobEditorInput.getItem();
oldProperty = this.oldProcessItem.getProperty();
this.property = PropertiesFactory.eINSTANCE.createProperty();
assginVlaues(this.property, oldProperty);
processItem = PropertiesFactory.eINSTANCE.createProcessItem();
processItem.setProperty(property);
repositoryFactory = service.getProxyRepositoryFactory();
setDefaultPageImageDescriptor(ImageProvider.getImageDesc(ECoreImage.PROCESS_WIZ));
}
public void addPages() {
mainPage = new NewProcessWizardPage(property, path);
mainPage.initializeSaveAs(oldProperty.getLabel(), oldProperty.getVersion(), true);
// overwrite it.
mainPage.setTitle("Save As");
mainPage.setDescription("Save as another new job.");
addPage(mainPage);
setWindowTitle("Save As");
}
public boolean performFinish() {
boolean ok = false;
try {
IProcess2 loadedProcess = jobEditorInput.getLoadedProcess();
ProcessType processType = loadedProcess.saveXmlFile();
isUpdate = isUpdate();
if (isUpdate) {
oldProcessItem.setProcess(processType);
assginVlaues(oldProperty, property);
repositoryFactory.save(oldProcessItem);
// assign value
processItem = oldProcessItem;
} else {
processItem.setProcess(processType);
property.setId(repositoryFactory.getNextId());
// don't need to add depended routines.
repositoryFactory.create(processItem, mainPage.getDestinationPath());
}
ok = true;
} catch (Exception e) {
MessageDialog.openError(getShell(), "Error", "Job could not be saved" + " : " + e.getMessage());
ExceptionHandler.process(e);
}
return ok;
}
public ProcessItem getProcess() {
return this.processItem;
}
public boolean isUpdateOperation() {
return this.isUpdate;
}
// if name is different, it will create a new job, if name is the same, means to update the job(version or
// description...)
private boolean isUpdate() {
if (oldProperty.getLabel().trim().equalsIgnoreCase(property.getLabel().trim())) {
return true;
} else {
return false;
}
}
// left = right
private void assginVlaues(Property leftProperty, Property rightProperty) {
// 6 fields, don't contains the "locker" and "path". and author , they are the same.
leftProperty.setLabel(rightProperty.getLabel());
leftProperty.setPurpose(rightProperty.getPurpose());
leftProperty.setDescription(rightProperty.getDescription());
// same author as old one.
leftProperty.setAuthor(rightProperty.getAuthor());
leftProperty.setVersion(rightProperty.getVersion());
leftProperty.setStatusCode(rightProperty.getStatusCode());
}
}