org.eclipse.emf.ecore.impl
Class BasicEObjectImpl

java.lang.Object
  extended byorg.eclipse.emf.common.notify.impl.BasicNotifierImpl
      extended byorg.eclipse.emf.ecore.impl.BasicEObjectImpl
All Implemented Interfaces:
EObject, InternalEObject, Notifier
Direct Known Subclasses:
EObjectImpl

public class BasicEObjectImpl
extends BasicNotifierImpl
implements EObject, InternalEObject

An implementation of the model object 'EObject'.


Nested Class Summary
protected static interface BasicEObjectImpl.EPropertiesHolder
          An internal interface for holding less frequently members variables.
protected static class BasicEObjectImpl.EPropertiesHolderImpl
          An internal class for holding less frequently members variables.
 
Nested classes inherited from class org.eclipse.emf.common.notify.impl.BasicNotifierImpl
BasicNotifierImpl.EAdapterList
 
Nested classes inherited from class org.eclipse.emf.ecore.InternalEObject
InternalEObject.EStore
 
Field Summary
 
Fields inherited from interface org.eclipse.emf.ecore.InternalEObject
EOPPOSITE_FEATURE_BASE
 
Constructor Summary
protected BasicEObjectImpl()
          Creates a basic EObject.
 
Method Summary
 TreeIterator eAllContents()
           Returns a tree iterator that iterates over all the direct contents and indirect contents of this object.
 int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass)
          Returns the feature ID relative to the base class, given a feature ID relative to this derived object's actual class.
protected  BasicEObjectImpl.EPropertiesHolder eBasicProperties()
           
 NotificationChain eBasicRemoveFromContainer(NotificationChain msgs)
          Removes this object from whatever container holds it, and returns accumulated notifications.
protected  void eBasicSetContainer(InternalEObject newContainer, int newContainerFeatureID)
           
 NotificationChain eBasicSetContainer(InternalEObject newContainer, int newContainerFeatureID, NotificationChain msgs)
          Sets the container to be new container and appropriate feature.
 EClass eClass()
           Returns the meta class.
 EObject eContainer()
           Returns the containing object, or null.
 int eContainerFeatureID()
          Returns the container feature ID.
 EStructuralFeature eContainingFeature()
           Returns the particular feature of the container that actually holds the object, or null, if there is no container.
 EReference eContainmentFeature()
           Returns the containment feature that properly contains the object, or null, if there is no container.
 boolean eContains(EObject eObject)
           
 EList eContents()
           Returns a list view of the content objects; it is unmodifiable.
 EList eCrossReferences()
           Returns a list view of the cross referenced objects; it is unmodifiable.
 int eDerivedStructuralFeatureID(EStructuralFeature eStructuralFeature)
           
 int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass)
          Returns the feature ID relative to this derived object's actual class, given a feature ID relative to the given base class.
protected  Resource.Internal eDirectResource()
           
 NotificationChain eDynamicBasicRemoveFromContainer(NotificationChain msgs)
           
protected  EClass eDynamicClass()
           
protected  EStructuralFeature eDynamicFeature(int dynamicFeatureID)
           
protected  int eDynamicFeatureID(EStructuralFeature eStructuralFeature)
           
 Object eDynamicGet(EStructuralFeature eFeature, boolean resolve)
           
 NotificationChain eDynamicInverseAdd(InternalEObject otherEnd, int featureID, Class inverseClass, NotificationChain msgs)
           
 NotificationChain eDynamicInverseRemove(InternalEObject otherEnd, int featureID, Class inverseClass, NotificationChain msgs)
           
 boolean eDynamicIsSet(EStructuralFeature eFeature)
           
 void eDynamicSet(EStructuralFeature eFeature, Object newValue)
           
 void eDynamicUnset(EStructuralFeature eFeature)
           
 Object eGet(EStructuralFeature eFeature)
           Returns the value of the given feature of this object.
 Object eGet(EStructuralFeature eFeature, boolean resolve)
           Returns the value of the given feature of the object; the value is optionally resolved before it is returned.
protected  boolean eHasSettings()
           
