NF9 OSGi New Mapped By Name Factory
Feature: OSGi New Mapped By Name Factory
Goal: Development
Description: iDempiere have many OSGi factory that create the requested instance by class name or a string key (IProcessFactory, IModelValidatorFactory, IPaymentProcessorFactory, etc). This ticket add generic typed, lambda function based interface and class that help to simplify the development of such factory class.
New interface and class:
1. org.adempiere.base.IMappedByNameFactory<T> interface
2. org.adempiere.base.MappedByNameFactory<T> class (implements IMappedByNameFactory<T>)
Usage:
To add new implementation of BankStatementMatcherInterface.
1. Create class that implement the BankStatementMatcherInterface interface
public class MyBankStatementMatcher implements BankStatementMatcherInterface { @Override public BankStatementMatchInfo findMatch(MBankStatementLine bsl) { return null; } @Override public BankStatementMatchInfo findMatch(X_I_BankStatement ibs) { return null; } }
2. Create factory class that implement the IBankStatementMatcherFactory interface.
public class MyBankStatementMatcherFactory extends MappedByNameFactory<BankStatementMatcherInterface> implements IBankStatementMatcherFactory { public MyBankStatementMatcherFactory() { //add mapping from name/key to create new instance lambda expression addMapping(MyBankStatementMatcher.class.getName(), () -> new MyBankStatementMatcher()); } @Override public BankStatementMatcherInterface newBankStatementMatcherInstance(String className) { //use the newInstance default method at IMappedByNameFactory interface return newInstance(className); } }
Technical Info: IDEMPIERE-4704