Package org.eclipse.ecf.internal.sync.ui.resources

Source Code of org.eclipse.ecf.internal.sync.ui.resources.WorkbenchAwareResourcesShare

/*******************************************************************************
* 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()]));
    }
  }

}
TOP

Related Classes of org.eclipse.ecf.internal.sync.ui.resources.WorkbenchAwareResourcesShare

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.