IDEMPIERE-694 ILookupFactory and DefaultLookupFactory to load subclasses of Lookup dynamically via OSGI components. Contributed by Jan Thielemann.
This commit is contained in:
parent
824200314a
commit
7a5fd10add
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.base.lookup.factory.default">
|
||||||
|
<implementation class="org.adempiere.base.DefaultLookupFactory"/>
|
||||||
|
<service>
|
||||||
|
<provide interface="org.adempiere.base.ILookupFactory"/>
|
||||||
|
</service>
|
||||||
|
</scr:component>
|
|
@ -0,0 +1,77 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Product: iDempiere ERP & CRM Smart Business Solution *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.adempiere.base;
|
||||||
|
|
||||||
|
import org.compiere.model.GridFieldVO;
|
||||||
|
import org.compiere.model.Lookup;
|
||||||
|
import org.compiere.model.MAccountLookup;
|
||||||
|
import org.compiere.model.MLocationLookup;
|
||||||
|
import org.compiere.model.MLocatorLookup;
|
||||||
|
import org.compiere.model.MLookup;
|
||||||
|
import org.compiere.model.MPAttributeLookup;
|
||||||
|
import org.compiere.model.MPaymentLookup;
|
||||||
|
import org.compiere.util.DisplayType;
|
||||||
|
|
||||||
|
import static org.compiere.util.DisplayType.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jan Thielemann - jan.thielemann@evenos.de
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DefaultLookupFactory implements ILookupFactory{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Lookup getLookup(GridFieldVO gridFieldVO) {
|
||||||
|
Lookup lookup = null;
|
||||||
|
if (gridFieldVO.displayType == Location) // not cached
|
||||||
|
{
|
||||||
|
lookup = new MLocationLookup (gridFieldVO.ctx, gridFieldVO.WindowNo);
|
||||||
|
}
|
||||||
|
else if (gridFieldVO.displayType == DisplayType.Locator)
|
||||||
|
{
|
||||||
|
lookup = new MLocatorLookup (gridFieldVO.ctx, gridFieldVO.WindowNo);
|
||||||
|
}
|
||||||
|
else if (gridFieldVO.displayType == Account) // not cached
|
||||||
|
{
|
||||||
|
lookup = new MAccountLookup (gridFieldVO.ctx, gridFieldVO.WindowNo);
|
||||||
|
}
|
||||||
|
else if (gridFieldVO.displayType == PAttribute) // not cached
|
||||||
|
{
|
||||||
|
lookup = new MPAttributeLookup (gridFieldVO.ctx, gridFieldVO.WindowNo);
|
||||||
|
}
|
||||||
|
else if (gridFieldVO.displayType == Payment)
|
||||||
|
{
|
||||||
|
lookup = new MPaymentLookup (gridFieldVO.ctx, gridFieldVO.WindowNo, gridFieldVO.AD_Column_ID);
|
||||||
|
}
|
||||||
|
else if (DisplayType.isLookup(gridFieldVO.displayType) && gridFieldVO.lookupInfo != null)
|
||||||
|
{
|
||||||
|
lookup = new MLookup (gridFieldVO.lookupInfo, gridFieldVO.TabNo);
|
||||||
|
}
|
||||||
|
return lookup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLookup(GridFieldVO gridFieldVO) {
|
||||||
|
if (gridFieldVO.displayType == Location
|
||||||
|
|| gridFieldVO.displayType == Locator
|
||||||
|
|| gridFieldVO.displayType == Account
|
||||||
|
|| gridFieldVO.displayType == PAttribute
|
||||||
|
|| gridFieldVO.displayType == Payment
|
||||||
|
|| DisplayType.isLookup(gridFieldVO.displayType))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Product: iDempiere ERP & CRM Smart Business Solution *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.adempiere.base;
|
||||||
|
|
||||||
|
import org.compiere.model.GridFieldVO;
|
||||||
|
import org.compiere.model.Lookup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jan Thielemann - jan.thielemann@evenos.de
|
||||||
|
* @author evenos Consulting GmbH - www.evenos.org
|
||||||
|
*/
|
||||||
|
public interface ILookupFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param gridFieldVO
|
||||||
|
* @return lookup instance
|
||||||
|
*/
|
||||||
|
public Lookup getLookup (GridFieldVO gridFieldVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param gridFieldVO
|
||||||
|
* @return true if the field's displaytype uses lookup
|
||||||
|
*/
|
||||||
|
public boolean isLookup(GridFieldVO gridFieldVO);
|
||||||
|
}
|
|
@ -34,6 +34,8 @@ import java.util.Properties;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.base.ILookupFactory;
|
||||||
|
import org.adempiere.base.Service;
|
||||||
import org.compiere.util.CLogMgt;
|
import org.compiere.util.CLogMgt;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
|
@ -163,7 +165,9 @@ public class GridField
|
||||||
return;
|
return;
|
||||||
if (log.isLoggable(Level.CONFIG)) log.config("(" + m_vo.ColumnName + ")");
|
if (log.isLoggable(Level.CONFIG)) log.config("(" + m_vo.ColumnName + ")");
|
||||||
|
|
||||||
if (DisplayType.isLookup(m_vo.displayType) && m_vo.IsDisplayed)
|
if (DisplayType.isLookup(m_vo.displayType))
|
||||||
|
{
|
||||||
|
if (m_vo.IsDisplayed)
|
||||||
{
|
{
|
||||||
if (m_vo.lookupInfo == null)
|
if (m_vo.lookupInfo == null)
|
||||||
{
|
{
|
||||||
|
@ -180,33 +184,26 @@ public class GridField
|
||||||
//
|
//
|
||||||
loadLookupNoValidate();
|
loadLookupNoValidate();
|
||||||
}
|
}
|
||||||
else if (m_vo.displayType == DisplayType.Location) // not cached
|
|
||||||
{
|
|
||||||
MLocationLookup ml = new MLocationLookup (m_vo.ctx, m_vo.WindowNo);
|
|
||||||
m_lookup = ml;
|
|
||||||
}
|
}
|
||||||
else if (m_vo.displayType == DisplayType.Locator)
|
else
|
||||||
{
|
{
|
||||||
MLocatorLookup ml = new MLocatorLookup (m_vo.ctx, m_vo.WindowNo);
|
loadLookupFromFactory();
|
||||||
m_lookup = ml;
|
|
||||||
}
|
|
||||||
else if (m_vo.displayType == DisplayType.Account) // not cached
|
|
||||||
{
|
|
||||||
MAccountLookup ma = new MAccountLookup (m_vo.ctx, m_vo.WindowNo);
|
|
||||||
m_lookup = ma;
|
|
||||||
}
|
|
||||||
else if (m_vo.displayType == DisplayType.PAttribute) // not cached
|
|
||||||
{
|
|
||||||
MPAttributeLookup pa = new MPAttributeLookup (m_vo.ctx, m_vo.WindowNo);
|
|
||||||
m_lookup = pa;
|
|
||||||
}
|
|
||||||
else if (m_vo.displayType == DisplayType.Payment)
|
|
||||||
{
|
|
||||||
MPaymentLookup pl = new MPaymentLookup (m_vo.ctx, m_vo.WindowNo, m_vo.AD_Column_ID);
|
|
||||||
m_lookup = pl;
|
|
||||||
}
|
}
|
||||||
} // m_lookup
|
} // m_lookup
|
||||||
|
|
||||||
|
private void loadLookupFromFactory() {
|
||||||
|
//http://jira.idempiere.com/browse/IDEMPIERE-694
|
||||||
|
//see DefaultLookupFactory.java for the other default Lookups
|
||||||
|
List<ILookupFactory> factoryList = Service.locator().list(ILookupFactory.class).getServices();
|
||||||
|
for(ILookupFactory factory : factoryList)
|
||||||
|
{
|
||||||
|
m_lookup = factory.getLookup(m_vo);
|
||||||
|
if (m_lookup != null)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* bypass isdisplay validation, used by findwindow
|
* bypass isdisplay validation, used by findwindow
|
||||||
*/
|
*/
|
||||||
|
@ -218,8 +215,7 @@ public class GridField
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_vo.lookupInfo.IsKey = isKey();
|
m_vo.lookupInfo.IsKey = isKey();
|
||||||
MLookup ml = new MLookup (m_vo.lookupInfo, m_vo.TabNo);
|
loadLookupFromFactory();
|
||||||
m_lookup = ml;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -254,13 +250,17 @@ public class GridField
|
||||||
retValue = false;
|
retValue = false;
|
||||||
// else if (m_vo.ColumnName.equals("CreatedBy") || m_vo.ColumnName.equals("UpdatedBy"))
|
// else if (m_vo.ColumnName.equals("CreatedBy") || m_vo.ColumnName.equals("UpdatedBy"))
|
||||||
// retValue = false;
|
// retValue = false;
|
||||||
else if (m_vo.displayType == DisplayType.Location
|
else {
|
||||||
|| m_vo.displayType == DisplayType.Locator
|
//http://jira.idempiere.com/browse/IDEMPIERE-694
|
||||||
|| m_vo.displayType == DisplayType.Account
|
//see DefaultLookupFactory.java for the other default Lookups
|
||||||
|| m_vo.displayType == DisplayType.PAttribute
|
List<ILookupFactory> factoryList = Service.locator().list(ILookupFactory.class).getServices();
|
||||||
|| m_vo.displayType == DisplayType.Payment)
|
for(ILookupFactory factory : factoryList)
|
||||||
retValue = true;
|
{
|
||||||
|
retValue = factory.isLookup(m_vo);
|
||||||
|
if (retValue == true)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
return retValue;
|
return retValue;
|
||||||
} // isLookup
|
} // isLookup
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue