)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Skip Navigation LinksHome » Code Library » Result

Public general use code classes and xml files that we've compiled and used over the years:

Result support class.

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Linq;
    4: using System.Runtime.Serialization;
    5: using System.Text;
    6: using System.Text.RegularExpressions;
    7:  
    8: namespace Ia.Cl.Model
    9: {
   10:     ////////////////////////////////////////////////////////////////////////////
   11:     /// <summary publish="true">
   12:     /// Result support class.
   13:     /// </summary>
   14:     /// <remarks> 
   15:     /// Copyright © 2001-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   16:     ///
   17:     /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
   18:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   19:     ///
   20:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   21:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   22:     /// 
   23:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   24:     /// 
   25:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   26:     /// </remarks> 
   27:     [DataContract(IsReference = true, Namespace = "kw.com.ia.api", Name = "apiResult")]
   28:     public class Result
   29:     {
   30:         private string title;
   31:         private readonly List<TextDateTime> list;
   32:  
   33:         /// <summary/>
   34:         public enum Type 
   35:         {
   36:             /// <summary/>
   37:             Success,
   38:  
   39:             /// <summary/>
   40:             Warning,
   41:  
   42:             /// <summary/>
   43:             Error
   44:         };
   45:  
   46:         /// <summary/>
   47:         public class TextDateTime
   48:         {
   49:             /// <summary/>
   50:             public Type Type { get; set; }
   51:  
   52:             /// <summary/>
   53:             public string Text { get; set; }
   54:  
   55:             /// <summary/>
   56:             public DateTime DateTime { get; set; }
   57:  
   58:             /// <summary/>
   59:             public TextDateTime(string text, Type type, DateTime dateTime)
   60:             {
   61:                 Type = type;
   62:                 Text = text;
   63:                 DateTime = dateTime;
   64:             }
   65:         }
   66:  
   67:         ////////////////////////////////////////////////////////////////////////////
   68:  
   69:         /// <summary>
   70:         ///
   71:         /// </summary>
   72:         public Result()
   73:         {
   74:             list = new List<TextDateTime>();
   75:         }
   76:  
   77:         ////////////////////////////////////////////////////////////////////////////
   78:  
   79:         /// <summary>
   80:         ///
   81:         /// </summary>
   82:         public Result(string title)
   83:         {
   84:             this.title = title;
   85:  
   86:             list = new List<TextDateTime>();
   87:         }
   88:  
   89:         ////////////////////////////////////////////////////////////////////////////
   90:  
   91:         /// <summary>
   92:         ///
   93:         /// </summary>
   94:         [DataMember(Name = "title")]
   95:         public string Title
   96:         {
   97:             get 
   98:             { 
   99:                 return title; 
  100:             }
  101:             set 
  102:             { 
  103:                 title = value; 
  104:             }
  105:         }
  106:  
  107:         ////////////////////////////////////////////////////////////////////////////
  108:  
  109:         /// <summary>
  110:         ///
  111:         /// </summary>
  112:         [DataMember(Name = "isSuccessful")]
  113:         public bool IsSuccessful
  114:         {
  115:             get
  116:             {
  117:                 return !list.Any(u => u.Type == Type.Error); 
  118:             }
  119:  
  120:             // http://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
  121:             private set { }
  122:         }
  123:  
  124:         ////////////////////////////////////////////////////////////////////////////
  125:  
  126:         /// <summary>
  127:         ///
  128:         /// </summary>
  129:         [DataMember(Name = "hasWarning")]
  130:         public bool HasWarning
  131:         {
  132:             get
  133:             {
  134:                 return list.Any(u => u.Type == Type.Warning);
  135:             }
  136:  
  137:             // http://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
  138:             private set { }
  139:         }
  140:  
  141:         ////////////////////////////////////////////////////////////////////////////
  142:  
  143:         /// <summary>
  144:         ///
  145:         /// </summary>
  146:         [DataMember(Name = "hasError")]
  147:         public bool HasError
  148:         {
  149:             get
  150:             {
  151:                 return list.Any(u => u.Type == Type.Error);
  152:             }
  153:  
  154:             // http://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
  155:             private set { }
  156:         }
  157:  
  158:         ////////////////////////////////////////////////////////////////////////////
  159:  
  160:         /// <summary>
  161:         ///
  162:         /// </summary>
  163:         [DataMember(Name = "message")]
  164:         public string Message
  165:         {
  166:             get
  167:             {
  168:                 string s;
  169:  
  170:                 if (!string.IsNullOrEmpty(Success))
  171:                 {
  172:                     if (!string.IsNullOrEmpty(Warning) && !string.IsNullOrEmpty(Error))
  173:                     {
  174:                         s = "Success: " + Success + ". Warning: " + Warning + ". Error: " + Error + ". ";
  175:                     }
  176:                     else if (!string.IsNullOrEmpty(Warning))
  177:                     {
  178:                         s = "Success: " + Success + ". Warning: " + Warning + ". ";
  179:                     }
  180:                     else if (!string.IsNullOrEmpty(Error))
  181:                     {
  182:                         s = "Success: " + Success + ". Error: " + Error + ". ";
  183:                     }
  184:                     else
  185:                     {
  186:                         s = "Success: " + Success + ". ";
  187:                     }
  188:                 }
  189:                 else
  190:                 {
  191:                     if (!string.IsNullOrEmpty(Warning) && !string.IsNullOrEmpty(Error))
  192:                     {
  193:                         s = "Warning: " + Warning + ". Error: " + Error + ". ";
  194:                     }
  195:                     else if (!string.IsNullOrEmpty(Warning))
  196:                     {
  197:                         s = "Warning: " + Warning + ". ";
  198:                     }
  199:                     else if (!string.IsNullOrEmpty(Error))
  200:                     {
  201:                         s = "Error: " + Error + ". ";
  202:                     }
  203:                     else
  204:                     {
  205:                         s = "";
  206:                     }
  207:                 }
  208:  
  209:                 CleanUp(ref s);
  210:  
  211:                 return s;
  212:             }
  213:  
  214:             // http://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
  215:             private set { }
  216:         }
  217:  
  218:         ////////////////////////////////////////////////////////////////////////////
  219:  
  220:         /// <summary>
  221:         ///
  222:         /// </summary>
  223:         [DataMember(Name = "messageWithoutCaption")]
  224:         public string MessageWithoutCaption
  225:         {
  226:             get
  227:             {
  228:                 string s;
  229:  
  230:                 if (!string.IsNullOrEmpty(Success))
  231:                 {
  232:                     if (!string.IsNullOrEmpty(Warning) && !string.IsNullOrEmpty(Error))
  233:                     {
  234:                         s = Success + ". " + Warning + ". " + Error + ". ";
  235:                     }
  236:                     else if (!string.IsNullOrEmpty(Warning))
  237:                     {
  238:                         s = Success + ". " + Warning + ". ";
  239:                     }
  240:                     else if (!string.IsNullOrEmpty(Error))
  241:                     {
  242:                         s = Success + ". " + Error + ". ";
  243:                     }
  244:                     else
  245:                     {
  246:                         s = Success + ". ";
  247:                     }
  248:                 }
  249:                 else
  250:                 {
  251:                     if (!string.IsNullOrEmpty(Warning) && !string.IsNullOrEmpty(Error))
  252:                     {
  253:                         s = Warning + ". " + Error + ". ";
  254:                     }
  255:                     else if (!string.IsNullOrEmpty(Warning))
  256:                     {
  257:                         s = Warning + ". ";
  258:                     }
  259:                     else if (!string.IsNullOrEmpty(Error))
  260:                     {
  261:                         s = Error + ". ";
  262:                     }
  263:                     else
  264:                     {
  265:                         s = "";
  266:                     }
  267:                 }
  268:  
  269:                 CleanUp(ref s);
  270:  
  271:                 return s;
  272:             }
  273:  
  274:             // http://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
  275:             private set { }
  276:         }
  277:  
  278:         ////////////////////////////////////////////////////////////////////////////
  279:  
  280:         /// <summary>
  281:         ///
  282:         /// </summary>
  283:         [DataMember(Name = "coloredMessage")]
  284:         public string ColoredMessage
  285:         {
  286:             get
  287:             {
  288:                 string s;
  289:                 StringBuilder stringBuilder;
  290:  
  291:                 stringBuilder = new StringBuilder();
  292:  
  293:                 foreach(var v in list.OrderBy(u=>u.DateTime))
  294:                 {
  295:                     if (v.Type == Type.Error) s = @"<span class=""error"">Error: " + v.Text + @"</span><br/>";
  296:                     else if (v.Type == Type.Warning) s = @"<span class=""warning"">Warning: " + v.Text + @"</span><br/>";
  297:                     else if (v.Type == Type.Success) s = @"<span class=""success"">Success: " + v.Text + @"</span><br/>";
  298:                     else s = string.Empty;
  299:  
  300:                     if(!string.IsNullOrEmpty(s)) stringBuilder.AppendLine(s);
  301:                 }
  302:  
  303:                 stringBuilder = new StringBuilder(Regex.Replace(stringBuilder.ToString(), @"\.\s+\.", "."));
  304:  
  305:                 return stringBuilder.ToString();
  306:             }
  307:  
  308:             // http://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
  309:             private set { }
  310:         }
  311:  
  312:         ////////////////////////////////////////////////////////////////////////////
  313:  
  314:         /// <summary>
  315:         ///
  316:         /// </summary>
  317:         [DataMember(Name = "coloredMessageWithoutCaption")]
  318:         public string ColoredMessageWithoutCaption
  319:         {
  320:             get
  321:             {
  322:                 string s;
  323:                 StringBuilder stringBuilder;
  324:  
  325:                 stringBuilder = new StringBuilder();
  326:  
  327:                 foreach (var v in list.OrderBy(u => u.DateTime))
  328:                 {
  329:                     if (v.Type == Type.Error) s = @"<span class=""error"">" + v.Text + @"</span><br/>";
  330:                     else if (v.Type == Type.Warning) s = @"<span class=""warning"">" + v.Text + @"</span><br/>";
  331:                     else if (v.Type == Type.Success) s = @"<span class=""success"">" + v.Text + @"</span><br/>";
  332:                     else s = string.Empty;
  333:  
  334:                     if (!string.IsNullOrEmpty(s)) stringBuilder.AppendLine(s);
  335:                 }
  336:  
  337:                 stringBuilder = new StringBuilder(Regex.Replace(stringBuilder.ToString(), @"\.\s+\.", "."));
  338:  
  339:                 return stringBuilder.ToString();
  340:             }
  341:  
  342:             // http://stackoverflow.com/questions/2323277/wcf-chokes-on-properties-with-no-set-any-workaround
  343:             private set { }
  344:         }
  345:  
  346:         ////////////////////////////////////////////////////////////////////////////
  347:  
  348:         /// <summary>
  349:         ///
  350:         /// </summary>
  351:         public string Success
  352:         {
  353:             get
  354:             {
  355:                 string s;
  356:  
  357:                 s = string.Empty;
  358:  
  359:                 foreach (TextDateTime u in list.Where(u => u.Type == Type.Success)) s += u.Text + " ";
  360:  
  361:                 if (!string.IsNullOrEmpty(s))
  362:                 {
  363:                     s = s.Remove(s.Length - 1, 1); // remove last ' '
  364:                     //s += ". ";
  365:                 }
  366:  
  367:                 CleanUp(ref s);
  368:  
  369:                 return s;
  370:             }
  371:         }
  372:  
  373:         ////////////////////////////////////////////////////////////////////////////
  374:  
  375:         /// <summary>
  376:         ///
  377:         /// </summary>
  378:         public string Warning
  379:         {
  380:             get
  381:             {
  382:                 string s;
  383:  
  384:                 s = string.Empty;
  385:  
  386:                 foreach (TextDateTime u in list.Where(u=>u.Type == Type.Warning)) s += u.Text + " ";
  387:  
  388:                 if (!string.IsNullOrEmpty(s))
  389:                 {
  390:                     s = s.Remove(s.Length - 1, 1); // remove last ' '
  391:                     //s += ". ";
  392:                 }
  393:  
  394:                 CleanUp(ref s);
  395:  
  396:                 return s;
  397:             }
  398:         }
  399:  
  400:         ////////////////////////////////////////////////////////////////////////////
  401:  
  402:         /// <summary>
  403:         ///
  404:         /// </summary>
  405:         public string Error
  406:         {
  407:             get
  408:             {
  409:                 string s;
  410:  
  411:                 s = string.Empty;
  412:  
  413:                 foreach(TextDateTime u in list.Where(u => u.Type == Type.Error)) s += u.Text + " ";
  414:  
  415:                 if (!string.IsNullOrEmpty(s))
  416:                 {
  417:                     s = s.Remove(s.Length - 1, 1); // remove last ' '
  418:                     //s += ". ";
  419:                 }
  420:  
  421:                 CleanUp(ref s);
  422:  
  423:                 return s;
  424:             }
  425:         }
  426:  
  427:         ////////////////////////////////////////////////////////////////////////////
  428:  
  429:         /// <summary>
  430:         ///
  431:         /// </summary>
  432:         private void CleanUp(ref string line)
  433:         {
  434:             line = Regex.Replace(line, @"\.\s+\.", ".");
  435:             line = line.Replace("?.", "?");
  436:             line = line.Replace("!.", "!");
  437:             line = line.Replace("..", ".");
  438:         }
  439:  
  440:         ////////////////////////////////////////////////////////////////////////////
  441:  
  442:         /// <summary>
  443:         ///
  444:         /// </summary>
  445:         public void AddSuccess(string message)
  446:         {
  447:             this.list.Add(new TextDateTime(message, Type.Success, DateTime.UtcNow.AddHours(3)));
  448:         }
  449:  
  450:         ////////////////////////////////////////////////////////////////////////////
  451:  
  452:         /// <summary>
  453:         ///
  454:         /// </summary>
  455:         public void AddSuccess(string title, string message)
  456:         {
  457:             this.title = title;
  458:  
  459:             this.list.Add(new TextDateTime(message, Type.Success, DateTime.UtcNow.AddHours(3)));
  460:         }
  461:  
  462:         ////////////////////////////////////////////////////////////////////////////
  463:  
  464:         /// <summary>
  465:         ///
  466:         /// </summary>
  467:         public void AddWarning(string message)
  468:         {
  469:             this.list.Add(new TextDateTime(message, Type.Warning, DateTime.UtcNow.AddHours(3)));
  470:         }
  471:  
  472:         ////////////////////////////////////////////////////////////////////////////
  473:  
  474:         /// <summary>
  475:         ///
  476:         /// </summary>
  477:         public void AddWarning(string title, string message)
  478:         {
  479:             this.title = title;
  480:  
  481:             this.list.Add(new TextDateTime(message, Type.Warning, DateTime.UtcNow.AddHours(3)));
  482:         }
  483:  
  484:         ////////////////////////////////////////////////////////////////////////////
  485:  
  486:         /// <summary>
  487:         ///
  488:         /// </summary>
  489:         public void AddError(string message)
  490:         {
  491:             this.list.Add(new TextDateTime(message, Type.Error, DateTime.UtcNow.AddHours(3)));
  492:         }
  493:  
  494:         ////////////////////////////////////////////////////////////////////////////
  495:  
  496:         /// <summary>
  497:         ///
  498:         /// </summary>
  499:         public void AddError(string title, string message)
  500:         {
  501:             this.title = title;
  502:  
  503:             this.list.Add(new TextDateTime(message, Type.Error, DateTime.UtcNow.AddHours(3)));
  504:         }
  505:  
  506:         ////////////////////////////////////////////////////////////////////////////
  507:  
  508:         /// <summary>
  509:         ///
  510:         /// </summary>
  511:         public void AddResult(Result result)
  512:         {
  513:             this.list.AddRange(result.list);
  514:         }
  515:  
  516:         ////////////////////////////////////////////////////////////////////////////
  517:  
  518:         /// <summary>
  519:         ///
  520:         /// </summary>
  521:         public void AddResult(string title, Result result)
  522:         {
  523:             this.title = title;
  524:  
  525:             this.list.AddRange(result.list);
  526:         }
  527:  
  528:         ////////////////////////////////////////////////////////////////////////////
  529:         ////////////////////////////////////////////////////////////////////////////
  530:     }
  531:  
  532:     ////////////////////////////////////////////////////////////////////////////
  533:     ////////////////////////////////////////////////////////////////////////////
  534: }