public static void SetNoXmlDocErrorMsg(ContentURI uri,
                                        DataHelpers.GeneralHelpers.DOC_STATE_NUMBER displayDocType)
 {
     if (displayDocType
         == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.firstdoc)
     {
         uri.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_NODOCFORTHISNODE");
     }
     else if (displayDocType
              == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.seconddoc)
     {
         uri.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_NOADDIN");
     }
     else if (displayDocType
              == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.thirddoc)
     {
         uri.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_NOCALCULATIONS");
     }
     if (uri.URIDataManager.AppType
         == DataHelpers.GeneralHelpers.APPLICATION_TYPES.devpacks &&
         uri.URIDataManager.ServerSubActionType == DataHelpers.GeneralHelpers.SERVER_SUBACTION_TYPES.respondwithhtml)
     {
         uri.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_DEVPACKSINIT");
     }
 }
        //hold for potential future use
        public static async Task <ContentURI> DisplayResourcePackURI(ContentURI docToCalcURI)
        {
            ContentURI rpURI  = new ContentURI();
            string     sRPURL = string.Empty;
            //xhtml state is saved to increase performance and improve packaging
            string sDocToReadPath
                = await DataHelpers.AddInHelper.GetDevTrekPath(docToCalcURI, DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.seconddoc);

            XmlReader oReader = null;

            if (await DataHelpers.FileStorageIO.URIAbsoluteExists(docToCalcURI, sDocToReadPath))
            {
                oReader = await DataHelpers.FileStorageIO.GetXmlReaderAsync(docToCalcURI, sDocToReadPath);
            }
            else
            {
                SetNoXmlDocErrorMsg(rpURI, DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.seconddoc);
            }
            if (oReader != null)
            {
                using (oReader)
                {
                    while (oReader.ReadToFollowing(DataAppHelpers.LinkedViews.LINKEDVIEWS_TYPES.linkedview.ToString()))
                    {
                        //standard Recommended IRI from Preview panel
                        sRPURL = oReader
                                 .GetAttribute(DataAppHelpers.Calculator.cMediaURL);
                        if (!string.IsNullOrEmpty(sRPURL))
                        {
                            break;
                        }
                    }
                }
            }
            //sRPURL = "https://localhost:44300/agtreks/preview/crops/resourcepack/Agricultural Production, Capital Investment Media Pack/260/none ";
            if (!string.IsNullOrEmpty(sRPURL))
            {
                if (!sRPURL.Contains(DataAppHelpers.Resources.RESOURCES_TYPES.resourcepack.ToString()) ||
                    !sRPURL.Contains(DataHelpers.GeneralHelpers.SERVER_ACTION_TYPES.preview.ToString()))
                {
                    rpURI.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_BADMEDIAURL");
                }
                else
                {
                    rpURI = ContentURI.GetContentURIFromFullURL(sRPURL);
                    //add subactionview to url
                    rpURI.URIDataManager.SubActionView = DataHelpers.GeneralHelpers.SUBACTION_VIEWS.graph.ToString();
                }
            }
            else
            {
                rpURI.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_NOMEDIA");
            }
            return(rpURI);
        }
 public static void SetNoHtmlDocErrorMsg(ContentURI uri,
                                         DataHelpers.GeneralHelpers.DOC_STATE_NUMBER displayDocType)
 {
     if (displayDocType
         == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.firstdoc)
     {
         uri.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_NODOCFORTHISNODE");
     }
     else if (displayDocType
              == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.seconddoc)
     {
         uri.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_NOADDIN");
     }
     else if (displayDocType
              == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.thirddoc)
     {
         //not every step needs a calculated result
         if (string.IsNullOrEmpty(uri.ErrorMessage))
         {
             uri.ErrorMessage = AppHelper.GetErrorMessage("DISPLAYHELPER_NOCALCULATIONS");
         }
     }
 }
        public async Task <bool> DisplayURIAsync(StringWriter writer, ContentURI uri,
                                                 DataHelpers.GeneralHelpers.DOC_STATE_NUMBER displayDocType)
        {
            bool bIsCompleted = false;

            if (displayDocType == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.thirddoc)
            {
                if (uri.URIDataManager.NeedsFullView == false &&
                    uri.URIDataManager.NeedsSummaryView == false)
                {
                    uri.ErrorMessage += AppHelper.GetErrorMessage("DISPLAYHELPER_DONTNEEDHTMLDOC");
                    return(bIsCompleted);
                }
            }
            //don't let existing errors interfere with html generation
            string sErrorMsg = uri.ErrorMessage;

            uri.ErrorMessage = string.Empty;
            //xhtml state is saved to increase performance and improve packaging
            string sDocToReadPath
                = await DataHelpers.AddInHelper.GetDevTrekPath(uri, displayDocType);

            if (await DataHelpers.FileStorageIO.URIAbsoluteExists(uri, sDocToReadPath))
            {
                //first uri
                string sHtmlFragDocPath = string.Empty;
                string sHtmlDocPath     = string.Empty;
                //ajax state management needs html fragments (for partial page updates)
                //the html fragment can be reused in full html doc
                bool bHasHtmlDoc = await SaveFullXhtmlDocFromXmlDoc2Async(uri,
                                                                          sDocToReadPath, sHtmlFragDocPath,
                                                                          DataAppHelpers.Resources.FILEEXTENSION_TYPES.frag,
                                                                          displayDocType);

                sHtmlFragDocPath = uri.URIDataManager.MiscDocPath;
                if (bHasHtmlDoc)
                {
                    //init with frag file
                    sHtmlDocPath = sHtmlFragDocPath;
                    //restful state management needs full xhtml documents (for ebook packages)
                    await SaveFullXhtmlDocFromXmlDoc2Async(uri,
                                                           sDocToReadPath, sHtmlDocPath,
                                                           DataAppHelpers.Resources.FILEEXTENSION_TYPES.html,
                                                           displayDocType);

                    sHtmlDocPath = uri.URIDataManager.MiscDocPath;
                    //write the fragment html doc to the writer
                    DataHelpers.FileStorageIO oFileStorageIO = new DataHelpers.FileStorageIO();
                    await oFileStorageIO.SaveHtmlURIToWriterAsync(uri, writer, sHtmlFragDocPath);

                    if (string.IsNullOrEmpty(uri.ErrorMessage))
                    {
                        //check whether additional html files are needed
                        //(i.e. full, rather than summary, docs)
                        await SaveFullXhtmlDocFromFullXmlDoc1Async(writer, uri,
                                                                   sDocToReadPath, displayDocType);
                    }
                }
                else
                {
                    if (displayDocType == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.seconddoc)
                    {
                        //if it doesn't have an addin it's not an error
                        bool bHasAddIn
                            = DataHelpers.LinqHelpers.LinkedViewHaveAddIn(uri.URIDataManager.LinkedView);
                        if (bHasAddIn)
                        {
                            string sComplexMsg = uri.ErrorMessage;
                            uri.ErrorMessage  = AppHelper.GetErrorMessage("DISPLAYHELPER_NOHTMLFILE");
                            uri.ErrorMessage += sComplexMsg;
                        }
                    }
                    else
                    {
                        string sComplexMsg = uri.ErrorMessage;
                        uri.ErrorMessage  = AppHelper.GetErrorMessage("DISPLAYHELPER_NOHTMLFILE");
                        uri.ErrorMessage += sComplexMsg;
                    }
                }
            }
            else
            {
                if (displayDocType == DataHelpers.GeneralHelpers.DOC_STATE_NUMBER.seconddoc)
                {
                    if (uri.URIDataManager.UseSelectedLinkedView)
                    {
                        if ((uri.URIDataManager.AppType == DataHelpers.GeneralHelpers.APPLICATION_TYPES.linkedviews ||
                             uri.URIDataManager.AppType == DataHelpers.GeneralHelpers.APPLICATION_TYPES.devpacks) &&
                            uri.URIDataManager.ServerSubActionType == DataHelpers.GeneralHelpers.SERVER_SUBACTION_TYPES.runaddin)
                        {
                            //if it doesn't have an addin it's not an error
                            bool bHasAddIn
                                = DataHelpers.LinqHelpers.LinkedViewHaveAddIn(uri.URIDataManager.LinkedView);
                            if (bHasAddIn)
                            {
                                SetNoXmlDocErrorMsg(uri, displayDocType);
                            }
                        }
                        //no error -just showing a selected view explanation
                    }
                    else
                    {
                        //if it doesn't have an addin it's not an error
                        bool bHasAddIn
                            = DataHelpers.LinqHelpers.LinkedViewHaveAddIn(uri.URIDataManager.LinkedView);
                        if (bHasAddIn)
                        {
                            SetNoXmlDocErrorMsg(uri, displayDocType);
                        }
                    }
                }
                else
                {
                    SetNoXmlDocErrorMsg(uri, displayDocType);
                }
            }
            uri.ErrorMessage = string.Concat(sErrorMsg, uri.ErrorMessage);
            bIsCompleted     = true;
            return(bIsCompleted);
        }