Package er.rest

Examples of er.rest.ERXRestRequestNode


*
* @author mschrag
*/
public class ERXPListRestParser implements IERXRestParser {
  protected ERXRestRequestNode createRequestNodeForObject(String name, Object object, boolean rootNode, ERXRestFormat.Delegate delegate) {
    ERXRestRequestNode requestNode = new ERXRestRequestNode(name, rootNode);

    if (object == null) {
      // just leave the value null
    }
    else if (object instanceof List) {
      requestNode.setArray(true);
      List<?> list = (List<?>) object;
      for (Object obj : list) {
        if (ERXRestUtils.isPrimitive(obj)) {
          ERXRestRequestNode primitiveChild = new ERXRestRequestNode(null, object, false);
          requestNode.addChild(primitiveChild);
          if (delegate != null) {
            delegate.nodeDidParse(primitiveChild);
          }
        }
        else {
          requestNode.addChild(createRequestNodeForObject(null, obj, true, delegate));
        }
      }
    }
    else if (object instanceof Map) {
      Map<?, ?> map = (Map<?, ?>) object;
      for (Object key : map.keySet()) {
        String strKey = (String) key;
        Object value = map.get(key);
        if (ERXRestUtils.isPrimitive(value)) {
          ERXRestRequestNode primitiveChild = new ERXRestRequestNode(strKey, value, false);
          requestNode.addChild(primitiveChild);
          if (delegate != null) {
            delegate.nodeDidParse(primitiveChild);
          }
        }
View Full Code Here


    return requestNode;
  }

  public ERXRestRequestNode parseRestRequest(IERXRestRequest request, ERXRestFormat.Delegate delegate, ERXRestContext context) {
    ERXRestRequestNode rootRequestNode = null;
    String contentString = request.stringContent();
    if (contentString != null && contentString.length() > 0) {
      // MS: Support direct updating of primitive type keys -- so if you don't want to
      // wrap your request in XML, this will allow it
      // if (!contentStr.trim().startsWith("<")) {
      // contentStr = "<FakeWrapper>" + contentStr.trim() + "</FakeWrapper>";
      // }

      Object rootObj = NSPropertyListSerialization.propertyListFromString(contentString);
      rootRequestNode = createRequestNodeForObject(null, rootObj, true, delegate);
    }
    else {
      rootRequestNode = new ERXRestRequestNode(null, true);
      rootRequestNode.setNull(true);
    }

    return rootRequestNode;
  }
View Full Code Here

import er.extensions.localization.ERXLocalizer;
import er.rest.ERXRestRequestNode;

public class ERXEmberRestWriter extends ERXJSONRestWriter {
  protected ERXRestRequestNode processNode(ERXRestRequestNode node) {
    ERXRestRequestNode rootNode = new ERXRestRequestNode(null, true);
    String rootObjectName;
    NSMutableArray<ERXRestRequestNode> nodesToAdd = null;
    NSMutableArray<ERXRestRequestNode> nodesToRemove = null;
    ERXRestRequestNode linksNode = null;
    if (node.isArray()) {
      rootObjectName = ERXStringUtilities.uncapitalize(ERXLocalizer.englishLocalizer().plurifiedString(node.childAtIndex(0).type(), 2));
      ERXRestRequestNode recordsNode = new ERXRestRequestNode(rootObjectName, false);
      recordsNode.setArray(true);
      rootNode.addChild(recordsNode);
      if (rootObjectName == null) {
        rootObjectName = "undefined";
      }
      for (ERXRestRequestNode child : node.children()) {
        linksNode = new ERXRestRequestNode("links", false);
        nodesToAdd = new NSMutableArray<ERXRestRequestNode>();
        nodesToRemove = new NSMutableArray<ERXRestRequestNode>();
        recordsNode.addChild(child);
        for (ERXRestRequestNode subChild : child.children()) {
          if (subChild.isArray() ) {
            // Return link to the relationship instead of id array if there are over 300 objects or the resulting relationship fetch request will be too large for some browsers and servers
            if (subChild.children().size() > 300) {
              String url = "/" + rootObjectName + "/" + child.id() + "/" + subChild.name();
              linksNode.addChild(new ERXRestRequestNode(subChild.name(), url, false) );
              nodesToRemove.add(subChild);
            }
            else {
              // rewrite relationship to ember format of objects: [id, id] format instead of objects: { [id:1, id:2] }
              if (subChild.children().size() > 0 && subChild.children().objectAtIndex(0).children().size() == 0) {
                ERXRestRequestNode newSubChild = new ERXRestRequestNode(subChild.name(), false);
                nodesToAdd.add(newSubChild);
                newSubChild.setArray(true);
                for (ERXRestRequestNode idNode : subChild.children()) {
                  newSubChild.addChild(new ERXRestRequestNode(null, idNode.id(), false));
                }
                nodesToRemove.add(subChild);
              }
              else {
                // Multiple keys are included in the filter so we are keeping embedded objects in the relationship instead of ids
                for (ERXRestRequestNode idNode : subChild.children()) {
                  this.processNode(idNode);
                }
              }
            }
          }
          else {
            if (subChild.id() != null) {
              // use id of the object if no keys were specified in the filter. object: id instead of object: {id:1}
              if (subChild.children().size() == 0) {
                ERXRestRequestNode newSubChild = new ERXRestRequestNode(subChild.name(), subChild.id(), false);
                nodesToAdd.add(newSubChild);
                nodesToRemove.add(subChild);
              }
              else {
                processNode(subChild);
              }
            }
          }
        }
        child.children().removeAll(nodesToRemove);
        child.children().addAll(nodesToAdd);
        if(linksNode.children().size() > 0) {
          child.addChild(linksNode);
        }
      }
    }
    else
      rootNode.addChild(node);
      rootObjectName = ERXStringUtilities.uncapitalize(node.type());
      nodesToAdd = new NSMutableArray<ERXRestRequestNode>();
      nodesToRemove = new NSMutableArray<ERXRestRequestNode>();
      for (ERXRestRequestNode subChild : node.children()) {
        if (subChild.isArray() ) {
          // Return link to the relationship instead of id array if there are over 300 objects or the request will be too large for some browsers
          if (subChild.children().size() > 300) {
            nodesToRemove.add(subChild);
            String url = "/" + rootObjectName + "/" + node.id() + "/" + subChild.name();
            if (linksNode == null) {
              linksNode = new ERXRestRequestNode("links", false);
            }
            linksNode.addChild(new ERXRestRequestNode(subChild.name(), url, false) );
          }
          else {
            if (subChild.children().size() > 0 && subChild.children().objectAtIndex(0).children().size() == 0) {
              ERXRestRequestNode newSubChild = new ERXRestRequestNode(subChild.name(), false);
              nodesToAdd.add(newSubChild);
              newSubChild.setArray(true);
              for (ERXRestRequestNode idNode : subChild.children()) {
                newSubChild.addChild(new ERXRestRequestNode(null, idNode.id(), false));
              }
              nodesToRemove.add(subChild);
            }
            else {
              for (ERXRestRequestNode idNode : subChild.children()) {
                this.processNode(idNode);
              }
            }
          }
        }
        else {
          if (subChild.id() != null) {
            if (subChild.children().size() == 0) {
               ERXRestRequestNode newSubChild = new ERXRestRequestNode(subChild.name(), subChild.id(), false);
               nodesToAdd.add(newSubChild);
              nodesToRemove.add(subChild);
            }
            else {
              processNode(subChild);
View Full Code Here

TOP

Related Classes of er.rest.ERXRestRequestNode

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.