| /******************************************************************************* |
| * Copyright (c) 2005, 2012 IBM Corporation and others. |
| * 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.bpel.ui.properties; |
| |
| import org.eclipse.bpel.common.ui.details.IDetailsAreaConstants; |
| import org.eclipse.bpel.common.ui.details.IValue; |
| import org.eclipse.bpel.common.ui.details.TextIValue; |
| import org.eclipse.bpel.common.ui.details.widgets.DecoratedLabel; |
| import org.eclipse.bpel.common.ui.details.widgets.StatusLabel2; |
| import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment; |
| import org.eclipse.bpel.common.ui.flatui.FlatFormData; |
| import org.eclipse.bpel.model.BPELPackage; |
| import org.eclipse.bpel.ui.BPELUIPlugin; |
| import org.eclipse.bpel.ui.IHelpContextIds; |
| import org.eclipse.bpel.ui.Messages; |
| import org.eclipse.bpel.ui.adapters.INamedElement; |
| import org.eclipse.bpel.ui.util.BPELUtil; |
| import org.eclipse.bpel.ui.util.MultiObjectAdapter; |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.ecore.EAttribute; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.gef.commands.Command; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.PlatformUI; |
| |
| |
| /** |
| * Details section for the "name" property (which is common to most BPEL elements). |
| */ |
| |
| @SuppressWarnings("boxing") |
| public class NameSection extends BPELPropertySection { |
| |
| protected Text fNameText; |
| |
| protected StatusLabel2 statusLabel; |
| |
| protected EditController fNameEditController; |
| |
| INamedElement fNamedElement; |
| |
| |
| @Override |
| protected MultiObjectAdapter[] createAdapters() { |
| return new MultiObjectAdapter[] { |
| /* model object */ |
| new MultiObjectAdapter() { |
| |
| @Override |
| public void notify (Notification n) { |
| if (markersHaveChanged(n)) { |
| updateMarkers(); |
| return ; |
| } |
| } |
| }, |
| }; |
| } |
| |
| @Override |
| protected void basicSetInput (EObject input) { |
| super.basicSetInput(input); |
| |
| fNamedElement = BPELUtil.adapt(input,INamedElement.class); |
| |
| fNameEditController.setInput(input); |
| } |
| |
| |
| protected void createNameWidgets(Composite composite) { |
| FlatFormData data; |
| |
| DecoratedLabel nameLabel = new DecoratedLabel(composite,SWT.LEFT); |
| fWidgetFactory.adapt(nameLabel); |
| nameLabel.setText(Messages.NameDetails_BPEL_Name__3); |
| statusLabel = new StatusLabel2( nameLabel ); |
| |
| fNameText = fWidgetFactory.createText(composite, EMPTY_STRING); |
| data = new FlatFormData(); |
| data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(nameLabel, STANDARD_LABEL_WIDTH_AVG)); |
| data.right = new FlatFormAttachment(100, (-2) * IDetailsAreaConstants.HSPACE ); |
| data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE ); |
| fNameText.setLayoutData(data); |
| |
| data = new FlatFormData(); |
| data.left = new FlatFormAttachment(0, 0); |
| data.right = new FlatFormAttachment(fNameText, -IDetailsAreaConstants.HSPACE); |
| data.top = new FlatFormAttachment(fNameText, 0, SWT.CENTER); |
| nameLabel.setLayoutData(data); |
| |
| |
| |
| } |
| |
| protected void createChangeTrackers() { |
| |
| |
| // fChangeHelper = new ChangeHelper ( getCommandFramework() ) { |
| // public String getLabel() { |
| // return IBPELUIConstants.CMD_EDIT_NAME; |
| // } |
| // public Command createApplyCommand() { |
| // |
| // final String newName = fNameText.getText().trim(); |
| // |
| // if (newName.length() == 0 || newName.equals(namedElement.getName(getModel()))) { |
| // return null; // there is nothing to be done |
| // } |
| // |
| // return wrapInShowContextCommand( |
| // new UpdateModelCommand(getInput(), getLabel() ) { |
| // @Override |
| // public void doExecute() { |
| // namedElement.setName(fTarget, newName); |
| // } |
| // }); |
| // } |
| // |
| // public void restoreOldState() { |
| // updateNameWidgets(); |
| // } |
| // }; |
| // |
| // fChangeHelper.startListeningTo(fNameText); |
| // |
| |
| /** TODO: Empty Name should never be set */ |
| |
| fNameEditController = new EditController(getCommandFramework()) { |
| @Override |
| public boolean checkNotification (Notification notification) { |
| return fNamedElement != null && fNamedElement.isNameAffected(fNameEditController.getInput(), notification); |
| } |
| @Override |
| public Command createApplyCommand() { |
| return wrapInShowContextCommand( super.createApplyCommand() ); |
| } |
| |
| }; |
| fNameEditController.setLabel( BPELPackage.eINSTANCE.getActivity_Name().getName() ); |
| |
| fNameEditController.setViewIValue(new TextIValue ( fNameText )) ; |
| fNameEditController.setModeIValue(new IValue () { |
| public Object get() { |
| return fNamedElement != null ? fNamedElement.getName( fNameEditController.getInput() ) : null; |
| } |
| public void set (Object object) { |
| if (fNamedElement != null) { |
| fNamedElement.setName(fNameEditController.getInput(),object.toString() ); |
| } |
| } |
| }); |
| |
| fNameEditController.startListeningTo(fNameText); |
| |
| } |
| |
| @Override |
| protected void createClient(Composite parent) { |
| Composite composite = createFlatFormComposite(parent); |
| createNameWidgets(composite); |
| createChangeTrackers(); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp( |
| composite, IHelpContextIds.PROPERTY_PAGE_NAME); |
| } |
| |
| |
| |
| @Override |
| protected void updateMarkers () { |
| statusLabel.clear(); |
| for(IMarker m : getMarkers(getInput())) { |
| statusLabel.addStatus( BPELUtil.adapt(m, IStatus.class) ); |
| } |
| } |
| |
| |
| protected IStatus validate() { |
| // IStatus status = ValidationHelper.validateXML_NCName(nameText.getText()); |
| //if (status.isOK()) |
| return validate(getInput()); |
| //else |
| // return status; |
| } |
| |
| protected IStatus validate (Object currentElement ) { |
| |
| if (currentElement instanceof EObject) { // i.e. PartnerLink,Variable, Correlation Set, etc. |
| |
| EObject elm = (EObject) currentElement; |
| |
| EObject elmContainer = elm.eContainer(); |
| |
| if (elmContainer != null) { |
| EList el = elmContainer.eContents(); |
| for(int i=0, j=el.size() ; i < j; i++) { |
| Object next = el.get(i); |
| if ((next instanceof EObject) == false) { |
| continue; |
| } |
| EObject loopElement = (EObject) next; |
| |
| EAttribute eAttribute = getNAMEAttribute(loopElement.eClass().getEAllAttributes() ); |
| |
| if (eAttribute != null) { |
| Object name = loopElement.eGet(eAttribute); |
| if (name != null) { |
| // is there another element with the same name? |
| if (name.equals(fNameText.getText()) && !loopElement.equals(currentElement)) { |
| String message = NLS.bind(Messages.NameDetails_RenameErrorMessage, (new Object[] {fNameText.getText()})); |
| return new Status( IStatus.ERROR, BPELUIPlugin.PLUGIN_ID, IStatus.ERROR, message, null); |
| } |
| } |
| } |
| } |
| } |
| } |
| return new Status( IStatus.OK, BPELUIPlugin.PLUGIN_ID, IStatus.OK, "Hi There", null); //$NON-NLS-1$ |
| } |
| |
| |
| |
| protected EAttribute getNAMEAttribute(EList list) { |
| |
| if (list != null) { |
| for (int i = 0; i < list.size();i++) { |
| EObject eo = (EObject)list.get(i); |
| |
| if (eo instanceof EAttribute) { |
| EAttribute ea = (EAttribute)eo; |
| |
| if (ea.getName().equalsIgnoreCase("name")) { //$NON-NLS-1$ |
| return (EAttribute)eo; |
| } |
| } |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * @see org.eclipse.bpel.ui.properties.BPELPropertySection#getUserContext() |
| */ |
| @Override |
| public Object getUserContext() { |
| return null; |
| } |
| |
| |
| /** |
| * @see org.eclipse.bpel.ui.properties.BPELPropertySection#restoreUserContext(java.lang.Object) |
| */ |
| @Override |
| public void restoreUserContext(Object userContext) { |
| fNameText.setFocus(); |
| } |
| |
| /** |
| * Goto the specific marker. This is only called when isValidMarker |
| * returns true. |
| * |
| * @see org.eclipse.bpel.ui.properties.BPELPropertySection#gotoMarker(org.eclipse.core.resources.IMarker) |
| */ |
| |
| @Override |
| public void gotoMarker (IMarker marker) { |
| fNameText.setFocus() ; |
| } |
| |
| /** |
| * |
| * @see org.eclipse.bpel.ui.properties.BPELPropertySection#isValidMarker(org.eclipse.core.resources.IMarker) |
| */ |
| |
| @Override |
| public boolean isValidMarker (IMarker marker) { |
| String context = null; |
| try { |
| context = (String) marker.getAttribute("href.context"); |
| } catch (Exception ex) { |
| return false; |
| } |
| return "name".equals (context); |
| } |
| } |