コード例 #1
0
        public static void WriteChartElement(this IChartElement element, BindingFlags bindingFlags, XmlWriter writer)
        {
            if (element == null)
            {
                return;
            }

            var elementType = element.GetType();

            if (IsDebugEnabled)
            {
                log.Debug(@"타입[{0}]에서 속성 중에 XmlElement로 빌드할 정보를 생성합니다.", elementType.FullName);
            }

            var fields     = elementType.Fields().ToList();
            var properties = elementType.Properties(bindingFlags).ToList();
            var elements   =
                properties.Where(
                    pi =>
                    pi.PropertyType.IsSameOrSubclassOf(ChartElementType) ||
                    (pi.PropertyType.IsSameOrSubclassOf(typeof(IEnumerable <>)) && pi.PropertyType != typeof(string))).ToArray();

            foreach (var pi in elements)
            {
                var name = pi.Name;

                if (IsDebugEnabled)
                {
                    log.Debug(@"IChartElement 속성 [{0}]을 Xml Element로 생성합니다.", name);
                }

                var fieldName        = FasterflectTool.GetMemberName(name, MemberNamingRule.CamelCaseUndercore);
                var fieldValueExists = fields.Any(fi => fi.Name == fieldName) && (element.TryGetFieldValue(fieldName) != null);

                if (fieldValueExists)
                {
                    var elem = element.TryGetPropertyValue(name);

                    if (elem != null)
                    {
                        if (elem is IChartElement)
                        {
                            ((IChartElement)elem).WriteXmlElement(writer);
                        }

                        else if (elem is IEnumerable)
                        {
                            foreach (var x in (IEnumerable)elem)
                            {
                                if (x != null && x is IChartElement)
                                {
                                    ((IChartElement)x).WriteXmlElement(writer);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
 private string determineName(IChartElement element)
 {
     if (element is IChart)
     {
         return("chart");
     }
     if (element is IChartSet)
     {
         return("set");
     }
     if (element is IChartTrendLine)
     {
         return("line");
     }
     throw new Exception("unknown type " + element.GetType().Name);
 }
コード例 #3
0
 private string determineName(IChartElement element) {
     if (element is IChart) return "chart";
     if (element is IChartSet) return "set";
     if (element is IChartTrendLine) return "line";
     throw new Exception("unknown type " + element.GetType().Name);
 }