Author: adrianc
Date: Sat Jan 3 18:40:39 2015
New Revision: 1649230
URL: http://svn.apache.org/r1649230
Log:
Second pass at making tree widget thread-safe. This is a WIP.
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java?rev=1649230&r1=1649229&r2=1649230&view=diff
==============================================================================
---
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java
(original)
+++
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java
Sat Jan 3 18:40:39 2015
@@ -71,7 +71,6 @@ public class HtmlTreeRenderer extends Ht
}
boolean hasChildren = node.hasChildren(context);
- ModelTree.ModelNode.Link expandCollapseLink = new
ModelTree.ModelNode.Link();
// check to see if this node needs to be expanded.
if (hasChildren && node.isExpandCollapse()) {
String targetEntityId = null;
@@ -79,7 +78,8 @@ public class HtmlTreeRenderer extends Ht
if (depth < targetNodeTrail.size()) {
targetEntityId = targetNodeTrail.get(depth);
}
-
+ // FIXME: Using a widget model in this way is an ugly hack.
+ ModelTree.ModelNode.Link expandCollapseLink = null;
int openDepth = node.getModelTree().getOpenDepth();
if (depth >= openDepth && (targetEntityId == null ||
!targetEntityId.equals(entityId))) {
// Not on the trail
@@ -87,8 +87,6 @@ public class HtmlTreeRenderer extends Ht
context.put("processChildren", Boolean.FALSE);
//expandCollapseLink.setText(" + ");
currentNodeTrailPiped = StringUtil.join(currentNodeTrail,
"|");
- expandCollapseLink.setStyle("collapsed");
- expandCollapseLink.setText(" ");
StringBuilder target = new
StringBuilder(node.getModelTree().getExpandCollapseRequest(context));
String trailName =
node.getModelTree().getTrailName(context);
if (target.indexOf("?") < 0) {
@@ -97,7 +95,7 @@ public class HtmlTreeRenderer extends Ht
target.append("&");
}
target.append(trailName).append("=").append(currentNodeTrailPiped);
- expandCollapseLink.setTarget(target.toString());
+ expandCollapseLink = new
ModelTree.ModelNode.Link("collapsed", target.toString(), " ");
}
} else {
context.put("processChildren", Boolean.TRUE);
@@ -107,8 +105,6 @@ public class HtmlTreeRenderer extends Ht
if (currentNodeTrailPiped == null) {
currentNodeTrailPiped = "";
}
- expandCollapseLink.setStyle("expanded");
- expandCollapseLink.setText(" ");
StringBuilder target = new
StringBuilder(node.getModelTree().getExpandCollapseRequest(context));
String trailName = node.getModelTree().getTrailName(context);
if (target.indexOf("?") < 0) {
@@ -117,15 +113,16 @@ public class HtmlTreeRenderer extends Ht
target.append("&");
}
target.append(trailName).append("=").append(currentNodeTrailPiped);
- expandCollapseLink.setTarget(target.toString());
+ expandCollapseLink = new ModelTree.ModelNode.Link("expanded",
target.toString(), " ");
// add it so it can be remove in renderNodeEnd
currentNodeTrail.add(lastContentId);
}
- renderLink(writer, context, expandCollapseLink);
+ if (expandCollapseLink != null) {
+ renderLink(writer, context, expandCollapseLink);
+ }
} else if (!hasChildren) {
context.put("processChildren", Boolean.FALSE);
- expandCollapseLink.setStyle("leafnode");
- expandCollapseLink.setText(" ");
+ ModelTree.ModelNode.Link expandCollapseLink = new
ModelTree.ModelNode.Link("leafnode", "", " ");
renderLink(writer, context, expandCollapseLink);
}
}
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java?rev=1649230&r1=1649229&r2=1649230&view=diff
==============================================================================
---
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
(original)
+++
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
Sat Jan 3 18:40:39 2015
@@ -892,6 +892,7 @@ public abstract class ModelScreenWidget
public String getText(Map<String, Object> context) {
String text = this.textExdr.expandString(context);
+ // FIXME: Encoding should be done by the renderer, not by the
model.
UtilCodec.SimpleEncoder simpleEncoder = (UtilCodec.SimpleEncoder)
context.get("simpleEncoder");
if (simpleEncoder != null) {
text = simpleEncoder.encode(text);
@@ -1469,6 +1470,7 @@ public abstract class ModelScreenWidget
public String getText(Map<String, Object> context) {
String text = this.textExdr.expandString(context);
+ // FIXME: Encoding should be done by the renderer, not by the
model.
UtilCodec.SimpleEncoder simpleEncoder = (UtilCodec.SimpleEncoder)
context.get("simpleEncoder");
if (simpleEncoder != null) {
text = simpleEncoder.encode(text);
@@ -1631,6 +1633,7 @@ public abstract class ModelScreenWidget
public String getAlt(Map<String, Object> context) {
String alt = this.alt.expandString(context);
+ // FIXME: Encoding should be done by the renderer, not by the
model.
UtilCodec.SimpleEncoder simpleEncoder = (UtilCodec.SimpleEncoder)
context.get("simpleEncoder");
if (simpleEncoder != null) {
alt = simpleEncoder.encode(alt);
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java?rev=1649230&r1=1649229&r2=1649230&view=diff
==============================================================================
---
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java
(original)
+++
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java
Sat Jan 3 18:40:39 2015
@@ -162,9 +162,10 @@ public class MacroTreeRenderer implement
}
boolean hasChildren = node.hasChildren(context);
- ModelTree.ModelNode.Link expandCollapseLink = new
ModelTree.ModelNode.Link();
// check to see if this node needs to be expanded.
if (hasChildren && node.isExpandCollapse()) {
+ // FIXME: Using a widget model in this way is an ugly hack.
+ ModelTree.ModelNode.Link expandCollapseLink = null;
String targetEntityId = null;
List<String> targetNodeTrail =
UtilGenerics.toList(context.get("targetNodeTrail"));
if (depth < targetNodeTrail.size()) {
@@ -178,7 +179,6 @@ public class MacroTreeRenderer implement
context.put("processChildren", Boolean.FALSE);
//expandCollapseLink.setText(" + ");
currentNodeTrailPiped = StringUtil.join(currentNodeTrail,
"|");
- expandCollapseLink.setStyle("collapsed");
StringBuilder target = new
StringBuilder(node.getModelTree().getExpandCollapseRequest(context));
String trailName =
node.getModelTree().getTrailName(context);
if (target.indexOf("?") < 0) {
@@ -187,7 +187,7 @@ public class MacroTreeRenderer implement
target.append("&");
}
target.append(trailName).append("=").append(currentNodeTrailPiped);
- expandCollapseLink.setTarget(target.toString());
+ expandCollapseLink = new
ModelTree.ModelNode.Link("collapsed", target.toString(), " ");
}
} else {
context.put("processChildren", Boolean.TRUE);
@@ -197,7 +197,6 @@ public class MacroTreeRenderer implement
if (currentNodeTrailPiped == null) {
currentNodeTrailPiped = "";
}
- expandCollapseLink.setStyle("expanded");
StringBuilder target = new
StringBuilder(node.getModelTree().getExpandCollapseRequest(context));
String trailName = node.getModelTree().getTrailName(context);
if (target.indexOf("?") < 0) {
@@ -206,14 +205,16 @@ public class MacroTreeRenderer implement
target.append("&");
}
target.append(trailName).append("=").append(currentNodeTrailPiped);
- expandCollapseLink.setTarget(target.toString());
+ expandCollapseLink = new ModelTree.ModelNode.Link("expanded",
target.toString(), " ");
// add it so it can be remove in renderNodeEnd
currentNodeTrail.add(lastContentId);
}
- renderLink(writer, context, expandCollapseLink);
+ if (expandCollapseLink != null) {
+ renderLink(writer, context, expandCollapseLink);
+ }
} else if (!hasChildren) {
context.put("processChildren", Boolean.FALSE);
- expandCollapseLink.setStyle("leafnode");
+ ModelTree.ModelNode.Link expandCollapseLink = new
ModelTree.ModelNode.Link("leafnode", "", " ");
renderLink(writer, context, expandCollapseLink);
}
}
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java?rev=1649230&r1=1649229&r2=1649230&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java
(original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java Sat
Jan 3 18:40:39 2015
@@ -36,7 +36,6 @@ import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.GeneralException;
import org.ofbiz.base.util.StringUtil;
import org.ofbiz.base.util.UtilCodec;
-import org.ofbiz.base.util.UtilFormatOut;
import org.ofbiz.base.util.UtilGenerics;
import org.ofbiz.base.util.UtilHttp;
import org.ofbiz.base.util.UtilValidate;
@@ -54,6 +53,7 @@ import org.ofbiz.widget.ModelWidget;
import org.ofbiz.widget.ModelWidgetAction;
import org.ofbiz.widget.ModelWidgetVisitor;
import org.ofbiz.widget.WidgetWorker;
+import org.ofbiz.widget.WidgetWorker.Parameter;
import org.ofbiz.widget.screen.ModelScreen;
import org.ofbiz.widget.screen.ScreenFactory;
import org.ofbiz.widget.screen.ScreenRenderException;
@@ -90,17 +90,17 @@ public class ModelTree extends ModelWidg
super(treeElement);
this.location = location;
this.rootNodeName = treeElement.getAttribute("root-node-name");
- String defaultRenderStyle =
UtilFormatOut.checkEmpty(treeElement.getAttribute("default-render-style"),
"simple");
+ String defaultRenderStyle =
UtilXml.checkEmpty(treeElement.getAttribute("default-render-style"), "simple");
// A temporary hack to accommodate those who might still be using
"render-style" instead of "default-render-style"
- if (UtilValidate.isEmpty(defaultRenderStyle) ||
defaultRenderStyle.equals("simple")) {
+ if (defaultRenderStyle.isEmpty() ||
defaultRenderStyle.equals("simple")) {
String rStyle = treeElement.getAttribute("render-style");
- if (UtilValidate.isNotEmpty(rStyle))
+ if (!rStyle.isEmpty())
defaultRenderStyle = rStyle;
}
this.defaultRenderStyle = defaultRenderStyle;
this.defaultWrapStyleExdr =
FlexibleStringExpander.getInstance(treeElement.getAttribute("default-wrap-style"));
this.expandCollapseRequestExdr =
FlexibleStringExpander.getInstance(treeElement.getAttribute("expand-collapse-request"));
- this.trailNameExdr =
FlexibleStringExpander.getInstance(UtilFormatOut.checkEmpty(treeElement.getAttribute("trail-name"),
+ this.trailNameExdr =
FlexibleStringExpander.getInstance(UtilXml.checkEmpty(treeElement.getAttribute("trail-name"),
"trail"));
this.forceChildCheck =
!"false".equals(treeElement.getAttribute("force-child-check"));
this.defaultEntityName = treeElement.getAttribute("entity-name");
@@ -151,6 +151,15 @@ public class ModelTree extends ModelWidg
return this.defaultEntityName;
}
+ public String getDefaultPkName(Map<String, Object> context) {
+ ModelEntity modelEntity =
WidgetWorker.getDelegator(context).getModelEntity(this.defaultEntityName);
+ if (modelEntity.getPksSize() == 1) {
+ ModelField modelField = modelEntity.getOnlyPk();
+ return modelField.getName();
+ }
+ return null;
+ }
+
public String getExpandCollapseRequest(Map<String, Object> context) {
String expColReq =
this.expandCollapseRequestExdr.expandString(context);
if (UtilValidate.isEmpty(expColReq)) {
@@ -252,34 +261,23 @@ public class ModelTree extends ModelWidg
}
}
- public String getDefaultPkName(Map<String, Object> context) {
- ModelEntity modelEntity =
WidgetWorker.getDelegator(context).getModelEntity(this.defaultEntityName);
- if (modelEntity.getPksSize() == 1) {
- ModelField modelField = modelEntity.getOnlyPk();
- return modelField.getName();
- }
- return null;
- }
-
public static class ModelNode extends ModelWidget {
private final List<ModelWidgetAction> actions;
- protected ModelTreeCondition condition;
- protected String entityName;
- protected String entryName;
- protected String expandCollapseStyle;
- protected Image image;
- protected Label label;
- protected Link link;
- protected ModelTree modelTree;
- protected String pkName;
- protected String renderStyle;
- protected FlexibleStringExpander screenLocationExdr;
- protected FlexibleStringExpander screenNameExdr;
- protected String shareScope;
- protected List<ModelSubNode> subNodeList = new
ArrayList<ModelSubNode>();
- protected List<Object[]> subNodeValues;
- protected FlexibleStringExpander wrapStyleExdr;
+ private final ModelTreeCondition condition;
+ private final String entityName;
+ private final String entryName;
+ private final String expandCollapseStyle;
+ private final Label label;
+ private final Link link;
+ private final ModelTree modelTree;
+ private final String pkName;
+ private final String renderStyle;
+ private final FlexibleStringExpander screenLocationExdr;
+ private final FlexibleStringExpander screenNameExdr;
+ private final String shareScope;
+ private final List<ModelSubNode> subNodeList;
+ private final FlexibleStringExpander wrapStyleExdr;
public ModelNode(Element nodeElement, ModelTree modelTree) {
super(nodeElement);
@@ -287,15 +285,15 @@ public class ModelTree extends ModelWidg
this.expandCollapseStyle =
nodeElement.getAttribute("expand-collapse-style");
this.wrapStyleExdr =
FlexibleStringExpander.getInstance(nodeElement.getAttribute("wrap-style"));
this.renderStyle = nodeElement.getAttribute("render-style");
- this.entryName =
UtilFormatOut.checkEmpty(nodeElement.getAttribute("entry-name"), null);
+ this.entryName = nodeElement.getAttribute("entry-name");
this.entityName = nodeElement.getAttribute("entity-name");
- if (this.pkName == null ||
nodeElement.hasAttribute("join-field-name"))
- this.pkName = nodeElement.getAttribute("join-field-name");
+ this.pkName = nodeElement.getAttribute("join-field-name");
ArrayList<ModelWidgetAction> actions = new
ArrayList<ModelWidgetAction>();
Element actionsElement = UtilXml.firstChildElement(nodeElement,
"actions");
if (actionsElement != null) {
actions.addAll(ModelTreeAction.readNodeActions(this,
actionsElement));
}
+ // FIXME: Validate child elements, should be only one of
entity-one, service, script.
Element actionElement = UtilXml.firstChildElement(nodeElement,
"entity-one");
if (actionElement != null) {
actions.add(new ModelWidgetAction.EntityOne(this,
actionElement));
@@ -315,26 +313,39 @@ public class ModelTree extends ModelWidg
this.screenNameExdr =
FlexibleStringExpander.getInstance(screenElement.getAttribute("name"));
this.screenLocationExdr =
FlexibleStringExpander.getInstance(screenElement.getAttribute("location"));
this.shareScope = screenElement.getAttribute("share-scope");
+ } else {
+ this.screenNameExdr = FlexibleStringExpander.getInstance("");
+ this.screenLocationExdr =
FlexibleStringExpander.getInstance("");
+ this.shareScope = "";
}
Element labelElement = UtilXml.firstChildElement(nodeElement,
"label");
if (labelElement != null) {
this.label = new Label(labelElement);
+ } else {
+ this.label = null;
}
Element linkElement = UtilXml.firstChildElement(nodeElement,
"link");
if (linkElement != null) {
this.link = new Link(linkElement);
- }
- Element imageElement = UtilXml.firstChildElement(nodeElement,
"image");
- if (imageElement != null) {
- this.image = new Image(imageElement);
+ } else {
+ this.link = null;
}
Element conditionElement = UtilXml.firstChildElement(nodeElement,
"condition");
if (conditionElement != null) {
this.condition = new ModelTreeCondition(modelTree,
conditionElement);
+ } else {
+ this.condition = null;
}
- for (Element subNodeElementEntry :
UtilXml.childElementList(nodeElement, "sub-node")) {
- ModelSubNode subNode = new ModelSubNode(subNodeElementEntry,
this);
- subNodeList.add(subNode);
+ List<? extends Element> nodeElements =
UtilXml.childElementList(nodeElement, "sub-node");
+ if (!nodeElements.isEmpty()) {
+ List<ModelSubNode> subNodeList = new ArrayList<ModelSubNode>();
+ for (Element subNodeElementEntry : nodeElements) {
+ ModelSubNode subNode = new
ModelSubNode(subNodeElementEntry, this);
+ subNodeList.add(subNode);
+ }
+ this.subNodeList = Collections.unmodifiableList(subNodeList);
+ } else {
+ this.subNodeList = Collections.emptyList();
}
}
@@ -343,8 +354,8 @@ public class ModelTree extends ModelWidg
visitor.visit(this);
}
- public void getChildren(Map<String, Object> context) {
- this.subNodeValues = new ArrayList<Object[]>();
+ private List<Object[]> getChildren(Map<String, Object> context) {
+ List<Object[]> subNodeValues = new ArrayList<Object[]>();
for (ModelSubNode subNode : subNodeList) {
String nodeName = subNode.getNodeName(context);
ModelNode node = modelTree.nodeMap.get(nodeName);
@@ -352,13 +363,13 @@ public class ModelTree extends ModelWidg
//if (Debug.infoOn()) Debug.logInfo(" context.currentValue:" +
context.get("currentValue"), module);
ModelWidgetAction.runSubActions(subNodeActions, context);
// List dataFound = (List)context.get("dataFound");
- Iterator<? extends Map<String, ? extends Object>> dataIter =
subNode.getListIterator();
+ Iterator<? extends Map<String, ? extends Object>> dataIter =
subNode.getListIterator(context);
if (dataIter instanceof EntityListIterator) {
EntityListIterator eli = (EntityListIterator) dataIter;
Map<String, Object> val = null;
while ((val = eli.next()) != null) {
Object[] arr = { node, val };
- this.subNodeValues.add(arr);
+ subNodeValues.add(arr);
}
try {
eli.close();
@@ -370,14 +381,15 @@ public class ModelTree extends ModelWidg
while (dataIter.hasNext()) {
Map<String, ? extends Object> val = dataIter.next();
Object[] arr = { node, val };
- this.subNodeValues.add(arr);
+ subNodeValues.add(arr);
}
}
}
+ return subNodeValues;
}
public String getEntityName() {
- if (UtilValidate.isNotEmpty(this.entityName)) {
+ if (!this.entityName.isEmpty()) {
return this.entityName;
} else {
return this.modelTree.getDefaultEntityName();
@@ -405,26 +417,26 @@ public class ModelTree extends ModelWidg
}
public String getRenderStyle() {
- String rStyle = this.renderStyle;
- if (UtilValidate.isEmpty(rStyle))
- rStyle = modelTree.getRenderStyle();
- return rStyle;
+ if (this.renderStyle.isEmpty())
+ return modelTree.getRenderStyle();
+ return this.renderStyle;
}
public String getWrapStyle(Map<String, Object> context) {
String val = this.wrapStyleExdr.expandString(context);
- if (UtilValidate.isEmpty(val)) {
+ if (val.isEmpty()) {
val = this.modelTree.getWrapStyle(context);
}
return val;
}
public boolean hasChildren(Map<String, Object> context) {
+ List<Object[]> subNodeValues = getChildren(context);
boolean hasChildren = false;
Long nodeCount = null;
String countFieldName = "childBranchCount";
Object obj = null;
- if (UtilValidate.isNotEmpty(this.entryName)) {
+ if (!this.entryName.isEmpty()) {
Map<String, Object> map =
UtilGenerics.cast(context.get(this.entryName));
if (map instanceof GenericValue) {
ModelEntity modelEntity = ((GenericValue)
map).getModelEntity();
@@ -462,10 +474,10 @@ public class ModelTree extends ModelWidg
}
}
*/
- nodeCount = Long.valueOf(this.subNodeValues.size());
+ nodeCount = Long.valueOf(subNodeValues.size());
String pkName = this.getPkName(context);
String id = null;
- if (UtilValidate.isNotEmpty(this.entryName)) {
+ if (!this.entryName.isEmpty()) {
id = UtilGenerics.<Map<String, String>>
cast(context.get(this.entryName)).get(pkName);
} else {
id = (String) context.get(pkName);
@@ -531,7 +543,7 @@ public class ModelTree extends ModelWidg
ModelTreeAction.runSubActions(this.actions, context);
String pkName = getPkName(context);
String id = null;
- if (UtilValidate.isNotEmpty(this.entryName)) {
+ if (!this.entryName.isEmpty()) {
id = UtilGenerics.<Map<String, String>>
cast(context.get(this.entryName)).get(pkName);
} else {
id = (String) context.get(pkName);
@@ -542,10 +554,10 @@ public class ModelTree extends ModelWidg
// context.entrySet(), module);
try {
String screenName = null;
- if (screenNameExdr != null)
+ if (!screenNameExdr.isEmpty())
screenName = screenNameExdr.expandString(context);
String screenLocation = null;
- if (screenLocationExdr != null)
+ if (!screenLocationExdr.isEmpty())
screenLocation =
screenLocationExdr.expandString(context);
if (screenName != null && screenLocation != null) {
ScreenStringRenderer screenStringRenderer =
treeStringRenderer.getScreenStringRenderer(context);
@@ -562,9 +574,9 @@ public class ModelTree extends ModelWidg
Boolean processChildren = (Boolean)
context.get("processChildren");
//if (Debug.infoOn()) Debug.logInfo(" processChildren:" +
processChildren, module);
if (processChildren.booleanValue()) {
- getChildren(context);
+ List<Object[]> subNodeValues = getChildren(context);
int newDepth = depth + 1;
- for (Object[] arr : this.subNodeValues) {
+ for (Object[] arr : subNodeValues) {
ModelNode node = (ModelNode) arr[0];
Map<String, Object> val =
UtilGenerics.checkMap(arr[1]);
//GenericPK pk = val.getPrimaryKey();
@@ -575,7 +587,7 @@ public class ModelTree extends ModelWidg
MapStack<String> newContext =
MapStack.create(context);
newContext.push();
String nodeEntryName = node.getEntryName();
- if (UtilValidate.isNotEmpty(nodeEntryName)) {
+ if (!nodeEntryName.isEmpty()) {
newContext.put(nodeEntryName, val);
} else {
newContext.putAll(val);
@@ -615,10 +627,6 @@ public class ModelTree extends ModelWidg
}
}
- public void setPkName(String pkName) {
- this.pkName = pkName;
- }
-
public boolean showPeers(int currentDepth, Map<String, Object>
context) {
int trailSize = 0;
List<?> trail =
UtilGenerics.checkList(context.get("targetNodeTrail"));
@@ -648,32 +656,23 @@ public class ModelTree extends ModelWidg
public static class Image {
- protected FlexibleStringExpander borderExdr;
- protected FlexibleStringExpander heightExdr;
- protected FlexibleStringExpander idExdr;
- protected FlexibleStringExpander srcExdr;
- protected FlexibleStringExpander styleExdr;
- protected String urlMode;
- protected FlexibleStringExpander widthExdr;
-
- public Image() {
- setSrc(null);
- setId(null);
- setStyle(null);
- setWidth(null);
- setHeight(null);
- setBorder("0");
- setUrlMode(null);
- }
+ private final FlexibleStringExpander borderExdr;
+ private final FlexibleStringExpander heightExdr;
+ private final FlexibleStringExpander idExdr;
+ private final FlexibleStringExpander srcExdr;
+ private final FlexibleStringExpander styleExdr;
+ private final String urlMode;
+ private final FlexibleStringExpander widthExdr;
public Image(Element imageElement) {
- setSrc(imageElement.getAttribute("src"));
- setId(imageElement.getAttribute("id"));
- setStyle(imageElement.getAttribute("style"));
- setWidth(imageElement.getAttribute("width"));
- setHeight(imageElement.getAttribute("height"));
-
setBorder(UtilFormatOut.checkEmpty(imageElement.getAttribute("border"), "0"));
-
setUrlMode(UtilFormatOut.checkEmpty(imageElement.getAttribute("url-mode"),
"content"));
+ this.borderExdr = FlexibleStringExpander
+
.getInstance(UtilXml.checkEmpty(imageElement.getAttribute("border"), "0"));
+ this.heightExdr =
FlexibleStringExpander.getInstance(imageElement.getAttribute("height"));
+ this.idExdr =
FlexibleStringExpander.getInstance(imageElement.getAttribute("id"));
+ this.srcExdr =
FlexibleStringExpander.getInstance(imageElement.getAttribute("src"));
+ this.styleExdr =
FlexibleStringExpander.getInstance(imageElement.getAttribute("style"));
+ this.urlMode =
UtilXml.checkEmpty(imageElement.getAttribute("url-mode"), "content");
+ this.widthExdr =
FlexibleStringExpander.getInstance(imageElement.getAttribute("width"));
}
public String getBorder(Map<String, Object> context) {
@@ -713,50 +712,16 @@ public class ModelTree extends ModelWidg
throw new RuntimeException(errMsg);
}
}
-
- public void setBorder(String val) {
- this.borderExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setHeight(String val) {
- this.heightExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setId(String val) {
- this.idExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setSrc(String val) {
- String textAttr = UtilFormatOut.checkNull(val);
- this.srcExdr = FlexibleStringExpander.getInstance(textAttr);
- }
-
- public void setStyle(String val) {
- this.styleExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setUrlMode(String val) {
- if (UtilValidate.isEmpty(val)) {
- this.urlMode = "content";
- } else {
- this.urlMode = val;
- }
- }
-
- public void setWidth(String val) {
- this.widthExdr = FlexibleStringExpander.getInstance(val);
- }
}
- public static class Label {
- protected FlexibleStringExpander idExdr;
- protected FlexibleStringExpander styleExdr;
- protected FlexibleStringExpander textExdr;
+ public static final class Label {
+ private final FlexibleStringExpander idExdr;
+ private final FlexibleStringExpander styleExdr;
+ private final FlexibleStringExpander textExdr;
public Label(Element labelElement) {
- // put the text attribute first, then the pcdata under the
element, if both are there of course
- String textAttr =
UtilFormatOut.checkNull(labelElement.getAttribute("text"));
- String pcdata =
UtilFormatOut.checkNull(UtilXml.elementValue(labelElement));
+ String textAttr = labelElement.getAttribute("text");
+ String pcdata =
UtilXml.checkEmpty(UtilXml.elementValue(labelElement), "");
this.textExdr = FlexibleStringExpander.getInstance(textAttr +
pcdata);
this.idExdr =
FlexibleStringExpander.getInstance(labelElement.getAttribute("id"));
this.styleExdr =
FlexibleStringExpander.getInstance(labelElement.getAttribute("style"));
@@ -772,6 +737,7 @@ public class ModelTree extends ModelWidg
public String getText(Map<String, Object> context) {
String text = this.textExdr.expandString(context);
+ // FIXME: Encoding should be done by the renderer, not by the
model.
UtilCodec.SimpleEncoder simpleEncoder =
(UtilCodec.SimpleEncoder) context.get("simpleEncoder");
if (simpleEncoder != null) {
text = simpleEncoder.encode(text);
@@ -791,59 +757,71 @@ public class ModelTree extends ModelWidg
}
public static class Link {
- protected boolean encode = false;
- protected boolean fullPath = false;
- protected FlexibleStringExpander idExdr;
- protected Image image;
- protected String linkType;
- protected FlexibleStringExpander nameExdr;
- protected List<WidgetWorker.Parameter> parameterList = new
ArrayList<WidgetWorker.Parameter>();
- protected FlexibleStringExpander prefixExdr;
- protected boolean secure = false;
- protected FlexibleStringExpander styleExdr;
- protected FlexibleStringExpander targetExdr;
- protected FlexibleStringExpander targetWindowExdr;
- protected FlexibleStringExpander textExdr;
- protected FlexibleStringExpander titleExdr;
- protected String urlMode = "intra-app";
-
- public Link() {
- setText(null);
- setId(null);
- setStyle(null);
- setTarget(null);
- setTargetWindow(null);
- setPrefix(null);
- setUrlMode(null);
- setFullPath(null);
- setSecure(null);
- setEncode(null);
- setName(null);
- setTitle(null);
- }
+ private final boolean encode;
+ private final boolean fullPath;
+ private final FlexibleStringExpander idExdr;
+ private final Image image;
+ private final String linkType;
+ private final FlexibleStringExpander nameExdr;
+ private final List<Parameter> parameterList;
+ private final FlexibleStringExpander prefixExdr;
+ private final boolean secure;
+ private final FlexibleStringExpander styleExdr;
+ private final FlexibleStringExpander targetExdr;
+ private final FlexibleStringExpander targetWindowExdr;
+ private final FlexibleStringExpander textExdr;
+ private final FlexibleStringExpander titleExdr;
+ private final String urlMode;
public Link(Element linkElement) {
- setText(linkElement.getAttribute("text"));
- setId(linkElement.getAttribute("id"));
- setStyle(linkElement.getAttribute("style"));
- setTarget(linkElement.getAttribute("target"));
- setTargetWindow(linkElement.getAttribute("target-window"));
- setPrefix(linkElement.getAttribute("prefix"));
- setUrlMode(linkElement.getAttribute("url-mode"));
- setFullPath(linkElement.getAttribute("full-path"));
- setSecure(linkElement.getAttribute("secure"));
- setEncode(linkElement.getAttribute("encode"));
- setName(linkElement.getAttribute("name"));
- setTitle(linkElement.getAttribute("title"));
+ this.encode =
"true".equals(linkElement.getAttribute("encode"));
+ this.fullPath =
"true".equals(linkElement.getAttribute("full-path"));
+ this.idExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("id"));
Element imageElement = UtilXml.firstChildElement(linkElement,
"image");
if (imageElement != null) {
this.image = new Image(imageElement);
+ } else {
+ this.image = null;
}
this.linkType = linkElement.getAttribute("link-type");
+ this.nameExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("name"));
List<? extends Element> parameterElementList =
UtilXml.childElementList(linkElement, "parameter");
- for (Element parameterElement : parameterElementList) {
- this.parameterList.add(new
WidgetWorker.Parameter(parameterElement));
+ if (!parameterElementList.isEmpty()) {
+ List<Parameter> parameterList = new
ArrayList<Parameter>(parameterElementList.size());
+ for (Element parameterElement : parameterElementList) {
+ parameterList.add(new Parameter(parameterElement));
+ }
+ this.parameterList =
Collections.unmodifiableList(parameterList);
+ } else {
+ this.parameterList = Collections.emptyList();
}
+ this.prefixExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("prefix"));
+ this.secure =
"true".equals(linkElement.getAttribute("secure"));
+ this.styleExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("style"));
+ this.targetExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("target"));
+ this.targetWindowExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("target-window"));
+ this.textExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("text"));
+ this.titleExdr =
FlexibleStringExpander.getInstance(linkElement.getAttribute("title"));
+ this.urlMode =
UtilXml.checkEmpty(linkElement.getAttribute("link-type"), "intra-app");
+ }
+
+ // FIXME: Using a widget model in this way is an ugly hack.
+ public Link(String style, String target, String text) {
+ this.encode = false;
+ this.fullPath = false;
+ this.idExdr = FlexibleStringExpander.getInstance("");
+ this.image = null;
+ this.linkType = "";
+ this.nameExdr = FlexibleStringExpander.getInstance("");
+ this.parameterList = Collections.emptyList();
+ this.prefixExdr = FlexibleStringExpander.getInstance("");
+ this.secure = false;
+ this.styleExdr = FlexibleStringExpander.getInstance(style);
+ this.targetExdr = FlexibleStringExpander.getInstance(target);
+ this.targetWindowExdr = FlexibleStringExpander.getInstance("");
+ this.textExdr = FlexibleStringExpander.getInstance(text);
+ this.titleExdr = FlexibleStringExpander.getInstance("");
+ this.urlMode = "intra-app";
}
public boolean getEncode() {
@@ -912,6 +890,7 @@ public class ModelTree extends ModelWidg
public String getText(Map<String, Object> context) {
String text = this.textExdr.expandString(context);
+ // FIXME: Encoding should be done by the renderer, not by the
model.
UtilCodec.SimpleEncoder simpleEncoder =
(UtilCodec.SimpleEncoder) context.get("simpleEncoder");
if (simpleEncoder != null) {
text = simpleEncoder.encode(text);
@@ -921,6 +900,7 @@ public class ModelTree extends ModelWidg
public String getTitle(Map<String, Object> context) {
String title = this.titleExdr.expandString(context);
+ // FIXME: Encoding should be done by the renderer, not by the
model.
UtilCodec.SimpleEncoder simpleEncoder =
(UtilCodec.SimpleEncoder) context.get("simpleEncoder");
if (simpleEncoder != null) {
title = simpleEncoder.encode(title);
@@ -941,81 +921,14 @@ public class ModelTree extends ModelWidg
throw new RuntimeException(errMsg);
}
}
-
- public void setEncode(String val) {
- String sEncode = val;
- if (sEncode != null && sEncode.equalsIgnoreCase("true"))
- this.encode = true;
- else
- this.encode = false;
- }
-
- public void setFullPath(String val) {
- String sFullPath = val;
- if (sFullPath != null && sFullPath.equalsIgnoreCase("true"))
- this.fullPath = true;
- else
- this.fullPath = false;
- }
-
- public void setId(String val) {
- this.idExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setImage(Image img) {
- this.image = img;
- }
-
- public void setName(String val) {
- this.nameExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setPrefix(String val) {
- this.prefixExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setSecure(String val) {
- String sSecure = val;
- if (sSecure != null && sSecure.equalsIgnoreCase("true"))
- this.secure = true;
- else
- this.secure = false;
- }
-
- public void setStyle(String val) {
- this.styleExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setTarget(String val) {
- this.targetExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setTargetWindow(String val) {
- this.targetWindowExdr =
FlexibleStringExpander.getInstance(val);
- }
-
- public void setText(String val) {
- String textAttr = UtilFormatOut.checkNull(val);
- this.textExdr = FlexibleStringExpander.getInstance(textAttr);
- }
-
- public void setTitle(String val) {
- this.titleExdr = FlexibleStringExpander.getInstance(val);
- }
-
- public void setUrlMode(String val) {
- if (UtilValidate.isNotEmpty(val))
- this.urlMode = val;
- }
-
}
public static class ModelSubNode extends ModelWidget {
private final List<ModelWidgetAction> actions;
- protected ListIterator<? extends Map<String, ? extends Object>>
listIterator;
- protected FlexibleStringExpander nodeNameExdr;
- protected ModelNode rootNode;
+ private final FlexibleStringExpander nodeNameExdr;
+ private final ModelNode rootNode;
+ private final String iteratorKey;
public ModelSubNode(Element subNodeElement, ModelNode modelNode) {
super(subNodeElement);
@@ -1044,6 +957,8 @@ public class ModelTree extends ModelWidg
}
actions.trimToSize();
this.actions = Collections.unmodifiableList(actions);
+ this.iteratorKey =
this.rootNode.getName().concat(".").concat(this.nodeNameExdr.getOriginal())
+ .concat(".ITERATOR");
}
@Override
@@ -1055,8 +970,9 @@ public class ModelTree extends ModelWidg
return actions;
}
- public ListIterator<? extends Map<String, ? extends Object>>
getListIterator() {
- return listIterator;
+ @SuppressWarnings("unchecked")
+ public ListIterator<? extends Map<String, ? extends Object>>
getListIterator(Map<String, Object> context) {
+ return (ListIterator<? extends Map<String, ? extends Object>>)
context.get(this.iteratorKey);
}
public ModelTree.ModelNode getNode() {
@@ -1067,8 +983,8 @@ public class ModelTree extends ModelWidg
return this.nodeNameExdr.expandString(context);
}
- public void setListIterator(ListIterator<? extends Map<String, ?
extends Object>> iter) {
- listIterator = iter;
+ public void setListIterator(ListIterator<? extends Map<String, ?
extends Object>> iter, Map<String, Object> context) {
+ context.put(this.iteratorKey, iter);
}
}
}
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java?rev=1649230&r1=1649229&r2=1649230&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java
(original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java
Sat Jan 3 18:40:39 2015
@@ -122,11 +122,11 @@ public abstract class ModelTreeAction ex
if (this.modelSubNode != null) {
if (obj != null && (obj instanceof EntityListIterator || obj
instanceof ListIterator<?>)) {
ListIterator<? extends Map<String, ? extends Object>>
listIt = UtilGenerics.cast(obj);
- this.modelSubNode.setListIterator(listIt);
+ this.modelSubNode.setListIterator(listIt, context);
} else {
if (obj instanceof List<?>) {
List<? extends Map<String, ? extends Object>> list =
UtilGenerics.checkList(obj);
- this.modelSubNode.setListIterator(list.listIterator());
+ this.modelSubNode.setListIterator(list.listIterator(),
context);
}
}
}
@@ -225,9 +225,9 @@ public abstract class ModelTreeAction ex
if (lst != null) {
if (lst instanceof ListIterator<?>) {
ListIterator<? extends Map<String, ? extends
Object>> listIt = UtilGenerics.cast(lst);
- this.modelSubNode.setListIterator(listIt);
+ this.modelSubNode.setListIterator(listIt,
context);
} else {
-
this.modelSubNode.setListIterator(lst.listIterator());
+
this.modelSubNode.setListIterator(lst.listIterator(), context);
}
}
}
@@ -279,11 +279,11 @@ public abstract class ModelTreeAction ex
Object obj = context.get(this.listName);
if (obj != null && (obj instanceof EntityListIterator || obj
instanceof ListIterator<?>)) {
ListIterator<? extends Map<String, ? extends Object>>
listIt = UtilGenerics.cast(obj);
- this.modelSubNode.setListIterator(listIt);
+ this.modelSubNode.setListIterator(listIt, context);
} else {
if (obj instanceof List<?>) {
List<? extends Map<String, ? extends Object>> list =
UtilGenerics.checkList(obj);
- this.modelSubNode.setListIterator(list.listIterator());
+ this.modelSubNode.setListIterator(list.listIterator(),
context);
}
}
} catch (GeneralException e) {
@@ -324,11 +324,11 @@ public abstract class ModelTreeAction ex
Object obj = context.get(this.listName);
if (obj != null && (obj instanceof EntityListIterator || obj
instanceof ListIterator<?>)) {
ListIterator<? extends Map<String, ? extends Object>>
listIt = UtilGenerics.cast(obj);
- this.modelSubNode.setListIterator(listIt);
+ this.modelSubNode.setListIterator(listIt, context);
} else {
if (obj instanceof List<?>) {
List<? extends Map<String, ? extends Object>> list =
UtilGenerics.cast(obj);
- this.modelSubNode.setListIterator(list.listIterator());
+ this.modelSubNode.setListIterator(list.listIterator(),
context);
}
}
} catch (GeneralException e) {