// ============================================================================ // // 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.dialogs.lock; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.designer.core.ui.editor.ProcessEditorInput; import org.talend.mdm.repository.ui.editors.IRepositoryViewEditorInput; /** * DOC hbhong class global comment. Detailled comment */ public class LockedDirtyObjectDialog extends LockedObjectDialog { private static Logger log = Logger.getLogger(LockedDirtyObjectDialog.class); /** * DOC hbhong LockedDirtyObjectDialog constructor comment. * * @param parentShell * @param multiObjAlertMsg * @param inputObjs */ public LockedDirtyObjectDialog(Shell parentShell, String multiObjAlertMsg, List<IRepositoryViewObject> inputObjs) { super(parentShell, multiObjAlertMsg, multiObjAlertMsg, inputObjs, false); } /** * DOC hbhong LockedDirtyObjectDialog constructor comment. * * @param parentShell * @param multiObjAlertMsg * @param singleObjAlertMsg * @param inputObjs */ public LockedDirtyObjectDialog(Shell parentShell, String multiObjAlertMsg, String singleObjAlertMsg, List<IRepositoryViewObject> inputObjs) { super(parentShell, multiObjAlertMsg, singleObjAlertMsg, inputObjs, false); } @Override public boolean canContinueRestOperation() { return true; } @Override protected void initInput(List<IRepositoryViewObject> inputObjs) { lockedObjs = new LinkedList<IRepositoryViewObject>(); for (IRepositoryViewObject viewObject : inputObjs) { if (isDirtyMdmViewObj(inputObjs, viewObject)) { lockedObjs.add(viewObject); } } } private Map<String, IEditorPart> editorRefMap; private boolean isDirtyMdmViewObj(List<IRepositoryViewObject> inputObjs, IRepositoryViewObject viewObj) { if (editorRefMap == null) { editorRefMap = new HashMap<String, IEditorPart>(); // collect all ids Set<String> ids = new HashSet<String>(); for (IRepositoryViewObject viewObject : inputObjs) { String id = viewObject.getId(); if (id != null) { ids.add(id); } } // IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); for (IEditorReference ref : activePage.getEditorReferences()) { try { String id = null; IEditorInput editorInput = ref.getEditorInput(); if (editorInput instanceof IRepositoryViewEditorInput) { IRepositoryViewObject viewObject = ((IRepositoryViewEditorInput) editorInput).getViewObject(); if (viewObject != null) { id = viewObject.getId(); } } else if (editorInput instanceof ProcessEditorInput) { id = ((ProcessEditorInput) editorInput).getId(); } if (id != null && ids.contains(id)) { IEditorPart editor = ref.getEditor(false); if (editor != null && editor.isDirty()) { editorRefMap.put(id, editor); } } } catch (PartInitException e) { log.error(e.getMessage(), e); } } } return editorRefMap.containsKey(viewObj.getId()); } public void saveDirtyObjects() { if (editorRefMap != null) { for (IEditorPart editorPart : editorRefMap.values()) { editorPart.doSave(new NullProgressMonitor()); } } } }