Ejemplo n.º 1
0
 private static void BuildAlerts(WidgetBase widget)
 {
     widget.Alerts.Add(new AlertElement
     {
         MinValue = 0,
         MaxValue = 75,
         Action   = AlertActionKind.PlaySound,
         Param    = WebTool.GetScriptPath("~/alerts/Waterloo.mp3")
     });
     widget.Alerts.Add(new AlertElement
     {
         MinValue = 0,
         MaxValue = 75,
         Action   = AlertActionKind.ShowAnnotation,
         Param    = "GrpRED"
     });
     widget.Alerts.Add(new AlertElement
     {
         MinValue = 75,
         MaxValue = 90,
         Action   = AlertActionKind.ShowAnnotation,
         Param    = "GrpYELLOW"
     });
     widget.Alerts.Add(new AlertElement
     {
         MinValue = 90,
         MaxValue = 100,
         Action   = AlertActionKind.ShowAnnotation,
         Param    = "GrpGREEN"
     });
 }
        private static void FillData(DataSetElement dataSet, int factoryId)
        {
            //
            // Build Data
            //
            var outputs = FactoryRepository.FindAllFactoryOutputByFactoryId(factoryId);

            var num = 0;

            foreach (var output in outputs)
            {
                var set = new ValueSetElement
                {
                    //Label = output.DatePro.Value.ToShortDateString(),
                    Value = output.Quantity ?? 0
                };

                if ((num++ % 2) == 0)
                {
                    set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April');");
                }
                // 실제 Javascript 메소드를 쓰려면 "PopUp-April" 로만 쓰면 된다.
                else
                {
                    set.Link.SetLink(FusionLinkMethod.PopUp,
                                     WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId);
                    set.Link.Width  = 600;
                    set.Link.Height = 400;
                }

                dataSet.AddSet(set);
            }
        }
        private static void FillData(SingleSeriesChart chart, int factoryId)
        {
            //
            // Build Data
            //
            var outputs = FactoryRepository.FindAllFactoryOutputByFactoryId(factoryId);

            var num = 0;

            foreach (var output in outputs)
            {
                var set = new ValueSetElement
                {
                    Label = output.DatePro.Value.ToShortDateString(),
                    Value = output.Quantity ?? 0
                };

                switch (num % 4)
                {
                case 0:
                    set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April')");
                    break;

                case 1:
                    set.Link.SetLink(FusionLinkMethod.PopUp,
                                     WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId);
                    break;

                case 2:
                    set.Link.SetFameLink(WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId, "_blank");
                    break;

                case 3:
                    set.Link.SetJavascriptLink("PopUp", "April");
                    break;

                default:
                    set.Link.SetLink(FusionLinkMethod.Local, "http://www.realweb21.com");
                    break;
                }

                num++;
                //if ((num++ % 2) == 0)
                //    set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April');"); // 실제 Javascript 메소드를 쓰려면 "PopUp-April" 로만 쓰면 된다.
                //else
                //{
                //    set.Link.SetLink(FusionLinkMethod.PopUp, WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId.ToString());
                //    set.Link.Width = 600;
                //    set.Link.Height = 400;
                //}

                chart.SetElements.Add(set);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Fusion Chart 에 대한 HTML 을 Response에 씁니다.
        /// </summary>
        /// <param name="output">Rendering 대상 HtmlTextWriter</param>
        protected override void RenderContents(HtmlTextWriter output)
        {
            if (IsDebugEnabled)
            {
                log.Debug(@"FusionChart Control을 HTML로 Rending을 시작합니다... ChartId={0}, FileName={1}", ChartId, FileName);
            }

            output.WriteLine(FusionCharts_Javascript);
            output.WriteLine(FusionChartsExportComponent_Javascript);

            var filename = FileName;

            if (filename.StartsWith("~") || filename.Contains("/") || filename.Contains(@"\"))
            {
                filename = WebTool.GetScriptPath(filename);
            }
            else
            {
                filename = HandlerSettings.ResourceFileHandler + "?File=" + filename;
            }

            if (IsDebugEnabled)
            {
                log.Debug(@"Render FusionChart WebControl. " +
                          @"Chart Filename={0}, DataUrl={1}, DataXml={2}, ChartId={3}, Width={4}, Height={5}, DebugMode={6}, RegisterWithJS={7}, Transparent={8}",
                          filename, DataUrl, DataXml, ChartId, Width, Height, DebugMode, RegisterWithJS, Transparent);
            }

            var html = ChartUtil.RenderChartHtml(filename,
                                                 DataUrl,
                                                 DataXml,
                                                 ChartId,
                                                 Width.ToString(),
                                                 Height.ToString(),
                                                 DebugMode,
                                                 RegisterWithJS,
                                                 Transparent);

            if (IsDebugEnabled)
            {
                log.Debug("Rendering Html= " + html);
            }

            output.WriteLine();
            output.WriteLine(html);
            output.WriteLine();

            if (IsDebugEnabled)
            {
                log.Debug(@"FusionChart Control을 HTML로 Rending을 완료했습니다!!! ChartId={0}, FileName={1}", ChartId, FileName);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Chart를 HTML Code로 Rendering을 수행합니다.
        /// 이 함수를 수행하려면, ASP.NET Page에 FunsionChart JavaScript class를 포함하고 있어야 합니다.
        /// </summary>
        /// <param name="chartSwf">Chart에 해당하는 SWF 파일명 (전체경로)</param>
        /// <param name="dataUrl">Data 제공을 URL을 통해서 할 경우, dataXml로 할 경우에는 빈 문자열을 지정하면 된다.</param>
        /// <param name="dataXml">Data 제공을 XML로 제공할 경우, Data정보를 나타낸다. dataUrl 방식이라면, 빈문자열을 지정</param>
        /// <param name="chartId">HTML Code 상에서 Chart의 고유 ID</param>
        /// <param name="width">Chart 폭 (pixel 단위 또는 %)</param>
        /// <param name="height">Chart 높이 (pixel 단위 또는 %)</param>
        /// <param name="debugMode">디버그 모드</param>
        /// <param name="registerWithJS">JavaScript에 Chart를 자체적으로 등록할 것인가 여부</param>
        /// <param name="transparent">Chart 투명화 여부</param>
        /// <returns>Chart를 보이기 위한 JavaScript + HTML Code</returns>
        private static string RenderChartHtmlInternal(string chartSwf, string dataUrl, string dataXml,
                                                      string chartId, string width, string height,
                                                      bool debugMode, bool registerWithJS, bool transparent)
        {
            var chartSwfPath = WebTool.GetScriptPath(chartSwf);

            if (IsDebugEnabled)
            {
                log.Debug("Render Chart Starting...");
                log.Debug("SWF={0}, dataUrl={1}, dataXml={2}", chartSwfPath, dataUrl, dataXml.EllipsisChar(100));
                log.Debug("charId={0}, width={1}, height={2}, debugMode={3}, registerWithJS={4}, transparent={5}",
                          chartId, width, height, debugMode, registerWithJS, transparent);
            }

            var flashVariables =
                string.Format("&chartWidth={0}&chartHeight={1}&debugMode={2}&registerWithJS={3}&DOMId={4}",
                              width, height, debugMode.GetHashCode(), registerWithJS.GetHashCode(), chartId);

            flashVariables += dataUrl.IsWhiteSpace()
                                  ? "&dataXml=" + dataXml
                                  : "&dataUrl=" + WebTool.GetScriptPath(dataUrl).UrlEncode();

            var builder = new StringBuilder();

            builder.AppendFormat("<!-- START Code Block for Chart {0} -->", chartId).AppendLine();
            builder.AppendFormat("<div id='{0}Div'>", chartId).AppendLine();
            builder.AppendFormat("<object classid=\"clsid:{0}\" ", CHART_CLASS_ID);
            builder.AppendFormat("codebase=\"{0}\" ", CHART_CODE_BASE);
            builder.AppendFormat(" width=\"{0}\" height=\"{1}\" name=\"{2}\" id=\"{2}\" >", width, height, chartId).AppendLine();

            builder.AddParamLine("allowScriptAccess", "always");
            builder.AddParamLine("movie", chartSwfPath);
            builder.AddParamLine("FlashVars", flashVariables);
            builder.AddParamLine("quality", "high");

            var wmode = string.Empty;

            if (transparent)
            {
                builder.AppendFormat(CHART_PARAM_FMT, "wmode", "transparent").AppendLine();
                wmode = "wmode=\"transparent\"";
            }

            builder.AppendFormat(
                "<embed src=\"{0}\" FlashVars=\"{1}\" quality=\"high\" width=\"{2}\" height=\"{3}\" name=\"{4}\" id=\"{4}\" allowScriptAccess=\"always\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" {5} />",
                chartSwfPath, flashVariables, width, height, chartId, wmode);
            builder.AppendLine("</object>");
            builder.AppendLine("</div>");
            builder.AppendFormat("<!-- END Code Block for Chart {0} -->", chartId).AppendLine();

            return(builder.ToString());
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Chart를 HTML Code로 Rendering을 수행합니다.
        /// 이 함수를 수행하려면, ASP.NET Page에 FunsionChart JavaScript class를 포함하고 있어야 합니다.
        /// </summary>
        /// <param name="chartSwf">Chart에 해당하는 SWF 파일명 (전체경로)</param>
        /// <param name="dataUrl">Data 제공을 URL을 통해서 할 경우, dataXml로 할 경우에는 빈 문자열을 지정하면 된다.</param>
        /// <param name="dataXml">Data 제공을 XML로 제공할 경우, Data정보를 나타낸다. dataUrl 방식이라면, 빈문자열을 지정</param>
        /// <param name="chartId">HTML Code 상에서 Chart의 고유 ID</param>
        /// <param name="width">Chart 폭 (pixel 단위 또는 %)</param>
        /// <param name="height">Chart 높이 (pixel 단위 또는 %)</param>
        /// <param name="debugMode">디버그 모드</param>
        /// <param name="registerWithJS">JavaScript에 Chart를 자체적으로 등록할 것인가 여부</param>
        /// <param name="transparent">Chart 투명화 여부</param>
        /// <returns>Chart를 보이기 위한 JavaScript + HTML Code</returns>
        private static string RenderChartInternal(string chartSwf, string dataUrl, string dataXml,
                                                  string chartId, string width, string height,
                                                  bool debugMode, bool registerWithJS,
                                                  bool transparent)
        {
            if (IsDebugEnabled)
            {
                log.Debug("Render Chart Starting...");
                log.Debug("SWF={0}, dataUrl={1}, dataXml={2}", chartSwf, dataUrl, dataXml.EllipsisChar(100));
                log.Debug("charId={0}, width={1}, height={2}, debugMode={3}, registerWithJS={4}, transparent={5}",
                          chartId, width, height, debugMode, registerWithJS, transparent);
            }

            chartSwf.ShouldNotBeWhiteSpace("chartSwf");
            chartId.ShouldNotBeWhiteSpace("chartId");

            var chartSwfPath = WebTool.GetScriptPath(chartSwf);

            string chartName = "chart_" + chartId;
            var    builder   = new StringBuilder();

            builder.AppendFormat("<!-- Start Script Block for Chart : {0} -->", chartId).AppendLine();
            builder.AppendFormat("<div id='{0}Div' align='center'>", chartId).AppendLine();
            builder.AppendLine("Chart.");
            builder.AppendLine("</div>");
            builder.AppendLine("<script type=\"text/javascript\">");
            builder.AppendFormat("    var chart_{0} = new FusionCharts(\"{1}\", \"{0}\", \"{2}\", \"{3}\", \"{4}\", \"{5}\" );",
                                 chartId, chartSwfPath, width, height, debugMode.GetHashCode(), registerWithJS.GetHashCode()).
            AppendLine();

            if (dataXml.IsWhiteSpace())
            {
                builder.AppendFormat("    {0}.setDataURL(\"{1}\");", chartName, EncodeDataUrl(dataUrl, true)).AppendLine();
            }
            else
            {
                builder.AppendFormat("    {0}.setDataXML(\"{1}\");", chartName, dataXml).AppendLine();
            }

            if (transparent)
            {
                builder.AppendFormat("    {0}.setTransparent(\"{1}\");", chartName, true).AppendLine();
            }

            builder.AppendFormat("{0}.render(\"{1}Div\");", chartName, chartId).AppendLine();
            builder.AppendLine("</script>");
            builder.AppendFormat("<!-- End script block for Chart {0} -->", chartId).AppendLine();

            return(builder.ToString());
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Chart에 제공할 Data의 URL을 인코딩합니다.
        /// </summary>
        /// <param name="dataUrl">Chart에게 Data를 제공해 줄 URL</param>
        /// <param name="noCacheStr">캐시 사용 여부, True면 캐시를 하지 않도록 한다.</param>
        /// <returns>Encoding된 DataUrl</returns>
        public static string EncodeDataUrl(string dataUrl, bool noCacheStr)
        {
            dataUrl.ShouldNotBeWhiteSpace("dataUrl");

            if (IsDebugEnabled)
            {
                log.Debug("Encode dataUrl. dataUrl=[{0}], noCacheStr=[{1}]", dataUrl, noCacheStr);
            }

            string encoded = WebTool.GetScriptPath(dataUrl);

            if (noCacheStr)
            {
                encoded += (dataUrl.IndexOf("?") >= 0) ? "&" : "?";
                encoded += "NfwChartID=" + Guid.NewGuid();
            }

            return(System.Web.HttpUtility.UrlEncode(encoded));
        }
Ejemplo n.º 8
0
        private static void FillData(DataSetElement dataSet, int factoryId, string chartName)
        {
            //
            // Build Data
            //
            var outputs = FactoryRepository.FindAllFactoryOutputByFactoryId(factoryId);

            var num = 0;

            foreach (var output in outputs)
            {
                SetElementBase set;
                if (chartName == "Scatter")
                {
                    set = new XYSetElement(output.DatePro.Value.DayOfYear, output.Quantity ?? 0);
                }
                else
                {
                    set = new XYSetElement(output.DatePro.Value.DayOfYear, output.DatePro.Value.DayOfYear, output.Quantity ?? 0);
                }

                if ((num++ % 2) == 0)
                {
                    set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April');");
                }
                // 실제 Javascript 메소드를 쓰려면 "PopUp-April" 로만 쓰면 된다.
                else
                {
                    set.Link.SetLink(FusionLinkMethod.PopUp,
                                     WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId.ToString());
                    set.Link.Width  = 600;
                    set.Link.Height = 400;
                }

                dataSet.AddSet(set);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Server-side에서 Chart의 Image/PDF를 export 하도록 설정을 합니다.
        /// </summary>
        /// <param name="chart">export 할 chart</param>
        /// <param name="exportHandler">ExportHandler 경로. <see cref="HandlerSettings.ExportHandler"/></param>
        /// <param name="filename">Export할 image/pdf 파일의 이름</param>
        public static void SetExportInServer(this IChart chart, string exportHandler, string filename)
        {
            if (IsDebugEnabled)
            {
                log.Debug(@"Chart Exporting이 가능하도록 설정합니다. Server-side exporting 후 download를 수행하도록 합니다." +
                          @" exportHander={0}, filename={1}", exportHandler, filename);
            }

            // Server-side Export 후 download 하도록 합니다.
            //
            chart.ExportAttr.Enabled    = true;
            chart.ExportAttr.AtClient   = false;
            chart.ExportAttr.Action     = "download";
            chart.ExportAttr.ShowDialog = true;
            // chart.ExportAttr.TargetWindow = "_blank";  // default is _self

            chart.ExportAttr.Handler = exportHandler.IsNotWhiteSpace()
                                           ? WebTool.GetScriptPath(exportHandler)
                                           : HandlerSettings.ExportHandler;

            chart.ExportAttr.FileName = filename.IsNotWhiteSpace()
                                            ? filename
                                            : "RealWeb_RealCharts_" + Guid.NewGuid().ToString("D");
        }
Ejemplo n.º 10
0
        /// <summary>
        /// HttpHandler의 작업의 메인 메소드입니다. 재정의 하여 원하는 기능을 수행하되, 제일 첫번째에 부모 클래스의 메소들를 호출해주어야 합니다.
        /// </summary>
        /// <param name="context"></param>
        protected override void DoProcessRequest(HttpContext context)
        {
            base.DoProcessRequest(context);

            if (IsDebugEnabled)
            {
                log.Debug("정적 파일 (Static File) 요청 처리를 시작합니다...");
            }

            ParseRequestParams(context);

            // file not found!!!
            var physicalPath = context.Server.MapPath(WebTool.GetScriptPath(_virtualPath));

            if (physicalPath.FileExists() == false)
            {
                ResponseFileNotFound(context, _virtualPath);
                // context.Response.End();
                return;
            }

            // if requested file already exist in cache, send file from cache
            //
            if (WriteFromCache(context, _cacheKey, CacheDuration, CompressionKind) == false)
            {
                _contentType = WebTool.GetMime(physicalPath);

                var readTask = ReadFile(context, physicalPath);

                _isCompressed = CanCompression;

                var fileExt = physicalPath.ExtractFileExt();

                // 이미지 파일이거나, 압축이 필요없는 파일은 압축하지 않습니다.
                if (_contentType.Contains("image") || WebTool.NoCompressionFileExtensions.Any(fileExt.Contains))
                {
                    if (IsDebugEnabled)
                    {
                        log.Debug("이미지 파일등 이미 압축된 상태의 파일은 압축하지 않습니다.... physicalFile=[{0}]", physicalPath);
                    }

                    _isCompressed = false;
                }

                byte[] readBytes = readTask.Result;

                if (_isCompressed && readBytes.Length < CompressionThreshold)
                {
                    if (IsDebugEnabled)
                    {
                        log.Debug("전송할 데이타의 크기가 기본 Threadhold [{0}] bytes 보다 작아 압축을 하지 않습니다. Content-Length=[{1}] bytes",
                                  CompressionThreshold, readBytes.Length);
                    }
                    _isCompressed = false;
                }

                // 결론적으로 압축이 필요하다면 압축을 합니다.
                //
                if (_isCompressed)
                {
                    readBytes = Compressor.Compress(readBytes);
                }

                var cacheItem = new CacheItem(readBytes, _isCompressed, _contentType);

                SaveToCache(context, _cacheKey, cacheItem, CacheDuration);
                WriteBytes(context, cacheItem, CacheDuration, CompressionKind);
            }

            // context.Response.End();

            if (IsDebugEnabled)
            {
                log.Debug("정적 파일 (Static File) 요청 처리를 완료했습니다!!! file=[{0}]", _virtualPath);
            }
        }
Ejemplo n.º 11
0
        protected void Page_Load(object sender, EventArgs e)
        {
            lblUrl.Text = WebTool.GetScriptPath("~/Utils/WebUtilsTestPage.aspx");

            lblUrl.Text += "<BR/>ServerName=" + WebTool.ServerName;
        }