protected  InternalEObject eInternalContainer()
           
 Resource.Internal eInternalResource()
          Returns the containing internal resource, or null.
 NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs)
          Adds the object at the other end of a bidirectional reference to the appropriate feature and returns accumulated notifications.
 NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs)
          Removes the object at the other end of a bidirectional reference from the appropriate feature and returns accumulated notifications.
 boolean eIsProxy()
           Indicates whether this object is a proxy.
 boolean eIsSet(EStructuralFeature eFeature)
           Returns whether the feature of the object is considered to be set.
 EObject eObjectForURIFragmentSegment(String uriFragmentSegment)
          Returns the object resolved by the fragment segment.
 Object eOpenGet(EStructuralFeature eFeature, boolean resolve)
           
 boolean eOpenIsSet(EStructuralFeature eFeature)
           
 void eOpenSet(EStructuralFeature eFeature, Object newValue)
           
 void eOpenUnset(EStructuralFeature eFeature)
           
protected  BasicEObjectImpl.EPropertiesHolder eProperties()
           
 URI eProxyURI()
          Returns the proxy URI of this object.
 EObject eResolveProxy(InternalEObject proxy)
          Resolves the proxy object relative to this object.
 Resource eResource()
           Returns the containing resource, or null.
 void eSet(EStructuralFeature eFeature, Object newValue)
           Sets the value of the given feature of the object to the new value.
 void eSetClass(EClass eClass)
          Sets the meta class.
 void eSetProxyURI(URI uri)
          Set the proxy URI of this object.
 NotificationChain eSetResource(Resource.Internal resource, NotificationChain notifications)
          Sets this object to be directly contained by the resource and returns accumulated notifications.
 void eSetStore(InternalEObject.EStore store)
          Set the store associated with this object.
 EStructuralFeature.Setting eSetting(EStructuralFeature eFeature)
          Returns a setting that can be used to access this object's feature.
protected  EStructuralFeature.Internal.SettingDelegate eSettingDelegate(EStructuralFeature eFeature)
           
protected  EStructuralFeature.Internal.DynamicValueHolder eSettings()
           
protected  EClass eStaticClass()
           
protected  int eStaticFeatureCount()
           
 InternalEObject.EStore eStore()
          Returns the store associated with this object.
 void eUnset(EStructuralFeature eFeature)
           Unsets the feature of the object.
 String eURIFragmentSegment(EStructuralFeature eStructuralFeature, EObject eObject)
          Returns the fragment segment that, when passed to eObjectForURIFragmentSegment, will resolve to the given object in this object's given feature.
 String toString()
           
 
Methods inherited from class org.eclipse.emf.common.notify.impl.BasicNotifierImpl
eAdapters, eBasicAdapters, eDeliver, eNotificationRequired, eNotify, eSetDeliver
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.eclipse.emf.common.notify.Notifier
eAdapters, eDeliver, eNotify, eSetDeliver
 
Methods inherited from interface org.eclipse.emf.ecore.InternalEObject
eNotificationRequired
 

Constructor Detail

BasicEObjectImpl

protected BasicEObjectImpl()
Creates a basic EObject.

Method Detail

eStaticFeatureCount

protected int eStaticFeatureCount()

eProperties

protected BasicEObjectImpl.EPropertiesHolder eProperties()

eBasicProperties

protected BasicEObjectImpl.EPropertiesHolder eBasicProperties()

eHasSettings

protected boolean eHasSettings()

eSettings

protected EStructuralFeature.Internal.DynamicValueHolder eSettings()

eDynamicFeatureID

protected int eDynamicFeatureID(EStructuralFeature eStructuralFeature)

eDynamicFeature

protected EStructuralFeature eDynamicFeature(int dynamicFeatureID)

eURIFragmentSegment

public String eURIFragmentSegment(EStructuralFeature eStructuralFeature,
                                  EObject eObject)
Description copied from interface: InternalEObject
Returns the fragment segment that, when passed to eObjectForURIFragmentSegment, will resolve to the given object in this object's given feature.

The feature argument may be null in which case it will be deduced, if possible. The default result will be of the form:

  "@<feature-name>[.<index>]"
The index is used only for many-valued features; it represents the position within the list.

Specified by:
eURIFragmentSegment in interface InternalEObject
Parameters:
eStructuralFeature - the feature relating the given object to this object, or null.
eObject - the object to be identified.
Returns:
the fragment segment that resolves to the given object in this object's given feature.

