/** * <copyright> * </copyright> * * $Id$ */ package org.eclipse.gmf.internal.bridge.trace.impl; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.gmf.internal.bridge.trace.MatchingTrace; import org.eclipse.gmf.internal.bridge.trace.TracePackage; import org.eclipse.ocl.ParserException; import org.eclipse.ocl.ecore.OCL; import org.eclipse.ocl.ecore.OCL.Helper; import org.eclipse.ocl.ecore.OCL.Query; /** * <!-- begin-user-doc --> * An implementation of the model object '<em><b>Matching Trace</b></em>'. * <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link org.eclipse.gmf.internal.bridge.trace.impl.MatchingTraceImpl#getQueryText <em>Query Text</em>}</li> * </ul> * </p> * * @generated */ public abstract class MatchingTraceImpl extends AbstractTraceImpl implements MatchingTrace { /** * The default value of the '{@link #getQueryText() <em>Query Text</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getQueryText() * @generated * @ordered */ protected static final String QUERY_TEXT_EDEFAULT = null; /** * The cached value of the '{@link #getQueryText() <em>Query Text</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getQueryText() * @generated * @ordered */ protected String queryText = QUERY_TEXT_EDEFAULT; protected Query query; /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ protected MatchingTraceImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return TracePackage.Literals.MATCHING_TRACE; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public String getQueryText() { return queryText; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setQueryText(String newQueryText) { String oldQueryText = queryText; queryText = newQueryText; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, TracePackage.MATCHING_TRACE__QUERY_TEXT, oldQueryText, queryText)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public abstract EClass getQueryContext(); public Query getQuery() throws ParserException { if (query == null) { query = createQuery(); } return query; } private Query createQuery() throws ParserException { OCL ocl = OCL.newInstance(); Helper oclHelper = ocl.createOCLHelper(); oclHelper.setContext(getQueryContext()); return ocl.createQuery(oclHelper.createQuery(getQueryText())); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public String getEClassComparision(String varName, EClass eClass) { StringBuffer result = new StringBuffer(); result.append(varName); result.append(".ePackage.nsURI = '"); result.append(eClass.getEPackage().getNsURI()); result.append("' and "); result.append(varName); result.append(".name = '"); result.append(eClass.getName()); result.append("'"); return result.toString(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public String getEStructuralFeatureComparison(String varName, EStructuralFeature feature) { StringBuffer result = new StringBuffer(); result.append("(let _eClass_:ecore::EClass = "); result.append(varName); result.append(".eContainingClass in "); result.append(getEClassComparision("_eClass_", feature.getEContainingClass())); result.append(") and "); result.append(varName); result.append(".name = '"); result.append(feature.getName()); result.append("'"); return result.toString(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case TracePackage.MATCHING_TRACE__QUERY_TEXT: return getQueryText(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case TracePackage.MATCHING_TRACE__QUERY_TEXT: setQueryText((String)newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case TracePackage.MATCHING_TRACE__QUERY_TEXT: setQueryText(QUERY_TEXT_EDEFAULT); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case TracePackage.MATCHING_TRACE__QUERY_TEXT: return QUERY_TEXT_EDEFAULT == null ? queryText != null : !QUERY_TEXT_EDEFAULT.equals(queryText); } return super.eIsSet(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (queryText: "); result.append(queryText); result.append(')'); return result.toString(); } } //MatchingTraceImpl