/** @generated */ protected void performSaveAs(IProgressMonitor progressMonitor) { Shell shell = getSite().getShell(); IEditorInput input = getEditorInput(); SaveAsDialog dialog = new SaveAsDialog(shell); IFile original = input instanceof IFileEditorInput ? ((IFileEditorInput) input).getFile() : null; if (original != null) { dialog.setOriginalFile(original); } dialog.create(); IDocumentProvider provider = getDocumentProvider(); if (provider == null) { // editor has been programmatically closed while the dialog was open return; } if (provider.isDeleted(input) && original != null) { String message = NLS.bind(Messages.SqlmodelDiagramEditor_SavingDeletedFile, original.getName()); dialog.setErrorMessage(null); dialog.setMessage(message, IMessageProvider.WARNING); } if (dialog.open() == Window.CANCEL) { if (progressMonitor != null) { progressMonitor.setCanceled(true); } return; } IPath filePath = dialog.getResult(); if (filePath == null) { if (progressMonitor != null) { progressMonitor.setCanceled(true); } return; } IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); IFile file = workspaceRoot.getFile(filePath); final IEditorInput newInput = new FileEditorInput(file); // Check if the editor is already open IEditorMatchingStrategy matchingStrategy = getEditorDescriptor().getEditorMatchingStrategy(); IEditorReference[] editorRefs = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); for (int i = 0; i < editorRefs.length; i++) { if (matchingStrategy.matches(editorRefs[i], newInput)) { MessageDialog.openWarning( shell, Messages.SqlmodelDiagramEditor_SaveAsErrorTitle, Messages.SqlmodelDiagramEditor_SaveAsErrorMessage); return; } } boolean success = false; try { provider.aboutToChange(newInput); getDocumentProvider(newInput) .saveDocument( progressMonitor, newInput, getDocumentProvider().getDocument(getEditorInput()), true); success = true; } catch (CoreException x) { IStatus status = x.getStatus(); if (status == null || status.getSeverity() != IStatus.CANCEL) { ErrorDialog.openError( shell, Messages.SqlmodelDiagramEditor_SaveErrorTitle, Messages.SqlmodelDiagramEditor_SaveErrorMessage, x.getStatus()); } } finally { provider.changed(newInput); if (success) { setInput(newInput); } } if (progressMonitor != null) { progressMonitor.setCanceled(!success); } }
@Override public void run() { SaveAsBusinessModelWizard businessModelWizard = new SaveAsBusinessModelWizard(editorPart); WizardDialog dlg = new WizardDialog(Display.getCurrent().getActiveShell(), businessModelWizard); if (dlg.open() == Window.OK) { try { BusinessProcessItem businessProcessItem = businessModelWizard.getBusinessProcessItem(); IRepositoryNode repositoryNode = RepositoryNodeUtilities.getRepositoryNode( businessProcessItem.getProperty().getId(), false); // because step1, the fresh will unload the resource(EMF), so, assign a new one... businessProcessItem = (BusinessProcessItem) repositoryNode.getObject().getProperty().getItem(); IWorkbenchPage page = getActivePage(); DiagramResourceManager diagramResourceManager = new DiagramResourceManager(page, new NullProgressMonitor()); IFile file = businessModelWizard.getTempFile(); // Set readonly to false since created job will always be editable. RepositoryEditorInput newBusinessModelEditorInput = new RepositoryEditorInput(file, businessProcessItem); newBusinessModelEditorInput.setRepositoryNode(repositoryNode); // here really do the normal save as function IDocumentProvider provider = ((BusinessDiagramEditor) this.editorPart).getDocumentProvider(); provider.aboutToChange(newBusinessModelEditorInput); provider.saveDocument( null, newBusinessModelEditorInput, provider.getDocument(this.editorPart.getEditorInput()), true); provider.changed(newBusinessModelEditorInput); // copy back from the *.business_diagram file to *.item file. // @see:BusinessDiagramEditor.doSave(IProgressMonitor progressMonitor) diagramResourceManager.updateFromResource( businessProcessItem, newBusinessModelEditorInput.getFile()); // notice: here, must save it, save the item to disk, otherwise close the editor // without any modification, there won't save the // model again, so, will lost the graphic when reopen it. ProxyRepositoryFactory.getInstance().save(businessProcessItem); // close the old editor page.closeEditor(this.editorPart, false); // open the new editor, because at the same time, there will update the // jobSetting/componentSetting view IEditorPart openEditor = page.openEditor(newBusinessModelEditorInput, BusinessDiagramEditor.ID, true); } catch (Exception e) { MessageDialog.openError( Display.getCurrent().getActiveShell(), "Error", "Business model could not be saved" + " : " + e.getMessage()); ExceptionHandler.process(e); } } }