/** * Allowed end-points /people/{userId}+/{groupId} /people/{userId}/{groupId}/{optionalPersonId}+ * * examples: /people/john.doe/@all /people/john.doe/@friends /people/john.doe/@self */ protected override object handleGet(RequestItem request) { request.applyUrlTemplate(PEOPLE_PATH); GroupId groupId = request.getGroup(); HashSet <String> optionalPersonId = new HashSet <string>(request.getListParameter("personId")); HashSet <String> fields = request.getFields(Person.DEFAULT_FIELDS); HashSet <UserId> userIds = request.getUsers(); // Preconditions Preconditions <UserId> .requireNotEmpty(userIds, "No userId specified"); if (userIds.Count > 1 && optionalPersonId.Count != 0) { throw new ArgumentException("Cannot fetch personIds for multiple userIds"); } // handle supportedFields request if (userIds.Contains(new UserId(UserId.Type.userId, "@supportedFields"))) { var supported = JsonContainerConfig.Instance.GetJsonObject(request.getToken().getContainer() ?? "default", "gadgets.features") .getJSONObject("opensocial-0.8") .getJSONObject("supportedFields")["person"] as JsonArray; var collection = new RestfulCollection <object>(); if (supported != null && supported.Count > 0) { foreach (var value in supported) { collection.entry.Add(value); } collection.totalResults = supported.Count; } return(collection); } CollectionOptions options = new CollectionOptions(); options.setSortBy(request.getSortBy()); options.setSortOrder(request.getSortOrder()); options.setFilter(request.getFilterBy()); options.setFilterOperation(request.getFilterOperation()); options.setFilterValue(request.getFilterValue()); options.setFirst(request.getStartIndex()); options.setMax(request.getCount() ?? RequestItem.DEFAULT_COUNT); if (userIds.Count == 1) { if (optionalPersonId.Count == 0) { if (groupId.getType() == GroupId.Type.self) { IEnumerator <UserId> iuserid = userIds.GetEnumerator(); iuserid.MoveNext(); return(personService.getPerson(iuserid.Current, fields, request.getToken())); } return(personService.getPeople(userIds, groupId, options, fields, request.getToken())); } if (optionalPersonId.Count == 1) { IEnumerator <string> ipersonid = optionalPersonId.GetEnumerator(); ipersonid.MoveNext(); return(personService.getPerson(new UserId(UserId.Type.userId, ipersonid.Current), fields, request.getToken())); } HashSet <UserId> personIds = new HashSet <UserId>(); foreach (String pid in optionalPersonId) { personIds.Add(new UserId(UserId.Type.userId, pid)); } // Every other case is a collection response of optional person ids var result = personService.getPeople(personIds, new GroupId(GroupId.Type.self, null), options, fields, request.getToken()); if (request.getCount() != null) { result.itemsPerPage = request.getCount().Value; } return(result); } // Every other case is a collection response. var result2 = personService.getPeople(userIds, groupId, options, fields, request.getToken()); if (request.getCount() != null) { result2.itemsPerPage = request.getCount().Value; } return(result2); }
/** * Allowed end-points /people/{userId}+/{groupId} /people/{userId}/{groupId}/{optionalPersonId}+ * * examples: /people/john.doe/@all /people/john.doe/@friends /people/john.doe/@self */ protected override object handleGet(RequestItem request) { request.applyUrlTemplate(PEOPLE_PATH); GroupId groupId = request.getGroup(); HashSet<String> optionalPersonId = new HashSet<string>(request.getListParameter("personId")); HashSet<String> fields = request.getFields(Person.DEFAULT_FIELDS); HashSet<UserId> userIds = request.getUsers(); // Preconditions Preconditions<UserId>.requireNotEmpty(userIds, "No userId specified"); if (userIds.Count > 1 && optionalPersonId.Count != 0) { throw new ArgumentException("Cannot fetch personIds for multiple userIds"); } // handle supportedFields request if (userIds.Contains(new UserId(UserId.Type.userId,"@supportedFields"))) { var supported = JsonContainerConfig.Instance.GetJsonObject(request.getToken().getContainer() ?? "default", "gadgets.features") .getJSONObject("opensocial-0.8") .getJSONObject("supportedFields")["person"] as JsonArray; var collection = new RestfulCollection<object>(); if (supported != null && supported.Count > 0) { foreach (var value in supported) { collection.entry.Add(value); } collection.totalResults = supported.Count; } return collection; } CollectionOptions options = new CollectionOptions(); options.setSortBy(request.getSortBy()); options.setSortOrder(request.getSortOrder()); options.setFilter(request.getFilterBy()); options.setFilterOperation(request.getFilterOperation()); options.setFilterValue(request.getFilterValue()); options.setFirst(request.getStartIndex()); options.setMax(request.getCount() ?? RequestItem.DEFAULT_COUNT); if (userIds.Count == 1) { if (optionalPersonId.Count == 0) { if (groupId.getType() == GroupId.Type.self) { IEnumerator<UserId> iuserid = userIds.GetEnumerator(); iuserid.MoveNext(); return personService.getPerson(iuserid.Current, fields, request.getToken()); } return personService.getPeople(userIds, groupId, options, fields, request.getToken()); } if (optionalPersonId.Count == 1) { IEnumerator<string> ipersonid = optionalPersonId.GetEnumerator(); ipersonid.MoveNext(); return personService.getPerson(new UserId(UserId.Type.userId, ipersonid.Current), fields, request.getToken()); } HashSet<UserId> personIds = new HashSet<UserId>(); foreach (String pid in optionalPersonId) { personIds.Add(new UserId(UserId.Type.userId, pid)); } // Every other case is a collection response of optional person ids var result = personService.getPeople(personIds, new GroupId(GroupId.Type.self, null), options, fields, request.getToken()); if (request.getCount() != null) { result.itemsPerPage = request.getCount().Value; } return result; } // Every other case is a collection response. var result2 = personService.getPeople(userIds, groupId, options, fields, request.getToken()); if (request.getCount() != null) { result2.itemsPerPage = request.getCount().Value; } return result2; }
private void handleSingleRequest(HttpRequest servletRequest, HttpResponse servletResponse, ISecurityToken token, BeanConverter converter) { RestfulRequestItem requestItem = new RestfulRequestItem(servletRequest, token, converter); var asyncResult = HandleRequestItem(requestItem); // handle just the one case where we can't find a handler if (asyncResult == null) { sendError(servletResponse, new ResponseItem((int)HttpStatusCode.InternalServerError, "The service " + requestItem.getService() + " is not implemented")); return; } ResponseItem responseItem = getResponseItem(asyncResult); servletResponse.ContentType = converter.GetContentType(); if (responseItem.getErrorCode() >= 200 && responseItem.getErrorCode() < 400) { Object resp = responseItem.getResponse(); // put single object responses into restfulcollection if (!(resp is DataCollection) && !(resp is IRestfulCollection)) { switch (requestItem.getService()) { case IHandlerDispatcher.ACTIVITY_ROUTE: if (resp is Activity) { resp = new RestfulCollection <Activity>((Activity)resp); } break; case IHandlerDispatcher.PEOPLE_ROUTE: if (resp is Person) { resp = new RestfulCollection <Person>((Person)resp); } break; case IHandlerDispatcher.APPDATA_ROUTE: if (requestItem.getOperation() != "POST") { resp = new DataCollection(new Dictionary <string, Dictionary <string, string> > { { "entry", (Dictionary <string, string>)resp } }); } break; default: resp = new Dictionary <string, object> { { "entry", resp } }; break; } } servletResponse.Output.Write(converter.ConvertToString(resp, requestItem)); } else { sendError(servletResponse, responseItem); } }
private void handleSingleRequest(HttpRequest servletRequest, HttpResponse servletResponse, ISecurityToken token, BeanConverter converter) { RestfulRequestItem requestItem = new RestfulRequestItem(servletRequest, token, converter); var asyncResult = HandleRequestItem(requestItem); // handle just the one case where we can't find a handler if (asyncResult == null) { sendError(servletResponse, new ResponseItem((int)HttpStatusCode.InternalServerError, "The service " + requestItem.getService() + " is not implemented")); return; } ResponseItem responseItem = getResponseItem(asyncResult); servletResponse.ContentType = converter.GetContentType(); if (responseItem.getErrorCode() >= 200 && responseItem.getErrorCode() < 400) { Object resp = responseItem.getResponse(); // put single object responses into restfulcollection if (!(resp is DataCollection) && !(resp is IRestfulCollection)) { switch (requestItem.getService()) { case IHandlerDispatcher.ACTIVITY_ROUTE: if (resp is Activity) { resp = new RestfulCollection<Activity>((Activity)resp); } break; case IHandlerDispatcher.PEOPLE_ROUTE: if (resp is Person) { resp = new RestfulCollection<Person>((Person)resp); } break; case IHandlerDispatcher.APPDATA_ROUTE: if (requestItem.getOperation() != "POST") resp = new DataCollection(new Dictionary<string, Dictionary<string, string>> { { "entry", (Dictionary<string, string>)resp } }); break; default: resp = new Dictionary<string, object> { { "entry", resp } }; break; } } servletResponse.Output.Write(converter.ConvertToString(resp, requestItem)); } else { sendError(servletResponse, responseItem); } }