| /******************************************************************************* |
| * Copyright (c) 2008 Versant Corp. |
| * 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: |
| * Markus Kuppe (mkuppe <at> versant <dot> com) - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ecf.internal.remoteservices.ui.property; |
| |
| import org.eclipse.core.expressions.PropertyTester; |
| import org.eclipse.ecf.core.IContainer; |
| import org.eclipse.ecf.core.IContainerManager; |
| import org.eclipse.ecf.core.identity.ID; |
| import org.eclipse.ecf.core.identity.IDCreateException; |
| import org.eclipse.ecf.core.identity.IDFactory; |
| import org.eclipse.ecf.discovery.IServiceInfo; |
| import org.eclipse.ecf.discovery.ui.DiscoveryPropertyTesterUtil; |
| import org.eclipse.ecf.internal.remoteservices.ui.Activator; |
| import org.eclipse.ecf.remoteservice.Constants; |
| |
| @Deprecated |
| public class ConnectedTester extends PropertyTester { |
| |
| public ConnectedTester() { |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, |
| * java.lang.String, java.lang.Object[], java.lang.Object) |
| */ |
| public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { |
| // consumers expect connected or disconnected |
| if (!(expectedValue instanceof Boolean)) { |
| return false; |
| } |
| boolean expected = ((Boolean) expectedValue).booleanValue(); |
| |
| boolean hasContainer = hasContainer(receiver); |
| |
| if (expected && hasContainer) { |
| return true; |
| } else if (expected && !hasContainer) { |
| return false; |
| } else if (!expected && hasContainer) { |
| return false; |
| } else { |
| return true; |
| } |
| } |
| |
| private boolean hasContainer(Object receiver) { |
| // get the container instance |
| IServiceInfo serviceInfo = DiscoveryPropertyTesterUtil.getIServiceInfoReceiver(receiver); |
| final String connectNamespace = getConnectNamespace(serviceInfo); |
| final String connectId = getConnectID(serviceInfo); |
| try { |
| final ID createConnectId = IDFactory.getDefault().createID(connectNamespace, connectId); |
| return (getContainerByConnectID(createConnectId) != null); |
| } catch (IDCreateException e) { |
| // Trace.trace(...); |
| return false; |
| } |
| } |
| |
| /** |
| * @param connectID The conected ID for which an IContainer is to be returned |
| * @return a IContainer instance of null |
| */ |
| // TODO push this functionality down into the ContainerManager |
| private IContainer getContainerByConnectID(ID connectID) { |
| final IContainerManager containerManager = Activator.getDefault().getContainerManager(); |
| final IContainer[] containers = containerManager.getAllContainers(); |
| if (containers == null) { |
| return null; |
| } |
| for (int i = 0; i < containers.length; i++) { |
| ID connectedId = containers[i].getConnectedID(); |
| if (connectedId != null && connectedId.equals(connectID)) { |
| return containers[i]; |
| } |
| } |
| return null; |
| } |
| |
| private String getConnectNamespace(IServiceInfo serviceInfo) { |
| return serviceInfo.getServiceProperties().getPropertyString(Constants.SERVICE_CONNECT_ID_NAMESPACE); |
| } |
| |
| private String getConnectID(IServiceInfo serviceInfo) { |
| return serviceInfo.getServiceProperties().getPropertyString(Constants.SERVICE_CONNECT_ID); |
| } |
| } |