Skip to content

Commit

Permalink
get rid of IViewRowIdsOrderedSelectionFactory
Browse files Browse the repository at this point in the history
and move everything directly to SqlViewDataRepository

#330
  • Loading branch information
teosarca committed May 1, 2017
1 parent 026e9e0 commit b5791d8
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 162 deletions.
6 changes: 3 additions & 3 deletions src/main/java/de/metas/ui/web/view/DefaultView.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public static final Builder builder(final IViewDataRepository viewDataRepository
private final AtomicBoolean closed = new AtomicBoolean(false);
private final ViewId parentViewId;

private final transient IViewRowIdsOrderedSelectionFactory orderedSelectionFactory;
// private final transient IViewRowIdsOrderedSelectionFactory orderedSelectionFactory;
private final transient ViewRowIdsOrderedSelection defaultSelection;
private final transient ConcurrentHashMap<ImmutableList<DocumentQueryOrderBy>, ViewRowIdsOrderedSelection> selectionsByOrderBys = new ConcurrentHashMap<>();

Expand Down Expand Up @@ -109,7 +109,7 @@ private DefaultView(final Builder builder)
// Selection
{
final ViewEvaluationCtx evalCtx = ViewEvaluationCtx.of(Env.getCtx());
orderedSelectionFactory = viewDataRepository.createOrderedSelectionFactory(evalCtx);
// orderedSelectionFactory = viewDataRepository.createOrderedSelectionFactory(evalCtx);

defaultSelection = viewDataRepository.createOrderedSelection(
evalCtx //
Expand Down Expand Up @@ -266,7 +266,7 @@ private ViewRowIdsOrderedSelection getOrderedSelection(final List<DocumentQueryO
return defaultSelection;
}

return selectionsByOrderBys.computeIfAbsent(ImmutableList.copyOf(orderBys), orderBysImmutable -> orderedSelectionFactory.createFromView(defaultSelection, orderBysImmutable));
return selectionsByOrderBys.computeIfAbsent(ImmutableList.copyOf(orderBys), orderBysImmutable -> viewDataRepository.createOrderedSelectionFromSelection(ViewEvaluationCtx.of(Env.getCtx()), defaultSelection, orderBysImmutable));
}

@Override
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/de/metas/ui/web/view/IViewDataRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import de.metas.ui.web.window.datatypes.DocumentId;
import de.metas.ui.web.window.datatypes.WindowId;
import de.metas.ui.web.window.descriptor.filters.DocumentFilterDescriptorsProvider;
import de.metas.ui.web.window.model.DocumentQueryOrderBy;
import de.metas.ui.web.window.model.filters.DocumentFilter;

/*
Expand Down Expand Up @@ -53,7 +54,7 @@ interface IViewDataRepository

<T> List<T> retrieveModelsByIds(ViewId viewId, Collection<DocumentId> rowIds, Class<T> modelClass);

IViewRowIdsOrderedSelectionFactory createOrderedSelectionFactory(ViewEvaluationCtx viewEvalCtx);

ViewRowIdsOrderedSelection createOrderedSelection(ViewEvaluationCtx viewEvalCtx, WindowId windowId, List<DocumentFilter> filters);

ViewRowIdsOrderedSelection createOrderedSelectionFromSelection(final ViewEvaluationCtx viewEvalCtx, ViewRowIdsOrderedSelection fromSelection, List<DocumentQueryOrderBy> orderBys);
}

This file was deleted.

40 changes: 29 additions & 11 deletions src/main/java/de/metas/ui/web/view/SqlViewDataRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.adempiere.ad.dao.IQueryBL;
import org.adempiere.ad.dao.impl.TypedSqlQueryFilter;
Expand All @@ -32,11 +31,12 @@
import de.metas.ui.web.view.descriptor.SqlViewBinding;
import de.metas.ui.web.view.descriptor.SqlViewRowFieldBinding;
import de.metas.ui.web.view.descriptor.SqlViewRowFieldBinding.SqlViewRowFieldLoader;
import de.metas.ui.web.view.descriptor.SqlViewRowIdsOrderedSelectionFactory;
import de.metas.ui.web.window.datatypes.DocumentId;
import de.metas.ui.web.window.datatypes.WindowId;
import de.metas.ui.web.window.descriptor.filters.DocumentFilterDescriptorsProvider;
import de.metas.ui.web.window.model.DocumentQueryOrderBy;
import de.metas.ui.web.window.model.filters.DocumentFilter;
import de.metas.ui.web.window.model.sql.SqlDocumentOrderByBuilder;
import lombok.NonNull;

/*
Expand Down Expand Up @@ -90,14 +90,6 @@ public String getSqlWhereClause(final ViewId viewId, final Collection<DocumentId
return sqlBindings.getSqlWhereClause(viewId.getViewId(), rowIds);
}

@Override
public IViewRowIdsOrderedSelectionFactory createOrderedSelectionFactory(final ViewEvaluationCtx viewEvalCtx)
{
final String sqlCreateFromViewId = sqlBindings.getSqlCreateSelectionFromSelection();
final Map<String, String> sqlOrderBysByFieldName = sqlBindings.getSqlOrderBysIndexedByFieldName(viewEvalCtx);
return new SqlViewRowIdsOrderedSelectionFactory(sqlCreateFromViewId, sqlOrderBysByFieldName);
}

@Override
public ViewRowIdsOrderedSelection createOrderedSelection(final ViewEvaluationCtx viewEvalCtx, final WindowId windowId, final List<DocumentFilter> filters)
{
Expand Down Expand Up @@ -129,6 +121,32 @@ public ViewRowIdsOrderedSelection createOrderedSelection(final ViewEvaluationCtx
.build();
}

@Override
public ViewRowIdsOrderedSelection createOrderedSelectionFromSelection(final ViewEvaluationCtx viewEvalCtx, final ViewRowIdsOrderedSelection fromSelection, final List<DocumentQueryOrderBy> orderBys)
{
final WindowId windowId = fromSelection.getWindowId();
final String fromSelectionId = fromSelection.getSelectionId();

final ViewId newViewId = ViewId.random(windowId);
final String newSelectionId = newViewId.getViewId();

final String sqlOrderBys = SqlDocumentOrderByBuilder.newInstance(fieldName -> sqlBindings.getFieldByFieldName(fieldName).getSqlOrderBy())
.buildSqlOrderBy(orderBys)
.evaluate(viewEvalCtx.toEvaluatee(), OnVariableNotFound.Fail);

final String sqlCreateFromViewId = sqlBindings.getSqlCreateSelectionFromSelection();
final String sqlFinal = sqlCreateFromViewId.replace(SqlViewBinding.PLACEHOLDER_OrderBy, sqlOrderBys);

final int rowsCount = DB.executeUpdateEx(sqlFinal, new Object[] { newSelectionId, fromSelectionId }, ITrx.TRXNAME_ThreadInherited);

return ViewRowIdsOrderedSelection.builder()
.setViewId(newViewId)
.setSize(rowsCount)
.setOrderBys(orderBys)
.setQueryLimit(fromSelection.getQueryLimit())
.build();
}

@Override
public IViewRow retrieveById(final ViewEvaluationCtx viewEvalCtx, final ViewId viewId, final DocumentId rowId)
{
Expand Down Expand Up @@ -213,7 +231,7 @@ private IViewRow loadViewRow(final ResultSet rs, final WindowId windowId) throws

return viewRowBuilder.build();
}

@Override
public DocumentFilterDescriptorsProvider getViewFilterDescriptors()
{
Expand Down
1 change: 1 addition & 0 deletions src/main/java/de/metas/ui/web/view/ViewEvaluationCtx.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public Evaluatee toEvaluatee()
.put(AccessSqlStringExpression.PARAM_UserRolePermissionsKey.getName(), permissionsKey.toPermissionsKeyString())
.build()
// Fallback to global context
// TODO: consider dropping the fallback because AFAIK only AD_Language and PermissionsKey is required
.andComposeWith(Evaluatees.ofCtx(ctx));
return evaluatee;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ public DocumentFilterDescriptorsProvider getViewFilterDescriptors()
{
return viewFilterDescriptors;
}

public List<DocumentQueryOrderBy> getDefaultOrderBys()
{
return defaultOrderBys;
Expand All @@ -307,7 +307,7 @@ public Map<String, String> getSqlOrderBysIndexedByFieldName(final ViewEvaluation
final String fieldName = fieldBinding.getFieldName();
sqlOrderBysIndexedByFieldName.put(fieldName, fieldOrderBy);
}

return sqlOrderBysIndexedByFieldName.build();
}

Expand Down Expand Up @@ -344,7 +344,7 @@ public String getSqlCreateSelectionFromSelection()

return sqlBuilder.toString();
}

public String getSqlCreateSelectionFrom( //
final List<Object> sqlParams //
, final ViewEvaluationCtx viewEvalCtx //
Expand Down Expand Up @@ -491,7 +491,7 @@ private Map<String, SqlViewRowFieldBinding> getFieldsByFieldName()
{
return _fieldsByFieldName;
}

public final Builder addField(SqlViewRowFieldBinding field)
{
Check.assumeNotNull(field, "Parameter field is not null");
Expand Down

This file was deleted.

0 comments on commit b5791d8

Please sign in to comment.