### *** This class provides Binary Compatibility only, not Source Compatibility ***

Package com.sas.services.deployment

# Class AbstractMetadataSource

java.lang.Object
com.sas.services.deployment.AbstractMetadataSource

All Implemented Interfaces:
  `MetadataSourceInterface`, `Serializable`

Direct Known Subclasses:
  `OMRMetadataSource`, `URLMetadataSource`

@SASScope("ALL") @BinaryCompatibilityOnly public abstract class AbstractMetadataSource extends Object implements MetadataSourceInterface
An abstract class representing a source of metadata such as an SAS Metadata Repository or a URL accessible file containing metadata exported from a SAS Metadata Repository via the Foundation Services Manager console plug-in.

A concrete subclass must implement the abstract method `getMetadata()` which is used to get the XML UTF-8 encoded metadata describing an application's foundation service deployment.

An application is represented in a SAS Metadata Repository as a `SoftwareComponent` element. Each application will have 1..* collections of services using a `Tree` to contain them. These deployment groups are used to restrict which collections of services are deployed. When deploying services one may specify 0..* deployment groups for a particular application. If no groups are specified then no restriction is applied and all groups are deployed. If 1..* deployment groups are specified then only services defined within those groups are eligible for deployment.

Since:
  1.0
See Also:
  - `OMRMetadataSource`
  - `URLMetadataSource`
  - Serialized Form

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractMetadataSource()`
  Constructs a default instance.
  ``
  `AbstractMetadataSource(String softwareComponentName, String serviceGroupName)`
  Constructs an instance with the specified foundation service deployment name.
  ``
  `AbstractMetadataSource(String softwareComponentName, Set<String> serviceGroupNames)`
  Constructs an instance used to deploy specified foundation service deployments.
  `protected`
  `AbstractMetadataSource(Set<String> serviceGroupNames)`
  Constructs an instance used to deploy specified foundation service deployments.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final boolean`
  `addRMIBinding(RMIBinding rmiBinding)`
  Adds an RMI binding.
  `final void`
  `addServiceDeploymentName(String serviceDeploymentGroup)`
  Adds the name of a service deployment group to the set of service deployment groups that are to be deployed.
  `static com.sas.metadata.remote.MdStore`
  `createMdStore(boolean isRemotelyAccessible, Map<String,String> metaOptions, Environment environment)`
  Creates a metadata object store in a new metadata factory.
  `void`
  `destroy()`
  Destroys this metadata source by disposing the metadata object store.
  `boolean`
  `equals(Object other)`
  Determines whether or not the other object equals this object.
  `final String`
  `getApplicationServiceDeployment()`
  Gets the name of the application's foundation services deployment.
  `protected String`
  `getDeployFailureMessage()`
  Gets a message describing this metadata source's inability to deploy services.
  `final com.sas.metadata.remote.MdObjectStore`
  `getMdObjectStore()`
  Gets the metadata object store.
  `abstract String`
  `getMetadata()`
  Gets metadata describing an application's foundation services deployment.
  `Properties`
  `getProperties()`
  Gets the properties which define this metadata source's configuration.
  `final RMIClientSocketFactory`
  `getRMIClientSocketFactory()`
  Gets the RMI client socket factory.
  `final RMIServerSocketFactory`
  `getRMIServerSocketFactory()`
  Gets the RMI server socket factory.
  `final Set<String>`
  `getServiceDeploymentNames()`
  Gets the set of service deployment names that are to be deployed.
  `final String`
  `getSoftwareComponentName()`
  Gets the name of the metadata `SoftwareComponent` that roots the service deployment metadata hierarchy.
  `protected static final String`
  `getStringFromInputSource(InputStream inputStream)`
  Gets an XML string representing a foundation services deployment from the specified input stream.
  `int`
  `hashCode()`
  Gets a hash code for this service attribute.
  `final boolean`
  `isServiceDeploymentDeployable(String applicationServiceDeployment)`
  An application's foundation service deployment is deployable if: The `SoftwareComponent` name matches The `SoftwareComponent` `ClassIdentifier` designates the element as representing an application's foundation service deployment All of the service deployment groups to be deployed are defined as subtree elements of the `SoftwareComponent`
  `final boolean`
  `isServiceDeploymentDeployable(String applicationServiceDeployment, com.sas.metadata.remote.Tree serviceGroup)`
  Determines whether or not the specified application service deployment's service deployment group is deployable.
  `final List<RemoteServiceInterface>`
  `lookupServices(DiscoveryServiceInterface discoveryService)`
  Attempts to lookup services using previously discovered RMI bindings.
  `final void`
  `removeServiceDeploymentName(String serviceDeploymentGroup)`
  Removes a service deployment group name from the groups that are to be deployed.
  `final void`
  `setApplicationServiceDeployment(String softwareComponentName)`
  Sets the name of the metadata `SoftwareComponent` that roots an application's service deployment metadata hierarchy.
  `void`
  `setProperties(Properties properties)`
  Sets the properties which define this metadata source's configuration.
  `final void`
  `setRMIClientSocketFactory(RMIClientSocketFactory socketFactory)`
  Sets the RMI client socket factory.
  `final void`
  `setRMIServerSocketFactory(RMIServerSocketFactory socketFactory)`
  Sets the RMI server socket factory.
  `final void`
  `setServiceDeploymentNames(Set<String> serviceGroupNames)`
  Sets the set of deployment group names for `Tree` elements.
  `protected final void`
  `setSoftwareComponentName(String softwareComponentName)`
  Specifies the name of the application containing foundation service deployment metadata.The metadata `SoftwareComponent` that serves as the root for the service deployment metadata hierarchy.
  `String`
  `toString()`
  Gets a string representation of this OMR metadata source.

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### AbstractMetadataSource

    protected AbstractMetadataSource() throws IllegalArgumentException
    Constructs a default instance. Instead of using this default constructor use `AbstractMetadataSource(applicationDeployment, deploymentGroup)` or `AbstractMetadataSource(applicationDeployment, deploymentGroups)` which specify one or more foundation service deployment names.
    Throws:
      `IllegalArgumentException` - if unable to create a metadata object store.

  - ### AbstractMetadataSource

    public AbstractMetadataSource(String softwareComponentName, Set<String> serviceGroupNames) throws InitializationException
    Constructs an instance used to deploy specified foundation service deployments.
    Parameters:
      `softwareComponentName` - The name of the metadata `SoftwareComponent` that serves as the root of the service deployment hierarchy.
      `serviceGroupNames` - `Set` of `String` names designating the service groups that are to be deployed. Use this parameter if you want to deploy services that belong to specified groups, but not all groups (e.g. services in the "Core" group, but not in "Stored Process" group). If a `null` or empty set is specified, then no filter will be applied. The service deployment name corresponds to the `Name` attribute of a metadata `Tree` that is a subtree of the `SoftwareComponent`.
    Throws:
      `InitializationException` - if an invalid set of service deployment names is specified.

  - ### AbstractMetadataSource

    protected AbstractMetadataSource(Set<String> serviceGroupNames) throws InitializationException
    Constructs an instance used to deploy specified foundation service deployments.

    A subclass must initialize the name of the service deployment by calling `setSoftwareComponentName(String)`.

    Parameters:
      `serviceGroupNames` - `Set` of `String` names designating the service groups that are to be deployed. Use this parameter if you want to deploy services that belong to specified groups, but not all groups (e.g. services in the "Core" group, but not in "Stored Process" group). If a `null` or empty set is specified, then no filter will be applied. The service deployment name corresponds to the `Name` attribute of a metadata `Tree` that is a subtree of the `SoftwareComponent`.
    Throws:
      `InitializationException` - if an invalid set of service deployment names is specified.

  - ### AbstractMetadataSource

    public AbstractMetadataSource(String softwareComponentName, String serviceGroupName) throws InitializationException
    Constructs an instance with the specified foundation service deployment name. This name corresponds to the metadata `SoftwareComponent`'s name attribute.
    Parameters:
      `softwareComponentName` - The name of the metadata `SoftwareComponent` that serves as the root of the service deployment hierarchy.
      `serviceGroupName` - The name of the foundation service deployment group that is to be deployed. This name corresponds to the metadata `Tree`'s `Name` attribute.
    Throws:
      `InitializationException` - if an invalid service deployment name is specified.

