/******************************************************************************* * Copyright (c) 2003, 2005 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.jst.j2ee.internal.webservice.adapter; import java.util.Iterator; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; public class AdapterCCombo extends AdapterImpl implements SelectionListener { private EObject eObject_; private EStructuralFeature feature_; private EStructuralFeature displayFeature_; private CCombo combo_; private String defaultDisplayString_; public AdapterCCombo(EStructuralFeature feature, EStructuralFeature displayFeature, CCombo combo, String defaultDisplayString) { super(); eObject_ = null; feature_ = feature; displayFeature_ = displayFeature; combo_ = combo; combo_.addSelectionListener(this); defaultDisplayString_ = (defaultDisplayString != null) ? defaultDisplayString : ""; //$NON-NLS-1$ } public AdapterCCombo(EStructuralFeature feature, EStructuralFeature displayFeature, CCombo combo) { this(feature, displayFeature, combo, null); } public AdapterCCombo(EObject eObject, EStructuralFeature feature, EStructuralFeature displayFeature, CCombo combo) { this(eObject, feature, displayFeature, combo, null); } public AdapterCCombo(EObject eObject, EStructuralFeature feature, EStructuralFeature displayFeature, CCombo combo, String defaultDisplayString) { this(feature, displayFeature, combo, defaultDisplayString); adapt(eObject); } @Override public void notifyChanged(Notification msg) { Object notifier = msg.getNotifier(); if (notifier == eObject_) { int type = msg.getEventType(); if (type == Notification.SET || type == Notification.UNSET || type == Notification.ADD || type == Notification.REMOVE || type == Notification.ADD_MANY || type == Notification.REMOVE_MANY) populateCombo(); } else if (msg.getFeature() == displayFeature_) populateCombo(); } private void populateCombo() { if (eObject_ != null) { Object object = eObject_.eGet(feature_); if (object != null) { if (combo_.isDisposed()) return; int selectionIndex = combo_.getSelectionIndex(); String text = combo_.getText(); combo_.removeAll(); if (object instanceof EList) { EList eList = (EList) object; for (Iterator it = eList.iterator(); it.hasNext();) combo_.add(toDisplayString(((EObject) it.next()).eGet(displayFeature_))); } else combo_.add(toDisplayString(((EObject) object).eGet(displayFeature_))); int newIndex = combo_.indexOf(text); if (selectionIndex != -1 && newIndex != -1) combo_.select(newIndex); else combo_.select(0); } } } private String toDisplayString(Object object) { if (object != null) { String s = object.toString(); if (s != null && s.length() > 0) return s; } return defaultDisplayString_; } public void widgetDefaultSelected(SelectionEvent e) { //Do nothing } public void widgetSelected(SelectionEvent e) { //Do nothing } public void adapt(EObject eObject) { if (eObject_ != null) { eObject_.eAdapters().remove(this); combo_.removeAll(); } eObject_ = eObject; if (eObject_ != null) { eObject_.eAdapters().add(this); Object object = eObject_.eGet(feature_); if (object instanceof EList) { for (Iterator it = ((EList) object).iterator(); it.hasNext();) { Object item = it.next(); if (item instanceof EObject) ((EObject) item).eAdapters().add(this); } } else if (object instanceof EObject) ((EObject) object).eAdapters().add(this); populateCombo(); } } public void dispose() { if (eObject_ != null) eObject_.eAdapters().remove(this); if (combo_ != null && !combo_.isDisposed()) combo_.removeSelectionListener(this); } }