Esempio n. 1
0
        /// <summary>
        /// This method selects the appropriate node and creates a Body content.
        /// </summary>
        /// <param name="context">The current context.</param>
        public override void OutputPrepare(ContentCompilerContext context)
        {
            try
            {
                string path = context.Request.Settings.OutputColl[0].Output;
                string outputType = context.Request.Settings.OutputColl[0].OutputType;
                string data;
                if (path == null || outputType == "xslt")
                    data = context.ModelData.Payload.InnerXml;
                else
                {
                    data = context.ModelData.ExtractPathData(path);
                }

                if (data == null)
                {
                    context.Response.Status = CH.HTTPCodes.ExpectationFailed_417;
                    context.Response.Substatus = "Node resolution error -> " + context.Request.Data.ResponseOutput;
                    return;
                }

                context.Response.Body = PrepareBody(context, data);
                context.Response.Body.ContentType = context.Request.Settings.OutputColl[0].OutputMIMEType;
                context.Response.Status = CH.HTTPCodes.OK_200;
            }
            catch (Exception ex)
            {
                context.Response.Body = null;
                context.Response.Status = CH.HTTPCodes.InternalServerError_500;
                context.Response.Substatus = ex.Message;
            }
        }
Esempio n. 2
0
        public override void Finish(ContentCompilerContext context)
        {
            if (context.Response.Status == CH.HTTPCodes.Continue_100)
                context.Response.Status = CH.HTTPCodes.BadRequest_400;


        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="context">The current context.</param>
        public override void ModelTemplateCompile(ContentCompilerContext context)
        {
            byte[] blob = context.Template.Transform(context.Request.Data);

            Model contentModel = context.ContextSettings.PoolManager.GetPoolManager<Model>().Get();
            contentModel.Load(blob, 0, blob.Length);

            contentModel.IDContent = Guid.NewGuid();
            contentModel.IDVersion = Guid.NewGuid();

            context.ModelData = contentModel;
        }
        /// <summary>
        /// This method loads and validates the script.
        /// </summary>
        /// <param name="context">The current context.</param>
        public override void ModelTemplateLoad(ContentCompilerContext context)
        {
            string status=CH.HTTPCodes.OK_200;
            string templateRef = context.Request.Settings.Template;

            ModelTemplate template = context.TemplateGet("name", templateRef);
            if (template != null)
                status = CH.HTTPCodes.OK_200;

            if (status != CH.HTTPCodes.OK_200)
                throw new InvalidTemplateCCException(templateRef + " could not be found.");

            context.Template = template;
        }
Esempio n. 5
0
        /// <summary>
        /// This method prepares the HTTP body based on the browser content encoding settings.
        /// </summary>
        /// <param name="context">The current compile context.</param>
        /// <param name="blob">The UTF-8 formatted byte array.</param>
        /// <returns>Returns a ContentCompilerMessageFragmentBody object containing the prepared output binary data.</returns>
        protected virtual ContentCompilerMessageFragmentBody PrepareBody(ContentCompilerContext context, byte[] blob)
        {
            ContentCompilerMessageFragmentBody
                body = context.GetObjectPool<ContentCompilerMessageFragmentBody>().Get();

            switch (context.Request.Data.RequestPreferredCompression)
            {
                case "gzip":
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (Stream gz = new GZipStream(ms, CompressionMode.Compress, true))
                        {
                            gz.Write(blob, 0, blob.Length);
                            gz.Close();
                        }
                        ms.Position = 0;
                        body.Load(ms);
                    }
                    body.ContentEncoding = "gzip";
                    break;
                case "deflate":
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (Stream gz = new DeflateStream(ms, CompressionMode.Compress, true))
                        {
                            gz.Write(blob, 0, blob.Length);
                            gz.Close();
                        }
                        ms.Position = 0;
                        body.Load(ms);
                    }
                    body.ContentEncoding = "deflate";
                    break;
                default:
                    body.Load(blob, 0, blob.Length);
                    break;
            }

            blob = null;

            body.ContentType = context.Request.Data.ResponseOutputMIMEType;

            return body;
        }
 /// <summary>
 /// This method selects the appropriate output style.
 /// </summary>
 /// <param name="context">The current context.</param>
 public override void OutputSelect(ContentCompilerContext context)
 {
     //string id = context.Request.Data.ResponseOutputType.ToLower();
     string id = context.Request.Settings.OutputColl[0].OutputType;
     switch (id)
     {
         case "xpath":
             context.ChangeState("OutputXPath");
             break;
         case "xslt":
             context.ChangeState("OutputTransform");
             break;
         case "mime":
             context.ChangeState("OutputMime");
             break;
         default:
             throw new InvalidOutputCCException(@"Output format """ + id + @""" not recognised.");
     }
 }
Esempio n. 7
0
 public override void Initialize(ContentCompilerContext context)
 {
     //base.Initialize(context);
 }
Esempio n. 8
0
 public override void RequestValidate(ContentCompilerContext context)
 {
     context.ChangeState("ModelDataCompiler");
 }
Esempio n. 9
0
 public virtual void OutputComplete(ContentCompilerContext context)
 {
     throw new NotImplementedException("ContentCompilerState->OutputPrepare is not implemented: " + this.ToString());
 }
Esempio n. 10
0
 public virtual void Finish(ContentCompilerContext context)
 {
     throw new NotImplementedException("ContentCompilerState->Finalize is not implemented " + this.ToString());
 }
Esempio n. 11
0
 public virtual void ModelTemplateCompile(ContentCompilerContext context)
 {
     throw new NotImplementedException("ContentCompilerState->ModelTemplateCompile is not implemented: " + this.ToString());
 }
Esempio n. 12
0
 public virtual void ModelDataLoadInserts(ContentCompilerContext context)
 {
     throw new NotImplementedException("ContentCompilerState->ModelDataLoadInserts is not implemented: " + this.ToString());
 }
Esempio n. 13
0
 public virtual void RequestValidate(ContentCompilerContext context)
 {
     throw new NotImplementedException("ContentCompilerState->RequestValidate is not implemented: " + this.ToString());
 }
Esempio n. 14
0
 public virtual void Initialize(ContentCompilerContext context)
 {
     throw new NotImplementedException("ContentCompilerState->Initialize is not implemented: " + this.ToString());
 }
        /// <summary>
        /// This method inserts incoming data in to the model.
        /// </summary>
        /// <param name="context">The current context.</param>
        public override void ModelDataLoadInserts(ContentCompilerContext context)
        {
            Insert insert = null;
            try
            {
                insert = context.GetObjectPool<Insert>().Get();
                foreach (XmlElement element in context.ModelData.DataNodes())
                {
                    insert.Reset(element);
                    string status;
                    if (insert.ReferenceValue != null && insert.ReferenceValue != "")
                    {
                        Content outData = null;
                        try
                        {
                            throw new NotImplementedException();
                            //status = context.CDSHelper.Execute(insert.EntityType,
                            //    CDSData.Get(CDSAction.Read, insert.ReferenceType, insert.ReferenceValue),
                            //    out outData);

                            if (status != CH.HTTPCodes.OK_200 && !insert.PermitError)
                                throw new ContentCompilerException(
                                    string.Format("Data load error: {0}/{1}", insert.ReferenceType, insert.ReferenceValue));

                            insert.ResponseStatus = status;

                            if (outData != null)
                            {
                                XmlDocumentFragment frag = element.OwnerDocument.CreateDocumentFragment();
                                frag.InnerXml = ((XmlDocumentContentBase)outData).Payload.LastChild.OuterXml;
                                element.AppendChild(frag);
                            }
                            else if (!insert.PermitError)
                                throw new ArgumentNullException("CDS data is null.");

                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                        finally
                        {
                            if (outData != null && outData.ObjectPoolCanReturn)
                                outData.ObjectPoolReturn();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (insert != null && insert.ObjectPoolCanReturn)
                    insert.ObjectPoolReturn();
            }
        }
Esempio n. 16
0
 public override void OutputComplete(ContentCompilerContext context)
 {
     //Nothing set
 }
Esempio n. 17
0
 /// <summary>
 /// This method prepares the HTTP body based on the browser content encoding settings.
 /// </summary>
 /// <param name="context">The current compile context.</param>
 /// <param name="data">The transformed data.</param>
 /// <returns>Returns a ContentCompilerMessageFragmentBody object containing the prepared output binary data.</returns>
 protected virtual ContentCompilerMessageFragmentBody PrepareBody(ContentCompilerContext context, string data)
 {
     byte[] blob = Encoding.UTF8.GetBytes(data);
     return PrepareBody(context, blob);
 }