| /** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.tuscany.sdo.impl; |
| |
| |
| import java.util.List; |
| |
| import org.apache.tuscany.sdo.SDOFactory; |
| import org.apache.tuscany.sdo.helper.HelperContextImpl; |
| import org.apache.tuscany.sdo.util.BasicSequence; |
| import org.apache.tuscany.sdo.util.DataObjectUtil; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.notify.NotificationChain; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.InternalEObject; |
| import org.eclipse.emf.ecore.EStructuralFeature.Setting; |
| import org.eclipse.emf.ecore.EStructuralFeature.Internal.SettingDelegate; |
| import org.eclipse.emf.ecore.impl.ENotificationImpl; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.emf.ecore.util.BasicFeatureMap; |
| import org.eclipse.emf.ecore.util.EDataTypeEList; |
| import org.eclipse.emf.ecore.util.EDataTypeUniqueEList; |
| import org.eclipse.emf.ecore.util.EObjectContainmentEList; |
| import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; |
| import org.eclipse.emf.ecore.util.EObjectEList; |
| import org.eclipse.emf.ecore.util.EObjectResolvingEList; |
| import org.eclipse.emf.ecore.util.EObjectWithInverseEList; |
| import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList; |
| import org.eclipse.emf.ecore.util.EcoreUtil; |
| import org.eclipse.emf.ecore.util.FeatureMap; |
| import org.eclipse.emf.ecore.util.InternalEList; |
| |
| import commonj.sdo.Property; |
| import commonj.sdo.Sequence; |
| import commonj.sdo.Type; |
| |
| |
| /** |
| * Base implementation of the SDO DataObject interface. Used as base class for generated (static) SDO classes |
| */ |
| public abstract class DataObjectBase extends ExtensibleDataObjectImpl |
| { |
| |
| protected int OPPOSITE_FEATURE_BASE = EOPPOSITE_FEATURE_BASE; |
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| // Following methods should be proposed SPI for generated subclasses to use |
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| protected boolean isNotifying() |
| { |
| return changeRecorder != null; |
| } |
| |
| protected interface ChangeKind |
| { |
| int SET = Notification.SET; |
| int UNSET = Notification.UNSET; |
| int RESOLVE = Notification.RESOLVE; |
| } |
| |
| /** |
| * notify methods for types: boolean, byte, char, double, float, int, long, short, and Object |
| */ |
| |
| protected void notify(int changeKind, int property, boolean oldBooleanValue, boolean newBooleanValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldBooleanValue, newBooleanValue)); |
| } |
| |
| protected void notify(int changeKind, int property, boolean oldBooleanValue, boolean newBooleanValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldBooleanValue, newBooleanValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, byte oldByteValue, byte newByteValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldByteValue, newByteValue)); |
| } |
| |
| protected void notify(int changeKind, int property, byte oldByteValue, byte newByteValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldByteValue, newByteValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, char oldCharValue, char newCharValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldCharValue, newCharValue)); |
| } |
| |
| protected void notify(int changeKind, int property, char oldCharValue, char newCharValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldCharValue, newCharValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, double oldDoubleValue, double newDoubleValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldDoubleValue, newDoubleValue)); |
| } |
| |
| protected void notify(int changeKind, int property, double oldDoubleValue, double newDoubleValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldDoubleValue, newDoubleValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, float oldFloatValue, float newFloatValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldFloatValue, newFloatValue)); |
| } |
| |
| protected void notify(int changeKind, int property, float oldFloatValue, float newFloatValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldFloatValue, newFloatValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, int oldIntValue, int newIntValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldIntValue, newIntValue)); |
| } |
| |
| protected void notify(int changeKind, int property, int oldIntValue, int newIntValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldIntValue, newIntValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, long oldLongValue, long newLongValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldLongValue, newLongValue)); |
| } |
| |
| protected void notify(int changeKind, int property, long oldLongValue, long newLongValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldLongValue, newLongValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, short oldShortValue, short newShortValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldShortValue, newShortValue)); |
| } |
| |
| protected void notify(int changeKind, int property, short oldShortValue, short newShortValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldShortValue, newShortValue, isSetChange)); |
| } |
| |
| protected void notify(int changeKind, int property, Object oldValue, Object newValue) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldValue, newValue)); |
| } |
| |
| protected void notify(int changeKind, int property, Object oldValue, Object newValue, boolean isSetChange) |
| { |
| eNotify(new ENotificationImpl(this, Notification.SET, property, oldValue, newValue, isSetChange)); |
| } |
| |
| public interface ListKind |
| { |
| int CONTAINMENT = 0; |
| int CONTAINMENT_UNSETTABLE = 1; |
| int CONTAINMENT_RESOLVING = 2; |
| int CONTAINMENT_RESOLVING_UNSETTABLE = 3; |
| int CONTAINMENT_INVERSE = 4; |
| int CONTAINMENT_INVERSE_UNSETTABLE = 5; |
| int CONTAINMENT_INVERSE_RESOLVING = 6; |
| int CONTAINMENT_INVERSE_RESOLVING_UNSETTABLE = 7; |
| |
| int NONCONTAINMENT = 8; |
| int NONCONTAINMENT_UNSETTABLE = 9; |
| int NONCONTAINMENT_RESOLVING = 10; |
| int NONCONTAINMENT_RESOLVING_UNSETTABLE = 11; |
| int NONCONTAINMENT_INVERSE = 12; |
| int NONCONTAINMENT_INVERSE_UNSETTABLE = 13; |
| int NONCONTAINMENT_MANYINVERSE = 14; |
| int NONCONTAINMENT_MANYINVERSE_UNSETTABLE = 15; |
| int NONCONTAINMENT_INVERSE_RESOLVING = 16; |
| int NONCONTAINMENT_INVERSE_RESOLVING_UNSETTABLE = 17; |
| int NONCONTAINMENT_MANYINVERSE_RESOLVING = 18; |
| int NONCONTAINMENT_MANYINVERSE_RESOLVING_UNSETTABLE = 19; |
| |
| int DATATYPE = 20; |
| int DATATYPE_UNSETTABLE = 21; |
| int DATATYPE_UNIQUE = 22; |
| int DATATYPE_UNIQUE_UNSETTABLE = 23; |
| |
| int BASIC = 24; |
| } |
| |
| /** |
| * @deprecated |
| */ |
| protected List createPropertyList(int listKind, Class dataClass, int property) |
| { |
| return createPropertyList(listKind, dataClass, property, 0); |
| } |
| |
| protected List createPropertyList(int listKind, Class dataClass, int property, int reverseProperty) |
| { |
| switch (listKind) |
| { |
| case ListKind.CONTAINMENT: |
| return new EObjectContainmentEList(dataClass, this, property); |
| case ListKind.CONTAINMENT_INVERSE_RESOLVING_UNSETTABLE: |
| return new EObjectContainmentWithInverseEList.Unsettable.Resolving(dataClass, this, property, reverseProperty); |
| case ListKind.CONTAINMENT_INVERSE_RESOLVING: |
| return new EObjectContainmentWithInverseEList.Resolving(dataClass, this, property, reverseProperty); |
| case ListKind.CONTAINMENT_INVERSE_UNSETTABLE: |
| return new EObjectContainmentWithInverseEList.Unsettable(dataClass, this, property, reverseProperty); |
| case ListKind.CONTAINMENT_INVERSE: |
| return new EObjectContainmentWithInverseEList(dataClass, this, property, reverseProperty); |
| case ListKind.CONTAINMENT_RESOLVING_UNSETTABLE: |
| return new EObjectContainmentEList.Unsettable.Resolving(dataClass, this, property); |
| case ListKind.CONTAINMENT_RESOLVING: |
| return new EObjectContainmentEList.Resolving(dataClass, this, property); |
| case ListKind.CONTAINMENT_UNSETTABLE: |
| return new EObjectContainmentEList.Unsettable(dataClass, this, property); |
| case ListKind.NONCONTAINMENT_MANYINVERSE_RESOLVING_UNSETTABLE: |
| return new EObjectWithInverseResolvingEList.Unsettable.ManyInverse(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_MANYINVERSE_RESOLVING: |
| return new EObjectWithInverseResolvingEList.ManyInverse(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_INVERSE_RESOLVING_UNSETTABLE: |
| return new EObjectWithInverseResolvingEList.Unsettable(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_INVERSE_RESOLVING: |
| return new EObjectWithInverseResolvingEList(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_MANYINVERSE_UNSETTABLE: |
| return new EObjectWithInverseEList.Unsettable.ManyInverse(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_MANYINVERSE: |
| return new EObjectWithInverseEList.ManyInverse(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_INVERSE_UNSETTABLE: |
| return new EObjectWithInverseEList.Unsettable(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_INVERSE: |
| return new EObjectWithInverseEList(dataClass, this, property, reverseProperty); |
| case ListKind.NONCONTAINMENT_RESOLVING_UNSETTABLE: |
| return new EObjectResolvingEList.Unsettable(dataClass, this, property); |
| case ListKind.NONCONTAINMENT_RESOLVING: |
| return new EObjectResolvingEList(dataClass, this, property); |
| case ListKind.NONCONTAINMENT_UNSETTABLE: |
| return new EObjectEList.Unsettable(dataClass, this, property); |
| case ListKind.NONCONTAINMENT: |
| return new EObjectEList(dataClass, this, property); |
| case ListKind.DATATYPE_UNIQUE_UNSETTABLE: |
| return new EDataTypeUniqueEList.Unsettable(dataClass, this, property); |
| case ListKind.DATATYPE_UNIQUE: |
| return new EDataTypeUniqueEList(dataClass, this, property); |
| case ListKind.DATATYPE_UNSETTABLE: |
| return new EDataTypeEList.Unsettable(dataClass, this, property); |
| case ListKind.DATATYPE: |
| return new EDataTypeEList(dataClass, this, property); |
| } |
| return null; |
| } |
| |
| protected BasicSequence createSequence(int property) { |
| return new BasicSequence(new BasicFeatureMap(this, property)); |
| } |
| |
| protected Sequence createSequence(Sequence sequence, Type type, int propertyIndex) { |
| return new BasicSequence((FeatureMap.Internal)((FeatureMap.Internal.Wrapper)sequence).featureMap().list(((EClass)type).getEStructuralFeature(propertyIndex))); |
| } |
| |
| protected void createChangeSummary(int property) { |
| ChangeSummaryImpl changeSummary = (ChangeSummaryImpl)SDOFactory.eINSTANCE.createChangeSummary(); |
| set(property, changeSummary); |
| changeSummary.setDataObject(this); |
| } |
| |
| /* |
| * get the value of the type's property at propertyIndex via the sequence |
| * @param seq |
| * @param type |
| * @param propertyIndex |
| * @return |
| */ |
| protected Object get(Sequence seq, Type type, int propertyIndex) { |
| return ((FeatureMap.Internal.Wrapper)seq).featureMap().get(((EClass)type).getEStructuralFeature(propertyIndex), true); |
| } |
| |
| protected List getList(Sequence seq, Type type, int propertyIndex) { |
| return ((FeatureMap.Internal.Wrapper)seq).featureMap().list(((EClass)type).getEStructuralFeature(propertyIndex)); |
| } |
| |
| protected void set(Sequence seq, Type type, int propertyIndex, Object newValue) { |
| ((FeatureMap.Internal)((FeatureMap.Internal.Wrapper)seq).featureMap()).set(((EClass)type).getEStructuralFeature(propertyIndex), newValue); |
| } |
| |
| protected void unset(Sequence seq, Type type, int propertyIndex) { |
| ((FeatureMap.Internal)((FeatureMap.Internal.Wrapper)seq).featureMap()).clear(((EClass)type).getEStructuralFeature(propertyIndex)); |
| |
| } |
| protected boolean isSet(Sequence seq, Type type, int propertyIndex) { |
| return !((FeatureMap.Internal)((FeatureMap.Internal.Wrapper)seq).featureMap()).isEmpty(((EClass)type).getEStructuralFeature(propertyIndex)); |
| } |
| |
| protected boolean isSequenceEmpty(Sequence sequence) { |
| return ((FeatureMap.Internal.Wrapper)sequence).featureMap().isEmpty(); |
| } |
| |
| protected void setSequence(Sequence seq, Object newValue) { |
| ((FeatureMap.Internal)((FeatureMap.Internal.Wrapper)seq).featureMap()).set(newValue); |
| } |
| |
| protected void unsetSequence(Sequence seq) { |
| ((FeatureMap.Internal.Wrapper)seq).featureMap().clear(); |
| } |
| |
| protected ChangeContext basicAdd(Sequence seq, Type type, int propertyIndex, Object newValue, ChangeContext changeContext) { |
| ChangeContextImpl changeContextImpl = (ChangeContextImpl)changeContext; |
| changeContextImpl.notificationChain = ((FeatureMap.Internal)((FeatureMap.Internal.Wrapper)seq).featureMap()).basicAdd(((EClass)type).getEStructuralFeature(propertyIndex), newValue, changeContextImpl.notificationChain); |
| return changeContextImpl; |
| } |
| |
| private ChangeContextImpl initializeChangeContext(ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl; |
| if (changeContext == null) |
| { |
| changeContextImpl = new ChangeContextImpl(null); |
| } else |
| { |
| changeContextImpl = (ChangeContextImpl)changeContext; |
| } |
| return changeContextImpl; |
| } |
| |
| protected interface ChangeContext {} |
| |
| |
| protected ChangeContext inverseRemove(Object otherEnd, int propertyIndex, ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| changeContextImpl.notificationChain = super.eInverseRemove((InternalEObject)otherEnd, propertyIndex, changeContextImpl.notificationChain); |
| return changeContextImpl; |
| } |
| |
| protected ChangeContext inverseAdd(Object otherEnd, int propertyIndex, ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| changeContextImpl.notificationChain = super.eInverseAdd((InternalEObject)otherEnd, propertyIndex, changeContextImpl.notificationChain); |
| return changeContextImpl; |
| } |
| |
| protected ChangeContext inverseRemove(Object thisEnd, Object otherEnd, int propertyIndex, Class baseClass, ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| changeContextImpl.notificationChain = ((InternalEObject)thisEnd).eInverseRemove((InternalEObject)otherEnd, propertyIndex, baseClass, changeContextImpl.notificationChain); |
| return changeContextImpl; |
| } |
| |
| protected ChangeContext inverseAdd(Object thisEnd, Object otherEnd, int propertyIndex, Class baseClass, ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| changeContextImpl.notificationChain = ((InternalEObject)thisEnd).eInverseAdd((InternalEObject)otherEnd, propertyIndex, baseClass, changeContextImpl.notificationChain); |
| return changeContextImpl; |
| } |
| |
| protected ChangeContext addNotification(Object notifier, int eventType, int featureID, Object oldValue, Object newValue, boolean isSetChanged, ChangeContext changeContext) |
| { |
| ENotificationImpl notification = new ENotificationImpl((InternalEObject)notifier, eventType, featureID, oldValue, newValue, isSetChanged ); |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| if (changeContextImpl.notificationChain == null) changeContextImpl.notificationChain = notification; else changeContextImpl.notificationChain.add(notification); |
| return changeContextImpl; |
| } |
| |
| protected ChangeContext addNotification(Object notifier, int eventType, int featureID, Object oldValue, Object newValue, ChangeContext changeContext) |
| { |
| ENotificationImpl notification = new ENotificationImpl((InternalEObject)notifier, eventType, featureID, oldValue, newValue); |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| if (changeContextImpl.notificationChain == null) changeContextImpl.notificationChain = notification; else changeContextImpl.notificationChain.add(notification); |
| return changeContextImpl; |
| } |
| |
| protected ChangeContext removeFromList(List propertyList, Object objectToRemove, ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| changeContextImpl.notificationChain = ((InternalEList)propertyList).basicRemove(objectToRemove, changeContextImpl.notificationChain); |
| return changeContextImpl; |
| } |
| |
| protected ChangeContext removeFromSequence(Sequence sequence, Object otherEnd, ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| changeContextImpl.notificationChain = ((InternalEList)((FeatureMap.Internal.Wrapper)sequence).featureMap()).basicRemove(otherEnd, changeContextImpl.notificationChain); |
| return changeContextImpl; |
| } |
| |
| protected void dispatch(ChangeContext changeContext) |
| { |
| ChangeContextImpl changeContextImpl = initializeChangeContext(changeContext); |
| if (changeContextImpl.notificationChain != null) |
| { |
| changeContextImpl.notificationChain.dispatch(); |
| } |
| } |
| |
| protected boolean isProxy() // FB TODO : regen models and then remove this method |
| { |
| return eIsProxy(); |
| } |
| |
| protected boolean isProxy(Object object) |
| { |
| return ((EObject)object).eIsProxy(); |
| } |
| |
| protected Object resolveProxy(Object proxy) |
| { |
| Resource resource = this.eResource(); |
| ResourceSet resourceSet = resource != null ? resource.getResourceSet() : null; |
| if (resourceSet != null) return EcoreUtil.resolve((EObject)proxy, resourceSet); |
| |
| URI proxyURI = ((InternalEObject)proxy).eProxyURI(); |
| if (proxyURI != null) |
| { |
| EPackage ePackage = HelperContextImpl.getBuiltInModelRegistry().getEPackage(proxyURI.trimFragment().toString()); |
| if (ePackage != null) |
| { |
| resource = ePackage.eResource(); |
| if (resource != null) |
| { |
| return resource.getEObject(proxyURI.fragment().toString()); |
| } |
| } |
| } |
| return null; |
| } |
| |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| // Following methods override EMF methods to work with pure SDO generated subclasses |
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| public EClass eStaticClass() |
| { |
| return (EClass)getStaticType(); |
| } |
| |
| public Type getStaticType() // must be overridden in subclasses |
| { |
| throw new UnsupportedOperationException(); |
| } |
| |
| public int eStaticFeatureCount() |
| { |
| return getStaticPropertyCount(); |
| } |
| |
| public int getStaticPropertyCount() // must be overridden in subclasses |
| { |
| throw new UnsupportedOperationException(); |
| } |
| |
| protected int internalConvertIndex(int internalIndex) |
| { |
| return internalIndex; |
| } |
| |
| public Object eGet(int featureID, boolean resolve, boolean coreType) |
| { |
| Object result = get(internalConvertIndex(featureID), resolve); |
| if (coreType) |
| { |
| if (result instanceof FeatureMap.Internal.Wrapper) result = ((FeatureMap.Internal.Wrapper)result).featureMap(); |
| } |
| return result; |
| } |
| |
| public void eSet(int featureID, Object newValue) |
| { |
| set(internalConvertIndex(featureID), newValue); |
| } |
| |
| public void eUnset(int featureID) |
| { |
| unset(internalConvertIndex(featureID)); |
| } |
| |
| public boolean eIsSet(int featureID) |
| { |
| return isSet(internalConvertIndex(featureID)); |
| } |
| |
| private class ChangeContextImpl implements ChangeContext |
| { |
| protected NotificationChain notificationChain; |
| public ChangeContextImpl(NotificationChain notificationChain) { |
| this.notificationChain = notificationChain; |
| } |
| } |
| |
| //FB TODO ... review this? ... what about eInverseAdd? |
| public NotificationChain eInverseRemove(InternalEObject otherEnd, int internalIndex, NotificationChain msgs) |
| { |
| return ((ChangeContextImpl)inverseRemove(otherEnd, internalConvertIndex(internalIndex), new ChangeContextImpl(msgs))).notificationChain; |
| } |
| |
| public String toString() |
| { |
| StringBuffer result = new StringBuffer(getClass().getName()); |
| result.append('@'); |
| result.append(Integer.toHexString(hashCode())); |
| if (eIsProxy()) |
| { |
| result.append(" (proxyURI: "); |
| result.append(eProxyURI()); |
| result.append(')'); |
| } |
| return result.toString(); |
| } |
| |
| } //DataObjectBase |
| |
| |
| |
| |
| |
| |
| |