eObjectForURIFragmentSegment

public EObject eObjectForURIFragmentSegment(String uriFragmentSegment)
Description copied from interface: InternalEObject
Returns the object resolved by the fragment segment.

The fragment segment encoding will typically be of the form returned by eURIFragmentSegment.

Specified by:
eObjectForURIFragmentSegment in interface InternalEObject
Parameters:
uriFragmentSegment - a fragment segment.
Returns:
the fragment segment that resolves to the given object in this object's given feature.

eContains

public boolean eContains(EObject eObject)

eContainer

public EObject eContainer()
Description copied from interface: EObject
Returns the containing object, or null.

An object is contained by another object if it appears in the contents of that object. The object will be contained by a containment feature of the containing object.

Specified by:
eContainer in interface EObject
Returns:
the containing object.
See Also:
EObject.eResource(), EcoreUtil.remove(EObject), EObject.eContainmentFeature(), EObject.eContainingFeature(), EcoreUtil.getRootContainer(org.eclipse.emf.ecore.EObject), EObject.eContents()

eInternalContainer

protected InternalEObject eInternalContainer()

eContainerFeatureID

public int eContainerFeatureID()
Description copied from interface: InternalEObject
Returns the container feature ID. If the container isn't a navigable feature, this will be a negative ID indicating the inverse of the containment feature's ID.

Specified by:
eContainerFeatureID in interface InternalEObject
Returns:
the container feature ID.
See Also:
EObject.eContainmentFeature(), InternalEObject.EOPPOSITE_FEATURE_BASE

eBasicSetContainer

protected void eBasicSetContainer(InternalEObject newContainer,
                                  int newContainerFeatureID)

eContents

public EList eContents()
Description copied from interface: EObject
Returns a list view of the content objects; it is unmodifiable.

This will be the list of EObjects determined by the contents of the containment features of this object's meta class. Objects can, indirectly, be removed and will change to reflect container changes. The implicit tree of contents is also directly available.

Specified by:
eContents in interface EObject
Returns:
a list view of the content objects.
See Also:
EObject.eContainer(), EClass.getEAllContainments(), EObject.eGet(EStructuralFeature), EcoreUtil.remove(EObject), EObject.eAllContents()

eCrossReferences

public EList eCrossReferences()
Description copied from interface: EObject
Returns a list view of the cross referenced objects; it is unmodifiable.

This will be the list of EObjects determined by the contents of the reference features of this object's meta class, excluding containment features and their opposites. The cross reference list's iterator will be of type EContentsEList.FeatureIterator, for efficient determination of the feature of each cross reference in the list, e.g.,

  for (EContentEList.FeatureIterator featureIterator = 
        (EContentEList.FeatureIterator)eObject.eCrossReferences().iterator();
       featureIterator.hasNext(); )
  {
    EObject eObject = (EObject)featureIterator.next();
    EReference eReference = (EReference)featureIterator.feature();
    ...
  }

Specified by:
eCrossReferences in interface EObject
Returns:
a list view of the cross referenced objects.
See Also:
EObject.eContents(), EClass.getEAllReferences(), EClass.getEAllContainments(), EObject.eGet(EStructuralFeature), EcoreUtil.CrossReferencer

eAllContents

public TreeIterator eAllContents()
Description copied from interface: EObject
Returns a tree iterator that iterates over all the direct contents and indirect contents of this object.

Specified by:
eAllContents in interface EObject
Returns:
a tree iterator that iterates over all contents.
See Also:
Resource.getAllContents(), EcoreUtil.getAllContents(java.util.Collection)

eContainmentFeature

public EReference eContainmentFeature()
Description copied from interface: EObject
Returns the containment feature that properly contains the object, or null, if there is no container. Because of support for wildcard content, this feature may not be a direct feature of the container's class, but rather a feature of an entry in a feature map feature of the container's class.

Specified by:
eContainmentFeature in interface EObject
Returns:
the feature that properly contains the object.
See Also:
EObject.eContainer(), EObject.eContainingFeature(), EReference.isContainment(), EClass.getEAllContainments(), FeatureMap.Entry.getEStructuralFeature()

eContainingFeature

