## org.eclipse.emf.validation.service
Class AbstractConstraintProvider

    java.lang.Object
      org.eclipse.emf.validation.service.AbstractConstraintProvider

All Implemented Interfaces:
  IExecutableExtension, IModelConstraintProvider

Direct Known Subclasses:
  XmlConstraintProvider

    public abstract class AbstractConstraintProvider

extends Object
implements IModelConstraintProvider, IExecutableExtension

For situations in which the `XmlConstraintProvider` class does not suffice (i.e., where a plug-in provides constraints dynamically, rather than statically registered in XML), this is a useful class to extend as it provides a partial implementation of the `IModelConstraintProvider` interface. In particular, it extracts the URI namespace prefix information from the extension point XML and provides implementations of the provider methods accessing the constraints loaded by this provider. Additionally, support for lazy initialization of the actual model constraints implementations is provided.

This class may be subclassed by clients of the validation framework.

See Also:
  `AbstractConstraintDescriptor`

Constructor Summary
`protected` `AbstractConstraintProvider()` Initializes me.

Method Summary
`protected IModelConstraint` `createModelConstraint(IConstraintDescriptor descriptor)` Creates the model constraint implementation from the descriptor.
`protected IModelConstraint` `createModelConstraintProxy(IConstraintDescriptor descriptor)` Creates a contraint proxy which lazily initializes the actual constraint implementation represented by the given descriptor.
`Collection<IModelConstraint>` `getBatchConstraints(EObject eObject, Collection<IModelConstraint> constraints)` Obtains a collection of batch `IModelConstraint`s which will be used to validate an `eObject` on demand.
`protected List<IModelConstraint>` `getConstraints()` Obtains my constraints.
`Collection<IModelConstraint>` `getLiveConstraints(Notification notification, Collection<IModelConstraint> constraints)` Obtains a collection of live `IModelConstraint`s that will be used to validate an EMF `notification` on committing a transaction on a model.
`String[]` `getNamespaceUris()` Obtains the namespace URIs of the EMF packages that I provide constraints for.
`protected void` `registerConstraints(Collection<? extends IModelConstraint> constraints)` Bulk-registers the specified constraints so that they are accessible to applications via the `ConstraintRegistry` and are visible in the preferences UI.
`void` `setInitializationData(IConfigurationElement config, String propertyName, Object data)`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### AbstractConstraintProvider

    protected AbstractConstraintProvider()

  Initializes me.

Method Detail

### createModelConstraint

    protected IModelConstraint createModelConstraint(IConstraintDescriptor descriptor)

  Creates the model constraint implementation from the descriptor. This default implementation delegates to the `ConstraintFactory` to create the constraint, if the specified `descriptor` is of a known type and a registered `IConstraintParser` is available to parse the descriptor. If either of these conditions does not hold, then a disabled constraint implementation will be returned (one that always returns an info status indicating that it is disabled).

  A constraint provider that uses a descriptor type not defined by the framework or a language for which it is not registering a parser should override this method to create an appropriate constraint implementation.

  Parameters:
    `descriptor` - the descriptor of the constraint to be created
  Returns:
    actual constraint implementation
  Since:
    1.1

### createModelConstraintProxy

    protected IModelConstraint createModelConstraintProxy(IConstraintDescriptor descriptor)

  Creates a contraint proxy which lazily initializes the actual constraint implementation represented by the given descriptor.

  This method is to be used by the concrete provider to initialize its constraints list if it's the intention to initialize the actual constraints lazily.

  Parameters:
    `descriptor` - the descriptor of the constraint for which a proxy is to be created
  Returns:
    a proxy for the actual constraint implementation
  Since:
    1.1

### getConstraints

    protected List<IModelConstraint> getConstraints()

  Obtains my constraints.

  Returns:
    a list of constraints
  Since:
    1.1

### getNamespaceUris

    public final String[] getNamespaceUris()

  Obtains the namespace URIs of the EMF packages that I provide constraints for.

  Returns:
    my packages' namespace URIs

### setInitializationData

    public void setInitializationData(IConfigurationElement config,
                                      String propertyName,
                                      Object data)
                               throws CoreException

  Specified by:
    `setInitializationData` in interface `IExecutableExtension`
  Throws:
    `CoreException` - if the subclass implementation of this method throws on an error in accessing the `config` or for any other reason (see the subclass documentation)

### getLiveConstraints

    public Collection<IModelConstraint> getLiveConstraints(Notification notification,
                                                           Collection<IModelConstraint> constraints)

  Description copied from interface: `IModelConstraintProvider`
  Obtains a collection of live `IModelConstraint`s that will be used to validate an EMF `notification` on committing a transaction on a model.

  Clients typically should invoke this method on the service with a `null` value for the `constraints` collector parameter.

  Specified by:
    `getLiveConstraints` in interface `IModelConstraintProvider`
  Parameters:
    `notification` - the EMF notification that is to be validated. Encapsulates the object and the particular change
    `constraints` - a collector parameter to which I will add any constraints that I provide. If this argument is `null`, then I create and return a new collection
  Returns:
    the collection which was passed in by the `constraints` parameter (with additions), or a new collection if `constraints == null`
  Since:
    1.1

### getBatchConstraints

    public Collection<IModelConstraint> getBatchConstraints(EObject eObject,
                                                            Collection<IModelConstraint> constraints)

  Description copied from interface: `IModelConstraintProvider`
  Obtains a collection of batch `IModelConstraint`s which will be used to validate an `eObject` on demand.

  Clients typically should invoke this method on the service with a `null` value for the `constraints` collector parameter.

  Specified by:
    `getBatchConstraints` in interface `IModelConstraintProvider`
  Parameters:
    `eObject` - the `EObject` for which constraints are to be obtained that can be applied to it
    `constraints` - a collector parameter to which I will add any constraints that I provide. If this argument is `null`, then I create and return a new collection
  Returns:
    the collection which was passed in by the `constraints` parameter (with additions), or a new collection if `constraints == null`
  Since:
    1.1

### registerConstraints

    protected void registerConstraints(Collection<? extends IModelConstraint> constraints)
                                throws ConstraintExistsException

  Bulk-registers the specified constraints so that they are accessible to applications via the `ConstraintRegistry` and are visible in the preferences UI.

  Parameters:
    `constraints` - the constraints to register
  Throws:
    `ConstraintExistsException` - in case any of the constraints has an ID that is already registered for a different constraint
  Since:
    1.2

Copyright 2002, 2007 IBM Corporation and others. All Rights Reserved.