/******************************************************************************* * Copyright (c) 2009 Remy Chi Jian Suen and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Remy Chi Jian Suen <remy.suen@gmail.com> - initial API and implementation ******************************************************************************/ package org.eclipse.ecf.internal.sync.ui.resources; import java.util.ArrayList; import java.util.List; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.util.ECFException; import org.eclipse.ecf.datashare.IChannelContainerAdapter; import org.eclipse.ecf.docshare2.DocShare; import org.eclipse.ecf.internal.sync.resources.core.FileChangeMessage; import org.eclipse.ecf.internal.sync.resources.core.ResourcesShare; import org.eclipse.ecf.internal.sync.resources.core.StartMessage; import org.eclipse.ecf.sync.IModelChange; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.events.IHyperlinkListener; public class WorkbenchAwareResourcesShare extends ResourcesShare { WorkbenchAwareResourcesShare(ID containerID, IChannelContainerAdapter adapter) throws ECFException { super(containerID, adapter); } protected void handleStartMessage(final StartMessage msg) { final Display display = SyncResourcesUI.getDefault().getDisplay(); display.asyncExec(new Runnable() { public void run() { final IWorkbenchWindow window = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); NotificationDialog dialog = new NotificationDialog(window .getShell(), msg.getFromId(), msg.getProjectName(), new IHyperlinkListener() { public void linkExited(HyperlinkEvent e) { } public void linkEntered(HyperlinkEvent e) { } public void linkActivated(HyperlinkEvent e) { boolean b = MessageDialog.openConfirm(window .getShell(), null, "Are you sure you wish to share the '" + msg.getProjectName() + "' project with " + msg.getFromId() + "?"); if (b) { WorkbenchAwareResourcesShare.this .sendResponse(true, msg .getProjectName()); WorkbenchAwareResourcesShare.super .handleStartMessage(msg); } else { WorkbenchAwareResourcesShare.this .sendResponse(false, msg .getProjectName()); } } }); dialog.open(); } }); } protected void lock(IModelChange[] remoteChanges) { DocShare docShare = SyncResourcesUI.getDocShare(getContainerID()); if (docShare != null) { List paths = new ArrayList(remoteChanges.length); for (int i = 0; i < remoteChanges.length; i++) { if (remoteChanges[i] instanceof FileChangeMessage) { String path = ((FileChangeMessage) remoteChanges[i]).getPath(); paths.add(path); } } docShare.lock((String[]) paths.toArray(new String[paths.size()])); } super.lock(remoteChanges); } protected void unlock(IModelChange[] remoteChanges) { super.unlock(remoteChanges); DocShare docShare = SyncResourcesUI.getDocShare(getContainerID()); if (docShare != null) { List paths = new ArrayList(remoteChanges.length); for (int i = 0; i < remoteChanges.length; i++) { if (remoteChanges[i] instanceof FileChangeMessage) { String path = ((FileChangeMessage) remoteChanges[i]).getPath(); paths.add(path); } } docShare.unlock((String[]) paths.toArray(new String[paths.size()])); } } }