Java tutorial
/****************************************************************************** * Copyright (c) 2010-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.eip.designer.tabbedproperties; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.core.runtime.IStatus; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CommandStack; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import com.ebmwebsourcing.petals.common.internal.provisional.utils.PetalsConstants; import com.ebmwebsourcing.petals.services.eip.PetalsEipPlugin; import com.ebmwebsourcing.petals.services.eip.designer.edit.commands.EndpointSetAttributeCommand; import com.ebmwebsourcing.petals.services.eip.designer.edit.parts.EndpointEditPart; import com.ebmwebsourcing.petals.services.eip.designer.model.AbstractNode; import com.ebmwebsourcing.petals.services.eip.designer.model.Endpoint; import com.ebmwebsourcing.petals.services.explorer.model.EndpointBean; import com.ebmwebsourcing.petals.services.utils.ConsumeUtils; /** * The main (and only one) section for the Petals tab (properties of a JBI binding). * @author Vincent Zurczak - EBM WebSourcing */ public class EndpointInterfaceSection extends AbstractPropertySection implements PropertyChangeListener { private Endpoint edpt; private boolean enableListener; private Text itfNsText, itfNameText, srvNsText, srvNameText, edptText; private Image ideaImg; /** * Constructor. */ public EndpointInterfaceSection() { try { ImageDescriptor desc = PetalsEipPlugin.getImageDescriptor("icons/obj16/smartmode_co.gif"); this.ideaImg = desc.createImage(); } catch (Exception e) { PetalsEipPlugin.log(e, IStatus.WARNING); } } /* * (non-Jsdoc) * @see java.beans.PropertyChangeListener * #propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent evt) { if (AbstractNode.PROPERTY_SERVICE_NAME.equals(evt.getPropertyName()) || AbstractNode.PROPERTY_SERVICE_NAMESPACE.equals(evt.getPropertyName()) || AbstractNode.PROPERTY_INTERFACE_NAME.equals(evt.getPropertyName()) || AbstractNode.PROPERTY_INTERFACE_NAMESPACE.equals(evt.getPropertyName()) || AbstractNode.PROPERTY_ENDPOINT_NAME.equals(evt.getPropertyName())) refresh(); } /* * (non-Javadoc) * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection * #dispose() */ @Override public void dispose() { if (this.ideaImg != null) { this.ideaImg.dispose(); this.ideaImg = null; } super.dispose(); } /* * (non-Javadoc) * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection * #createControls(org.eclipse.swt.widgets.Composite, org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage) */ @Override public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) { // Create the container super.createControls(parent, aTabbedPropertySheetPage); final Composite container = getWidgetFactory().createPlainComposite(parent, SWT.NONE); container.setLayout(new GridLayout(4, false)); Composite subContainer = getWidgetFactory().createComposite(container); GridData layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = 4; subContainer.setLayoutData(layoutData); GridLayout layout = new GridLayout(); layout.marginBottom = 5; layout.marginTop = 5; layout.marginWidth = 0; subContainer.setLayout(layout); getWidgetFactory().createLabel(subContainer, "Define the properties of the Petals service to invoke."); // Interface CLabel label = getWidgetFactory().createCLabel(container, "Interface name:"); label.setToolTipText("The local part of the interface name"); this.itfNameText = getWidgetFactory().createText(container, ""); this.itfNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.itfNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (EndpointInterfaceSection.this.enableListener) { EndpointSetAttributeCommand cmd = new EndpointSetAttributeCommand( AbstractNode.PROPERTY_INTERFACE_NAME); cmd.setEndpoint(EndpointInterfaceSection.this.edpt); cmd.setNewValue(EndpointInterfaceSection.this.itfNameText.getText()); executeCommand(cmd); } } }); label = getWidgetFactory().createCLabel(container, "Interface namespace:"); label.setToolTipText("The name space URI of the interface name"); this.itfNsText = getWidgetFactory().createText(container, ""); this.itfNsText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.itfNsText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (EndpointInterfaceSection.this.enableListener) { EndpointSetAttributeCommand cmd = new EndpointSetAttributeCommand( AbstractNode.PROPERTY_INTERFACE_NAMESPACE); cmd.setEndpoint(EndpointInterfaceSection.this.edpt); cmd.setNewValue(EndpointInterfaceSection.this.itfNsText.getText()); executeCommand(cmd); } } }); // Service label = getWidgetFactory().createCLabel(container, "Service name:"); label.setToolTipText("The local part of the service name"); this.srvNameText = getWidgetFactory().createText(container, ""); this.srvNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.srvNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (EndpointInterfaceSection.this.enableListener) { EndpointSetAttributeCommand cmd = new EndpointSetAttributeCommand( AbstractNode.PROPERTY_SERVICE_NAME); cmd.setEndpoint(EndpointInterfaceSection.this.edpt); cmd.setNewValue(EndpointInterfaceSection.this.srvNameText.getText()); executeCommand(cmd); } } }); label = getWidgetFactory().createCLabel(container, "Service namespace:"); label.setToolTipText("The name space URI of the service name"); this.srvNsText = getWidgetFactory().createText(container, ""); this.srvNsText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.srvNsText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (EndpointInterfaceSection.this.enableListener) { EndpointSetAttributeCommand cmd = new EndpointSetAttributeCommand( AbstractNode.PROPERTY_SERVICE_NAMESPACE); cmd.setEndpoint(EndpointInterfaceSection.this.edpt); cmd.setNewValue(EndpointInterfaceSection.this.srvNsText.getText()); executeCommand(cmd); } } }); // End-point label = getWidgetFactory().createCLabel(container, "End-point name:"); label.setToolTipText("The end-point name (a simple string)"); this.edptText = getWidgetFactory().createText(container, ""); this.edptText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.edptText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (EndpointInterfaceSection.this.enableListener) { EndpointSetAttributeCommand cmd = new EndpointSetAttributeCommand( AbstractNode.PROPERTY_ENDPOINT_NAME); cmd.setEndpoint(EndpointInterfaceSection.this.edpt); cmd.setNewValue(EndpointInterfaceSection.this.edptText.getText()); executeCommand(cmd); } } }); // Baaaad... getWidgetFactory().createLabel(container, ""); getWidgetFactory().createLabel(container, ""); getWidgetFactory().createLabel(container, ""); // Add the helper to select another Petals service subContainer = getWidgetFactory().createComposite(container); layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = 3; subContainer.setLayoutData(layoutData); layout = new GridLayout(2, false); layout.marginWidth = 0; subContainer.setLayout(layout); label = getWidgetFactory().createCLabel(subContainer, ""); label.setImage(this.ideaImg); Hyperlink link = getWidgetFactory().createHyperlink(subContainer, "Select a service from the Petals Services view", SWT.NONE); link.setToolTipText("Select an end-point to invoke among the currently referenced end-points"); link.addHyperlinkListener(new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent e) { EndpointBean bean = ConsumeUtils.selectEndpointToConsume(container); if (bean == null) return; try { EndpointInterfaceSection.this.srvNameText.setText(bean.getServiceName().getLocalPart()); EndpointInterfaceSection.this.srvNsText.setText(bean.getServiceName().getNamespaceURI()); EndpointInterfaceSection.this.itfNameText.setText(bean.getInterfaceName().getLocalPart()); EndpointInterfaceSection.this.itfNsText.setText(bean.getInterfaceName().getNamespaceURI()); if (PetalsConstants.AUTO_GENERATE.equals(bean.getEndpointName())) EndpointInterfaceSection.this.edptText.setText(""); else EndpointInterfaceSection.this.edptText.setText(bean.getEndpointName()); } catch (Exception e1) { PetalsEipPlugin.log(e1, IStatus.ERROR); } } }); } /** * Executes a command on top of the EIP editor's command stack. * @param command */ private void executeCommand(Command command) { IEditorPart part = getPart().getSite().getPage().getActiveEditor(); CommandStack commandStack = (CommandStack) part.getAdapter(CommandStack.class); if (commandStack != null) commandStack.execute(command); } /* * (non-Javadoc) * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection * #setInput(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) */ @Override public void setInput(IWorkbenchPart part, ISelection selection) { super.setInput(part, selection); // Do not listen to model changes from the previous input if (this.edpt != null) this.edpt.removePropertyChangeListener(this); if (selection instanceof IStructuredSelection) { Object input = ((IStructuredSelection) selection).getFirstElement(); if (input instanceof EndpointEditPart) this.edpt = (Endpoint) ((EndpointEditPart) input).getModel(); } // Listen to changes in the new model if (this.edpt != null) this.edpt.addPropertyChangeListener(this); } /* * (non-Javadoc) * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection * #refresh() */ @Override public void refresh() { this.enableListener = false; if (this.itfNsText != null && !this.itfNsText.isDisposed() && this.edpt != null) { // Save the caret position Text focusText = null; if (this.itfNsText.isFocusControl()) focusText = this.itfNsText; else if (this.itfNameText.isFocusControl()) focusText = this.itfNameText; else if (this.srvNameText.isFocusControl()) focusText = this.srvNameText; else if (this.srvNsText.isFocusControl()) focusText = this.srvNsText; else if (this.edptText.isFocusControl()) focusText = this.edptText; int caret = focusText != null ? focusText.getCaretPosition() : -1; // Update values this.itfNsText .setText(this.edpt.getInterfaceNamespace() != null ? this.edpt.getInterfaceNamespace() : ""); this.itfNameText.setText(this.edpt.getInterfaceName() != null ? this.edpt.getInterfaceName() : ""); this.srvNsText.setText(this.edpt.getServiceNamespace() != null ? this.edpt.getServiceNamespace() : ""); this.srvNameText.setText(this.edpt.getServiceName() != null ? this.edpt.getServiceName() : ""); this.edptText.setText(this.edpt.getEndpointName() != null ? this.edpt.getEndpointName() : ""); // Restore the caret if (focusText != null) focusText.setSelection(caret); } this.enableListener = true; } }