public EStructuralFeature eContainingFeature()
Description copied from interface: EObject
Returns the particular feature of the container that actually holds the object, or null, if there is no container. Because of support for wildcard content, this feature may be an attribute representing a feature map; in this case the object is referenced by the containment feature of an entry in the map, i.e., the eContainmentFeature.

Specified by:
eContainingFeature in interface EObject
Returns:
the feature that actually contains the object.
See Also:
EObject.eContainer(), EObject.eContainmentFeature(), EClass.getEAllContainments(), EReference.isContainment(), FeatureMap.Entry.getEStructuralFeature()

eDirectResource

protected Resource.Internal eDirectResource()

eResource

public Resource eResource()
Description copied from interface: EObject
Returns the containing resource, or null.

An object is contained in a resource if it, or one of it's containers, appears in the contents of that resource.

An object must be contained by a resource in order to be serialized.

Specified by:
eResource in interface EObject
Returns:
the containing resource.
See Also:
EcoreUtil.remove(EObject), EObject.eContainer()

eInternalResource

public Resource.Internal eInternalResource()
Description copied from interface: InternalEObject
Returns the containing internal resource, or null.

Specified by:
eInternalResource in interface InternalEObject
Returns:
the containing internal resource.
See Also:
EObject.eResource()

eSetResource

public NotificationChain eSetResource(Resource.Internal resource,
                                      NotificationChain notifications)
Description copied from interface: InternalEObject
Sets this object to be directly contained by the resource and returns accumulated notifications. This is only done as the inverse of Resource.getContents().add(this).

Specified by:
eSetResource in interface InternalEObject
Returns:
accumulated notifications.

eGet

public Object eGet(EStructuralFeature eFeature)
Description copied from interface: EObject
Returns the value of the given feature of this object.

It returns the resolved value, i.e., it returns

  eObject.eGet(feature, true)

Specified by:
eGet in interface EObject
Parameters:
eFeature - the feature of the value to fetch.
Returns:
the value of the given feature of this object.
See Also:
EObject.eGet(EStructuralFeature, boolean)

eGet

public Object eGet(EStructuralFeature eFeature,
                   boolean resolve)
Description copied from interface: EObject
Returns the value of the given feature of the object; the value is optionally resolved before it is returned.

If the feature is many-valued, the result will be an EList and each object in the list will be an instance of the feature's type; the list's contents are not affected by resolve argument. Otherwise the result directly will be an instance of the feature's type; if it is a proxy, it is resolved.

Specified by:
eGet in interface EObject
Parameters:
eFeature - the feature of the value to fetch.
resolve - whether to resolve.
Returns:
the value of the given feature of the object.
See Also:
InternalEList.basicIterator(), InternalEList.basicList(), EcoreUtil.resolve(EObject, org.eclipse.emf.ecore.resource.ResourceSet), EObject.eSet(EStructuralFeature, Object), EObject.eUnset(EStructuralFeature), EObject.eIsSet(EStructuralFeature), EObject.eGet(EStructuralFeature)

eDynamicGet

public Object eDynamicGet(EStructuralFeature eFeature,
                          boolean resolve)

eOpenGet

public Object eOpenGet(EStructuralFeature eFeature,
                       boolean resolve)

eSet

public void eSet(EStructuralFeature eFeature,
                 Object newValue)
Description copied from interface: EObject
Sets the value of the given feature of the object to the new value.

If the feature is many-valued, the new value must be an EList and each object in that list must be an instance of the feature's type; the existing contents are cleared and the contents of the new value are added. Otherwise the new value directly must be an instance of the feature's type and it becomes the new value of the feature of the object. If the feature is unsettable, the modeled state becomes set; otherwise, the feature may still not considered set if the new value is the same as the default.

Specified by:
eSet in interface EObject
Parameters:
eFeature - the feature of the value to set.
See Also:
EObject.eUnset(EStructuralFeature), EObject.eIsSet(EStructuralFeature), EObject.eGet(EStructuralFeature, boolean)

eDynamicSet

public void eDynamicSet(EStructuralFeature eFeature,
                        Object newValue)

eOpenSet

public void eOpenSet(EStructuralFeature eFeature,
                     Object newValue)

eUnset