- ## Method Details

  - ### createMdStore

    public static com.sas.metadata.remote.MdStore createMdStore(boolean isRemotelyAccessible, Map<String,String> metaOptions, Environment environment) throws ServiceException
    Creates a metadata object store in a new metadata factory.
    Parameters:
      `isRemotelyAccessible` - `false` if objects created by the metadata factory will only be accessed from within this JVM or `true` if remotely accessible objects are required.
      `metaOptions` - Options required to open a connection to the metadata server.
      `environment` - Resources environment or `null` if a default environment should be used.
    Returns:
      Metadata store. The caller is responsible for disposing the metadata object store's factory when it is no longer needed.
    Throws:
      `ServiceException`

  - ### getProperties

    public Properties getProperties()
    Gets the properties which define this metadata source's configuration.}
    Specified by:
      `getProperties` in interface `MetadataSourceInterface`
    Returns:
      Properties which define this metadata source's configuration.

  - ### setProperties

    public void setProperties(Properties properties)
    Sets the properties which define this metadata source's configuration.}
    Specified by:
      `setProperties` in interface `MetadataSourceInterface`
    Parameters:
      `properties` - Properties which define this metadata source's configuration.

  - ### isServiceDeploymentDeployable

    public final boolean isServiceDeploymentDeployable(String applicationServiceDeployment)
    An application's foundation service deployment is deployable if:
    - The `SoftwareComponent` name matches
    - The `SoftwareComponent` `ClassIdentifier` designates the element as representing an application's foundation service deployment
    - All of the service deployment groups to be deployed are defined as subtree elements of the `SoftwareComponent`
    Specified by:
      `isServiceDeploymentDeployable` in interface `MetadataSourceInterface`
    Parameters:
      `applicationServiceDeployment` - Metadata `SoftwareComponent` being considered for deployment
    Returns:
      `true` if its OK to deploy the foundation services or `false` if it isn't.
    See Also:
      - `MetadataSourceInterface.isServiceDeploymentDeployable(String)`

  - ### isServiceDeploymentDeployable

    public final boolean isServiceDeploymentDeployable(String applicationServiceDeployment, com.sas.metadata.remote.Tree serviceGroup)
    Determines whether or not the specified application service deployment's service deployment group is deployable.
    Specified by:
      `isServiceDeploymentDeployable` in interface `MetadataSourceInterface`
    Parameters:
      `applicationServiceDeployment` - Metadata `SoftwareComponent` being considered for deployment.
      `serviceGroup` - Service deployment group defined under the application's service deployment.
    Returns:
      `true` if it is OK to deploy this service deployment group for the specified application service deployment. or `false` if it isn't.
    See Also:
      - `MetadataSourceInterface.isServiceDeploymentDeployable(String, Tree)`

  - ### getSoftwareComponentName

    public final String getSoftwareComponentName()
    Gets the name of the metadata `SoftwareComponent` that roots the service deployment metadata hierarchy.
    Returns:
      name of the metadata `SoftwareComponent` that roots the service deployment metadata hierarchy or `null` if no name is defined.

  - ### setApplicationServiceDeployment

    public final void setApplicationServiceDeployment(String softwareComponentName)
    Sets the name of the metadata `SoftwareComponent` that roots an application's service deployment metadata hierarchy.
    Specified by:
      `setApplicationServiceDeployment` in interface `MetadataSourceInterface`
    Parameters:
      `softwareComponentName` - Name of the metadata `SoftwareComponent` that roots the service deployment metadata hierarchy or `null` if no name is defined.
    See Also:
      - `MetadataSourceInterface.setApplicationServiceDeployment(String)`

  - ### getServiceDeploymentNames

    public final Set<String> getServiceDeploymentNames()
    Gets the set of service deployment names that are to be deployed. A service deployment name corresponds to the metadata `SoftwareComponent` element's `Name` attribute.
    Specified by:
      `getServiceDeploymentNames` in interface `MetadataSourceInterface`
    Returns:
      Set of `String` names of the service deployments that are to be deployed. Note that this set may not contain any elements, but it is guaranteed to be non-`null`.
    See Also:
      - `MetadataSourceInterface.getServiceDeploymentNames()`

  - ### setServiceDeploymentNames

    public final void setServiceDeploymentNames(Set<String> serviceGroupNames)
    Sets the set of deployment group names for `Tree` elements. Each element of the `Set` must be a `String` representing the name of a service group which is to be deployed. An empty set or `null` set indicates that services will not be filtered.
    Parameters:
      `serviceGroupNames` - `Set` of `String` names designating the service groups that are to be deployed. Use this parameter if you want to deploy services that belong to specified groups, but not all groups (e.g. services in the "Core" group, but not in "Stored Process" group). If a `null` or empty set is specified, then no filter will be applied. The service deployment name corresponds to the `Name` attribute of a metadata `Tree` that is a subtree of the `SoftwareComponent`.

  - ### setSoftwareComponentName

    protected final void setSoftwareComponentName(String softwareComponentName) throws InitializationException
    Specifies the name of the application containing foundation service deployment metadata.The metadata `SoftwareComponent` that serves as the root for the service deployment metadata hierarchy.
    Parameters:
      `softwareComponentName` - The name of the metadata `SoftwareComponent` that serves as the root of the service deployment hierarchy.
    Throws:
      `InitializationException` - if an invalid service deployment name is specified.

  - ### addServiceDeploymentName

    public final void addServiceDeploymentName(String serviceDeploymentGroup) throws InitializationException
    Adds the name of a service deployment group to the set of service deployment groups that are to be deployed.
    Parameters:
      `serviceDeploymentGroup` - Name of a service deployment group to be added to the set that is to be deployed.
    Throws:
      `InitializationException` - if an invalid service deployment name is specified.

  - ### removeServiceDeploymentName

    public final void removeServiceDeploymentName(String serviceDeploymentGroup)
    Removes a service deployment group name from the groups that are to be deployed.
    Parameters:
      `serviceDeploymentGroup` - Name of a service deployment group that is to be removed from the set of deployable groups.

  - ### getMetadata

    public abstract String getMetadata() throws ServiceException
    Gets metadata describing an application's foundation services deployment.
    Specified by:
      `getMetadata` in interface `MetadataSourceInterface`
    Returns:
      XML string describing an application's foundation services deployment.
    Throws:
      `ServiceException` - if unable to retrieve the metadata.
    See Also:
      - `MetadataSourceInterface.getMetadata()`

  - ### getApplicationServiceDeployment

    public final String getApplicationServiceDeployment()
    Gets the name of the application's foundation services deployment.
    Specified by:
      `getApplicationServiceDeployment` in interface `MetadataSourceInterface`
    Returns:
      Name of the application's foundation services deployment.
    See Also:
      - `MetadataSourceInterface.getApplicationServiceDeployment()`

  - ### getStringFromInputSource

    protected static final String getStringFromInputSource(InputStream inputStream) throws ServiceException
    Gets an XML string representing a foundation services deployment from the specified input stream. Note that service deployments are encoded using utf-8.
    Parameters:
      `inputStream` - Input stream from which the metadata will be read. Note that the input stream should be encoded using an utf-8 character set.
    Returns:
      String acquired from the input stream or `null` if unable to read the string.
    Throws:
      `ServiceException` - if unable to obtain a String from the specified input source.

  - ### getRMIClientSocketFactory

    public final RMIClientSocketFactory getRMIClientSocketFactory()
    Gets the RMI client socket factory.
    Returns:
      RMI client socket factory or `null` if the default client socket factory is desired.

  - ### getRMIServerSocketFactory

    public final RMIServerSocketFactory getRMIServerSocketFactory()
    Gets the RMI server socket factory.
    Returns:
      RMI server socket factory or `null` if the default server socket factory is desired.

  - ### setRMIClientSocketFactory

    public final void setRMIClientSocketFactory(RMIClientSocketFactory socketFactory)
    Sets the RMI client socket factory.
    Parameters:
      `socketFactory` - RMI client socket factory or `null` if the default client socket factory is desired.

  - ### setRMIServerSocketFactory

    public final void setRMIServerSocketFactory(RMIServerSocketFactory socketFactory)
    Sets the RMI server socket factory.
    Parameters:
      `socketFactory` - RMI server socket factory or `null` if the default server socket factory is desired.

  - ### getMdObjectStore

    public final com.sas.metadata.remote.MdObjectStore getMdObjectStore() throws IllegalStateException
    Gets the metadata object store.
    Specified by:
      `getMdObjectStore` in interface `MetadataSourceInterface`
    Returns:
      Metadata object store.
    Throws:
      `IllegalStateException` - if the metadata source has been destroyed and the metadata object store is `null`.

  - ### destroy

    public void destroy()
    Destroys this metadata source by disposing the metadata object store.
    Specified by:
      `destroy` in interface `MetadataSourceInterface`

  - ### addRMIBinding

    public final boolean addRMIBinding(RMIBinding rmiBinding)
    Adds an RMI binding.
    Parameters:
      `rmiBinding` - RMI binding that describes a remote discovery service.
    Returns:
      `true` if the RMI binding has already been registered or was successfully added to the list of bindings.

  - ### lookupServices

    public final List<RemoteServiceInterface> lookupServices(DiscoveryServiceInterface discoveryService)
    Attempts to lookup services using previously discovered RMI bindings. Rediscovered services will be registered with the specified discovery service.
    Parameters:
      `discoveryService` -
    Returns:
      List of `services`

  - ### getDeployFailureMessage

    protected String getDeployFailureMessage()
    Gets a message describing this metadata source's inability to deploy services. A subclass should override this method if a more detailed message can be provided.
    Returns:
      Message describing a failure to deploy services.

  - ### toString

    public String toString()
    Gets a string representation of this OMR metadata source.
    Overrides:
      `toString` in class `Object`
    Returns:
      String representation of this instance.

  - ### hashCode

    public int hashCode()
    Gets a hash code for this service attribute. The hash is an XOR of all of this service's fields.
    Overrides:
      `hashCode` in class `Object`
    Returns:
      Hash code.

  - ### equals

    public boolean equals(Object other)
    Determines whether or not the other object equals this object.
    Overrides:
      `equals` in class `Object`
    Parameters:
      `other` - Other object.
    Returns:
      `true` if the objects are equivalent.