//TODO - THIS CAN ALL BE ABSTRACTED
		public virtual ISet<IProvisionAgreementObject> GetProvisions(
				IStructureReference provisionRef) {
			if (provisionRef.TargetReference == Org.Sdmxsource.Sdmx.Api.Constants.SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Dsd)) {
				ISet<IProvisionAgreementObject> returnSet = new HashSet<IProvisionAgreementObject>();
				ISet<IMaintainableObject> keyFamilies = beans
						.GetMaintinables(Org.Sdmxsource.Sdmx.Api.Constants.SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Dsd));
				ISet<IMaintainableObject> dataflows = beans
						.GetMaintinables(Org.Sdmxsource.Sdmx.Api.Constants.SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Dataflow));
				/* foreach */
				foreach (IMaintainableObject currentDSD  in  keyFamilies) {
					if (provisionRef.IsMatch(currentDSD)) {
						/* foreach */
						foreach (IMaintainableObject currentFlow  in  dataflows) {
							IDataflowObject df = (IDataflowObject) currentFlow;
							if (df.DataStructureRef.IsMatch(currentDSD)) {
								GetByReference(df).AddAll(returnSet);
							}
						}
					}
				}
				return returnSet;
			}
			if (provisionRef.TargetReference == Org.Sdmxsource.Sdmx.Api.Constants.SdmxStructureType.GetFromEnum(SdmxStructureEnumType.DataProvider)) {
				ISet<IProvisionAgreementObject> returnSet0 = new HashSet<IProvisionAgreementObject>();
				ISet<IMaintainableObject> allProvisions = beans
						.GetMaintinables(Org.Sdmxsource.Sdmx.Api.Constants.SdmxStructureType.GetFromEnum(SdmxStructureEnumType.ProvisionAgreement));
				ISet<IMaintainableObject> dataProviderSchemes = beans
						.GetMaintinables(Org.Sdmxsource.Sdmx.Api.Constants.SdmxStructureType.GetFromEnum(SdmxStructureEnumType.DataProviderScheme));
				/* foreach */
				foreach (IMaintainableObject currentDps  in  dataProviderSchemes) {
					if (provisionRef.IsMatch(currentDps)) {
						/* foreach */
						foreach (IMaintainableObject currentProvision  in  allProvisions) {
							IProvisionAgreementObject prov = (IProvisionAgreementObject) currentProvision;
							if (prov.DataproviderRef.IsMatch(currentDps)) {
								returnSet0.Add(prov);
							}
						}
					}
				}
				return returnSet0;
			}
			if (provisionRef.TargetReference == Org.Sdmxsource.Sdmx.Api.Constants.SdmxStructureType.GetFromEnum(SdmxStructureEnumType.ProvisionAgreement)) {
				return beans.GetProvisionAgreements(provisionRef
						.MaintainableReference);
			}
			return GetByReference(beans.GetMaintinables(provisionRef
					.MaintainableStructureType));
		}
 /// <summary>
 /// Gets a value indicating whether the reference matches the IMaintainableObject, or one of its indentifiable composites.
 ///     <p/>
 ///     This @object does not require all reference parameters to be set, this method will return true if all the parameters that are set match
 ///     the @object passed in.  If this reference is referencing an Identifiable composite, then the maintainable's identifiable composites will also be
 ///     checked to determine if this is a match.
 /// </summary>
 /// <param name="reference"> The reference object. </param>
 /// <returns>
 /// The <see cref="bool"/> .
 /// </returns>
 public bool IsMatch(Org.Sdmxsource.Sdmx.Api.Model.Objects.Base.IMaintainableObject reference)
 {
     return(StructureReference.IsMatch(reference));
 }