From 30ba7ac06c396311acdea2054edf735354444720 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Wed, 19 Apr 2023 23:35:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E5=88=AB=E5=90=8D=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yulichang/method/MPJBaseMethod.java | 33 +++++++++++++++++++ .../yulichang/method/SelectJoinList.java | 3 +- .../yulichang/method/SelectJoinMaps.java | 3 +- .../yulichang/method/SelectJoinMapsPage.java | 3 +- .../yulichang/method/SelectJoinPage.java | 3 +- .../github/yulichang/method/SqlMethod.java | 8 ++--- .../yulichang/method/mp/SelectList.java | 6 ++++ .../yulichang/method/mp/SelectMaps.java | 6 ++++ .../yulichang/method/mp/SelectMapsPage.java | 6 ++++ .../yulichang/method/mp/SelectPage.java | 6 ++++ .../query/MPJLambdaQueryWrapper.java | 12 ++++--- .../yulichang/query/MPJQueryWrapper.java | 7 ++-- .../yulichang/toolkit/JoinWrappers.java | 21 ++++++++++++ .../github/yulichang/toolkit/TableList.java | 9 ++--- .../wrapper/MPJAbstractLambdaWrapper.java | 18 ++++++++++ 15 files changed, 123 insertions(+), 21 deletions(-) diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java index aff14ec..4268dd5 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java @@ -1,16 +1,22 @@ package com.github.yulichang.method; import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; import com.github.yulichang.annotation.DynamicTableName; import com.github.yulichang.config.ConfigProperties; +import com.github.yulichang.toolkit.VersionUtils; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.util.Comparator; +import java.util.List; import java.util.Objects; import static java.util.stream.Collectors.joining; @@ -60,6 +66,33 @@ public interface MPJBaseMethod extends Constants { } } + /** + * order By + */ + default String mpjSqlOrderBy(TableInfo tableInfo) { + /* 不存在排序字段,直接返回空 */ + List orderByFields; + try { + if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) { + orderByFields = tableInfo.getOrderByFields(); + } else { + return StringPool.EMPTY; + } + } catch (Exception e) { + return StringPool.EMPTY; + } + if (CollectionUtils.isEmpty(orderByFields)) { + return StringPool.EMPTY; + } + orderByFields.sort(Comparator.comparingInt(TableFieldInfo::getOrderBySort)); + String sql = NEWLINE + " ORDER BY " + + orderByFields.stream().map(tfi -> String.format("${ew.alias}.%s %s", tfi.getColumn(), + tfi.getOrderByType())).collect(joining(",")); + /* 当wrapper中传递了orderBy属性,@orderBy注解失效 */ + return SqlScriptUtils.convertIf(sql, String.format("%s == null or %s", WRAPPER, + WRAPPER_EXPRESSION_ORDER), true); + } + /** * 拷贝 tableInfo 里面的 getAllSqlWhere方法 diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinList.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinList.java index ce5d951..3667c3f 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinList.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinList.java @@ -22,10 +22,11 @@ public class SelectJoinList extends MPJAbstractMethod { } @Override + @SuppressWarnings("DuplicatedCode") public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { SqlMethod sqlMethod = SqlMethod.SELECT_JOIN_LIST; String sql = String.format(sqlMethod.getSql(), sqlFirst(), sqlDistinct(), sqlSelectColumns(tableInfo, true), - mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), sqlComment()); + mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), mpjSqlOrderBy(tableInfo), sqlComment()); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); return this.addSelectMappedStatementForOther(mapperClass, sqlMethod.getMethod(), sqlSource, MPJResultType.class); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMaps.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMaps.java index 5832ba8..8e0c67a 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMaps.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMaps.java @@ -24,10 +24,11 @@ public class SelectJoinMaps extends MPJAbstractMethod { } @Override + @SuppressWarnings("DuplicatedCode") public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { SqlMethod sqlMethod = SqlMethod.SELECT_JOIN_MAPS; String sql = String.format(sqlMethod.getSql(), sqlFirst(), sqlDistinct(), sqlSelectColumns(tableInfo, true), - mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), sqlComment()); + mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), mpjSqlOrderBy(tableInfo), sqlComment()); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); return this.addSelectMappedStatementForOther(mapperClass, sqlMethod.getMethod(), sqlSource, Map.class); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMapsPage.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMapsPage.java index c2ba135..2c4169c 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMapsPage.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinMapsPage.java @@ -24,10 +24,11 @@ public class SelectJoinMapsPage extends MPJAbstractMethod { } @Override + @SuppressWarnings("DuplicatedCode") public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { SqlMethod sqlMethod = SqlMethod.SELECT_JOIN_MAPS_PAGE; String sql = String.format(sqlMethod.getSql(), sqlFirst(), sqlDistinct(), sqlSelectColumns(tableInfo, true), - mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), sqlComment()); + mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), mpjSqlOrderBy(tableInfo), sqlComment()); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); return this.addSelectMappedStatementForOther(mapperClass, sqlMethod.getMethod(), sqlSource, Map.class); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinPage.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinPage.java index a7cc5b0..f3b3d2a 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinPage.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SelectJoinPage.java @@ -22,10 +22,11 @@ public class SelectJoinPage extends MPJAbstractMethod { } @Override + @SuppressWarnings("DuplicatedCode") public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { SqlMethod sqlMethod = SqlMethod.SELECT_JOIN_PAGE; String sql = String.format(sqlMethod.getSql(), sqlFirst(), sqlDistinct(), sqlSelectColumns(tableInfo, true), - mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), sqlComment()); + mpjTableName(tableInfo), sqlAlias(), sqlFrom(), sqlWhereEntityWrapper(true, tableInfo), mpjSqlOrderBy(tableInfo), sqlComment()); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); return this.addSelectMappedStatementForOther(mapperClass, sqlMethod.getMethod(), sqlSource, MPJResultType.class); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SqlMethod.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SqlMethod.java index 05bafc1..c78c688 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SqlMethod.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/SqlMethod.java @@ -20,19 +20,19 @@ public enum SqlMethod { ""), SELECT_JOIN_LIST("selectJoinList", "返回List集合", - ""), + ""), SELECT_JOIN_MAP("selectJoinMap", "返回一个Map", ""), SELECT_JOIN_MAPS("selectJoinMaps", "返回Map集合", - ""), + ""), SELECT_JOIN_PAGE("selectJoinPage", "连表查询并分页", - ""), + ""), SELECT_JOIN_MAPS_PAGE("selectJoinMapsPage", "返回Map集合并分页", - ""); + ""); private final String method; private final String sql; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java index 1602af6..41af30d 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectList.java @@ -34,6 +34,12 @@ public class SelectList extends com.baomidou.mybatisplus.core.injector.methods.S super.sqlWhereEntityWrapper(newLine, table), mpjSqlWhereEntityWrapper(newLine, table)); } + @Override + protected String sqlOrderBy(TableInfo table) { + return SqlScriptUtils.convertChoose(String.format("%s == null or !(%s instanceof %s)", Constants.WRAPPER, Constants.WRAPPER, MPJBaseJoin.class.getName()), + super.sqlOrderBy(table), mpjSqlOrderBy(table)); + } + @Override protected String sqlSelectColumns(TableInfo table, boolean queryWrapper) { String selectColumns = super.sqlSelectColumns(table, queryWrapper); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java index da91597..3f5f8d3 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMaps.java @@ -34,6 +34,12 @@ public class SelectMaps extends com.baomidou.mybatisplus.core.injector.methods.S super.sqlWhereEntityWrapper(newLine, table), mpjSqlWhereEntityWrapper(newLine, table)); } + @Override + protected String sqlOrderBy(TableInfo table) { + return SqlScriptUtils.convertChoose(String.format("%s == null or !(%s instanceof %s)", Constants.WRAPPER, Constants.WRAPPER, MPJBaseJoin.class.getName()), + super.sqlOrderBy(table), mpjSqlOrderBy(table)); + } + @Override protected String sqlSelectColumns(TableInfo table, boolean queryWrapper) { String selectColumns = super.sqlSelectColumns(table, queryWrapper); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java index b6e592a..76e8127 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectMapsPage.java @@ -34,6 +34,12 @@ public class SelectMapsPage extends com.baomidou.mybatisplus.core.injector.metho super.sqlWhereEntityWrapper(newLine, table), mpjSqlWhereEntityWrapper(newLine, table)); } + @Override + protected String sqlOrderBy(TableInfo table) { + return SqlScriptUtils.convertChoose(String.format("%s == null or !(%s instanceof %s)", Constants.WRAPPER, Constants.WRAPPER, MPJBaseJoin.class.getName()), + super.sqlOrderBy(table), mpjSqlOrderBy(table)); + } + @Override protected String sqlSelectColumns(TableInfo table, boolean queryWrapper) { String selectColumns = super.sqlSelectColumns(table, queryWrapper); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java index e252206..9ad5a05 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/mp/SelectPage.java @@ -34,6 +34,12 @@ public class SelectPage extends com.baomidou.mybatisplus.core.injector.methods.S super.sqlWhereEntityWrapper(newLine, table), mpjSqlWhereEntityWrapper(newLine, table)); } + @Override + protected String sqlOrderBy(TableInfo table) { + return SqlScriptUtils.convertChoose(String.format("%s == null or !(%s instanceof %s)", Constants.WRAPPER, Constants.WRAPPER, MPJBaseJoin.class.getName()), + super.sqlOrderBy(table), mpjSqlOrderBy(table)); + } + @Override protected String sqlSelectColumns(TableInfo table, boolean queryWrapper) { String selectColumns = super.sqlSelectColumns(table, queryWrapper); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java index 458e58d..3466716 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJLambdaQueryWrapper.java @@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.query.Query; import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; -import com.baomidou.mybatisplus.core.toolkit.*; +import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.query.interfaces.StringJoin; @@ -72,7 +75,7 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper entityClass, SharedString from, SharedString sqlSelect, AtomicInteger paramNameSeq, Map paramNameValuePairs, MergeSegments mergeSegments, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst, - List selectColumns, List ignoreColumns) { + List selectColumns, List ignoreColumns, boolean selectDistinct) { super.setEntity(entity); super.setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; @@ -85,6 +88,7 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper extends AbstractLambdaWrapper stringQuery() { return new MPJQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, - expression, sqlSelect, from, lastSql, sqlComment, sqlFirst, selectColumns, ignoreColumns); + expression, sqlSelect, from, lastSql, sqlComment, sqlFirst, selectColumns, ignoreColumns, selectDistinct); } @Override @@ -243,7 +247,7 @@ public class MPJLambdaQueryWrapper extends AbstractLambdaWrapper instance() { return new MPJLambdaQueryWrapper<>(getEntity(), getEntityClass(), null, null, paramNameSeq, paramNameValuePairs, - new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(), null, null); + new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(), null, null, selectDistinct); } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java index 35ae140..03e265d 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java @@ -98,7 +98,7 @@ public class MPJQueryWrapper extends AbstractWrapper paramNameValuePairs, MergeSegments mergeSegments, SharedString sqlSelect, SharedString from, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst, - List selectColumns, List ignoreColumns) { + List selectColumns, List ignoreColumns, boolean selectDistinct) { super.setEntity(entity); super.setEntityClass(entityClass); this.paramNameSeq = paramNameSeq; @@ -111,6 +111,7 @@ public class MPJQueryWrapper extends AbstractWrapper extends AbstractWrapper lambda() { return new MPJLambdaQueryWrapper<>(getEntity(), getEntityClass(), from, sqlSelect, paramNameSeq, paramNameValuePairs, - expression, lastSql, sqlComment, sqlFirst, selectColumns, ignoreColumns); + expression, lastSql, sqlComment, sqlFirst, selectColumns, ignoreColumns, selectDistinct); } /** @@ -305,7 +306,7 @@ public class MPJQueryWrapper extends AbstractWrapper instance() { return new MPJQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(), - null, null, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(), null, null); + null, null, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString(), null, null, selectDistinct); } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java index 7950562..5e6600e 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/JoinWrappers.java @@ -38,6 +38,13 @@ public class JoinWrappers { return new MPJLambdaWrapper<>(); } + /** + * JoinWrappers.lambda("t") + */ + public static MPJLambdaWrapper lambda(String alias) { + return new MPJLambdaWrapper<>(alias); + } + /** * JoinWrappers.lambda(User.class) */ @@ -45,10 +52,24 @@ public class JoinWrappers { return new MPJLambdaWrapper<>(clazz); } + /** + * JoinWrappers.lambda("t", User.class) + */ + public static MPJLambdaWrapper lambda(String alias, Class clazz) { + return new MPJLambdaWrapper(alias).setEntityClass(clazz); + } + /** * JoinWrappers.lambda(user) */ public static MPJLambdaWrapper lambda(T entity) { return new MPJLambdaWrapper<>(entity); } + + /** + * JoinWrappers.lambda("t", user) + */ + public static MPJLambdaWrapper lambda(String alias, T entity) { + return new MPJLambdaWrapper(alias).setEntity(entity); + } } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/TableList.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/TableList.java index bc19ef2..3ecfa98 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/TableList.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/TableList.java @@ -1,5 +1,6 @@ package com.github.yulichang.toolkit; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import lombok.Data; import java.util.ArrayList; @@ -92,18 +93,14 @@ public class TableList { public String getPrefixOther(Integer index, Class clazz) { if (Objects.isNull(index)) { List list = getByClass(clazz); - if (list.size() == 1 && list.get(0).getClazz() == clazz) { - return alias; - } else if (list.size() > 1) { + if (CollectionUtils.isNotEmpty(list)) { for (Node n : list) { if (n.getClazz() == clazz) { return n.isHasAlias() ? n.getAlias() : (n.getAlias() + n.getIndex()); } } - return alias; - } else { - return alias; } + return alias; } Node node = getByIndex(index); Node dg = dg(node, node.getClazz()); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractLambdaWrapper.java index 2c293c1..5bbc773 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJAbstractLambdaWrapper.java @@ -1,9 +1,12 @@ package com.github.yulichang.wrapper; +import com.baomidou.mybatisplus.annotation.OrderBy; import com.baomidou.mybatisplus.core.conditions.SharedString; import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.config.enums.LogicDelTypeEnum; @@ -160,6 +163,21 @@ public abstract class MPJAbstractLambdaWrapper