public void eUnset(EStructuralFeature eFeature)
Description copied from interface: EObject
Unsets the feature of the object.

If the feature is many-valued, the value must be an EList and that list is cleared. Otherwise, the value of the feature of the object is set to the feature's default value or the meta class's default value, as appropriate. If the feature is unsettable, the modeled state becomes unset. In any case, the feature will no longer be considered set.

Specified by:
eUnset in interface EObject
Parameters:
eFeature - the feature in question.
See Also:
EObject.eIsSet(EStructuralFeature), EObject.eSet(EStructuralFeature, Object), EObject.eGet(EStructuralFeature, boolean)

eDynamicUnset

public void eDynamicUnset(EStructuralFeature eFeature)

eOpenUnset

public void eOpenUnset(EStructuralFeature eFeature)

eIsSet

public boolean eIsSet(EStructuralFeature eFeature)
Description copied from interface: EObject
Returns whether the feature of the object is considered to be set.

If the feature is many-valued, the value must be an EList and the feature is considered set if the list is not empty. If the feature is unsettable, the modeled state is directly available and is used. Otherwise, the unresolved value of the feature of the object is compared against the feature's default value or the meta class's default value, as appropriate; the feature is considered set if it's not the same as the default.

This property can affect serialization, since defaults are typically omitted in a compact serialization.

Specified by:
eIsSet in interface EObject
Parameters:
eFeature - the feature in question.
Returns:
whether the feature of the object is set.
See Also:
EObject.eSet(EStructuralFeature, Object), EObject.eUnset(EStructuralFeature), EObject.eGet(EStructuralFeature, boolean)

eDynamicIsSet

public boolean eDynamicIsSet(EStructuralFeature eFeature)

eOpenIsSet

public boolean eOpenIsSet(EStructuralFeature eFeature)

eBasicSetContainer

public NotificationChain eBasicSetContainer(InternalEObject newContainer,
                                            int newContainerFeatureID,
                                            NotificationChain msgs)
Description copied from interface: InternalEObject
Sets the container to be new container and appropriate feature. and returns accumulated notifications. Since the container feature may not be navigable, i.e., may not exist, the containment feature may be encoded instead.

Specified by:
eBasicSetContainer in interface InternalEObject
Returns:
accumulated notifications.

eBasicRemoveFromContainer

public NotificationChain eBasicRemoveFromContainer(NotificationChain msgs)
Description copied from interface: InternalEObject
Removes this object from whatever container holds it, and returns accumulated notifications.

Specified by:
eBasicRemoveFromContainer in interface InternalEObject
Returns:
accumulated notifications.

eDynamicBasicRemoveFromContainer

public NotificationChain eDynamicBasicRemoveFromContainer(NotificationChain msgs)

eInverseAdd

public NotificationChain eInverseAdd(InternalEObject otherEnd,
                                     int featureID,
                                     Class baseClass,
                                     NotificationChain msgs)
Description copied from interface: InternalEObject
Adds the object at the other end of a bidirectional reference to the appropriate feature and returns accumulated notifications.

Specified by:
eInverseAdd in interface InternalEObject
Returns:
accumulated notifications.

eDynamicInverseAdd

public NotificationChain eDynamicInverseAdd(InternalEObject otherEnd,
                                            int featureID,
                                            Class inverseClass,
                                            NotificationChain msgs)

eInverseRemove

public NotificationChain eInverseRemove(InternalEObject otherEnd,
                                        int featureID,
                                        Class baseClass,
                                        NotificationChain msgs)
Description copied from interface: InternalEObject
Removes the object at the other end of a bidirectional reference from the appropriate feature and returns accumulated notifications.

Specified by:
eInverseRemove in interface InternalEObject
Returns:
accumulated notifications.

eDynamicInverseRemove

public NotificationChain eDynamicInverseRemove(InternalEObject otherEnd,
                                               int featureID,
                                               Class inverseClass,
                                               NotificationChain msgs)

eProxyURI

public URI eProxyURI()
Description copied from interface: InternalEObject
Returns the proxy URI of this object. It can be used to resolve to the actual object.

Specified by:
eProxyURI in interface InternalEObject
Returns:
the proxy URI of this object.
See Also:
EcoreUtil.resolve(EObject, org.eclipse.emf.ecore.resource.ResourceSet), Resource.unload()

