From 4d99f3a4aaa91b493318250b285fe5519a886da1 Mon Sep 17 00:00:00 2001 From: Javier Montalvo Orus Date: Thu, 10 May 2007 16:54:27 +0000 Subject: [PATCH] improved service discovery wizard page and added multicast addresses in protocol extension point --- .../schema/discoveryProtocol.exsd | 7 ++ .../discovery/protocol/ProtocolFactory.java | 43 ++++++++++ .../plugin.xml | 5 +- .../ServiceDiscoveryWizardMainPage.java | 83 ++++++++++++++++++- .../discovery/wizard/messages.properties | 1 + 5 files changed, 134 insertions(+), 5 deletions(-) diff --git a/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd b/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd index 476c62d77d3..10011af150f 100644 --- a/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd +++ b/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd @@ -61,6 +61,13 @@ + + + + Allows specifying multicast addresses to be used with different transports in the format "transportName1#address1;transportName2#address2" + + + diff --git a/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java b/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java index 31a817f1541..e6b1dc64b2b 100644 --- a/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java +++ b/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java @@ -112,5 +112,48 @@ public class ProtocolFactory { } return protocol; } + + /** + * Gets the multicast address given a protocol name and a transport name or returns null if this information is not available + * + * @param protocolName + * Name of the protocol + * @param transportName + * Name of the transport + * @return + * String representing the multicast address of the given protocol and transport or null if not available + * @throws CoreException + * + * @see IProtocol + */ + public static String getMulticastAddress(String protocolName, String transportName) throws CoreException { + + String multiCastAddress = null; + + IConfigurationElement[] ce = ep.getConfigurationElements(); + for (int i = 0; i < ce.length; i++) { + String name = ce[i].getAttribute("name"); //$NON-NLS-1$ + if(name!=null) + if(name.equalsIgnoreCase(protocolName)) + { + String multicastAddresses = ce[i].getAttribute("multicast"); //$NON-NLS-1$ + if(multicastAddresses==null) + break; + + String[] pairs = multicastAddresses.split(";"); //$NON-NLS-1$ + for (int j = 0; j < pairs.length; j++) { + String[] pair = pairs[j].split("#"); //$NON-NLS-1$ + if(pair[0].equals(transportName)) + { + multiCastAddress = pair[1]; + break; + } + } + + + } + } + return multiCastAddress; + } } diff --git a/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml b/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml index a02e3966657..acf66e48b93 100644 --- a/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml +++ b/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml @@ -14,7 +14,8 @@ Contributors: + class="org.eclipse.tm.internal.discovery.protocol.dnssd.DNSSDProtocol" + multicast="UDP#224.0.0.251" + name="DNS-SD"/> diff --git a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java index 546699a4483..fe3ec05c878 100644 --- a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java +++ b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java @@ -17,7 +17,9 @@ import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; @@ -46,6 +48,9 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage { // widgets private Combo queryCombo, transportCombo, protocolCombo; private Text addressText, timeOutText; + private Button multicastButton; + + private String tempAddress; /** * Wizard main page constructor @@ -62,12 +67,22 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage { */ public void createControl(Composite parent) { - FillLayout layout = new FillLayout(); - layout.type = SWT.VERTICAL; Composite comp = new Composite(parent,SWT.NULL); + + GridLayout layout = new GridLayout(); + layout.numColumns = 1; comp.setLayout(layout); + //GridData + GridData data = new GridData(); + data.horizontalAlignment = GridData.FILL; + data.grabExcessHorizontalSpace = true; + data.verticalAlignment = SWT.BEGINNING; + data.grabExcessVerticalSpace = false; + + comp.setLayoutData(data); + new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.AddressLabel")); //$NON-NLS-1$ addressText = new Text(comp, SWT.BORDER | SWT.SINGLE | SWT.WRAP); @@ -88,12 +103,55 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage { } }); + addressText.setLayoutData(data); + + + Composite comp2 = new Composite(comp,SWT.NULL); + GridLayout layout2 = new GridLayout(); + layout2.numColumns = 2; + comp2.setLayout(layout2); + + multicastButton = new Button(comp2,SWT.CHECK); + + multicastButton.addSelectionListener(new SelectionListener(){ + + public void widgetDefaultSelected(SelectionEvent e) {} + + public void widgetSelected(SelectionEvent e) { + + Object src = e.getSource(); + if(((Button)src).getSelection()) + { + String multicastAddress = null; + + try { + multicastAddress = ProtocolFactory.getMulticastAddress(protocolCombo.getText(), transportCombo.getText()); + } catch (CoreException e1) {} + + if(multicastAddress!=null) + { + tempAddress = addressText.getText(); + addressText.setText(multicastAddress); + } + } + else + { + addressText.setText(tempAddress); + } + } + }); + + new Label(comp2,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.MuticastAddressLabel0")); //$NON-NLS-1$ + + new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.TransportLabel")); //$NON-NLS-1$ transportCombo = new Combo(comp, SWT.READ_ONLY); transportCombo.setItems(TransportFactory.getTransportList()); transportCombo.select(0); + transportCombo.setLayoutData(data); + new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.ProtocolLabel")); //$NON-NLS-1$ protocolCombo = new Combo(comp, SWT.READ_ONLY); @@ -115,9 +173,25 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage { queryCombo.removeAll(); queryCombo.setItems(queries); queryCombo.select(0); + + if(multicastButton.getSelection()) + { + String multicastAddress = null; + + try { + multicastAddress = ProtocolFactory.getMulticastAddress(protocolCombo.getText(), transportCombo.getText()); + } catch (CoreException e1) {} + + if(multicastAddress!=null) + { + tempAddress = addressText.getText(); + addressText.setText(multicastAddress); + } + } } }); + protocolCombo.setLayoutData(data); new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.DiscoveryQueryLabel")); //$NON-NLS-1$ @@ -131,6 +205,7 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage { } queryCombo.select(0); + queryCombo.setLayoutData(data); new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.TimeOutLabel")); //$NON-NLS-1$ @@ -138,6 +213,8 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage { timeOutText.setText(Messages.getString("ServiceDiscoveryWizardMainPage.TimeOutValue")); //$NON-NLS-1$ timeOutText.redraw(); + timeOutText.setLayoutData(data); + setPageComplete(false); setControl(comp); diff --git a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties index 62313ffcb99..bc79f987d8b 100644 --- a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties +++ b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties @@ -17,6 +17,7 @@ ServiceDiscoveryWizardMainPage.TimeOutLabel=Timeout (ms): ServiceDiscoveryWizardMainPage.TimeOutValue=500 ServiceDiscoveryWizardDisplayPage.ProtocolErrorTitle=Error ServiceDiscoveryWizardMainPage.WizardPageDescription=Discover available services in the target device. +ServiceDiscoveryWizardMainPage.MuticastAddressLabel0=multicast address ServiceDiscoveryWizardDisplayPage.ProtocolErrorMessage=Error loading protocol ServiceDiscoveryWizardDisplayPage.TransportAddressNotFoundTitle=Error ServiceDiscoveryWizardDisplayPage.TransportAddressNotFoundMessage=Error resolving address