From: <ms...@us...> - 2011-02-21 21:27:55
|
Revision: 11979 http://wonder.svn.sourceforge.net/wonder/?rev=11979&view=rev Author: mschrag Date: 2011-02-21 21:27:49 +0000 (Mon, 21 Feb 2011) Log Message: ----------- * better handling of NSKVC.NullValue's (turns into a 'null' except in plist -- maybe a plist bug) * NSKVC.Null is now considered a primitive * format parser delegates can be null now * api to provide a custom format parser delegate per controller Modified Paths: -------------- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestRequestNode.java branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestUtils.java branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestParser.java branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestWriter.java branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestParser.java branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestWriter.java branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXXmlRestWriter.java branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/routes/ERXRouteController.java Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestRequestNode.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestRequestNode.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestRequestNode.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -558,7 +558,12 @@ * the value for this node */ public void setValue(Object value) { - _value = value; + if (value instanceof NSKeyValueCoding.Null) { + _value = null; + } + else { + _value = value; + } guessNull(); } @@ -913,8 +918,14 @@ } } else if (ERXRestUtils.isPrimitive(obj)) { - setValue(obj); - setAssociatedObject(obj); + if (obj instanceof NSKeyValueCoding.Null) { + setValue(null); + setAssociatedObject(null); + } + else { + setValue(obj); + setAssociatedObject(obj); + } } else { // in case we have a superclass class description passed in @@ -1223,6 +1234,22 @@ } } + // MS: Totally debatable .... I may take this back out, but it makes things look prettier. + public void _removeRedundantTypes() { + String type = type(); + if ("NSDictionary".equals(type) || "NSMutableDictionary".equals(type)) { + setType(null); + } + NSArray children = children(); + if (children != null) { + /*for (ERXRestRequestNode child : children) {*/ + for (Enumeration childEnum = children.objectEnumerator(); childEnum.hasMoreElements(); ) { + ERXRestRequestNode child = (ERXRestRequestNode)childEnum.nextElement(); + child._removeRedundantTypes(); + } + } + } + /** * Creates a hierarchy of ERXRestRequestNodes based off of the given array of objects. * Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestUtils.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestUtils.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/ERXRestUtils.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -80,6 +80,9 @@ else if (Enum.class.isAssignableFrom(valueType)) { primitive = true; } + else if (NSKeyValueCoding.Null.class.isAssignableFrom(valueType)) { + primitive = true; + } return primitive; } Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestParser.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestParser.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestParser.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -31,7 +31,9 @@ if (ERXRestUtils.isPrimitive(obj)) { ERXRestRequestNode primitiveChild = new ERXRestRequestNode(null, obj, false); requestNode.addChild(primitiveChild); - delegate.nodeDidParse(primitiveChild); + if (delegate != null) { + delegate.nodeDidParse(primitiveChild); + } } else { requestNode.addChild(ERXJSONRestParser.createRequestNodeForJSON(null, (JSON) obj, true, delegate)); @@ -46,7 +48,9 @@ if (ERXRestUtils.isPrimitive(value)) { ERXRestRequestNode primitiveChild = new ERXRestRequestNode(strKey, value, false); requestNode.addChild(primitiveChild); - delegate.nodeDidParse(primitiveChild); + if (delegate != null) { + delegate.nodeDidParse(primitiveChild); + } } else { requestNode.addChild(ERXJSONRestParser.createRequestNodeForJSON(strKey, (JSON) value, false, delegate)); @@ -57,7 +61,9 @@ throw new IllegalArgumentException("Unknown JSON value '" + json + "'."); } - delegate.nodeDidParse(requestNode); + if (delegate != null) { + delegate.nodeDidParse(requestNode); + } return requestNode; } Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestWriter.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestWriter.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXJSONRestWriter.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -1,6 +1,5 @@ package er.rest.format; -import java.util.Enumeration; import java.util.Set; import net.sf.json.JSONSerializer; @@ -8,7 +7,6 @@ import net.sf.json.processors.JsonValueProcessor; import net.sf.json.processors.JsonValueProcessorMatcher; -import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSTimestamp; import er.rest.ERXRestRequestNode; @@ -44,22 +42,6 @@ } } - // MS: Totally debatable .... I may take this back out, but it makes things look prettier. - protected void removeDictionaryTypes(ERXRestRequestNode node) { - String type = node.type(); - if ("NSDictionary".equals(type) || "NSMutableDictionary".equals(type)) { - node.setType(null); - } - NSArray children = node.children(); - if (children != null) { - /*for (ERXRestRequestNode child : children) {*/ - for (Enumeration childEnum = children.objectEnumerator(); childEnum.hasMoreElements(); ) { - ERXRestRequestNode child = (ERXRestRequestNode)childEnum.nextElement(); - removeDictionaryTypes(child); - } - } - } - protected ERXRestRequestNode processNode(ERXRestRequestNode node) { return node; } @@ -70,7 +52,9 @@ public void appendToResponse(ERXRestRequestNode node, IERXRestResponse response, ERXRestFormat.Delegate delegate) { node = processNode(node); - removeDictionaryTypes(node); + if (node != null) { + node._removeRedundantTypes(); + } appendHeadersToResponse(node, response); Object object = node.toJavaCollection(delegate); Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestParser.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestParser.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestParser.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -32,7 +32,9 @@ if (ERXRestUtils.isPrimitive(obj)) { ERXRestRequestNode primitiveChild = new ERXRestRequestNode(null, object, false); requestNode.addChild(primitiveChild); - delegate.nodeDidParse(primitiveChild); + if (delegate != null) { + delegate.nodeDidParse(primitiveChild); + } } else { requestNode.addChild(createRequestNodeForObject(null, obj, true, delegate)); @@ -48,7 +50,9 @@ if (ERXRestUtils.isPrimitive(obj)) { ERXRestRequestNode primitiveChild = new ERXRestRequestNode(null, object, false); requestNode.addChild(primitiveChild); - delegate.nodeDidParse(primitiveChild); + if (delegate != null) { + delegate.nodeDidParse(primitiveChild); + } } else { requestNode.addChild(createRequestNodeForObject(null, obj, true, delegate)); @@ -63,7 +67,9 @@ if (ERXRestUtils.isPrimitive(value)) { ERXRestRequestNode primitiveChild = new ERXRestRequestNode(strKey, value, false); requestNode.addChild(primitiveChild); - delegate.nodeDidParse(primitiveChild); + if (delegate != null) { + delegate.nodeDidParse(primitiveChild); + } } else { requestNode.addChild(createRequestNodeForObject(strKey, value, false, delegate)); @@ -80,7 +86,9 @@ if (ERXRestUtils.isPrimitive(value)) { ERXRestRequestNode primitiveChild = new ERXRestRequestNode(strKey, value, false); requestNode.addChild(primitiveChild); - delegate.nodeDidParse(primitiveChild); + if (delegate != null) { + delegate.nodeDidParse(primitiveChild); + } } else { requestNode.addChild(createRequestNodeForObject(strKey, value, false, delegate)); @@ -91,7 +99,9 @@ throw new IllegalArgumentException("Unknown PLIST value '" + object + "'."); } - delegate.nodeDidParse(requestNode); + if (delegate != null) { + delegate.nodeDidParse(requestNode); + } return requestNode; } Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestWriter.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestWriter.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXPListRestWriter.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -10,6 +10,9 @@ } public void appendToResponse(ERXRestRequestNode node, IERXRestResponse response, ERXRestFormat.Delegate delegate) { + if (node != null) { + node._removeRedundantTypes(); + } appendHeadersToResponse(node, response); Object object = node.toNSCollection(delegate); response.appendContentString(NSPropertyListSerialization.stringFromPropertyList(object)); Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXXmlRestWriter.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXXmlRestWriter.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/format/ERXXmlRestWriter.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -4,7 +4,6 @@ import java.util.Enumeration; import java.util.Map; -import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSTimestamp; import er.extensions.foundation.ERXProperties; @@ -28,7 +27,9 @@ } protected void appendNodeToResponse(ERXRestRequestNode node, IERXRestResponse response, int indent, ERXRestFormat.Delegate delegate) { - delegate.nodeWillWrite(node); + if (delegate != null) { + delegate.nodeWillWrite(node); + } if (node.value() != null || node.isNull()) { appendValueToResponse(node, response, indent); } Modified: branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/routes/ERXRouteController.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/routes/ERXRouteController.java 2011-02-21 21:08:19 UTC (rev 11978) +++ branches/Wonder_2_0_0_Branch/Wonder/Frameworks/EOF/ERRest/Sources/er/rest/routes/ERXRouteController.java 2011-02-21 21:27:49 UTC (rev 11979) @@ -465,6 +465,16 @@ } /** + * Returns the default format delegate to use for the given format (defaults to format.delegate()). + * + * @param format the format to lookup + * @return the delegate to use for this format + */ + protected ERXRestFormat.Delegate formatDelegateForFormat(ERXRestFormat format) { + return format.delegate(); + } + + /** * Returns the request data in the form of an ERXRestRequestNode (which is a format-independent wrapper around * hierarchical data). * @@ -478,7 +488,7 @@ if (parser == null) { throw new IllegalStateException("There is no parser for the format '" + format.name() + "'."); } - _requestNode = parser.parseRestRequest(new ERXWORestRequest(request()), format().delegate()); + _requestNode = parser.parseRestRequest(new ERXWORestRequest(request()), formatDelegateForFormat(format)); } catch (Throwable t) { throw new RuntimeException("Failed to parse a " + format() + " request.", t); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |