diff options
| author | slewis | 2005-06-25 19:37:29 +0000 |
|---|---|---|
| committer | slewis | 2005-06-25 19:37:29 +0000 |
| commit | be30ac508bd71e4afaa3a4b269556ceb9e78b29f (patch) | |
| tree | 17a3e8600494430d6f967915bd647ab07e7edcfa | |
| parent | 960c9c70dd8114481a58abfa18a35c7c74c3529e (diff) | |
| download | org.eclipse.ecf-be30ac508bd71e4afaa3a4b269556ceb9e78b29f.tar.gz org.eclipse.ecf-be30ac508bd71e4afaa3a4b269556ceb9e78b29f.tar.xz org.eclipse.ecf-be30ac508bd71e4afaa3a4b269556ceb9e78b29f.zip | |
Cleanup of DiscoveryStartup and ServerStartup. Improvements to discovery user interface
7 files changed, 184 insertions, 141 deletions
diff --git a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/Client.java b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/Client.java index 165e80eaf..0c6278cd3 100644 --- a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/Client.java +++ b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/Client.java @@ -41,13 +41,8 @@ import org.eclipse.ecf.core.events.IContainerEvent; import org.eclipse.ecf.core.events.ISharedObjectContainerDepartedEvent; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.identity.IDFactory; -import org.eclipse.ecf.core.identity.ServiceID; import org.eclipse.ecf.core.security.IJoinContext; import org.eclipse.ecf.core.security.ObjectCallback; -import org.eclipse.ecf.discovery.IDiscoveryContainer; -import org.eclipse.ecf.discovery.IServiceEvent; -import org.eclipse.ecf.discovery.IServiceListener; -import org.eclipse.ecf.discovery.IServiceTypeListener; import org.eclipse.ecf.example.collab.share.EclipseCollabSharedObject; import org.eclipse.ecf.example.collab.share.SharedObjectEventListener; import org.eclipse.ecf.example.collab.share.TreeItem; @@ -64,7 +59,6 @@ import org.eclipse.ecf.presence.ISubscribeListener; import org.eclipse.ecf.presence.impl.Presence; import org.eclipse.ecf.ui.dialogs.AddBuddyDialog; import org.eclipse.ecf.ui.dialogs.ReceiveAuthorizeRequestDialog; -import org.eclipse.ecf.ui.views.DiscoveryView; import org.eclipse.ecf.ui.views.ILocalInputHandler; import org.eclipse.ecf.ui.views.RosterView; import org.eclipse.jface.window.Window; @@ -329,10 +323,7 @@ public class Client { // Check for IPresenceContainer....if it is, setup IPresenceContainer pc = (IPresenceContainer) client.getAdapter(IPresenceContainer.class); if (pc != null) setupPresenceContainer(client,pc,groupID,username); - // Check for discoverycontainer...if it is, setup - IDiscoveryContainer dc = (IDiscoveryContainer) client.getAdapter(IDiscoveryContainer.class); - if (dc != null) setupDiscoveryContainer(dc,client); - + try { client.joinGroup(groupID, getJoinContext(username,data)); } catch (SharedObjectContainerJoinException e) { @@ -543,46 +534,6 @@ public class Client { } }); } - - protected DiscoveryView discoveryView = null; - - protected void setupDiscoveryContainer(final IDiscoveryContainer dc, final ISharedObjectContainer socontainer) { - Display.getDefault().syncExec(new Runnable() { - public void run() { - try { - IWorkbenchWindow ww = PlatformUI.getWorkbench() - .getActiveWorkbenchWindow(); - IWorkbenchPage wp = ww.getActivePage(); - IViewPart view = wp.showView("org.eclipse.ecf.ui.view.discoveryview"); - discoveryView = (DiscoveryView) view; - discoveryView.setDiscoveryContainer(dc,socontainer); - } catch (Exception e) { - IStatus status = new Status(IStatus.ERROR,ClientPlugin.PLUGIN_ID,IStatus.OK,"Exception showing presence view",e); - ClientPlugin.getDefault().getLog().log(status); - } - } - }); - if (discoveryView != null) { - dc.addServiceTypeListener(new IServiceTypeListener() { - public void serviceTypeAdded(IServiceEvent event) { - ServiceID svcID = event.getServiceInfo().getServiceID(); - discoveryView.addServiceTypeInfo(svcID.getServiceType()); - dc.addServiceListener(event.getServiceInfo().getServiceID(), new IServiceListener() { - public void serviceAdded(IServiceEvent evt) { - discoveryView.addServiceInfo(evt.getServiceInfo().getServiceID()); - dc.requestServiceInfo(evt.getServiceInfo().getServiceID(),3000); - } - public void serviceRemoved(IServiceEvent evt) { - discoveryView.removeServiceInfo(evt.getServiceInfo()); - } - public void serviceResolved(IServiceEvent evt) { - discoveryView.addServiceInfo(evt.getServiceInfo()); - }}); - dc.registerServiceType(svcID); - }}); - } - } - public synchronized void disposeClient(IResource proj, ClientEntry entry) { entry.dispose(); removeClientEntry(proj,entry.getType()); diff --git a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ClientPlugin.java b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ClientPlugin.java index f27f043f9..8d8fa8eef 100644 --- a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ClientPlugin.java +++ b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ClientPlugin.java @@ -88,10 +88,38 @@ public class ClientPlugin extends AbstractUIPlugin implements public void start(BundleContext context) throws Exception { super.start(context); setPreferenceDefaults(); - discoveryStartup = new DiscoveryStartup(); - serverStartup = new ServerStartup(); + initDiscovery(); + initServer(); } + protected void initDiscovery() { + if (discoveryStartup == null) { + discoveryStartup = new DiscoveryStartup(); + } + } + + protected void initServer() { + if (serverStartup == null) { + serverStartup = new ServerStartup(); + } + } + + protected boolean isDiscoveryActive() { + if (discoveryStartup == null) return false; + else return true; + } + protected void disposeDiscovery() { + if (discoveryStartup != null) { + discoveryStartup.dispose(); + discoveryStartup = null; + } + } + protected void disposeServer() { + if (serverStartup != null) { + serverStartup.dispose(); + serverStartup = null; + } + } /** * This method is called when the plug-in is stopped */ @@ -99,14 +127,8 @@ public class ClientPlugin extends AbstractUIPlugin implements super.stop(context); plugin = null; resourceBundle = null; - if (serverStartup != null) { - serverStartup.dispose(); - serverStartup = null; - } - if (discoveryStartup != null) { - discoveryStartup.dispose(); - discoveryStartup = null; - } + disposeServer(); + disposeDiscovery(); } public FontRegistry getFontRegistry() { diff --git a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/DiscoveryStartup.java b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/DiscoveryStartup.java index ee305227c..78b5e1331 100644 --- a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/DiscoveryStartup.java +++ b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/DiscoveryStartup.java @@ -1,8 +1,8 @@ package org.eclipse.ecf.example.collab; +import java.io.IOException; import java.net.InetAddress; import java.net.URI; -import java.util.Hashtable; import java.util.Map; import java.util.Properties; @@ -22,7 +22,7 @@ import org.eclipse.ecf.discovery.IServiceTypeListener; import org.eclipse.ecf.discovery.ServiceInfo; import org.eclipse.ecf.example.collab.actions.ClientConnectAction; import org.eclipse.ecf.ui.views.DiscoveryView; -import org.eclipse.ecf.ui.views.IDiscoveryControlListener; +import org.eclipse.ecf.ui.views.IDiscoveryController; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; @@ -51,45 +51,48 @@ public class DiscoveryStartup { static String serviceTypes[] = new String[] { TCPSERVER_DISCOVERY_TYPE - //, - //"_http._tcp.local." }; - - public static IDiscoveryContainer getDefault() { - return discovery; - } - public void showTypeDetails(boolean val) { - if (discoveryView != null) { - discoveryView.setShowTypeDetails(val); - } - } public DiscoveryStartup() { - if (ClientPlugin.getDefault().getPreferenceStore().getBoolean(ClientPlugin.PREF_REGISTER_SERVER)) { - setupDiscovery(); - } + setupDiscovery(); } public void dispose() { - unregisterServerType(); + if (socontainer != null) { + socontainer.dispose(1000); + socontainer = null; + } + discovery = null; } + protected void setupDiscovery() { - try { - socontainer = SharedObjectContainerFactory - .makeSharedObjectContainer(DISCOVERY_CONTAINER); - discovery = (IDiscoveryContainer) socontainer - .getAdapter(IDiscoveryContainer.class); - if (discovery != null) { - setupDiscoveryContainer(discovery); - socontainer.joinGroup(null,null); - registerServiceTypes(); - } - else { - ClientPlugin.log("No discovery container available"); + if (discovery == null && ClientPlugin.getDefault().getPreferenceStore().getBoolean(ClientPlugin.PREF_REGISTER_SERVER)) { + try { + socontainer = SharedObjectContainerFactory + .makeSharedObjectContainer(DISCOVERY_CONTAINER); + discovery = (IDiscoveryContainer) socontainer + .getAdapter(IDiscoveryContainer.class); + if (discovery != null) { + setupDiscoveryContainer(discovery); + socontainer.joinGroup(null,null); + //registerServiceTypes(); + } + else { + if (socontainer != null) { + socontainer.dispose(1000); + socontainer = null; + } + discovery = null; + ClientPlugin.log("No discovery container available"); + } + } catch (Exception e) { + if (socontainer != null) { + socontainer.dispose(1000); + socontainer = null; + } + discovery = null; + ClientPlugin.log("Exception creating discovery container",e); } - } catch (Exception e) { - ClientPlugin.log("Exception creating discovery container",e); } - } protected void connectToServiceFromInfo(IServiceInfo svcInfo) { @@ -126,19 +129,32 @@ public class DiscoveryStartup { IWorkbenchPage wp = ww.getActivePage(); IViewPart view = wp.showView("org.eclipse.ecf.ui.view.discoveryview"); discoveryView = (DiscoveryView) view; - discoveryView.setDiscoveryContainer(dc,socontainer); discoveryView.setShowTypeDetails(false); - discoveryView.setServiceConnectListener(new IDiscoveryControlListener() { + discoveryView.setDiscoveryController(new IDiscoveryController() { public void connectToService(IServiceInfo service) { connectToServiceFromInfo(service); } - public void setupDiscoveryContainer(DiscoveryView view) { - System.out.println("setupDiscoveryContainer"); + public void setupDiscoveryContainer(DiscoveryView dview) { + System.out.println("setupDiscoveryContainer"); + ClientPlugin.getDefault().initDiscovery(); } - public void disposeDiscoveryContainer(DiscoveryView view) { + public void disposeDiscoveryContainer(DiscoveryView dview) { System.out.println("disposeDiscoveryContainer"); + ClientPlugin.getDefault().disposeDiscovery(); + } + + public IDiscoveryContainer getDiscoveryContainer() { + return discovery; + } + + public ISharedObjectContainer getSharedObjectContainer() { + return socontainer; + } + + public String[] getServiceTypes() { + return serviceTypes; } }); } catch (Exception e) { @@ -173,12 +189,9 @@ public class DiscoveryStartup { } } - static Hashtable registeredServices = new Hashtable(); - - public static void registerServer(ID id) { + public static void registerService(URI uri) { if (discovery != null) { try { - URI uri = id.toURI(); String path = uri.getPath(); Properties props = new Properties(); String protocol = uri.getScheme(); @@ -193,10 +206,12 @@ public class DiscoveryStartup { ServiceInfo svcInfo = new ServiceInfo(host, new ServiceID(TCPSERVER_DISCOVERY_TYPE,svcName), port, SVC_DEF_PRIORITY, SVC_DEF_WEIGHT, props); discovery.registerService(svcInfo); - } catch (Exception e) { - ClientPlugin.log("Exception getting URI for ID"+id); + } catch (IOException e) { + ClientPlugin.log("Exception registering service "+uri); } - } + } else { + ClientPlugin.log("Cannot register service "+uri+" because no discovery service is available"); + } } public static void unregisterServer(ISharedObjectContainer container) { diff --git a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ServerStartup.java b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ServerStartup.java index a9dc0bf64..352f168ac 100644 --- a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ServerStartup.java +++ b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ServerStartup.java @@ -1,10 +1,12 @@ package org.eclipse.ecf.example.collab; import java.io.InputStream; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import org.eclipse.ecf.core.ISharedObjectContainer; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.identity.IDFactory; import org.eclipse.ecf.core.identity.IDInstantiationException; @@ -81,8 +83,8 @@ public class ServerStartup { TCPServerSOContainer cont = makeServerContainer(group .getIDForGroup(), serverGroups[j], group.getName(), connect.getTimeout()); - DiscoveryStartup.registerServer(cont.getConfig().getID()); servers.add(cont); + registerServer(cont); ClientPlugin.log("ECF group server created: "+cont.getConfig().getID().getName()); } serverGroups[j].putOnTheAir(); @@ -92,6 +94,9 @@ public class ServerStartup { } + protected void registerServer(ISharedObjectContainer cont) throws URISyntaxException { + DiscoveryStartup.registerService(cont.getConfig().getID().toURI()); + } protected TCPServerSOContainerGroup makeServerGroup(String name, int port) { TCPServerSOContainerGroup group = new TCPServerSOContainerGroup(name, port); diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/DiscoveryView.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/DiscoveryView.java index 7a36722f1..401c892cd 100644 --- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/DiscoveryView.java +++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/DiscoveryView.java @@ -56,21 +56,45 @@ public class DiscoveryView extends ViewPart { private Action disconnectContainerAction; private Action connectContainerAction; - IDiscoveryContainer container = null; + IDiscoveryContainer dcontainer = null; ISharedObjectContainer socontainer = null; - IDiscoveryControlListener serviceConnectListener = null; - + IDiscoveryController controller = null; + String [] controllerServiceTypes = null; + protected boolean showTypeDetails = false; public void setShowTypeDetails(boolean val) { showTypeDetails = val; refreshView(); } - public synchronized void setDiscoveryContainer(IDiscoveryContainer container, ISharedObjectContainer socontainer) { - this.container = container; - this.socontainer = socontainer; + protected boolean isSupportedServiceType(String serviceType) { + if (controllerServiceTypes == null || serviceType == null) return false; + for(int i=0; i < controllerServiceTypes.length; i++) { + if (serviceType.equals(controllerServiceTypes[i])) { + return true; + } + } + return false; + } + public void setDiscoveryController(final IDiscoveryController controller) { + Display.getDefault().syncExec(new Runnable() { + public void run() { + DiscoveryView.this.controller = controller; + if (controller != null) { + setContainers(controller.getDiscoveryContainer(),controller.getSharedObjectContainer(),controller.getServiceTypes()); + } else { + setContainers(null,null,null); + } + } + }); } - public synchronized boolean isConnected() { + + protected void setContainers(IDiscoveryContainer dcontainer, ISharedObjectContainer socont, String [] svcTypes) { + this.dcontainer = dcontainer; + this.socontainer = socont; + this.controllerServiceTypes = svcTypes; + } + protected boolean isConnected() { if (socontainer == null) return false; else { return true; @@ -129,6 +153,9 @@ public class DiscoveryView extends ViewPart { public boolean hasChildren() { return children.size()>0; } + public void clearChildren() { + children.clear(); + } } class ViewContentProvider implements IStructuredContentProvider, @@ -169,6 +196,11 @@ public class DiscoveryView extends ViewPart { root = new TreeParent(null,"Network Services",null); invisibleRoot.addChild(root); } + public void clear() { + if (root != null) { + root.clearChildren(); + } + } public boolean isRoot(TreeParent tp) { if (tp != null && tp == root) return true; else return false; @@ -281,6 +313,7 @@ public class DiscoveryView extends ViewPart { } } } + protected String cleanTypeName(String inputName) { if (showTypeDetails) return inputName; String res = inputName.trim(); @@ -293,6 +326,7 @@ public class DiscoveryView extends ViewPart { } return res; } + class ViewLabelProvider extends LabelProvider { public String getText(Object obj) { @@ -323,8 +357,20 @@ public class DiscoveryView extends ViewPart { public DiscoveryView() { } - public void setServiceConnectListener(IDiscoveryControlListener l) { - this.serviceConnectListener = l; + public void clearAllServices() { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + try { + ViewContentProvider vcp = (ViewContentProvider) viewer + .getContentProvider(); + if (vcp != null) { + vcp.clear(); + refreshView(); + } + } catch (Exception e) { + } + } + }); } public void addServiceTypeInfo(final String type) { Display.getDefault().asyncExec(new Runnable() { @@ -408,8 +454,8 @@ public class DiscoveryView extends ViewPart { if (treeObject instanceof TreeParent) { TreeParent p = (TreeParent) treeObject; final ServiceID targetID = p.getID(); - if (container != null) { - container.requestServiceInfo(targetID,3000); + if (dcontainer != null) { + dcontainer.requestServiceInfo(targetID,3000); } } } @@ -423,8 +469,8 @@ public class DiscoveryView extends ViewPart { TreeObject treeObject = getSelectedTreeObject(); if (treeObject instanceof TreeParent) { TreeParent p = (TreeParent) treeObject; - if (container != null) { - container.registerServiceType(p.getName()); + if (dcontainer != null) { + dcontainer.registerServiceType(p.getName()); } } } @@ -438,7 +484,7 @@ public class DiscoveryView extends ViewPart { TreeObject treeObject = getSelectedTreeObject(); if (treeObject instanceof TreeParent) { TreeParent p = (TreeParent) treeObject; - connectToContainer(p.getServiceInfo()); + connectToService(p.getServiceInfo()); } } }; @@ -451,7 +497,11 @@ public class DiscoveryView extends ViewPart { ViewContentProvider vcp = (ViewContentProvider) viewer.getContentProvider(); if (vcp != null) { if (isConnected()) { - if (serviceConnectListener != null) serviceConnectListener.disposeDiscoveryContainer(DiscoveryView.this); + if (controller != null) { + controller.disposeDiscoveryContainer(DiscoveryView.this); + setContainers(null,null,null); + clearAllServices(); + } } } } @@ -465,7 +515,7 @@ public class DiscoveryView extends ViewPart { ViewContentProvider vcp = (ViewContentProvider) viewer.getContentProvider(); if (vcp != null) { if (!isConnected()) { - if (serviceConnectListener != null) serviceConnectListener.setupDiscoveryContainer(DiscoveryView.this); + if (controller != null) controller.setupDiscoveryContainer(DiscoveryView.this); } } } @@ -480,17 +530,12 @@ public class DiscoveryView extends ViewPart { TreeParent tp = (TreeParent) treeObject; ViewContentProvider vcp = (ViewContentProvider) viewer.getContentProvider(); if (vcp != null && vcp.isRoot(tp)) { - // It's the root so let's setup the appropriate action and - if (isConnected()) { - if (serviceConnectListener != null) manager.add(disconnectContainerAction); - } else { - if (serviceConnectListener != null) manager.add(connectContainerAction); - } + // If it's root, show nothing. } else { ServiceID svcID = tp.getID(); if (svcID != null) { IServiceInfo svcInfo = tp.getServiceInfo(); - if (svcInfo != null && svcInfo.isResolved()) { + if (svcInfo != null && svcInfo.isResolved() && isSupportedServiceType(svcID.getServiceType())) { try { URI uri = svcInfo.getServiceURI(); if (uri != null) { @@ -508,9 +553,9 @@ public class DiscoveryView extends ViewPart { // Other plug-ins can contribute there actions here manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } - protected void connectToContainer(IServiceInfo svcInfo) { - if (serviceConnectListener != null) { - serviceConnectListener.connectToService(svcInfo); + protected void connectToService(IServiceInfo svcInfo) { + if (controller != null) { + controller.connectToService(svcInfo); } else { System.out.println("No service connect listener to connect to "+svcInfo); } @@ -568,7 +613,7 @@ public class DiscoveryView extends ViewPart { }); } public void dispose() { - container = null; + super.dispose(); } /** * Passing the focus request to the viewer's control. diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/IDiscoveryControlListener.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/IDiscoveryControlListener.java deleted file mode 100644 index cdb6cff3b..000000000 --- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/IDiscoveryControlListener.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.eclipse.ecf.ui.views; - -import org.eclipse.ecf.discovery.IServiceInfo; - -public interface IDiscoveryControlListener { - public void connectToService(IServiceInfo service); - public void setupDiscoveryContainer(DiscoveryView view); - public void disposeDiscoveryContainer(DiscoveryView view); -} diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/IDiscoveryController.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/IDiscoveryController.java new file mode 100644 index 000000000..2edc2ce6e --- /dev/null +++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/IDiscoveryController.java @@ -0,0 +1,14 @@ +package org.eclipse.ecf.ui.views; + +import org.eclipse.ecf.core.ISharedObjectContainer; +import org.eclipse.ecf.discovery.IDiscoveryContainer; +import org.eclipse.ecf.discovery.IServiceInfo; + +public interface IDiscoveryController { + public IDiscoveryContainer getDiscoveryContainer(); + public ISharedObjectContainer getSharedObjectContainer(); + public String [] getServiceTypes(); + public void connectToService(IServiceInfo service); + public void setupDiscoveryContainer(DiscoveryView view); + public void disposeDiscoveryContainer(DiscoveryView view); +} |
