// ============================================================================ // // Copyright (C) 2006-2016 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.mdm.repository.ui.wizards; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.commons.runtime.model.repository.ERepositoryStatus; import org.talend.commons.utils.VersionUtils; import org.talend.core.GlobalServiceRegister; import org.talend.core.model.properties.Item; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.designer.core.ui.wizards.OpenExistVersionProcessWizard; import org.talend.mdm.repository.core.IRepositoryNodeActionProvider; import org.talend.mdm.repository.core.IRepositoryNodeConfiguration; import org.talend.mdm.repository.core.service.IMDMSVNProviderService; import org.talend.mdm.repository.extension.RepositoryNodeConfigurationManager; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.ui.editors.IRepositoryViewEditorInput; import org.talend.mdm.repository.ui.navigator.MDMRepositoryView; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.RepositoryNode; import com.amalto.workbench.exadapter.ExAdapterManager; /** * DOC achen class global comment. Detailled comment */ public class MDMOpenExistVersionProcessWizard extends OpenExistVersionProcessWizard { static Logger log = Logger.getLogger(MDMOpenExistVersionProcessWizard.class); IRepositoryViewObject viewObject; private IMDMOpenExistVersionProcessWizardExAdapter adapter; /** * DOC achen MDMOpenExistVersionProcessWizard constructor comment. * * @param processObject */ public MDMOpenExistVersionProcessWizard(IRepositoryViewObject processObject) { super(processObject); ERepositoryStatus status = processObject.getRepositoryStatus(); if (status.equals(ERepositoryStatus.LOCK_BY_USER) && RepositoryResourceUtil.isOpenedItemInEditor(processObject)) { alreadyEditedByUser = true; } this.viewObject = processObject; adapter = ExAdapterManager.getAdapter(this, IMDMOpenExistVersionProcessWizardExAdapter.class); } @Override public void addPages() { mainPage = new MDMOpenExistVersionProcessPage(alreadyEditedByUser, viewObject); addPage(mainPage); setWindowTitle(Messages.MDMOpenExistVersionProcessWizard_NewObject); } @Override protected void openAnotherVersion(final RepositoryNode node, final boolean readonly) { Display.getCurrent().asyncExec(new Runnable() { public void run() { final IRepositoryViewObject viewObj = node.getObject(); Item item = viewObj.getProperty().getItem(); boolean latestVersion = isLatestVersion(viewObj); IRepositoryNodeConfiguration configuration = RepositoryNodeConfigurationManager.getConfiguration(item); if (configuration != null) { IRepositoryNodeActionProvider actionProvider = configuration.getActionProvider(); if (actionProvider != null) { final IRepositoryViewEditorInput editorInput = actionProvider.getOpenEditorInput(viewObj); editorInput.setReadOnly(!latestVersion); if (editorInput != null) { boolean canOpen = true; if (adapter != null) { canOpen = adapter.canOpen(viewObj, getOriginVersion()); } if (canOpen) { openEditor(!latestVersion, viewObj, editorInput); } else { try { CoreRuntimePlugin.getInstance().getProxyRepositoryFactory().unlock(viewObj); } catch (PersistenceException e) { log.error(e.getMessage(), e); } catch (LoginException e) { log.error(e.getMessage(), e); } MessageDialog.openInformation(getShell(), Messages.Information, Messages.MDMOpenExistVersionProcessWizard_NotReadToOpen); } } } } } private boolean isLatestVersion(final IRepositoryViewObject viewObj) { String selectedVersion = viewObj.getProperty().getVersion(); int compare = VersionUtils.compareTo(selectedVersion, getOriginVersion()); return compare >= 0; } }); } protected void openEditor(boolean readonly, IRepositoryViewObject viewObj, IRepositoryViewEditorInput editorInput) { IWorkbenchPage page = MDMRepositoryView.show().getCommonViewer().getCommonNavigator().getSite().getWorkbenchWindow() .getActivePage(); try { updateEditorInputVersionInfo(editorInput, viewObj); page.openEditor(editorInput, editorInput.getEditorId(), readonly); } catch (PartInitException e) { log.error(e.getMessage(), e); } } private void updateEditorInputVersionInfo(IRepositoryViewEditorInput editorInput, IRepositoryViewObject viewObj) { String version = viewObj.getVersion(); try { IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory(); if (!factory.isLocalConnectionProvider()) { IMDMSVNProviderService service = (IMDMSVNProviderService) GlobalServiceRegister.getDefault().getService( IMDMSVNProviderService.class); if (service != null) { if (service.isProjectInSvnMode()) { String revisionNumStr = service.getCurrentSVNRevision(viewObj); if (revisionNumStr != null) { revisionNumStr = ".r" + revisionNumStr; //$NON-NLS-1$ version += revisionNumStr; } } } } } catch (PersistenceException e) { log.error(e.getMessage(), e); } editorInput.setVersion(version); } public IRepositoryViewObject getViewObj() { return this.viewObject; } @Override protected boolean refreshNewJob() { beforeRefresh(); IFolder folder = RepositoryResourceUtil.getFolder(getViewObj()); if (folder != null && folder.exists()) { try { for (IResource r : folder.members()) { if (r instanceof IFile) { if (r.getFileExtension().equalsIgnoreCase("bak")) {//$NON-NLS-1$ IFile file = (IFile) r; if (file.exists()) { file.delete(true, null); } } } } } catch (CoreException e) { log.error(e.getMessage(), e); } } boolean refreshNewJob = super.refreshNewJob(); return refreshNewJob; } protected void beforeRefresh() { IRepositoryNode repositoryNode = viewObject.getRepositoryNode(); String version = viewObject.getProperty().getVersion(); viewObject = RepositoryResourceUtil.assertViewObject(getViewObj()); viewObject.getProperty().setVersion(version); processObject = viewObject; RepositoryNode node = new RepositoryNode(viewObject, repositoryNode.getParent(), repositoryNode.getType()); processObject.setRepositoryNode(node); viewObject.setRepositoryNode(node); } /* * (non-Javadoc) * * @see org.talend.designer.core.ui.wizards.OpenExistVersionProcessWizard#performFinish() */ @Override public boolean performFinish() { if (adapter != null) { return adapter.performFinish(mainPage.isCreateNewVersionJob()); } else { return super.performFinish(); } } public String getNewVersion() { return mainPage.getNewVersion(); } public boolean callParentPerformFinish() { return super.performFinish(); } public void openAnotherVersion() { boolean locked = processObject.getRepositoryStatus().equals(ERepositoryStatus.LOCK_BY_USER); openAnotherVersion((RepositoryNode) processObject.getRepositoryNode(), !locked); } }