Java tutorial
/****************************************************************************** * Copyright (c) 2011-2013, Linagora * * 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: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.services.su.ui; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; 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.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import com.ebmwebsourcing.petals.common.generation.Mep; import com.ebmwebsourcing.petals.common.internal.provisional.swt.DefaultTreeContentProvider; import com.ebmwebsourcing.petals.common.internal.provisional.utils.StringUtils; import com.ebmwebsourcing.petals.services.PetalsServicesPlugin; import com.ebmwebsourcing.petals.services.explorer.SourceManager; import com.ebmwebsourcing.petals.services.explorer.model.EndpointBean; import com.ebmwebsourcing.petals.services.explorer.model.ServiceUnitBean; import com.ebmwebsourcing.petals.services.explorer.sources.EndpointSource; import com.ebmwebsourcing.petals.services.utils.ConsumeUtils; /** * A dialog to select a service to consume and an operation to invoke. * @author Vincent Zurczak - EBM WebSourcing */ public class EnhancedConsumeDialog extends TitleAreaDialog { public final static QName NO_OPERATION = new QName("http://petals.ow2.org/studio/", "no-operation"); private final static String WILDCARD = "*"; private final static String DEFAULT_MSG = "Select a Petals service and one of its operations to invoke."; private final FormToolkit toolkit; private final Image edptImage, opImage, itfImage, srvImage; private QName itfToInvoke, srvToInvoke; private String edptToInvoke; private QName operationToInvoke; private Mep invocationMep; private boolean needOperation = true; private String filterItfName, filterItfNs; private String filterSrvName, filterSrvNs, filterEdpt, filterComp; private List<Mep> constrainedMep; /** * Constructor. * @param parentShell */ public EnhancedConsumeDialog(Shell parentShell) { this(parentShell, null); } /** * Constructor. * @param parentShell * @param toolkit */ public EnhancedConsumeDialog(Shell parentShell, FormToolkit toolkit) { super(parentShell); if (toolkit != null) this.toolkit = toolkit; else this.toolkit = new FormToolkit(parentShell.getDisplay()); setShellStyle(SWT.PRIMARY_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX); this.itfImage = PetalsServicesPlugin.loadImage("icons/obj16/contract.gif"); this.srvImage = PetalsServicesPlugin.loadImage("icons/obj16/service.gif"); this.edptImage = PetalsServicesPlugin.loadImage("icons/obj16/Endpoint_3.gif"); this.opImage = PetalsServicesPlugin.loadImage("icons/obj16/operation_2.gif"); } /* * (non-Jsdoc) * @see org.eclipse.jface.dialogs.TrayDialog * #close() */ @Override public boolean close() { boolean result = super.close(); if (this.edptImage != null && !this.edptImage.isDisposed()) this.edptImage.dispose(); if (this.srvImage != null && !this.srvImage.isDisposed()) this.srvImage.dispose(); if (this.itfImage != null && !this.itfImage.isDisposed()) this.itfImage.dispose(); if (this.opImage != null && !this.opImage.isDisposed()) this.opImage.dispose(); return result; } /* * (non-Jsdoc) * @see org.eclipse.jface.dialogs.TitleAreaDialog * #createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(final Composite parent) { // General properties getShell().setText("Consume a Petals Service"); setTitle("Consume a Petals Service"); setMessage(DEFAULT_MSG); Composite outterComposite = new Composite(parent, SWT.BORDER); GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; outterComposite.setLayout(layout); outterComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); ScrolledForm form = this.toolkit.createScrolledForm(outterComposite); form.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite container = form.getBody(); TableWrapLayout tableWrapLayout = new TableWrapLayout(); tableWrapLayout.topMargin = 12; layout = new GridLayout(); layout.verticalSpacing = 9; layout.marginTop = 7; container.setLayout(layout); container.setLayoutData(new GridData(GridData.FILL_BOTH)); // Create the search filter Section filterSection = this.toolkit.createSection(container, ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE | Section.DESCRIPTION); filterSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); filterSection.clientVerticalSpacing = 10; filterSection.setText("Search Filters"); filterSection.setDescription("Filter the displayed services."); Composite subContainer = this.toolkit.createComposite(filterSection); layout = new GridLayout(4, false); layout.marginWidth = 0; layout.marginBottom = 10; layout.horizontalSpacing = 10; subContainer.setLayout(layout); subContainer.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); filterSection.setClient(subContainer); this.toolkit.createLabel(subContainer, "Interface Name:"); final Text itfNameText = this.toolkit.createText(subContainer, "", SWT.BORDER | SWT.SINGLE); itfNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); itfNameText.setText(this.filterItfName == null ? WILDCARD : this.filterItfName); this.toolkit.createLabel(subContainer, "Interface Namespace:"); final Text itfNsText = this.toolkit.createText(subContainer, "", SWT.BORDER | SWT.SINGLE); itfNsText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); itfNsText.setText(this.filterItfNs == null ? WILDCARD : this.filterItfNs); this.toolkit.createLabel(subContainer, "Service Name:"); final Text srvNameText = this.toolkit.createText(subContainer, "", SWT.BORDER | SWT.SINGLE); srvNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); srvNameText.setText(this.filterSrvName == null ? WILDCARD : this.filterSrvName); this.toolkit.createLabel(subContainer, "Service Namespace:"); final Text srvNsText = this.toolkit.createText(subContainer, "", SWT.BORDER | SWT.SINGLE); srvNsText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); srvNsText.setText(this.filterSrvNs == null ? WILDCARD : this.filterSrvNs); this.toolkit.createLabel(subContainer, "End-point Name:"); final Text edptNameText = this.toolkit.createText(subContainer, "", SWT.BORDER | SWT.SINGLE); edptNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); edptNameText.setText(this.filterEdpt == null ? WILDCARD : this.filterEdpt); this.toolkit.createLabel(subContainer, "Target Component:"); final Text compText = this.toolkit.createText(subContainer, "", SWT.BORDER | SWT.SINGLE); compText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); compText.setText(this.filterComp == null ? WILDCARD : this.filterComp); // The tree to list all the services Composite bottomComposite = this.toolkit.createComposite(container); layout = new GridLayout(2, true); layout.marginWidth = 0; bottomComposite.setLayout(layout); bottomComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); Section section = this.toolkit.createSection(bottomComposite, ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED | Section.DESCRIPTION); section.setLayoutData(new GridData(GridData.FILL_BOTH)); section.clientVerticalSpacing = 10; section.setText("Available Services"); section.setDescription("A list of all the known Petals services."); subContainer = this.toolkit.createComposite(section); layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; subContainer.setLayout(layout); subContainer.setLayoutData(new TableWrapData(TableWrapData.FILL)); section.setClient(subContainer); Tree tree = this.toolkit.createTree(subContainer, SWT.BORDER | SWT.HIDE_SELECTION | SWT.FULL_SELECTION); GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.widthHint = 400; layoutData.heightHint = 400; tree.setLayoutData(layoutData); final TreeViewer treeViewer = new TreeViewer(tree); treeViewer.setContentProvider(new ServiceContentProvider()); treeViewer.setLabelProvider(new ServiceLabelProvider()); treeViewer.addFilter(new ServiceViewerFilter()); ColumnViewerToolTipSupport.enableFor(treeViewer, ToolTip.NO_RECREATE); // Prepare the input... Map<QName, ItfBean> itfNameToInterface = new HashMap<QName, ItfBean>(); for (EndpointSource src : SourceManager.getInstance().getSources()) { for (ServiceUnitBean su : src.getServiceUnits()) { for (EndpointBean bean : su.getEndpoints()) { // Handle the interface name ItfBean itfBean = itfNameToInterface.get(bean.getInterfaceName()); if (itfBean == null) { itfBean = new ItfBean(); itfBean.itfName = bean.getInterfaceName(); itfNameToInterface.put(itfBean.itfName, itfBean); } // Handle the service name SrvBean srvBean = itfBean.srvNameToService.get(bean.getServiceName()); if (srvBean == null) { srvBean = new SrvBean(); srvBean.itf = itfBean; srvBean.srvName = bean.getServiceName(); itfBean.srvNameToService.put(srvBean.srvName, srvBean); } // Handle the end-point name EdptBean edptBean = new EdptBean(); edptBean.edptBean = bean; srvBean.endpoints.add(edptBean); } } } // ... and set it! treeViewer.setInput(itfNameToInterface); // The properties of the selection final Composite leftComposite = this.toolkit.createComposite(bottomComposite); leftComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; leftComposite.setLayout(layout); // Show a default widget on the left (waiting for a new selection) // It will be deleted as soon as a selection is made in the tree section = this.toolkit.createSection(leftComposite, ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED); section.setLayoutData(new GridData(GridData.FILL_BOTH)); section.clientVerticalSpacing = 10; section.setText("Properties"); final Composite propertiesComposite = this.toolkit.createComposite(section); layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = 10; layout.verticalSpacing = 2; propertiesComposite.setLayout(layout); propertiesComposite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); section.setClient(propertiesComposite); this.toolkit.createLabel(propertiesComposite, "Select a service identifier in the tree on the left."); this.toolkit.createLabel(propertiesComposite, "Its properties will be displayed here."); // Listeners ModifyListener modifyListener = new ModifyListener() { @Override public void modifyText(ModifyEvent e) { String value = ((Text) e.widget).getText().trim(); if (e.widget == itfNameText) EnhancedConsumeDialog.this.filterItfName = value; else if (e.widget == itfNsText) EnhancedConsumeDialog.this.filterItfNs = value; else if (e.widget == srvNameText) EnhancedConsumeDialog.this.filterSrvName = value; else if (e.widget == srvNsText) EnhancedConsumeDialog.this.filterSrvNs = value; else if (e.widget == edptNameText) EnhancedConsumeDialog.this.filterEdpt = value; else if (e.widget == compText) EnhancedConsumeDialog.this.filterComp = value; treeViewer.refresh(); } }; itfNameText.addModifyListener(modifyListener); itfNsText.addModifyListener(modifyListener); srvNameText.addModifyListener(modifyListener); srvNsText.addModifyListener(modifyListener); edptNameText.addModifyListener(modifyListener); compText.addModifyListener(modifyListener); treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { EnhancedConsumeDialog.this.operationToInvoke = null; EnhancedConsumeDialog.this.invocationMep = null; EnhancedConsumeDialog.this.itfToInvoke = null; EnhancedConsumeDialog.this.srvToInvoke = null; EnhancedConsumeDialog.this.edptToInvoke = null; handleSelection(event, leftComposite); validate(); parent.layout(); } }); if (!StringUtils.isEmpty(this.filterItfName) || !StringUtils.isEmpty(this.filterItfNs) || !StringUtils.isEmpty(this.filterSrvName) || !StringUtils.isEmpty(this.filterSrvNs) || !StringUtils.isEmpty(this.filterEdpt) || !StringUtils.isEmpty(this.filterComp)) filterSection.setExpanded(true); return container; } /* * (non-Jsdoc) * @see org.eclipse.jface.dialogs.TrayDialog * #createButtonBar(org.eclipse.swt.widgets.Composite) */ @Override protected Control createButtonBar(Composite parent) { Composite comp = (Composite) super.createButtonBar(parent); comp.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE)); Button okButton = getButton(IDialogConstants.OK_ID); if (okButton != null) okButton.getParent().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE)); return comp; } /** * Handles the selection in the service hierarchy. * @param event the selection event * @param parent the composite where new widgets should be added */ private void handleSelection(SelectionChangedEvent event, Composite parent) { Object o = ((IStructuredSelection) event.getSelection()).getFirstElement(); for (Control c : parent.getChildren()) c.dispose(); Section section = this.toolkit.createSection(parent, ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED | Section.DESCRIPTION); section.setLayoutData(new GridData(GridData.FILL_BOTH)); section.clientVerticalSpacing = 10; section.setText("Properties"); section.setDescription("The properties of the selection."); final Composite propertiesComposite = this.toolkit.createComposite(section); GridLayout layout = new GridLayout(2, false); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = 10; propertiesComposite.setLayout(layout); propertiesComposite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); section.setClient(propertiesComposite); // What do we have? if (o instanceof ItfBean) this.itfToInvoke = ((ItfBean) o).itfName; if (o instanceof SrvBean) { this.srvToInvoke = ((SrvBean) o).srvName; this.itfToInvoke = ((SrvBean) o).itf.itfName; } EndpointBean bean = null; if (o instanceof EdptBean) { bean = ((EdptBean) o).edptBean; this.edptToInvoke = bean.getEndpointName(); this.srvToInvoke = bean.getServiceName(); this.itfToInvoke = bean.getInterfaceName(); } // Show what we can if (this.itfToInvoke != null) { this.toolkit.createLabel(propertiesComposite, "Interface Name:"); Text text = this.toolkit.createText(propertiesComposite, this.itfToInvoke.getLocalPart(), SWT.READ_ONLY); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.toolkit.createLabel(propertiesComposite, "Interface Namespace:"); text = this.toolkit.createText(propertiesComposite, this.itfToInvoke.getNamespaceURI(), SWT.READ_ONLY); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } if (this.srvToInvoke != null) { this.toolkit.createLabel(propertiesComposite, "Service Name:"); Text text = this.toolkit.createText(propertiesComposite, this.srvToInvoke.getLocalPart(), SWT.READ_ONLY); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.toolkit.createLabel(propertiesComposite, "Service Namespace:"); text = this.toolkit.createText(propertiesComposite, this.srvToInvoke.getNamespaceURI(), SWT.READ_ONLY); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } if (bean != null) { this.toolkit.createLabel(propertiesComposite, "End-point Name:"); Text text = this.toolkit.createText(propertiesComposite, bean.getEndpointName(), SWT.READ_ONLY); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.toolkit.createLabel(propertiesComposite, "Target Component:"); String value = bean.getComponentName() != null ? bean.getComponentName() : ""; text = this.toolkit.createText(propertiesComposite, value, SWT.READ_ONLY); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } // Show operations section = this.toolkit.createSection(parent, ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED | Section.DESCRIPTION); section.setLayoutData(new GridData(GridData.FILL_BOTH)); section.clientVerticalSpacing = 10; section.setText("Operations"); section.setDescription("The operations for the selected service's end-point."); final Composite subContainer = this.toolkit.createComposite(section); layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = 10; subContainer.setLayout(layout); subContainer.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); section.setClient(subContainer); final Table table = this.toolkit.createTable(subContainer, SWT.BORDER | SWT.SINGLE); table.setLayoutData(new GridData(GridData.FILL_BOTH)); Map<QName, Mep> ops = ConsumeUtils.getValidOperationsForConsume(this.itfToInvoke, this.srvToInvoke, this.edptToInvoke); for (Map.Entry<QName, Mep> entry : ops.entrySet()) { TableItem item = new TableItem(table, SWT.NONE); item.setText(entry.getKey().getLocalPart() + " - " + entry.getValue()); item.setImage(this.opImage); item.setData(entry); } table.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { TableItem[] items = table.getSelection(); if (items != null && items.length > 0) { Map.Entry<?, ?> entry = (Map.Entry<?, ?>) items[0].getData(); EnhancedConsumeDialog.this.operationToInvoke = (QName) entry.getKey(); EnhancedConsumeDialog.this.invocationMep = (Mep) entry.getValue(); validate(); } } }); final Button b = this.toolkit.createButton(subContainer, "Let the component choose the operation to invoke.", SWT.CHECK); b.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { EnhancedConsumeDialog.this.needOperation = !b.getSelection(); table.setEnabled(EnhancedConsumeDialog.this.needOperation); if (!EnhancedConsumeDialog.this.needOperation) { EnhancedConsumeDialog.this.operationToInvoke = null; EnhancedConsumeDialog.this.invocationMep = null; } validate(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); b.setSelection(!this.needOperation); table.setEnabled(this.needOperation); parent.layout(); } /** * @param filterItfName the filterItfName to set */ public void setFilterItfName(String filterItfName) { this.filterItfName = filterItfName; } /** * @param needOperation the needOperation to set */ public void setNeedOperation(boolean needOperation) { this.needOperation = needOperation; } /** * @return the constrainedMep */ public List<Mep> getConstrainedMep() { return this.constrainedMep; } /** * @param constrainedMep the constrainedMep to set */ public void setConstrainedMep(List<Mep> constrainedMep) { this.constrainedMep = constrainedMep; } /** * @param filterItfNs the filterItfNs to set */ public void setFilterItfNs(String filterItfNs) { this.filterItfNs = filterItfNs; } /** * @param filterSrvName the filterSrvName to set */ public void setFilterSrvName(String filterSrvName) { this.filterSrvName = filterSrvName; } /** * @param filterSrvNs the filterSrvNs to set */ public void setFilterSrvNs(String filterSrvNs) { this.filterSrvNs = filterSrvNs; } /** * @param filterEdpt the filterEdpt to set */ public void setFilterEdpt(String filterEdpt) { this.filterEdpt = filterEdpt; } /** * @return the operationToInvoke */ public QName getOperationToInvoke() { return this.operationToInvoke == null ? NO_OPERATION : this.operationToInvoke; } /** * @return the invocationMep */ public Mep getInvocationMep() { return this.invocationMep == null ? Mep.UNKNOWN : this.invocationMep; } /** * @return the itfToInvoke */ public QName getItfToInvoke() { return this.itfToInvoke; } /** * @return the srvToInvoke */ public QName getSrvToInvoke() { return this.srvToInvoke; } /** * @return the edptToInvoke */ public String getEdptToInvoke() { return this.edptToInvoke; } /** * Validates the selection. */ private void validate() { String msg = null, warning = null; if (this.itfToInvoke == null && this.srvToInvoke == null && this.itfToInvoke == null) msg = "You must select a service to consume (invoke)."; else if (this.operationToInvoke == null && this.needOperation) msg = "You must select an operation to invoke."; else if (this.constrainedMep != null && !this.constrainedMep.isEmpty() && !this.constrainedMep.contains(this.invocationMep)) warning = "This operation is associated with a MEP which is not supported by the current component."; setMessage(warning, IMessageProvider.WARNING); setErrorMessage(msg); if (warning == null && msg == null) setMessage(DEFAULT_MSG); Button okButton = getButton(IDialogConstants.OK_ID); if (okButton != null) okButton.setEnabled(msg == null); } /** * A content provider for the viewer. */ private static class ServiceContentProvider extends DefaultTreeContentProvider { @Override public boolean hasChildren(Object element) { return element instanceof SrvBean || element instanceof ItfBean; } @Override public Object[] getElements(Object inputElement) { return ((Map<?, ?>) inputElement).values().toArray(); } @Override public Object[] getChildren(Object parentElement) { Object[] result = null; if (parentElement instanceof ItfBean) result = ((ItfBean) parentElement).srvNameToService.values().toArray(); else if (parentElement instanceof SrvBean) result = ((SrvBean) parentElement).endpoints.toArray(); if (result == null) result = new Object[0]; return result; } } /** * The filter for the viewer. */ private class ServiceViewerFilter extends ViewerFilter { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { boolean result = false; if (element instanceof ItfBean) { ItfBean q = (ItfBean) element; boolean loc = StringUtils.isEmpty(EnhancedConsumeDialog.this.filterItfName) || WILDCARD.equals(EnhancedConsumeDialog.this.filterItfName) || q.itfName.getLocalPart().startsWith(EnhancedConsumeDialog.this.filterItfName); boolean ns = StringUtils.isEmpty(EnhancedConsumeDialog.this.filterItfNs) || WILDCARD.equals(EnhancedConsumeDialog.this.filterItfNs) || q.itfName.getNamespaceURI().startsWith(EnhancedConsumeDialog.this.filterItfNs); if (loc && ns) { List<SrvBean> srvBeans = filterServices(((ItfBean) element).srvNameToService.values()); for (SrvBean srvBean : srvBeans) { List<EdptBean> beans = filterEndpoints(srvBean.endpoints); if (beans.size() > 0) { result = true; break; } } } } else if (element instanceof SrvBean) { List<SrvBean> srvBeans = filterServices(Arrays.asList((SrvBean) element)); if (srvBeans.size() == 1) { List<EdptBean> beans = filterEndpoints(((SrvBean) element).endpoints); result = beans.size() > 0; } } else if (element instanceof EdptBean) { List<EdptBean> beans = filterEndpoints(Arrays.asList((EdptBean) element)); result = beans.size() == 1; } return result; } /** * Filters a list of end-points using the filtering criteria. * @param endpoints * @return a non-null list */ private List<EdptBean> filterEndpoints(Collection<EdptBean> endpoints) { List<EdptBean> filteredList = new ArrayList<EdptBean>(); for (EdptBean edptBean : endpoints) { EndpointBean bean = edptBean.edptBean; boolean edpt = StringUtils.isEmpty(EnhancedConsumeDialog.this.filterEdpt) || WILDCARD.equals(EnhancedConsumeDialog.this.filterEdpt) || bean.getEndpointName().startsWith(EnhancedConsumeDialog.this.filterEdpt); boolean comp = StringUtils.isEmpty(EnhancedConsumeDialog.this.filterComp) || WILDCARD.equals(EnhancedConsumeDialog.this.filterComp) || bean.getComponentName() == null || bean.getComponentName().startsWith(EnhancedConsumeDialog.this.filterComp); if (comp && edpt) filteredList.add(edptBean); } return filteredList; } /** * Filters a list of services using the filtering criteria. * @param endpoints * @return a non-null list */ private List<SrvBean> filterServices(Collection<SrvBean> services) { List<SrvBean> filteredList = new ArrayList<SrvBean>(); for (SrvBean srvBean : services) { boolean loc = StringUtils.isEmpty(EnhancedConsumeDialog.this.filterSrvName) || WILDCARD.equals(EnhancedConsumeDialog.this.filterSrvName) || srvBean.srvName.getLocalPart().startsWith(EnhancedConsumeDialog.this.filterSrvName); boolean ns = StringUtils.isEmpty(EnhancedConsumeDialog.this.filterSrvNs) || WILDCARD.equals(EnhancedConsumeDialog.this.filterSrvNs) || srvBean.srvName.getNamespaceURI().startsWith(EnhancedConsumeDialog.this.filterSrvNs); if (loc && ns) filteredList.add(srvBean); } return filteredList; } } /** * The label provider for the viewer. */ private class ServiceLabelProvider extends ColumnLabelProvider { @Override public String getText(Object element) { QName qname = null; if (element instanceof ItfBean) qname = ((ItfBean) element).itfName; else if (element instanceof SrvBean) qname = ((SrvBean) element).srvName; String text = ""; if (qname != null) text = qname.getLocalPart(); else if (element instanceof EdptBean) text = ((EdptBean) element).edptBean.getEndpointName(); return text; } @Override public Image getImage(Object element) { Image result = null; if (element instanceof ItfBean) result = EnhancedConsumeDialog.this.itfImage; else if (element instanceof SrvBean) result = EnhancedConsumeDialog.this.srvImage; else if (element instanceof EdptBean) result = EnhancedConsumeDialog.this.edptImage; return result; } @Override public String getToolTipText(Object element) { QName qname = null; if (element instanceof ItfBean) qname = ((ItfBean) element).itfName; else if (element instanceof SrvBean) qname = ((SrvBean) element).srvName; String text = ""; if (qname != null) text = qname.getLocalPart() + " - " + qname.getNamespaceURI(); else if (element instanceof EdptBean) text = ((EdptBean) element).edptBean.getEndpointName(); return text; } } /** * A bean that describes an interface. */ private static class ItfBean { QName itfName; Map<QName, SrvBean> srvNameToService = new HashMap<QName, SrvBean>(); } /** * A bean that describes a service. */ private static class SrvBean { QName srvName; ItfBean itf; List<EdptBean> endpoints = new ArrayList<EdptBean>(); } /** * A bean that describes an end-point. */ private static class EdptBean { EndpointBean edptBean; } }