/** * DOC smallet Comment method "openRoutineEditor". * * @param item * @throws SystemException * @throws PartInitException */ public IEditorPart openSQLPatternEditor(SQLPatternItem item, boolean readOnly) throws SystemException, PartInitException { if (item == null) { return null; } ICodeGeneratorService service = (ICodeGeneratorService) GlobalServiceRegister.getDefault().getService(ICodeGeneratorService.class); ECodeLanguage lang = ((RepositoryContext) CorePlugin.getContext().getProperty(Context.REPOSITORY_CONTEXT_KEY)) .getProject() .getLanguage(); ISQLPatternSynchronizer routineSynchronizer = service.getSQLPatternSynchronizer(); // check if the related editor is open. IWorkbenchPage page = getActivePage(); IEditorReference[] editorParts = page.getEditorReferences(); String talendEditorID = "org.talend.designer.core.ui.editor.StandAloneTalend" + lang.getCaseName() + "Editor"; //$NON-NLS-1$ //$NON-NLS-2$ boolean found = false; IEditorPart talendEditor = null; for (IEditorReference reference : editorParts) { IEditorPart editor = reference.getEditor(false); if (talendEditorID.equals(editor.getSite().getId())) { // TextEditor talendEditor = (TextEditor) editor; RepositoryEditorInput editorInput = (RepositoryEditorInput) editor.getEditorInput(); Item item2 = editorInput.getItem(); if (item2 != null && item2 instanceof SQLPatternItem && item2.getProperty().getId().equals(item.getProperty().getId())) { if (item2.getProperty().getVersion().equals(item.getProperty().getVersion())) { page.bringToTop(editor); found = true; talendEditor = editor; break; } else { page.closeEditor(editor, false); } } } } if (!found) { routineSynchronizer.syncSQLPattern(item, true); IFile file = routineSynchronizer.getSQLPatternFile(item); RepositoryEditorInput input = new RepositoryEditorInput(file, item); input.setReadOnly(readOnly); talendEditor = page.openEditor(input, talendEditorID); // $NON-NLS-1$ } return talendEditor; }
@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); } } }