예제 #1
0
 /// <summary>
 /// Quick-access method to render a given event in the JSON format.
 /// <para/>
 /// Use the #getJSONRenderer to obtain a renderer instance that allows repeated
 /// rendering of the same type of event. For performance reasons obtaining a dedicated
 /// renderer instance is the preferred method compared to repeated rendering via this
 /// method.
 /// </summary>
 /// <param name="title">the JSON root title</param>
 /// <param name="theEvent">the event to render</param>
 /// <param name="options">are JSON rendering options</param>
 /// <returns>
 /// JSON formatted text
 /// </returns>
 public String RenderJSON(String title, EventBean theEvent, JSONRenderingOptions options)
 {
     if (theEvent == null)
     {
         return(null);
     }
     return(GetJSONRenderer(theEvent.EventType, options).Render(title, theEvent));
 }
예제 #2
0
            public void Run(RegressionEnvironment env)
            {
                env.CompileDeploy("@Name('s0') select * from MyRendererEvent");
                env.SendEventBean(
                    new MyRendererEvent(
                        "id1",
                        new[] {new object[] {1, "x"}, new object[] {2, "y"}}));

                MyRenderer.Contexts.Clear();

                var myEventEnum = env.GetEnumerator("s0");
                Assert.That(myEventEnum.MoveNext(), Is.True);

                var myEvent = myEventEnum.Current;
                Assert.That(myEvent, Is.Not.Null);
               
                var jsonOptions = new JSONRenderingOptions();
                jsonOptions.Renderer = new MyRenderer();
                var json = env.Runtime.RenderEventService.RenderJSON(
                    "MyEvent",
                    myEvent,
                    jsonOptions);
                Assert.AreEqual(4, MyRenderer.Contexts.Count);
                
                var contexts = MyRenderer.Contexts;
                var context = contexts.FirstOrDefault(c => 
                    c.EventType.Name == typeof(MyRendererEvent).Name && 
                    c.IndexedPropertyIndex == 1);
                Assert.That(context, Is.Not.Null);
                Assert.That(context.DefaultRenderer, Is.Not.Null);
                Assert.That(context.PropertyName, Is.EqualTo("SomeProperties"));

                var expectedJson =
                    "{ \"MyEvent\": { \"Id\": \"id1\", \"MappedProperty\": { \"key\": \"value\" }, \"SomeProperties\": [\"index#0=1;index#1=x\", \"index#0=2;index#1=y\"] } }";
                Assert.AreEqual(RemoveNewline(expectedJson), RemoveNewline(json));

                MyRenderer.Contexts.Clear();
                var xmlOptions = new XMLRenderingOptions();
                xmlOptions.Renderer = new MyRenderer();
                var xmlOne = env.Runtime.RenderEventService.RenderXML(
                    "MyEvent",
                    env.GetEnumerator("s0").Advance(),
                    xmlOptions);
                var expected =
                    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                    " <MyEvent>" +
                    " <Id>id1</Id>" +
                    " <SomeProperties>index#0=1;index#1=x</SomeProperties>" +
                    " <SomeProperties>index#0=2;index#1=y</SomeProperties>" +
                    " <MappedProperty> <key>value</key> </MappedProperty>" +
                    " </MyEvent>";
                Assert.AreEqual(4, MyRenderer.Contexts.Count);
                Assert.AreEqual(RemoveNewline(expected), RemoveNewline(xmlOne));

                env.UndeployAll();
            }
예제 #3
0
        static RenderingOptions()
        {
            XmlOptions = new XMLRenderingOptions();
            XmlOptions.PreventLooping = true;
            XmlOptions.Renderer = ConsoleOpEventPropertyRenderer.INSTANCE;

            JsonOptions = new JSONRenderingOptions();
            JsonOptions.PreventLooping = true;
            JsonOptions.Renderer = ConsoleOpEventPropertyRenderer.INSTANCE;
        }
예제 #4
0
 /// <summary>
 ///     Returns a render for the JSON format, valid only for the given event type and its subtypes.
 /// </summary>
 /// <param name="eventType">to return renderer for</param>
 /// <param name="options">rendering options</param>
 /// <returns>JSON format renderer</returns>
 public JSONEventRenderer GetJSONRenderer(
     EventType eventType,
     JSONRenderingOptions options)
 {
     if (eventType is JsonEventType) {
         return JSONEventRendererJsonEventType.INSTANCE;
     }
     if (options == null) {
         options = new JSONRenderingOptions();
     }
     return new JSONRendererImpl(eventType, options);
 }
예제 #5
0
        /// <summary>Ctor. </summary>
        /// <param name="eventType">type of Event(s)</param>
        /// <param name="options">rendering options</param>
        public JSONRendererImpl(EventType eventType, JSONRenderingOptions options)
        {
            EventPropertyRenderer propertyRenderer = null;
            EventPropertyRendererContext propertyRendererContext = null;
            if (options.Renderer != null)
            {
                propertyRenderer = options.Renderer;
                propertyRendererContext = new EventPropertyRendererContext(eventType, true);
            }

            _rendererOptions = new RendererMetaOptions(options.PreventLooping, false, propertyRenderer, propertyRendererContext);
            _meta = new RendererMeta(eventType, new Stack<EventTypePropertyPair>(), _rendererOptions);
        }
