コード例 #1
0
ファイル: PersonHandler.cs プロジェクト: AmberishSingh/pesta
        /**
         * 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);
        }
コード例 #2
0
ファイル: PersonHandler.cs プロジェクト: s7loves/pesta
        /**
        * 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; 
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
ファイル: restController.cs プロジェクト: s7loves/pesta
        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);
            }
        }