Skip to content

Commit

Permalink
#633-webui propagate the tablename too when dealing with column lookups
Browse files Browse the repository at this point in the history
  • Loading branch information
metas-rc committed Oct 24, 2017
1 parent 7c82c87 commit f2131af
Show file tree
Hide file tree
Showing 12 changed files with 59 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ private BoardDescriptor createBoardDescriptor(final int boardId)
{
throw new EntityNotFoundException("No board found for ID=" + boardId);
}

//
// Board document mappings
final String tableName = Services.get(IADTableDAO.class).retrieveTableName(boardPO.getAD_Table_ID());
Expand All @@ -181,7 +181,6 @@ private BoardDescriptor createBoardDescriptor(final int boardId)
// Board document lookup provider
final int adValRuleId = boardPO.getAD_Val_Rule_ID();
final LookupDescriptorProvider documentLookupDescriptorProvider = SqlLookupDescriptor.builder()
.setColumnName(keyColumnName)
.setDisplayType(DisplayType.Search)
.setWidgetType(DocumentFieldWidgetType.Lookup)
.setAD_Val_Rule_ID(adValRuleId)
Expand All @@ -208,7 +207,12 @@ private BoardDescriptor createBoardDescriptor(final int boardId)
// Source document filters: AD_Val_Rule_ID
if (adValRuleId > 0)
{
final IValidationRule validationRule = Services.get(IValidationRuleFactory.class).create(tableName, adValRuleId);
final IValidationRule validationRule = Services.get(IValidationRuleFactory.class).create(
tableName
, adValRuleId
, null // ctx table name
, null // ctx column name
);
final String sqlWhereClause = validationRule.getPrefilterWhereClause()
.evaluate(Evaluatees.ofCtx(Env.getCtx()), OnVariableNotFound.Fail);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ public LookupValuesList getShipmentScheduleValues(final LookupDataSourceContext
private static final LookupDataSource createShipmentScheduleDataSource(final int huId)
{
final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder()
.setColumnName(I_M_ShipmentSchedule.COLUMNNAME_M_ShipmentSchedule_ID)
.setCtxTableName(I_M_ShipmentSchedule.Table_Name)
.setCtxColumnName(I_M_ShipmentSchedule.COLUMNNAME_M_ShipmentSchedule_ID)
.setDisplayType(DisplayType.Search)
.addValidationRule(createShipmentSchedulesValidationRule(huId))
.buildForDefaultScope();
Expand Down Expand Up @@ -131,7 +132,8 @@ public LookupValuesList getPickingSlotValues(final LookupDataSourceContext conte
private static final LookupDataSource createPickingSlotDataSource()
{
final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder()
.setColumnName(I_M_PickingSlot.COLUMNNAME_M_PickingSlot_ID)
.setCtxTableName(I_M_PickingSlot.Table_Name)
.setCtxColumnName(I_M_PickingSlot.COLUMNNAME_M_PickingSlot_ID)
.setDisplayType(DisplayType.Search)
.buildForDefaultScope();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,8 @@ private LookupValuesList getTUsLookupValues_All(final LookupDataSourceContext co
// TODO: filter by TUs
// TODO: search by barcode too
final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder()
.setColumnName("M_HU_ID")
.setCtxTableName(null) // ctxTableName
.setCtxColumnName("M_HU_ID")
.setDisplayType(DisplayType.Search)
.buildForDefaultScope();
LookupDataSource dataSource = LookupDataSourceFactory.instance.getLookupDataSource(lookupDescriptor);
Expand Down Expand Up @@ -367,7 +368,8 @@ private LookupValuesList getLUsLookupValues_All(final LookupDataSourceContext co
// TODO: filter by LUs
// TODO: search by barcode too
final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder()
.setColumnName("M_HU_ID")
.setCtxTableName(null) //ctxTableName
.setCtxColumnName("M_HU_ID")
.setDisplayType(DisplayType.Search)
.buildForDefaultScope();
LookupDataSource dataSource = LookupDataSourceFactory.instance.getLookupDataSource(lookupDescriptor);
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/de/metas/ui/web/mail/WebuiMailRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.UnaryOperator;

import org.compiere.model.I_AD_User;
import org.compiere.util.DisplayType;
import org.compiere.util.Evaluatee;
import org.compiere.util.Evaluatees;
Expand Down Expand Up @@ -69,7 +70,8 @@ public class WebuiMailRepository
public WebuiMailRepository()
{
final LookupDescriptor emailToLookupDescriptor = SqlLookupDescriptor.builder()
.setColumnName(org.compiere.model.I_AD_User.COLUMNNAME_AD_User_ID)
.setCtxTableName(I_AD_User.Table_Name)
.setCtxColumnName(org.compiere.model.I_AD_User.COLUMNNAME_AD_User_ID)
.setDisplayType(DisplayType.Search)
.setWidgetType(DocumentFieldWidgetType.Lookup)
.buildProvider()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,16 @@ public PackageableViewRepository()
// and also to allow it to be unit-tested (when the lookups are not part of the test), I use those suppliers.

orderLookup = Suppliers.memoize(() -> LookupDataSourceFactory.instance.getLookupDataSource(SqlLookupDescriptor.builder()
.setColumnName(I_M_Packageable_V.COLUMNNAME_C_Order_ID)
.setCtxTableName(I_M_Packageable_V.Table_Name)
.setCtxColumnName(I_M_Packageable_V.COLUMNNAME_C_Order_ID)
.setDisplayType(DisplayType.Search)
.setWidgetType(DocumentFieldWidgetType.Lookup)
.buildProvider()
.provideForScope(LookupScope.DocumentField)));

productLookup = Suppliers.memoize(() -> LookupDataSourceFactory.instance.getLookupDataSource(SqlLookupDescriptor.builder()
.setColumnName(I_M_Packageable_V.COLUMNNAME_M_Product_ID)
.setCtxTableName(I_M_Packageable_V.Table_Name)
.setCtxColumnName(I_M_Packageable_V.COLUMNNAME_M_Product_ID)
.setDisplayType(DisplayType.Search)
.setWidgetType(DocumentFieldWidgetType.Lookup)
.buildProvider()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ private static Supplier<LookupDataSource> createWarehouseLookup()
{
return Suppliers.memoize(() -> LookupDataSourceFactory.instance
.getLookupDataSource(SqlLookupDescriptor.builder()
.setColumnName(I_M_PickingSlot.COLUMNNAME_M_Warehouse_ID)
.setCtxTableName(I_M_PickingSlot.Table_Name)
.setCtxColumnName(I_M_PickingSlot.COLUMNNAME_M_Warehouse_ID)
.setDisplayType(DisplayType.Search)
.setWidgetType(DocumentFieldWidgetType.Lookup)
.buildProvider()
Expand All @@ -99,7 +100,8 @@ private static Supplier<LookupDataSource> createBPartnerLookup()
{
return Suppliers.memoize(() -> LookupDataSourceFactory.instance
.getLookupDataSource(SqlLookupDescriptor.builder()
.setColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_ID)
.setCtxTableName(I_M_PickingSlot.Table_Name)
.setCtxColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_ID)
.setDisplayType(DisplayType.Search)
.setWidgetType(DocumentFieldWidgetType.Lookup)
.buildProvider()
Expand All @@ -110,7 +112,8 @@ private static Supplier<LookupDataSource> createBPartnerLocationLookup()
{
return Suppliers.memoize(() -> LookupDataSourceFactory.instance
.getLookupDataSource(SqlLookupDescriptor.builder()
.setColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_Location_ID)
.setCtxTableName(I_M_PickingSlot.Table_Name)
.setCtxColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_Location_ID)
.setDisplayType(DisplayType.Search)
.setWidgetType(DocumentFieldWidgetType.Lookup)
.buildProvider()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,8 @@ private DocumentFieldDescriptor.Builder createProcessParaDescriptor(final WebuiP
if (lookupDescriptorProvider == null)
{
lookupDescriptorProvider = SqlLookupDescriptor.builder()
.setColumnName(parameterName)
.setCtxTableName(null)
.setCtxColumnName(parameterName)
.setDisplayType(adProcessParam.getAD_Reference_ID())
.setAD_Reference_Value_ID(adProcessParam.getAD_Reference_Value_ID())
.setAD_Val_Rule_ID(adProcessParam.getAD_Val_Rule_ID())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ public DocumentFieldDescriptor.Builder createParameterFieldDescriptor()
else
{
lookupDescriptorProvider = SqlLookupDescriptor.builder()
.setColumnName(InterfaceWrapperHelper.getKeyColumnName(parameterAnnotation.sqlLookupTableName()))
.setCtxTableName(null) // tableName
.setCtxColumnName(InterfaceWrapperHelper.getKeyColumnName(parameterAnnotation.sqlLookupTableName()))
.setDisplayType(DisplayType.Search)
.setReadOnlyAccess()
.buildProvider();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ private DocumentEntityDescriptor createEntityDescriptor(final DocumentId documen
//
.setWidgetType(DocumentFieldWidgetType.Lookup)
.setLookupDescriptorProvider(SqlLookupDescriptor.builder()
.setColumnName(IEmptiesQuickInput.COLUMNNAME_M_HU_PackingMaterial_ID)
.setCtxTableName(null) // ctxTableName
.setCtxColumnName(IEmptiesQuickInput.COLUMNNAME_M_HU_PackingMaterial_ID)
.setDisplayType(DisplayType.Search)
.buildProvider())
.setValueClass(IntegerLookupValue.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,8 @@ private static Builder createPackingInstructionFieldBuilder()
//
.setWidgetType(DocumentFieldWidgetType.Lookup)
.setLookupDescriptorProvider(SqlLookupDescriptor.builder()
.setColumnName(IOrderLineQuickInput.COLUMNNAME_M_HU_PI_Item_Product_ID)
.setCtxTableName(null) // ctxTableName
.setCtxColumnName(IOrderLineQuickInput.COLUMNNAME_M_HU_PI_Item_Product_ID)
.setDisplayType(DisplayType.TableDir)
.setAD_Val_Rule_ID(540199) // FIXME: hardcoded "M_HU_PI_Item_Product_For_Org_and_Product_and_DateOrdered"
.buildProvider())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.adempiere.ad.expression.api.ConstantLogicExpression;
import org.adempiere.ad.expression.api.IExpression;
import org.adempiere.ad.expression.api.ILogicExpression;
import org.adempiere.ad.table.api.IADTableDAO;
import org.adempiere.model.InterfaceWrapperHelper;
import org.adempiere.util.Check;
import org.adempiere.util.Services;
Expand Down Expand Up @@ -275,8 +276,11 @@ private final void createAndAddDocumentField(final DocumentEntityDescriptor.Buil

alwaysUpdateable = extractAlwaysUpdateable(gridFieldVO);

final String ctxTableName = Services.get(IADTableDAO.class).retrieveTableName(gridFieldVO.getAD_Table_ID());

lookupDescriptorProvider = SqlLookupDescriptor.builder()
.setColumnName(sqlColumnName)
.setCtxTableName(ctxTableName)
.setCtxColumnName(sqlColumnName)
.setWidgetType(widgetType)
.setDisplayType(displayType)
.setAD_Reference_Value_ID(gridFieldVO.getAD_Reference_Value_ID())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,9 @@ public LookupSource getLookupSourceType()
public static final class Builder
{
// Parameters
private String columnName;
private String ctxColumnName;
private String ctxTableName;

private DocumentFieldWidgetType widgetType;
private Integer displayType;
private int AD_Reference_Value_ID = -1;
Expand Down Expand Up @@ -298,7 +300,7 @@ public LookupDescriptorProvider buildProvider()
{
Check.assumeNotNull(displayType, "Parameter displayType is not null");

return buildProvider(columnName, widgetType, displayType, AD_Reference_Value_ID, AD_Val_Rule_ID, validationRules);
return buildProvider( ctxTableName, ctxColumnName, widgetType, displayType, AD_Reference_Value_ID, AD_Val_Rule_ID, validationRules);
}

public LookupDescriptor buildForScope(final LookupScope scope)
Expand All @@ -312,6 +314,7 @@ public LookupDescriptor buildForDefaultScope()
}

private static LookupDescriptorProvider buildProvider(
final String sqlTableName,
final String sqlColumnName,
final DocumentFieldWidgetType widgetType, final int displayType,
final int AD_Reference_Value_ID,
Expand All @@ -327,7 +330,8 @@ private static LookupDescriptorProvider buildProvider(
|| DisplayType.Button == displayType && AD_Reference_Value_ID > 0)
{
return LookupDescriptorProvider.fromMemoizingFunction(scope -> SqlLookupDescriptor.builder()
.setColumnName(sqlColumnName)
.setCtxTableName(sqlTableName)
.setCtxColumnName(sqlColumnName)
.setDisplayType(displayType)
.setAD_Reference_Value_ID(AD_Reference_Value_ID)
.setAD_Val_Rule_ID(AD_Val_Rule_ID)
Expand All @@ -340,7 +344,7 @@ private static LookupDescriptorProvider buildProvider(

private SqlLookupDescriptor build()
{
Check.assumeNotEmpty(columnName, "columnName is not empty");
Check.assumeNotEmpty(ctxColumnName, "columnName is not empty");

final boolean IsParent = false;

Expand All @@ -353,7 +357,7 @@ private SqlLookupDescriptor build()
}
else
{
final MLookupInfo lookupInfo = MLookupFactory.getLookupInfo(WINDOWNO_Dummy, displayType, columnName, AD_Reference_Value_ID, IsParent, AD_Val_Rule_ID);
final MLookupInfo lookupInfo = MLookupFactory.getLookupInfo(WINDOWNO_Dummy, displayType, ctxTableName, ctxColumnName, AD_Reference_Value_ID, IsParent, AD_Val_Rule_ID);

numericKey = lookupInfo.isNumericKey();
validationRuleEffective = extractValidationRule(lookupInfo);
Expand All @@ -375,7 +379,7 @@ private IValidationRule extractValidationRule(final MLookupInfo lookupInfo)
//
// Case: DocAction button => inject the DocActionValidationRule
// FIXME: hardcoded
if (displayType == DisplayType.Button && WindowConstants.FIELDNAME_DocAction.equals(columnName))
if (displayType == DisplayType.Button && WindowConstants.FIELDNAME_DocAction.equals(ctxColumnName))
{
validationRuleBuilder.add(DocActionValidationRule.instance);
}
Expand Down Expand Up @@ -584,9 +588,15 @@ private INamePairPredicate getPostQueryPredicate()
return postQueryPredicate;
}

public Builder setColumnName(final String columnName)
public Builder setCtxColumnName(final String columnName)
{
this.ctxColumnName = columnName;
return this;
}

public Builder setCtxTableName(final String tableName)
{
this.columnName = columnName;
this.ctxTableName = tableName;
return this;
}

Expand Down

0 comments on commit f2131af

Please sign in to comment.