/**************************************************************************** * Copyright (c) 2007, 2009 Composent, Inc. 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: * Composent, Inc. - initial API and implementation *****************************************************************************/ package org.eclipse.team.internal.ecf.ui; import org.eclipse.core.runtime.*; import org.eclipse.ecf.core.*; import org.eclipse.ecf.core.events.*; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.start.IECFStart; import org.eclipse.ecf.core.util.ECFException; import org.eclipse.ecf.datashare.IChannelContainerAdapter; import org.eclipse.team.internal.ecf.core.TeamSynchronization; public class ECFStart implements IECFStart { IContainerListener containerListener = new IContainerListener() { /* * (non-Javadoc) * * @see * org.eclipse.ecf.core.IContainerListener#handleEvent(org.eclipse.ecf * .core.events.IContainerEvent) */ public void handleEvent(IContainerEvent event) { final IContainerManager containerManager = (IContainerManager) ContainerFactory.getDefault(); if (containerManager == null) return; IContainer container = containerManager.getContainer(event.getLocalContainerID()); if (container == null) return; if (event instanceof IContainerConnectedEvent || event instanceof IContainerDisconnectedEvent) { // connected IChannelContainerAdapter cca = (IChannelContainerAdapter) container.getAdapter(IChannelContainerAdapter.class); if (cca == null) return; ID containerID = container.getID(); if (event instanceof IContainerConnectedEvent) { try { if (!TeamSynchronization.contains(containerID)) { TeamSynchronization.put(containerID, new WorkbenchAwareRemoteShare(cca)); } } catch (ECFException e) { TeamSynchronization.log("RemoteShare could not be added or created", e); //$NON-NLS-1$ } } else if (event instanceof IContainerDisconnectedEvent) { // disconnected TeamSynchronization.removeShare(containerID); } } else if (event instanceof IContainerDisposeEvent) { containerManager.removeListener(containerManagerListener); container.removeListener(containerListener); } } }; IContainerManagerListener containerManagerListener = new IContainerManagerListener() { /* * (non-Javadoc) * * @see * org.eclipse.ecf.core.IContainerManagerListener#containerAdded(org * .eclipse.ecf.core.IContainer) */ public void containerAdded(IContainer container) { IChannelContainerAdapter cca = (IChannelContainerAdapter) container.getAdapter(IChannelContainerAdapter.class); if (cca == null) return; container.addListener(containerListener); } /* * (non-Javadoc) * * @see * org.eclipse.ecf.core.IContainerManagerListener#containerRemoved(org * .eclipse.ecf.core.IContainer) */ public void containerRemoved(IContainer container) { container.removeListener(containerListener); } }; /* * (non-Javadoc) * * @seeorg.eclipse.ecf.core.start.IECFStart#run(org.eclipse.core.runtime. * IProgressMonitor) */ public IStatus run(IProgressMonitor monitor) { final IContainerManager containerManager = (IContainerManager) ContainerFactory.getDefault(); containerManager.addListener(containerManagerListener); return Status.OK_STATUS; } }