/*********************************************************************** * Copyright (c) 2007 Anyware Technologies * * 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: * Anyware Technologies - initial API and implementation * * $Id: EOppositePropertySection.java,v 1.5 2008/05/26 12:28:57 jlescot Exp $ **********************************************************************/ package org.eclipse.emf.ecoretools.properties.internal.sections; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory; import org.eclipse.emf.ecoretools.properties.internal.Messages; import org.eclipse.emf.ecoretools.tabbedproperties.sections.AbstractChooserPropertySection; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.emf.edit.provider.ItemProviderAdapter; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.viewers.ILabelProvider; /** * A section for the EOpposite property of an EReference. * * Creation 16 oct. 07 * * @author <a href="mailto:jacques.lescot@anyware-tech.com">Jacques LESCOT</a> */ public class EOppositePropertySection extends AbstractChooserPropertySection { /** * @see org.eclipse.emf.ecoretools.tabbedproperties.sections.AbstractTabbedPropertySection#getFeature() */ @Override protected EStructuralFeature getFeature() { return EcorePackage.Literals.EREFERENCE__EOPPOSITE; } /** * @see org.eclipse.emf.ecoretools.tabbedproperties.sections.AbstractTabbedPropertySection#getLabelText() */ @Override protected String getLabelText() { return Messages.EOppositePropertySection_EOpposite; } /** * @see org.eclipse.emf.ecoretools.tabbedproperties.sections.AbstractChooserPropertySection#getComboFeatureValues() */ @Override protected Object[] getComboFeatureValues() { return getPropertyDescriptor() != null ? getPropertyDescriptor().getChoiceOfValues(getEObject()).toArray() : new String[] { "" }; //$NON-NLS-1$ } /** * Use the setPropertyValue() method implemented by the generated EMF code. * This automatically handle the refreshment of the two complementary * EOpposite references. * * @see org.eclipse.emf.ecoretools.tabbedproperties.sections.AbstractChooserPropertySection#handleComboModified() */ @Override protected void handleComboModified() { if (!isRefreshing() && getFeatureValue() != getCSingleObjectChooser().getSelection() && getEObjectList().size() == 1) { if (getPropertyDescriptor() != null) { getPropertyDescriptor().setPropertyValue(getEObject(), getCSingleObjectChooser().getSelection()); } else { super.handleComboModified(); } } } private IItemPropertyDescriptor getPropertyDescriptor() { for (Adapter adapter : getEObject().eAdapters()) { if (adapter instanceof ItemProviderAdapter) { IItemPropertyDescriptor descriptor = ((ItemProviderAdapter) adapter).getPropertyDescriptor(getEObject(), getFeature().getName()); if (descriptor != null) { return descriptor; } } } return null; } /** * @see org.eclipse.emf.ecoretools.tabbedproperties.sections.AbstractChooserPropertySection#getLabelProvider() */ @Override protected ILabelProvider getLabelProvider() { return new AdapterFactoryLabelProvider(new EcoreItemProviderAdapterFactory()); } /** * @see org.eclipse.emf.ecoretools.tabbedproperties.sections.AbstractChooserPropertySection#getFeatureValue() */ @Override protected Object getFeatureValue() { return ((EReference) getEObject()).getEOpposite(); } }