eSetProxyURI

public void eSetProxyURI(URI uri)
Description copied from interface: InternalEObject
Set the proxy URI of this object. It will be used to resolve to the actual object.

Specified by:
eSetProxyURI in interface InternalEObject
Parameters:
uri - the URI.
See Also:
EcoreUtil.resolve(EObject, org.eclipse.emf.ecore.resource.ResourceSet), Resource.unload()

eResolveProxy

public EObject eResolveProxy(InternalEObject proxy)
Description copied from interface: InternalEObject
Resolves the proxy object relative to this object.

Specified by:
eResolveProxy in interface InternalEObject
Returns:
the resolved object, or the original if the proxy can't be resolved.
See Also:
EcoreUtil.resolve(EObject,EObject)

eIsProxy

public boolean eIsProxy()
Description copied from interface: EObject
Indicates whether this object is a proxy.

A proxy is an object that is defined in a Resource that has not been loaded. An object may be a proxy either because proxy resolution was disabled when the object was accessed (see EObject.eGet(EStructuralFeature,boolean)) or because proxy resolution failed.

Specified by:
eIsProxy in interface EObject
Returns:
true if this object is a proxy or false, otherwise.
See Also:
Resource.unload(), EcoreUtil.resolve(EObject, org.eclipse.emf.ecore.resource.ResourceSet)

eBaseStructuralFeatureID

public int eBaseStructuralFeatureID(int derivedFeatureID,
                                    Class baseClass)
Description copied from interface: InternalEObject
Returns the feature ID relative to the base class, given a feature ID relative to this derived object's actual class.

Specified by:
eBaseStructuralFeatureID in interface InternalEObject
Parameters:
derivedFeatureID - the ID in the actual derived class
baseClass - the base class for which a relative ID is desired.
Returns:
the up-cast feature ID.

eDerivedStructuralFeatureID

public int eDerivedStructuralFeatureID(int baseFeatureID,
                                       Class baseClass)
Description copied from interface: InternalEObject
Returns the feature ID relative to this derived object's actual class, given a feature ID relative to the given base class.

Specified by:
eDerivedStructuralFeatureID in interface InternalEObject
Parameters:
baseFeatureID - the ID relative to a base class.
baseClass - the base class to which the ID is relative.
Returns:
the down-cast feature ID.

eDerivedStructuralFeatureID

public int eDerivedStructuralFeatureID(EStructuralFeature eStructuralFeature)

eClass

public EClass eClass()
Description copied from interface: EObject
Returns the meta class.

The meta class defines the features available for reflective access.

Specified by:
eClass in interface EObject
Returns:
the meta class.
See Also:
EClass.getEAllStructuralFeatures()

eStaticClass

protected EClass eStaticClass()

eDynamicClass

protected EClass eDynamicClass()

eSetClass

public void eSetClass(EClass eClass)
Description copied from interface: InternalEObject
Sets the meta class. An object with a set meta class is, by definition, a dynamic instance; it will support dynamic settings. an.

Specified by:
eSetClass in interface InternalEObject
Parameters:
eClass - the dynamic meta class.
See Also:
InternalEObject.eSetting(EStructuralFeature)

eSettingDelegate

protected EStructuralFeature.Internal.SettingDelegate eSettingDelegate(EStructuralFeature eFeature)

eSetting

public EStructuralFeature.Setting eSetting(EStructuralFeature eFeature)
Description copied from interface: InternalEObject
Returns a setting that can be used to access this object's feature.

Specified by:
eSetting in interface InternalEObject
Parameters:
eFeature - the feature of the desired setting.
Returns:
a setting that can be used to access this object's feature.

eStore

public InternalEObject.EStore eStore()
Description copied from interface: InternalEObject
Returns the store associated with this object.

Specified by:
eStore in interface InternalEObject
Returns:
the store associated with this object.

eSetStore

public void eSetStore(InternalEObject.EStore store)
Description copied from interface: InternalEObject
Set the store associated with this object. Most objects will not support this.

Specified by:
eSetStore in interface InternalEObject
Parameters:
store - the store to associate with this object.

toString

public String toString()

Copyright 2001-2004 IBM Corporation and others.
All Rights Reserved.