예제 #1
0
        /// <summary>
        /// CAP 메시지로부터 시스템 종류 정보를 추출.
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public List <SASKind> ExtractTargetKindsFromCAP(CAP msg)
        {
            System.Diagnostics.Debug.Assert(msg != null);

            if (msg.Scope != CAPLib.ScopeType.Restricted)
            {
                return(null);
            }
            if (string.IsNullOrEmpty(msg.Restriction))
            {
                return(null);
            }

            string[] stringSeperators = new string[] { "," };
            string[] dividedArray     = msg.Restriction.Split(stringSeperators, StringSplitOptions.RemoveEmptyEntries);
            if (dividedArray == null || dividedArray.Count() <= 0)
            {
                return(null);
            }

            List <SASKind> targets = new List <SASKind>();

            foreach (string systemKindCode in dividedArray)
            {
                SASKind kindInfo = BasisData.FindSASKindByCode(systemKindCode);
                if (kindInfo != null)
                {
                    targets.Add(kindInfo);
                }
            }

            return(targets);
        }
예제 #2
0
        public OrderProvisionInfo()
        {
            // [2016-03-31] 기본 발령 정보를 시험으로 생성 - by Gonzi
            //this.mode = BasisData.FindOrderModeInfoByCode(CAPLib.StatusType.Actual);
            this.mode        = BasisData.FindOrderModeInfoByCode(CAPLib.StatusType.Test);
            this.messageType = MsgType.Alert;
            this.scope       = ScopeType.Public;

            this.disaster          = new Disaster();
            this.disaster.Category = new DisasterCategory();
            this.disaster.Kind     = new DisasterKind();

            this.refType     = new OrderReferenceType();
            this.refRecordID = string.Empty;
            this.msgTextInfo = new SendingMsgTextInfo();

            this.targetRegions = new List <RegionDefinition>();
            this.targetSystems = new List <SASProfile>();
            this.circle        = new List <AdengGE.CircleInfo>();

            this.orderLocationKind = OrderLocationKind.Local;

            this.targetSystemsKinds = new List <SASKind>();

            this.tag = null;
        }
        /// <summary>
        /// 특보 해당구역 코드 리스트를 행정구역 지역명 문자열(콤마로 구분된 연속된 문자열)로 변환.
        /// </summary>
        /// <returns></returns>
        public string GetTargetRegionNames()
        {
            string[] targetRegionCodes = GetTargetRegionCodes();
            if (targetRegionCodes == null)
            {
                return(string.Empty);
            }

            List <string> regionNames = new List <string>();

            foreach (string regionCode in targetRegionCodes)
            {
                RegionProfile profile = BasisData.FindRegion(regionCode);
                if (profile == null)
                {
                    continue;
                }
                if (regionNames.Contains(profile.Name))
                {
                    continue;
                }
                regionNames.Add(profile.Name);
            }

            return(string.Join(",", regionNames));
        }
        /// <summary>
        /// 특보 해당구역 코드 리스트에 해당하는 행정구역 지역코드 문자열(콤마로 구분된 연속된 문자열)을 반환.
        /// </summary>
        /// <returns></returns>
        public string[] GetTargetRegionCodes()
        {
            string[] targetAreaCodes = GetTargetAreaList();
            if (targetAreaCodes == null)
            {
                return(null);
            }

            List <string> targetRegionCodes = new List <string>();

            foreach (string areaCode in targetAreaCodes)
            {
                SWRAnnounceArea areaInfo = BasisData.FindSWRAreaByAreaCode(areaCode);
                if (areaInfo == null || areaInfo.TargetRegions == null)
                {
                    continue;
                }
                foreach (string regionCode in areaInfo.TargetRegions)
                {
                    if (targetRegionCodes.Contains(regionCode))
                    {
                        continue;
                    }
                    targetRegionCodes.Add(regionCode);
                }
            }

            return(targetRegionCodes.ToArray());
        }
