From 423d803b3f4c14cec6e2706dd3da6cb7ca6a86c8 Mon Sep 17 00:00:00 2001 From: tsvikruha Date: Wed, 4 Mar 2015 20:20:49 -0500 Subject: [PATCH] IDEMPIERE-2485 Missing OSGi Factory for Replenish Interface --- .../org/compiere/process/ReplenishReport.java | 9 +++-- .../process/ReplenishReportProduction.java | 9 +++-- .../src/org/adempiere/base/Core.java | 35 +++++++++++++++++++ .../org/adempiere/base/IReplenishFactory.java | 19 ++++++++++ 4 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 org.adempiere.base/src/org/adempiere/base/IReplenishFactory.java diff --git a/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java b/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java index 095b6088ec..b89a2cc2bd 100644 --- a/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java +++ b/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java @@ -24,6 +24,7 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.logging.Level; +import org.adempiere.base.Core; import org.compiere.model.MBPartner; import org.compiere.model.MClient; import org.compiere.model.MDocType; @@ -351,8 +352,12 @@ public class ReplenishReport extends SvrProcess ReplenishInterface custom = null; try { - Class clazz = Class.forName(className); - custom = (ReplenishInterface)clazz.newInstance(); + custom = Core.getReplenish(className); + if(custom==null){ + // if no OSGi plugin is found try the legacy way (in my own classpath) + Class clazz = Class.forName(className); + custom = (ReplenishInterface) clazz.newInstance(); + } } catch (Exception e) { diff --git a/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java b/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java index 8205b71451..ecaa359cf0 100644 --- a/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java +++ b/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java @@ -25,6 +25,7 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.logging.Level; +import org.adempiere.base.Core; import org.compiere.model.MBPartner; import org.compiere.model.MClient; import org.compiere.model.MDocType; @@ -385,8 +386,12 @@ public class ReplenishReportProduction extends SvrProcess ReplenishInterface custom = null; try { - Class clazz = Class.forName(className); - custom = (ReplenishInterface)clazz.newInstance(); + custom = Core.getReplenish(className); + if(custom==null){ + // if no OSGi plugin is found try the legacy way (in my own classpath) + Class clazz = Class.forName(className); + custom = (ReplenishInterface) clazz.newInstance(); + } } catch (Exception e) { diff --git a/org.adempiere.base/src/org/adempiere/base/Core.java b/org.adempiere.base/src/org/adempiere/base/Core.java index 11acd69359..635124fbe3 100644 --- a/org.adempiere.base/src/org/adempiere/base/Core.java +++ b/org.adempiere.base/src/org/adempiere/base/Core.java @@ -40,6 +40,7 @@ import org.compiere.model.PaymentProcessor; import org.compiere.model.StandardTaxProvider; import org.compiere.process.ProcessCall; import org.compiere.util.CLogger; +import org.compiere.util.ReplenishInterface; /** * This is a facade class for the Service Locator. @@ -304,4 +305,38 @@ public class Core { return null; } + + /** + * get Custom Replenish instance + * + * @param className + * @return instance of the ReplenishInterface or null + */ + public static ReplenishInterface getReplenish(String className){ + if (className == null || className.length() == 0) { + s_log.log(Level.SEVERE, "No ReplenishInterface class name"); + return null; + } + + ReplenishInterface myReplenishInstance = null; + + List factoryList = + Service.locator().list(IReplenishFactory.class).getServices(); + if (factoryList != null) { + for(IReplenishFactory factory : factoryList) { + ReplenishInterface loader = factory.newReplenishInstance(className); + if (loader != null) { + myReplenishInstance = loader; + break; + } + } + } + + if (myReplenishInstance == null) { + s_log.log(Level.SEVERE, "Not found in service/extension registry and classpath"); + return null; + } + + return myReplenishInstance; + } } diff --git a/org.adempiere.base/src/org/adempiere/base/IReplenishFactory.java b/org.adempiere.base/src/org/adempiere/base/IReplenishFactory.java new file mode 100644 index 0000000000..25ca46f313 --- /dev/null +++ b/org.adempiere.base/src/org/adempiere/base/IReplenishFactory.java @@ -0,0 +1,19 @@ +package org.adempiere.base; + +import org.compiere.util.ReplenishInterface; + +/** + * Factory Interface for plugins to connect to the iDempiere core and provide a + * way to load Replication Custom Interface. + * + * @author tsvikruha + */ +public interface IReplenishFactory { + + /** + * + * @param className + * @return Replenish instance + */ + public ReplenishInterface newReplenishInstance(String className); +}