/******************************************************************************* * Copyright (c) 2008 Olivier Moises * * 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: * Olivier Moises- initial API and implementation *******************************************************************************/ package org.eclipse.wazaabi.engine.edp.adapters; 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.wazaabi.engine.edp.exceptions.OperationAborted; import org.eclipse.wazaabi.engine.edp.locationpaths.IPointersEvaluator; import org.eclipse.wazaabi.mm.edp.events.Event; import org.eclipse.wazaabi.mm.edp.events.PropertyChangedEvent; public class PropertyChangedEventAdapter extends AbstractPathEventAdapter { protected class FeatureAdapter extends AdapterImpl { private EStructuralFeature feature = null; @Override public void notifyChanged(Notification msg) { if (feature.equals(msg.getFeature())) { try { getEventHandlerAdapter().trigger( (Event) PropertyChangedEventAdapter.this .getTarget()); } catch (OperationAborted e) { e.printStackTrace(); System.err.println(e.getErrorMessage()); } catch (RuntimeException ex) { ex.printStackTrace(); } } } public void setFeature(EStructuralFeature feature) { this.feature = feature; } @Override public boolean equals(Object other) { if (other instanceof FeatureAdapter && ((FeatureAdapter) other).getTarget() != null && ((FeatureAdapter) other).getTarget().equals(getTarget()) && ((FeatureAdapter) other).feature.equals(feature)) return true; return false; } }; public boolean isAdapterForType(Object type) { return PropertyChangedEvent.class.equals(type); } protected Adapter createAdapter(EObject target) { FeatureAdapter adapter = new FeatureAdapter(); for (Adapter existingAdapter : getAdapters()) if (existingAdapter instanceof FeatureAdapter && existingAdapter.equals(adapter)) return existingAdapter; ((EObject) target).eAdapters().add(adapter); getAdapters().add(adapter); return adapter; } protected void adaptPointer(Object pointer, final IPointersEvaluator pointersEvalutator) { Object target = pointersEvalutator.getContext(pointer); if (target instanceof EObject) { String propertyName = pointersEvalutator.getPropertyName(pointer); if (propertyName != null) { EStructuralFeature feature = ((EObject) target).eClass() .getEStructuralFeature(propertyName); if (feature != null) { FeatureAdapter adapter = (FeatureAdapter) createAdapter((EObject) target); adapter.setFeature(feature); } } } } }