Files
fflib-apex-extensions/sfdx-source/apex-extensions/main/application/dynamic/classes/fflib_AppBinding.cls
T
wim 4390f83aef Remove Sharing Mode from Dynamic Application Factories
Sharing mode is no longer required as SOQL queries can now run in USER_MODE or SYSTEM_MODE.
2023-09-11 17:18:53 +01:00

216 lines
6.7 KiB
OpenEdge ABL

/**
* File Name: fflib_AppBinding
* @description Definition for an Application Binding
*
* @author architect ir. Wilhelmus G.J. Velzeboer
*
* Copyright (c), W.G.J. Velzeboer,
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above author notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the author nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
public virtual class fflib_AppBinding
implements fflib_IAppBinding, Comparable
{
protected Object bindingObject { get; set; }
protected Decimal bindingSequence { get; set; }
protected fflib_AppBindingType bindingType { get; set; }
protected System.Type implementationType { get; set; }
protected System.Type interfaceType { get; set; }
protected String namespacePrefix { get; set; }
protected String packageName { get; set; }
public Integer compareTo(Object compareTo)
{
fflib_IAppBinding compareToEmp = (fflib_IAppBinding) compareTo;
if (getSequence() == compareToEmp.getSequence()) return 0;
if (getSequence() > compareToEmp.getSequence()) return 1;
return -1;
}
/**
* @return Returns the Object to which the binding is bound to.
*/
public Object getBindingObject()
{
return this.bindingObject;
}
/**
* @return Returns the enum value fflib_AppBindingType that defines the type of the binding
*
* @see fflib_AppBindingType
*/
public virtual fflib_AppBindingType getBindingType()
{
return this.bindingType;
}
/**
* @return Returns the System.Type of the implementation class for the binding
*/
public virtual System.Type getImplementationType()
{
return this.implementationType;
}
/**
* @return Returns the System.Type of the interface for the binding
*/
public virtual System.Type getInterfaceType()
{
return this.interfaceType;
}
/**
* @return Returns the Namespace for the binding
*/
public virtual String getNamespacePrefix()
{
return this.namespacePrefix;
}
/**
* @return Returns the Application Package Name for the binding
*/
public String getPackageName()
{
return this.packageName;
}
/**
* @return Returns the number of the order sequence in which the binding should be returned
*/
public virtual Decimal getSequence()
{
return this.bindingSequence;
}
/**
* Creates a new instance of the implementation for this binding.
*
* @return The enum value fflib_SharingMode that defines the type of sharing used in the implementation class
*/
public virtual Object newImplInstance()
{
return implementationType.newInstance();
}
/**
* Sets the Object to which the binding is bound to
*
* @param bindingObject An object representing the binding type, e.g.;
* `MyCustomerInfo.class` or `Schema.Account.SObjectType`
*
* @return An instance of itself to enable method chaining
*/
public virtual fflib_IAppBinding setBindingObject(Object bindingObject)
{
this.bindingObject = bindingObject;
return this;
}
/**
* Sets the bindingType to an enum value of fflib_AppBindingType
*
* @param bindingType An enum value of fflib_AppBindingType to define the type of binding, e.g.;
* `Service` or `Domain`
*
* @return An instance of itself to enable method chaining
*
* @see fflib_AppBindingType
*/
public virtual fflib_IAppBinding setBindingType(fflib_AppBindingType bindingType)
{
this.bindingType = bindingType;
return this;
}
/**
* Sets the System.Type of the implementation class for the binding
*
* @param implementationType The System.Type of the implementation class. e.g.; `AccountsServiceImpl.class`
*
* @return An instance of itself to enable method chaining
*/
public virtual fflib_IAppBinding setImplementationType(System.Type implementationType)
{
this.implementationType = implementationType;
return this;
}
/**
* Sets the System.Type of the interface for the binding
*
* @param interfaceType The System.Type of the interface class. e.g.; `IAccountsService.class`.
* This must match the type of the implementation.
*
* @return An instance of itself to enable method chaining
*/
public virtual fflib_IAppBinding setInterfaceType(System.Type interfaceType)
{
this.interfaceType = interfaceType;
return this;
}
/**
* Sets the Namespace for the binding. This is typically used when Apps use Namespaces
* or have multiple packages inside a single project
*
* @param namespacePrefix The name of the Namespace for the binding
*
* @return An instance of itself to enable method chaining
*/
public virtual fflib_IAppBinding setNamespacePrefix(String namespacePrefix)
{
this.namespacePrefix = namespacePrefix;
return this;
}
/**
* Sets the Application Second Generation Package Name
*
* @param applicationPackageName The name of the 2GP package
*
* @return An instance of itself to enable method chaining
*/
public fflib_IAppBinding setPackageName(String applicationPackageName)
{
this.packageName = applicationPackageName;
return this;
}
/**
* Set the order number so that the resolver can sort the bindings.
* The higher the number, the more priority.
* The binding with the highest number will be returned first by the resolver.
*
* @param sequence A decimal number representing the priority of the binding
*
* @return An instance of itself to enable method chaining
*/
public virtual fflib_IAppBinding setSequence(Decimal sequence)
{
this.bindingSequence = sequence;
return this;
}
}