예제 #6
0
        public void TestPropertyCustomRenderer()
        {
            _epService.EPAdministrator.Configuration.AddEventType(
                typeof(MyRendererEvent));

            EPStatement stmt = _epService.EPAdministrator.CreateEPL(
                "select * from MyRendererEvent");

            _epService.EPRuntime.SendEvent(
                new MyRendererEvent("id1", new Object[][]
            {
                new Object[] { 1, "x" },
                new Object[] { 2, "y" }
            }));

            MyRenderer.Contexts.Clear();
            var jsonOptions = new JSONRenderingOptions();

            jsonOptions.Renderer = new MyRenderer();
            String json = _epService.EPRuntime.EventRenderer.RenderJSON(
                "MyEvent", stmt.First(), jsonOptions);

            Assert.AreEqual(4, MyRenderer.Contexts.Count);
            List <EventPropertyRendererContext> contexts = MyRenderer.Contexts;
            EventPropertyRendererContext        context  = contexts[2];

            Assert.NotNull(context.DefaultRenderer);
            Assert.AreEqual(1, (int)context.IndexedPropertyIndex);
            Assert.AreEqual(typeof(MyRendererEvent).Name, context.EventType.Name);
            Assert.AreEqual("SomeProperties", context.PropertyName);

            String expectedJson =
                "{ \"MyEvent\": { \"Id\": \"id1\", \"SomeProperties\": [\"index#0=1;index#1=x\", \"index#0=2;index#1=y\"], \"MappedProperty\": { \"key\": \"value\" } } }";

            Assert.AreEqual(RemoveNewline(expectedJson), RemoveNewline(json));

            MyRenderer.Contexts.Clear();
            var xmlOptions = new XMLRenderingOptions();

            xmlOptions.Renderer = new MyRenderer();
            String xmlOne = _epService.EPRuntime.EventRenderer.RenderXML(
                "MyEvent", stmt.First(), xmlOptions);
            String expected =
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <MyEvent> <Id>id1</Id> <SomeProperties>index#0=1;index#1=x</SomeProperties> <SomeProperties>index#0=2;index#1=y</SomeProperties> <MappedProperty> <key>value<key> </MappedProperty> </MyEvent>";

            Assert.AreEqual(4, MyRenderer.Contexts.Count);
            Assert.AreEqual(RemoveNewline(expected), RemoveNewline(xmlOne));
        }
예제 #7
0
        private void RunAssertionPropertyCustomRenderer(EPServiceProvider epService)
        {
            epService.EPAdministrator.Configuration.AddEventType(typeof(MyRendererEvent));

            var stmt = epService.EPAdministrator.CreateEPL("select * from MyRendererEvent");
            epService.EPRuntime.SendEvent(
                new MyRendererEvent("id1", new[] {new object[] {1, "x"}, new object[] {2, "y"}}));

            MyRenderer.Contexts.Clear();
            var jsonOptions = new JSONRenderingOptions();
            jsonOptions.Renderer = new MyRenderer();
            var json = epService.EPRuntime.EventRenderer.RenderJSON("MyEvent", stmt.First(), jsonOptions);
            Assert.AreEqual(4, MyRenderer.Contexts.Count);
            var contexts = MyRenderer.Contexts;
            var contextsIndexed = contexts
                .Where(c => c.PropertyName == "SomeProperties")
                .ToList();

            Assert.That(contextsIndexed.Count, Is.Not.Zero);
            Assert.That(contextsIndexed.Count(c => c.IndexedPropertyIndex == 0), Is.EqualTo(1));
            Assert.That(contextsIndexed.Count(c => c.IndexedPropertyIndex == 1), Is.EqualTo(1));
            foreach (var context in contextsIndexed) {
                Assert.AreEqual(typeof(MyRendererEvent).Name, context.EventType.Name);
            }

            var expectedJson =
                "{ \"MyEvent\": { \"Id\": \"id1\", \"MappedProperty\": { \"key\": \"value\" }, \"SomeProperties\": [\"index#0=1;index#1=x\", \"index#0=2;index#1=y\"] } }";
            Assert.AreEqual(RemoveNewline(expectedJson), RemoveNewline(json));

            MyRenderer.Contexts.Clear();
            var xmlOptions = new XMLRenderingOptions();
            xmlOptions.Renderer = new MyRenderer();
            var xmlOne = epService.EPRuntime.EventRenderer.RenderXML("MyEvent", stmt.First(), xmlOptions);
            var expected =
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <MyEvent> <Id>id1</Id> <SomeProperties>index#0=1;index#1=x</SomeProperties> <SomeProperties>index#0=2;index#1=y</SomeProperties> <MappedProperty> <key>value</key> </MappedProperty> </MyEvent>";
            Assert.AreEqual(4, MyRenderer.Contexts.Count);
            Assert.AreEqual(RemoveNewline(expected), RemoveNewline(xmlOne));

            stmt.Dispose();
        }
예제 #8
0
 /// <summary>
 /// Returns a render for the JSON format, valid only for the given event type and
 /// its subtypes.
 /// </summary>
 /// <param name="eventType">to return renderer for</param>
 /// <param name="options">rendering options</param>
 /// <returns>
 /// JSON format renderer
 /// </returns>
 public JSONEventRenderer GetJSONRenderer(EventType eventType, JSONRenderingOptions options)
 {
     return(new JSONRendererImpl(eventType, options));
 }
예제 #9
0
 public static void SetJsonOptions(JSONRenderingOptions jsonOptions)
 {
     RenderingOptions.JsonOptions = jsonOptions;
 }