Пример #1
0
        /// <summary>
        /// Calls an action on the extension with the parameters based on the settings specified in the inputParameters
        /// </summary>
        public virtual IPortalResponse CallAction(IPortalRequest request)
        {
            Request = request;

            if(!MethodInfos.ContainsKey(Request.Action))
                MethodInfos.Add(Request.Action, GetType().GetMethod(Request.Action));

            var method = MethodInfos[Request.Action];

            if (method == null) throw new ActionMissingException(string.Format("No action ({0}) in extenion ({1})", Request.Extension, Request.Action));

            var parameters = BindParameters(Request.Parameters, method.GetParameters());

            try
            {
                var result = method.Invoke(this, parameters);

                WriteToOutput(result);
            }
            catch (TargetInvocationException e)
            {
                WriteToOutput(e.InnerException);

                PortalApplication.Log.Fatal("ProcessRequest() - Unhandeled exception occured during", e.InnerException);
            }

            return Response;
        }
Пример #2
0
 public PortalResponse(IPortalRequest request)
 {
     WithResponseSpecification(ResponseSpecifications[request.ReturnFormat]);
     ReturnFormat = request.ReturnFormat;
     Callback     = request.Parameters.ContainsKey("callback") ? request.Parameters["callback"] : null;
     Request      = request;
     Encoding     = Encoding.UTF8;
     Headers = new Dictionary<string, string>();
 }
Пример #3
0
        public object Create(object obj, IPortalRequest request, PortalResponse portalResponse)
        {
            var moduleName = "Portal";
            var namedResult = obj as NamedResult;

            if (namedResult != null)
            {
                moduleName = namedResult.ModuleName;
                obj = namedResult.Obj;
            }

            return CreateWithModuleName(obj, request, moduleName, portalResponse);
        }
Пример #4
0
        public override VirtualFile GetFile(string virtualPath)
        {
            IPortalRequest portalRequest = PortalContext.Current.Request;

            IViewResult result = portalRequest.Result as IViewResult;

            if (result != null && IsRouteFile(virtualPath))
            {
                return(new RouteFile(virtualPath, portalRequest.Result));
            }

            PortalTrace.Write("RoutePathProvider", "GetFile", "'{0}' is not a virtual portal file. Delegating to previous VirtualPathProvider.", virtualPath);

            if (Path.GetExtension(virtualPath) != ".aspx")
            {
                return(Previous.GetFile(virtualPath));
            }

            return(portalRequest.AllowPhysicalPages
                ? Previous.GetFile(virtualPath)
                : new RouteFile(virtualPath, new FileNotFoundResult()));
        }
Пример #5
0
 public PortalRequestArgs(IPortalRequest request)
 {
     Request = request;
 }
Пример #6
0
        public IExtension WithPortalRequest(IPortalRequest request)
        {
            Request = request;

            return this;
        }
Пример #7
0
        private static object CreateWithModuleName(object obj, IPortalRequest request, string moduleName, PortalResponse portalResponse)
        {
            if (obj == null) throw new NullReferenceException("Returned object is null");

            var result = obj as IResult;
            var results = obj as IEnumerable<IResult>;
            var pagedResult = obj as IPagedResult<IResult>;
            var groupedResult = obj as IGroupedResult<IResult>;
            var uinteger = obj as uint?;
            var integer = obj as int?;
            var exception = obj as Exception;
            var attachment = obj as Attachment;

            if (result != null)
            {
                var response = new PortalResult(request.Stopwatch);
                response.GetModule(moduleName).AddResult(result);

                return response;
            }
            if (results != null)
            {
                var response = new PortalResult(request.Stopwatch);

                foreach (var item in results) response.GetModule(moduleName).AddResult(item);

                return response;
            }
            if (pagedResult != null)
            {
                var response = new PortalResult(request.Stopwatch);

                foreach (var item in pagedResult.Results) response.GetModule(moduleName).AddResult(item);

                response.GetModule(moduleName).TotalCount = pagedResult.FoundCount;

                return response;
            }
            if (uinteger != null)
            {
                var response = new PortalResult(request.Stopwatch);
                response.GetModule(moduleName).AddResult(new ScalarResult((int) uinteger.Value));

                return response;
            }
            if (integer != null)
            {
                var response = new PortalResult(request.Stopwatch);
                response.GetModule(moduleName).AddResult(new ScalarResult(integer.Value));

                return response;
            }
            if (attachment != null)
            {
                portalResponse.ReturnFormat = ReturnFormat.ATTACHMENT;

                return attachment;
            }
            else
            {
                if (exception == null)
                    exception =
                        new UnsupportedExtensionReturnTypeException("Return type is not supported: " + obj.GetType().FullName);
                if (groupedResult != null)
                    exception =
                        new UnsupportedExtensionReturnTypeException("This Action is not available with the current Format");
                var response = new PortalResult(request.Stopwatch);

                response.GetModule(moduleName).AddResult(new ExtensionError(exception, request.Stopwatch));

                return response;
            }
        }
Пример #8
0
        public object Create(object obj, IPortalRequest request)
        {
            if (obj == null) throw new NullReferenceException("Returned object is null");

            var result = obj as IResult;
            result = result == null ? obj as AResult : result;
            var results = obj as IEnumerable<IResult>;
            var pagedResult = obj as IPagedResult<IResult>;
            var queryResult = obj as QueryResult;
            var groupedResult = obj as IGroupedResult<IResult>;
            var uinteger = obj as uint?;
            var integer = obj as int?;
            var attachment = obj as Attachment;
            var exception = obj as Exception;

            if (result != null)
            {
                var portalResult = new PagedResult(1, 0, new[] {result});
                var response = new PortalResponse(new PortalHeader(request.Stopwatch), portalResult, new PortalError());

                return response;
            }
            if (results != null)
            {
                var lst = results.ToList();
                var portalResult = new PagedResult((uint) lst.Count, 0, lst);
                var response = new PortalResponse(new PortalHeader(request.Stopwatch), portalResult, new PortalError());

                return response;
            }
            if (pagedResult != null)
            {
                var portalResult = new PagedResult(pagedResult.FoundCount, pagedResult.StartIndex, pagedResult.Results);
                var response = new PortalResponse(new PortalHeader(request.Stopwatch), portalResult, new PortalError());

                return response;
            }
            if (queryResult != null)
            {
                var response = new PortalResponse(new PortalHeader(request.Stopwatch), queryResult, new PortalError());

                return response;
            }
            if (groupedResult != null)
            {
                var portalResult = new QueryResult {Groups = groupedResult.Groups.ToList()};
                var response = new PortalResponse(new PortalHeader(request.Stopwatch), portalResult, new PortalError());

                return response;
            }
            if (uinteger != null)
            {
                var portalResult = new PagedResult(1, 0, new[] {new ScalarResult((int) uinteger.Value)});
                var response = new PortalResponse(new PortalHeader(request.Stopwatch), portalResult, new PortalError());

                return response;
            }
            if (integer != null)
            {
                var portalResult = new PagedResult(1, 0, new[] {new ScalarResult(integer.Value)});
                var response = new PortalResponse(new PortalHeader(request.Stopwatch), portalResult, new PortalError());

                return response;
            }
            if (attachment != null)
                return attachment;
            else
            {
                if (exception == null)
                    exception = new UnsupportedExtensionReturnTypeException("Return type is not supported: " + obj.GetType().FullName);

                var response = new PortalResponse(new PortalHeader(request.Stopwatch), new PortalResult(), new PortalError());
                response.Error.SetException(exception);

                return response;
            }
        }