Tornado Get Template Structure using C#

This example shows how to get the structure of a template in JSON format using C#.  It calls the Docmosis REST API to return a response describing the fields, images and sections of the template.

The sample code includes the instructions to get started. You will need a Free Trial to install and run Tornado.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace Docmosis
{
    /// 

    /// This sample code shows how to get the structure of the "WelcomeTemplate.doc" template in JSON format
    /// via the local Tornado server (localhost:8080).
    ///
    /// If you wish to test via a web proxy server, see the PROXY_* settings below to enable it.
    /// 

    ///
    /// Copyright Docmosis 2019
    ///
    class CSGetTemplateStructureExample
    {
        private static string DWS_GETSTRUCTURE_URL = "http://localhost:8080/api/getTemplateStructure";

        // Set your access key here.  The access key is only required if configured in Tornado.
        private const string ACCESS_KEY = "";

        // the name of the template (stored in Tornado) to use
        private const string TEMPLATE = "WelcomeTemplate.doc";

        // Proxy settings if needed to reach the internet
        private const string PROXY_HOST = "";
        private const string PROXY_PORT = "";
        private const string PROXY_USER = "";
        private const string PROXY_PASSWD = "";

        static void Main(string[] args)
        {
            HttpWebResponse response;
            try
            {
                response = sendRequest();
                try
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        String responseString = getJsonResponse(response.GetResponseStream());
                        Console.Out.WriteLine(JsonHelper.FormatJson(responseString));
                    }
                    else
                    {
                        processError(response);
                    }
                }
                finally
                {
                    response.Close();
                }
            }
            catch (WebException e)
            {
                Console.WriteLine("ERROR:" + e.Message);
                using (WebResponse webResponse = e.Response)
                {
                    HttpWebResponse httpResponse = (HttpWebResponse)webResponse;
                    processError(httpResponse);
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Unable to connect to Docmosis: " + e.Message);
                Console.Error.WriteLine(e.StackTrace);
                Console.Error.WriteLine("If you have a proxy, configure proxy settings at the top of this example.");
                Console.ReadKey();
                System.Environment.Exit(2);
            }
            Console.Out.WriteLine("Press any key");
            Console.ReadKey();
        }

        /// 

        /// Sends the request to the server and returns the response.
        /// 

        /// 
        /// the response returned by the server
        /// 
        static HttpWebResponse sendRequest()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(DWS_GETSTRUCTURE_URL);
            if (PROXY_HOST.Length != 0)
            {
                WebProxy proxy = new WebProxy(PROXY_HOST + ":" + PROXY_PORT, true);
                if (PROXY_USER.Length != 0)
                {
                    proxy.Credentials = new NetworkCredential(PROXY_USER, PROXY_PASSWD);
                }
                Console.WriteLine(proxy.Address);
                request.Proxy = proxy;
            }

            string getStructureRequest = buildRequest();
            Console.WriteLine("Sending request:" + getStructureRequest);
            byte[] data = new UTF8Encoding().GetBytes(getStructureRequest);

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            Stream stream = request.GetRequestStream();
            stream.Write(data, 0, data.Length);

            return (HttpWebResponse)request.GetResponse();
        }

        /// 

        /// Build the request in urlencoded format.
        /// 

        private static string buildRequest()
        {

            StringBuilder sb = new StringBuilder();

            // Build the request
            
            sb.Append("accessKey=").Append(ACCESS_KEY).Append("&");
            sb.Append("templateName=").Append(TEMPLATE);
            

            return sb.ToString();
        }

        /// 

        /// Extract the returned json from the response
        /// 

        ///the Stream containing the content

        private static String getJsonResponse(Stream content)
        {
            StreamReader reader = new StreamReader(content, Encoding.UTF8);
            String responseString = reader.ReadToEnd();

            //Remove succeeded parameter and templateStructure key from response
            responseString = responseString.Substring(1, responseString.Length - 3);
            int idx = responseString.IndexOf('{')+1;
            responseString = responseString.Substring(idx, responseString.Length-idx);
            return "{" + responseString + "}";
        }

        /// 

        ///  Something went wrong in the call to the service, tell the user about it
        /// 

        ///The response causing errors
        private static void processError(HttpWebResponse response)
        {
            Console.Error.WriteLine("Our call failed: status = {0}", response.StatusCode);
            Console.Error.WriteLine("message:" + response.StatusDescription);
            StreamReader errorReader = new StreamReader(response.GetResponseStream());
            String msg;
            while ((msg = errorReader.ReadLine()) != null)
            {
                Console.Error.WriteLine(msg);
            }
        }
    }

	/// 

	///  Helper Class to format the json response for output to user.
	/// 
    class JsonHelper
    {
        private const string INDENT_STRING = "    ";
        public static string FormatJson(string str)
        {
            var indent = 0;
            var quoted = false;
            var sb = new StringBuilder();
            for (var i = 0; i < str.Length; i++)
            {
                var ch = str[i];
                switch (ch)
                {
                    case '{':
                    case '[':
                        sb.Append(ch);
                        if (!quoted)
                        {
                            sb.AppendLine();
                            Enumerable.Range(0, ++indent).ForEach(item => sb.Append(INDENT_STRING));
                        }
                        break;
                    case '}':
                    case ']':
                        if (!quoted)
                        {
                            sb.AppendLine();
                            Enumerable.Range(0, --indent).ForEach(item => sb.Append(INDENT_STRING));
                        }
                        sb.Append(ch);
                        break;
                    case '"':
                        sb.Append(ch);
                        bool escaped = false;
                        var index = i;
                        while (index > 0 && str[--index] == '\\')
                            escaped = !escaped;
                        if (!escaped)
                            quoted = !quoted;
                        break;
                    case ',':
                        sb.Append(ch);
                        if (!quoted)
                        {
                            sb.AppendLine();
                            Enumerable.Range(0, indent).ForEach(item => sb.Append(INDENT_STRING));
                        }
                        break;
                    case ':':
                        sb.Append(ch);
                        if (!quoted)
                            sb.Append(" ");
                        break;
                    default:
                        sb.Append(ch);
                        break;
                }
            }
            return sb.ToString();
        }
    }

    static class Extensions
    {
        public static void ForEach<T>(this IEnumerable<T> ie, Action<T> action)
        {
            foreach (var i in ie)
            {
                action(i);
            }
        }
    }
}

Feedback

Invalid Input

Sorry, this field will only accept letters and numbers, and not special characters, to limit spam.

Sorry, this field will only accept letters and numbers, and not special characters, to limit spam.

Invalid Input

Applies To

Docmosis-Java Tornado Cloud
Version(s) - ALL -