예제 #5
0
        /// <summary>
        /// CAP 메시지를 기반으로 헤드라인 문자열 작성.
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public string MakeHeadline(CAP msg)
        {
            System.Diagnostics.Debug.Assert(msg != null);

            try
            {
                StringBuilder builder = new StringBuilder();
                foreach (InfoType msgInfo in msg.Info)
                {
                    if (msgInfo.Language.ToUpper() == BasisData.DEFAULT_LANGUAGECODE.ToUpper())
                    {
                        builder.Append(msgInfo.Headline);
                        break;
                    }
                }

                if (builder.Length < 1)
                {
                    OrderMode modeInfo = BasisData.FindOrderModeInfoByCode(msg.MessageStatus.Value);
                    if (modeInfo == null || string.IsNullOrEmpty(modeInfo.Name))
                    {
                        FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( 헤드라인 정보 작성 실패. 모드 정보를 찾을 수 없습니다. )");
                        throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 모드 정보를 찾을 수 없습니다.");
                    }

                    if (msg.Info == null || msg.Info.Count < 1 || string.IsNullOrEmpty(msg.Info[0].Event))
                    {
                        FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( 헤드라인 정보 작성 실패. 이벤트 코드 정보를 찾을 수 없습니다. )");
                        throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 이벤트 코드 정보를 찾을 수 없습니다.");
                    }
                    string disasterKindName = msg.Info[0].Event;

                    string targets = ExtractTargetNamesFromCAP(msg);
                    if (string.IsNullOrEmpty(targets))
                    {
                        FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( 헤드라인 정보 작성 실패. 발령 대상 정보를 찾을 수 없습니다. )");
                        throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 발령 대상 정보를 찾을 수 없습니다.");
                    }

                    builder.Append(msg.SentDateTime.ToString());
                    builder.Append(" [" + modeInfo.Name + "]");
                    builder.Append(" [" + targets.Replace(',', '/') + "] 대상으로");
                    builder.Append(" [" + disasterKindName + "]");
                    builder.Append(" 발령");
                }

                return(builder.ToString());
            }
            catch (Exception ex)
            {
                System.Console.WriteLine("[CAPInfo] MakeHeadline( Exception=[ " + ex.ToString() + "] )");
                FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( Exception=[" + ex.ToString() + "] )");

                throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 처리 중 예외가 발생하였습니다.");
            }
        }
예제 #6
0
        public static string GetDisplayStringDisasterKindName(string disasterKindCode)
        {
            System.Diagnostics.Debug.Assert(disasterKindCode != null);

            DisasterKind kind = BasisData.FindDisasterKindByCode(disasterKindCode);

            if (kind == null || kind.Name == null)
            {
                return("Unknown(" + disasterKindCode + ")");
            }
            return(kind.Name);
        }
        /// <summary>
        /// 특보 해당구역 코드 리스트를 구역명 문자열(콤마로 구분된 연속된 문자열)로 변환.
        /// </summary>
        /// <returns></returns>
        public string GetTargetAreaNames()
        {
            string[] targetAreaCodes = GetTargetAreaList();
            if (targetAreaCodes == null)
            {
                return(string.Empty);
            }

            List <string> regionNames = new List <string>();

            foreach (string areaCode in targetAreaCodes)
            {
                SWRAnnounceArea areaInfo = BasisData.FindSWRAreaByAreaCode(areaCode);
                if (areaInfo == null || areaInfo.TargetRegions == null)
                {
                    continue;
                }
                regionNames.Add(areaInfo.AreaName);
            }

            return(string.Join(",", regionNames));
        }
예제 #8
0
        public string GetLanguageNamesFromCAP(CAP msg)
        {
            System.Diagnostics.Debug.Assert(msg != null);

            if (msg.Info == null || msg.Info.Count < 1)
            {
                return(null);
            }

            bool          isFirst = true;
            StringBuilder builder = new StringBuilder();

            foreach (InfoType info in msg.Info)
            {
                if (info == null || string.IsNullOrEmpty(info.Language))
                {
                    continue;
                }
                string name = string.Empty;
                MsgTextDisplayLanguageKind kindInfo = BasisData.FindMsgTextLanguageInfoByCode(info.Language);
                if (kindInfo == null)
                {
                    continue;
                }
                if (isFirst)
                {
                    isFirst = false;
                    builder.Append(kindInfo.LanguageName);
                }
                else
                {
                    builder.Append("," + kindInfo.LanguageName);
                }
            }

            return(builder.ToString());
        }
