All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.emf.databinding.EObjectObservableMap Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2007 IBM Corporation and others.
 * All rights reserved.   This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 * 
 * Contributors: 
 *   IBM - Initial API and implementation
 */
package org.eclipse.emf.databinding;

import org.eclipse.core.databinding.observable.Diffs;
import org.eclipse.core.databinding.observable.map.ComputedObservableMap;
import org.eclipse.core.databinding.observable.map.MapDiff;
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.ExtendedMetaData;


/**
 * 

PROVISIONAL: This API is subject to arbitrary change, including renaming or removal.

*/ public class EObjectObservableMap extends ComputedObservableMap { /** * The feature to observe */ protected EStructuralFeature eStructuralFeature; private Adapter elementListener = new AdapterImpl() { @Override public void notifyChanged(Notification notification) { if (eStructuralFeature == notification.getFeature() && !notification.isTouch()) { // TODO // This assumes we only get a SET notification, which isn't a // good assumption. // final MapDiff diff = Diffs.createMapDiffSingleChange( notification.getNotifier(), notification.getOldValue(), notification.getNewValue()); getRealm().exec(new Runnable() { public void run() { fireMapChange(diff); } }); } } }; /** * Create a new observable for the set of features * * @param objects * the objects to observe * @param feature * the feature */ public EObjectObservableMap(IObservableSet objects, EStructuralFeature feature) { super(objects); this.eStructuralFeature = feature; } @Override protected void hookListener(Object domainElement) { ((EObject)domainElement).eAdapters().add(elementListener); } @Override protected void unhookListener(Object domainElement) { ((EObject)domainElement).eAdapters().remove(elementListener); } @Override protected Object doGet(Object key) { EObject eObject = (EObject)key; return ExtendedMetaData.INSTANCE.getAffiliation(eObject.eClass(), eStructuralFeature) == null ? null : eObject.eGet(eStructuralFeature); } @Override protected Object doPut(Object key, Object value) { EObject eObject = (EObject)key; Object result = eObject.eGet(eStructuralFeature); eObject.eSet(eStructuralFeature, value); return result; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy