internal static T ODataGET <T>(string resource, string queryString) where T : IODataResult
 {
     using (var output = new System.IO.StringWriter())
     {
         var pc      = CreatePortalContext(resource, queryString, output);
         var handler = new ODataHandler();
         handler.ProcessRequest(pc.OwnerHttpContext);
         output.Flush();
         return((T)GetResult <T>(output));
     }
 }
Example #2
0
        public override object Execute(Content content, params object[] parameters)
        {
            var postData = parameters.FirstOrDefault() as string;

            if (string.IsNullOrEmpty(postData))
            {
                return(null);
            }

            var contentList = content.ContentHandler as ContentList;

            if (contentList == null)
            {
                throw new InvalidOperationException("You cannot edit fields of any other content but a content list.");
            }

            var model = ODataHandler.Read(postData);

            if (model == null)
            {
                throw new InvalidOperationException("Invalid post data");
            }

            var fieldName = model.Value <string>("Name");

            if (string.IsNullOrEmpty(fieldName))
            {
                throw new InvalidOperationException("Field Name is missing from post data.");
            }

            if (!fieldName.StartsWith("#"))
            {
                fieldName = "#" + fieldName;
            }

            var fieldSetting = contentList.FieldSettingContents.FirstOrDefault(fs => string.CompareOrdinal(fs.Name, fieldName) == 0);

            if (fieldSetting == null)
            {
                throw new InvalidOperationException("Unknown field: " + fieldName);
            }

            var fsContent = Content.Create(fieldSetting);

            ODataHandler.UpdateFields(fsContent, model);

            fsContent.Save();

            return(fsContent);
        }
Example #3
0
 public void GenericAction_NotAnnotated()
 {
     ODataTests.CreateTestSite();
     try
     {
         ODataTests.Error error;
         using (var output = new System.IO.StringWriter())
         {
             var pc      = ODataTests.CreatePortalContext("/OData.svc/Root('IMS')/TestAction0", "", output);
             var handler = new ODataHandler();
             handler.ProcessRequest(pc.OwnerHttpContext, "POST", null);
             error = ODataTests.GetError(output);
         }
         Assert.IsTrue(error.Message.ToLower().Contains("access denied"));
     }
     finally
     {
         ODataTests.CleanupTestSite();
     }
 }
        public void OData_Getting_Entity_Projection()
        {
            Test(() =>
            {
                CreateTestSite();

                ODataEntity entity;
                using (var output = new System.IO.StringWriter())
                {
                    var pc      = CreatePortalContext("/OData.svc/Root('IMS')", "$select=Id,Name", output);
                    var handler = new ODataHandler();
                    handler.ProcessRequest(pc.OwnerHttpContext);
                    entity = GetEntity(output);
                }
                var props = entity.AllProperties.ToArray();
                Assert.IsTrue(props.Length == 3, string.Format("AllProperties.Count id ({0}), expected: 3", props.Length));
                Assert.IsTrue(props[0].Key == "__metadata", string.Format("AllProperties[0] is ({0}), expected: '__metadata'", props[0].Key));
                Assert.IsTrue(props[1].Key == "Id", string.Format("AllProperties[1] is ({0}), expected: 'Id'", props[1].Key));
                Assert.IsTrue(props[2].Key == "Name", string.Format("AllProperties[2] is ({0}), expected: 'Name'", props[2].Key));
            });
        }
Example #5
0
 public void GenericAction_SingleContent()
 {
     ODataTests.CreateTestSite();
     try
     {
         ODataTests.Entity entity;
         using (var output = new System.IO.StringWriter())
         {
             var pc      = ODataTests.CreatePortalContext("/OData.svc/Root('IMS')/TestAction3", "", output);
             var handler = new ODataHandler();
             var stream  = ODataTests.CreateRequestStream(String.Concat("{ path: '", User.Administrator.Path, "' }"));
             handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
             entity = ODataTests.GetEntity(output);
         }
         Assert.AreEqual(1, entity.Id);
     }
     finally
     {
         ODataTests.CleanupTestSite();
     }
 }
Example #6
0
 public void GenericAction_RightOverload()
 {
     ODataTests.CreateTestSite();
     try
     {
         string result;
         using (var output = new System.IO.StringWriter())
         {
             var pc      = ODataTests.CreatePortalContext("/OData.svc/Root('IMS')/TestAction2", "", output);
             var handler = new ODataHandler();
             var stream  = ODataTests.CreateRequestStream("{iii: 42, sss: 'asdf' }");
             handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
             result = ODataTests.GetStringResult(output);
         }
         Assert.AreEqual("asdf: 42", result);
     }
     finally
     {
         ODataTests.CleanupTestSite();
     }
 }
Example #7
0
 public void GenericAction_MultipleContents()
 {
     ODataTests.CreateTestSite();
     try
     {
         ODataTests.Entities entities;
         using (var output = new System.IO.StringWriter())
         {
             var pc      = ODataTests.CreatePortalContext("/OData.svc/Root('IMS')/TestAction4", "$orderby=Name&$filter=Id lt 11", output);
             var handler = new ODataHandler();
             var stream  = ODataTests.CreateRequestStream("{ path: '/Root/IMS/BuiltIn/Portal' }");
             handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
             entities = ODataTests.GetEntities(output);
         }
         var actual = String.Join(", ", entities.Select(e => e.Name));
         Assert.AreEqual("Admin, Administrators, Creators, Everyone, LastModifiers, Visitor", actual);
     }
     finally
     {
         ODataTests.CleanupTestSite();
     }
 }
Example #8
0
        public void Aspect_OData_LongTextDoesNotContainCdata()
        {
            var fieldValue = "<p>Field value</p>";
            var aspect     = EnsureAspect("LongTextTest");

            aspect.AddFields(new FieldInfo {
                Name = "Field1", Type = "LongText"
            });

            var content = Content.CreateNew("Car", TestRoot, Guid.NewGuid().ToString());

            content.AddAspects(aspect);
            content["LongTextTest.Field1"] = fieldValue;
            content.Save();

            var uri = ODataTools.GetODataUrl(content);

            ODataTests.CreateTestSite();
            ODataTests.Entity entity;
            try
            {
                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(uri, "", output);
                    var handler = new ODataHandler();
                    handler.ProcessRequest(pc.OwnerHttpContext, "GET", null);
                    entity = ODataTests.GetEntity(output);
                }
                var value       = entity.AllProperties["LongTextTest.Field1"];
                var jvalue      = value as JValue;
                var stringValue = (string)jvalue.Value;
                Assert.AreEqual(fieldValue, stringValue);
            }
            finally
            {
                ODataTests.CleanupTestSite();
            }
        }
Example #9
0
        public void Aspect_OData_AddRemoveFields()
        {
            var aspect = Content.CreateNew("Aspect", Repository.AspectsFolder, Guid.NewGuid().ToString());

            aspect.Save();
            //var aspectPath = aspect.Path;
            var resourcePath = ODataHandler.GetEntityUrl(aspect.Path);

            var content = Content.CreateNew("Car", TestRoot, Guid.NewGuid().ToString());

            content.AddAspects(aspect.Path);
            content.Save();

            var odataHandlerAcc        = new PrivateType(typeof(ODataHandler));
            var originalActionResolver = odataHandlerAcc.GetStaticProperty("ActionResolver");

            odataHandlerAcc.SetStaticProperty("ActionResolver", new ODataTests.TestActionResolver());

            var fieldInfosJson = GetJson(new[] {
                new FieldInfo {
                    Name = "Field1", Type = "ShortText"
                },
                new FieldInfo {
                    Name = "Field2", Type = "ShortText"
                },
                new FieldInfo {
                    Name = "Field3", Type = "ShortText"
                },
            });

            ODataTests.CreateTestSite();
            try
            {
                string result;
                Field  field;

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/AddFields"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{fields:", fieldInfosJson, "}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field1", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field2", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field3", out field));
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field4", out field));

                fieldInfosJson = GetJson(new[] {
                    new FieldInfo {
                        Name = "Field4", Type = "ShortText"
                    },
                });

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/AddFields"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{fields:", fieldInfosJson, "}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field1", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field2", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field3", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field4", out field));

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/RemoveFields"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{fields:[\"Field1\"]}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field1", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field2", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field3", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field4", out field));

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/RemoveFields"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{fields:[\"Field4\",\"Field2\"]}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field1", out field));
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field2", out field));
                Assert.IsTrue(content.Fields.TryGetValue(aspect.Name + ".Field3", out field));
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field4", out field));

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/RemoveAllFields"), "", output);
                    var handler = new ODataHandler();
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", null);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field1", out field));
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field2", out field));
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field3", out field));
                Assert.IsFalse(content.Fields.TryGetValue(aspect.Name + ".Field4", out field));
            }
            finally
            {
                odataHandlerAcc.SetStaticProperty("ActionResolver", originalActionResolver);
                content.DeletePhysical();
                ODataTests.CleanupTestSite();
            }
        }
Example #10
0
        public void Aspect_OData_AddRemoveAspect()
        {
            var content = Content.CreateNew("Car", TestRoot, Guid.NewGuid().ToString());

            content.Save();
            var resourcePath = ODataHandler.GetEntityUrl(content.Path);
            var aspect1      = Content.CreateNew("Aspect", Repository.AspectsFolder, Guid.NewGuid().ToString());

            aspect1.Save();
            var aspect1Path = aspect1.Path;
            var aspect2     = Content.CreateNew("Aspect", Repository.AspectsFolder, Guid.NewGuid().ToString());

            aspect2.Save();
            var aspect2Path = aspect2.Path;
            var aspect3     = Content.CreateNew("Aspect", Repository.AspectsFolder, Guid.NewGuid().ToString());

            aspect3.Save();
            var aspect3Path = aspect3.Path;

            var odataHandlerAcc        = new PrivateType(typeof(ODataHandler));
            var originalActionResolver = odataHandlerAcc.GetStaticProperty("ActionResolver");

            odataHandlerAcc.SetStaticProperty("ActionResolver", new ODataTests.TestActionResolver());

            ODataTests.CreateTestSite();
            try
            {
                string result;

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/AddAspects"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{aspects:[\"", aspect1Path, "\"]}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect1.ContentHandler));
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect2.ContentHandler));
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect3.ContentHandler));

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/AddAspects"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{aspects:[\"", aspect2Path, "\", \"", aspect3Path, "\"]}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect1.ContentHandler));
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect2.ContentHandler));
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect3.ContentHandler));

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/RemoveAspects"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{aspects:[\"", aspect1Path, "\", \"", aspect3Path, "\"]}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect1.ContentHandler));
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect2.ContentHandler));
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect3.ContentHandler));

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/RemoveAspects"), "", output);
                    var handler = new ODataHandler();
                    var stream  = ODataTests.CreateRequestStream(String.Concat("{aspects:[\"", aspect2Path, "\"]}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", stream);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect1.ContentHandler));
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect2.ContentHandler));
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect3.ContentHandler));


                content.AddAspects((Aspect)aspect1.ContentHandler, (Aspect)aspect2.ContentHandler, (Aspect)aspect3.ContentHandler);
                content.Save();
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect1.ContentHandler));
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect2.ContentHandler));
                Assert.IsTrue(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect3.ContentHandler));

                using (var output = new System.IO.StringWriter())
                {
                    var pc      = ODataTests.CreatePortalContext(string.Concat("/OData.svc", resourcePath, "/RemoveAllAspects"), "", output);
                    var handler = new ODataHandler();
                    //var stream = ODataTests.CreateRequestStream(String.Concat("{aspects:[\"", aspect2Path, "\"]}"));
                    handler.ProcessRequest(pc.OwnerHttpContext, "POST", null);
                    result = output.GetStringBuilder().ToString();
                }
                content = Content.Load(content.Path);
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect1.ContentHandler));
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect2.ContentHandler));
                Assert.IsFalse(((GenericContent)content.ContentHandler).HasReference("Aspects", aspect3.ContentHandler));
            }
            finally
            {
                odataHandlerAcc.SetStaticProperty("ActionResolver", originalActionResolver);
                content.DeletePhysical();
                ODataTests.CleanupTestSite();
            }
        }
Example #11
0
 public string Metadata()
 {
     return(ODataHandler.GetMetadataXmlV4(this.GetTableSpec, this.ModelNamespace));
 }
Example #12
0
 public string Root()
 {
     return(ODataHandler.GetRootMetadataJsonV4(this.MetadataUrl, this.GetTableSpec));
 }
Example #13
0
 public string Metadata()
 {
     return(ODataHandler.GetMetadataXmlV4(new TableSpec[] { tableSpec }, "Demo.Models"));
 }
Example #14
0
 public string Get()
 {
     return(ODataHandler.GetRootMetadataJsonV4(ODataMetadataUrl, new TableSpec[] { tableSpec }));
 }