예제 #9
0
        /// <summary>
        /// CAP 메시지로부터 발령 대상 지역 정보를 추출.
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public List <RegionDefinition> ExtractTargetRegionsFromCAP(CAP msg)
        {
            System.Diagnostics.Debug.Assert(msg != null);

            if (msg.Scope == CAPLib.ScopeType.Private)
            {
                return(null);
            }
            if (msg.Info == null || msg.Info.Count < 1)
            {
                return(null);
            }

            List <RegionDefinition> targets = new List <RegionDefinition>();

            InfoType info = msg.Info[0];

            if (info == null)
            {
                return(null);
            }
            if (info.Area == null || info.Area.Count < 1)
            {
                return(null);
            }

            foreach (AreaType area in info.Area)
            {
                int      areaIndex        = -1;
                string[] stringSeperators = new string[] { " " };

                foreach (NameValueType geoCode in area.GeoCode)
                {
                    areaIndex++;

                    if (geoCode.Name != "KRDSTGeocode")
                    {
                        continue;
                    }
                    string        code    = geoCode.Value;
                    RegionProfile profile = BasisData.FindRegion(code);
                    if (profile == null)
                    {
                        string areaDesc = area.AreaDesc;
                        if (areaDesc == null)
                        {
                            continue;
                        }
                        string[] areaNames = areaDesc.Split(stringSeperators, StringSplitOptions.RemoveEmptyEntries);
                        if (areaNames != null && areaNames.Count() <= areaIndex)
                        {
                            continue;
                        }

                        RegionDefinition region = new RegionDefinition(code, areaNames[areaIndex]);
                        targets.Add(region);
                    }
                    else
                    {
                        RegionDefinition region = new RegionDefinition(profile.Code, profile.Name);
                        targets.Add(region);
                    }
                }
            }

            return(targets);
        }
예제 #10
0
        public string GetHeadlineString()
        {
            if (this == null)
            {
                return(string.Empty);
            }

            try
            {
                CAPHelper     helper      = new CAPHelper();
                StringBuilder headline    = new StringBuilder();
                string        association = string.Empty;

                if (this.LocationKind == OrderLocationKind.Other)
                {
                    association = "[연계] ";
                }

                CAP    msg            = new CAP(this.CapText);
                string headlineNormal = helper.MakeHeadline(msg);
                if (string.IsNullOrEmpty(headlineNormal))
                {
                    headline.Append(headlineNormal);
                }

                if (headline.Length < 1)
                {
                    OrderMode mode = BasisData.FindOrderModeInfoByCode(this.OrderMode);
                    if (mode == null)
                    {
                        headline.Append(this.OrderedTime + " [ Unknown ]");
                    }
                    else
                    {
                        headline.Append(this.OrderedTime + " [" + mode.Name + "]");
                    }

                    string targets = helper.ExtractTargetNamesFromCAP(msg);
                    if (!string.IsNullOrEmpty(targets))
                    {
                        headline.Append("[" + targets.Replace(',', '/') + "] 대상으로");
                    }
                    else
                    {
                        headline.Append("[ Unknown ] 대상으로");
                    }

                    string disasterName = "Unknown";
                    if (msg.Info != null && msg.Info.Count > 0)
                    {
                        disasterName = msg.Info[0].Event;
                    }
                    else
                    {
                        DisasterKind disasterKind = BasisData.FindDisasterKindByCode(this.DisasterKindCode);
                        if (disasterKind != null)
                        {
                            disasterName = disasterKind.Name;
                        }
                    }

                    headline.Append(" [" + disasterName + "]");
                    headline.Append(" 발령");

                    if (this.RefType == OrderReferenceType.Cancel)
                    {
                        headline.Append(" 취소");
                    }
                }

                return(association + headline.ToString());
            }
            catch (Exception ex)
            {
                System.Console.WriteLine("[OrderInfo] GetHeadlineString( Exception=[" + ex.ToString() + "] )");
                FileLogManager.GetInstance().WriteLog("[OrderInfo] GetHeadlineString ( Exception=[" + ex.ToString() + "] )");

                return(string.Empty);
            }
        }