This is an automated email from the ASF dual-hosted git repository.
mleila pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new 31eb051326 Improved: Allow to define a view link condition when
creating a dve (OFBIZ-13125)
31eb051326 is described below
commit 31eb051326bcec29f4c932a6d829e0d7c9979a16
Author: MLeila <[email protected]>
AuthorDate: Fri Aug 30 09:53:05 2024 +0200
Improved: Allow to define a view link condition when creating a dve
(OFBIZ-13125)
this PR adds the possibility to use the ViewEntityCondition definition
when creating a DynamicView
---
.../ofbiz/entity/model/DynamicViewEntity.java | 71 +++++++++++++++++++++-
.../apache/ofbiz/entity/model/ModelViewEntity.java | 66 ++++++++++++++++++++
2 files changed, 136 insertions(+), 1 deletion(-)
diff --git
a/framework/entity/src/main/java/org/apache/ofbiz/entity/model/DynamicViewEntity.java
b/framework/entity/src/main/java/org/apache/ofbiz/entity/model/DynamicViewEntity.java
index 9729491d56..d0753b5038 100644
---
a/framework/entity/src/main/java/org/apache/ofbiz/entity/model/DynamicViewEntity.java
+++
b/framework/entity/src/main/java/org/apache/ofbiz/entity/model/DynamicViewEntity.java
@@ -34,6 +34,7 @@ import
org.apache.ofbiz.entity.model.ModelViewEntity.ModelAlias;
import org.apache.ofbiz.entity.model.ModelViewEntity.ModelAliasAll;
import org.apache.ofbiz.entity.model.ModelViewEntity.ModelMemberEntity;
import org.apache.ofbiz.entity.model.ModelViewEntity.ModelViewLink;
+import org.apache.ofbiz.entity.model.ModelViewEntity.ViewEntityCondition;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
@@ -351,10 +352,78 @@ public class DynamicViewEntity {
* @param modelKeyMaps the model key maps
*/
public void addViewLink(String entityAlias, String relEntityAlias, Boolean
relOptional, List<ModelKeyMap> modelKeyMaps) {
- ModelViewLink modelViewLink = new ModelViewLink(entityAlias,
relEntityAlias, relOptional, null, modelKeyMaps);
+ addViewLink(entityAlias, relEntityAlias, relOptional, modelKeyMaps,
null);
+ }
+
+ /**
+ * Add view link.
+ * @param entityAlias the entity alias
+ * @param relEntityAlias the rel entity alias
+ * @param relOptional the rel optional
+ * @param viewCond the condition of the view link
+ */
+ public void addViewLink(String entityAlias, String relEntityAlias, Boolean
relOptional, ViewEntityCondition viewCond) {
+ addViewLink(entityAlias, relEntityAlias, relOptional, new
ArrayList<ModelKeyMap>(), viewCond);
+ }
+
+ /**
+ * Add view link.
+ * @param entityAlias the entity alias
+ * @param relEntityAlias the rel entity alias
+ * @param relOptional the rel optional
+ * @param modelKeyMaps the model key maps
+ * @param viewCond the condition of the view link
+ */
+ public void addViewLink(String entityAlias, String relEntityAlias, Boolean
relOptional,
+ List<ModelKeyMap> modelKeyMaps, ViewEntityCondition viewCond) {
+ ModelViewLink modelViewLink = new ModelViewLink(entityAlias,
relEntityAlias, relOptional, viewCond, modelKeyMaps);
this.viewLinks.add(modelViewLink);
}
+ /**
+ * Prepare a ViewEntityCondition to use in view link
+ * @param delegator
+ * @param entityAlias
+ * @param fieldName
+ * @param operator
+ * @param value
+ * @return
+ */
+ public ViewEntityCondition makeViewEntityCondition(Delegator delegator,
String entityAlias, String fieldName, String operator, String value) {
+ Element entityConditionExpr =
ViewEntityCondition.makeViewEntityConditionExpr(entityAlias, fieldName,
operator, value, "", "");
+ return makeViewEntityCondition(delegator, entityConditionExpr);
+ }
+
+ /**
+ * Prepare a ViewEntityCondition to use in view link
+ * @param delegator
+ * @param entityAlias
+ * @param fieldName
+ * @param operator
+ * @param relEntityAlias
+ * @param relFieldName
+ * @return
+ */
+ public ViewEntityCondition makeViewEntityCondition(Delegator delegator,
String entityAlias, String fieldName, String operator,
+ String relEntityAlias, String relFieldName) {
+ Element entityConditionExpr = ViewEntityCondition
+ .makeViewEntityConditionExpr(entityAlias, fieldName, operator,
"", relEntityAlias, relFieldName);
+ return makeViewEntityCondition(delegator, entityConditionExpr);
+ }
+
+ /**
+ * Prepare a ViewEntityCondition to use in view link
+ * @param delegator
+ * @param entityConditionElement
+ * @return
+ */
+ public ViewEntityCondition makeViewEntityCondition(Delegator delegator,
Element entityConditionElement) {
+ if (!"entity-condition".equals(entityConditionElement.getNodeName())) {
+ entityConditionElement =
ViewEntityCondition.makeViewEntityCondition(entityConditionElement);
+ }
+ return new ViewEntityCondition(this.makeModelViewEntity(delegator),
null, entityConditionElement);
+ }
+
/**
* Add all view links to list.
* @param addList the add list
diff --git
a/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelViewEntity.java
b/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelViewEntity.java
index e35a547d15..82011fc077 100644
---
a/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelViewEntity.java
+++
b/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelViewEntity.java
@@ -46,6 +46,7 @@ import org.apache.ofbiz.entity.condition.EntityJoinOperator;
import org.apache.ofbiz.entity.condition.EntityOperator;
import org.apache.ofbiz.entity.jdbc.SqlJdbcUtil;
import org.apache.ofbiz.entity.util.EntityUtil;
+import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -1470,6 +1471,71 @@ public class ModelViewEntity extends ModelEntity {
return null;
}
}
+
+ public static Element makeViewEntityCondition(Element child) {
+ return makeViewEntityCondition(List.of(child));
+ }
+
+ public static Element makeViewEntityCondition(List<Element> children) {
+ Document doc = children.get(0).getOwnerDocument();
+ Element entityConditionElement =
doc.createElement("entity-condition");
+ for (Element child : children) {
+ if (child.getOwnerDocument() != doc) {
+ child = (Element) doc.importNode(child, true);
+ }
+ entityConditionElement.appendChild(child);
+ }
+ return entityConditionElement;
+ }
+
+ public static Element makeViewEntityConditionList(String combine,
List<Element> children) {
+ Document doc = children.get(0).getOwnerDocument();
+ Element conditionListElement = doc.createElement("condition-list");
+ if (UtilValidate.isNotEmpty(combine)) {
+ conditionListElement.setAttribute("combine", combine);
+ }
+ for (Element child : children) {
+ if (child.getOwnerDocument() != doc) {
+ child = (Element) doc.importNode(child, true);
+ }
+ conditionListElement.appendChild(child);
+ }
+ return conditionListElement;
+ }
+
+ public static Element makeViewEntityConditionExpr(String entityAlias,
String fieldName, String operator, String value) {
+ return makeViewEntityConditionExpr(entityAlias, fieldName,
operator, value, null, null);
+ }
+
+ public static Element makeViewEntityConditionExpr(String entityAlias,
String fieldName, String operator,
+ String relEntityAlias, String relFieldName) {
+ return makeViewEntityConditionExpr(entityAlias, fieldName,
operator, null, relEntityAlias, relFieldName);
+ }
+
+ public static Element makeViewEntityConditionExpr(String entityAlias,
String fieldName, String operator,
+ String value, String relEntityAlias, String relFieldName) {
+ Document doc = UtilXml.makeEmptyXmlDocument();
+ Element conditionExprElement = doc.createElement("condition-expr");
+ if (UtilValidate.isNotEmpty(entityAlias)) {
+ conditionExprElement.setAttribute("entity-alias", entityAlias);
+ }
+ if (UtilValidate.isNotEmpty(fieldName)) {
+ conditionExprElement.setAttribute("field-name", fieldName);
+ }
+ if (UtilValidate.isNotEmpty(operator)) {
+ conditionExprElement.setAttribute("operator", operator);
+ }
+ if (UtilValidate.isNotEmpty(value)) {
+ conditionExprElement.setAttribute("value", value);
+ }
+ if (UtilValidate.isNotEmpty(relEntityAlias)) {
+ conditionExprElement.setAttribute("rel-entity-alias",
relEntityAlias);
+ }
+ if (UtilValidate.isNotEmpty(relFieldName)) {
+ conditionExprElement.setAttribute("rel-field-name",
relFieldName);
+ }
+ return conditionExprElement;
+ }
}
public interface ViewCondition extends Serializable {