Friday, December 14, 2007

BulgarianException

Hi all, here is an example implementation for a Bulgarian Exception.
Have nice time in the new year's eve and avoid this exception ;)

[Serializable]
class BulgarianException
   : ApplicationException
{
   [field: NonSerialized]
   const ulong MIN_ALLOWED_GRAMS_RAKIA = 500;
   [field: NonSerialized]
   const ulong MIN_ALLOWED_GRAMS_WEIN = 1000;
   [field: NonSerialized]
   const ulong MIN_ALLOWED_GRAMS_BEER = 20 * 500; //1 kasa
   [field: NonSerialized]
   const ulong MIN_ALLOWED_GRAMS_SHOPSKA_SALAD = 5 * 1000;
   [field: NonSerialized]
   const ulong MIN_ALLOWED_GRAMS_MEZETA = 10 * 1000;

   private ulong mGramsRakia;
   private ulong mGramsWein;
   private ulong mGramsBeer;
   private ulong mGramsShopskaSalad;
   private ulong mGramsMezeta;

   public ulong GramsRakia
   {
      get { return this.mGramsRakia; }
   }
   public ulong GramsWein
   {
      get { return this.mGramsWein; }
   }
   public ulong GramsBeer
   {
      get { return this.mGramsBeer; }
   }
   public ulong GramsShopskaSalad
   {
      get { return this.mGramsShopskaSalad; }
   }
   public ulong GramsMezeta
   {
      get { return this.mGramsMezeta; }
   }

   public BulgarianException(ulong pGramsRakia, ulong pGramsWein, ulong pGramsBeer, ulong pGramsShopskaSalad, ulong pGramsMezeta, string pMessage, Exception pInnerException)
      : base( pMessage, pInnerException)
   {
      this.mGramsRakia = pGramsRakia;
      this.mGramsWein = pGramsWein;
      this.mGramsBeer = pGramsBeer;
      this.mGramsShopskaSalad = pGramsShopskaSalad;
      this.mGramsMezeta = pGramsMezeta;
   }

   public BulgarianException(string pMessage, Exception pInnerException)
      : this(0, 0, 0, 0, 0, pMessage, pInnerException)
   {
   }

   public BulgarianException(string pMessage)
      : this(pMessage, null)
   {
   }

   public string GenericMessage
   {
      get
      {
         StringBuilder message = new StringBuilder();
         message.Append(this.Message);
         message.Append("\nInsufficient alcoholic/nutritious resources:\n");

         if (mGramsRakia < MIN_ALLOWED_GRAMS_RAKIA)
         {
            message.Append(string.Format("Rakia: {0}, should be: {1}\n", mGramsRakia, MIN_ALLOWED_GRAMS_RAKIA));
         }

         if (mGramsWein < MIN_ALLOWED_GRAMS_WEIN)
         {
            message.Append(string.Format("Wein: {0}, should be: {1}\n", mGramsWein, MIN_ALLOWED_GRAMS_WEIN));
         }

         if (mGramsBeer < MIN_ALLOWED_GRAMS_BEER)
         {
            message.Append(string.Format("Beer: {0}, should be: {1}\n", mGramsBeer, MIN_ALLOWED_GRAMS_BEER));
         }

         if (mGramsShopskaSalad < MIN_ALLOWED_GRAMS_SHOPSKA_SALAD)
         {
            message.Append(string.Format("Shopska salad: {0}, should be: {1}\n", mGramsShopskaSalad, MIN_ALLOWED_GRAMS_SHOPSKA_SALAD));
         }

         if (mGramsMezeta < MIN_ALLOWED_GRAMS_MEZETA)
         {
            message.Append(string.Format("Mezeta: {0}, should be: {1}\n", mGramsMezeta, MIN_ALLOWED_GRAMS_MEZETA));
         }

      return message.ToString();
      }
   }
}

...

if (DateTime.Now.Equals(new DateTime(2007, 12, 31, 23, 59, 59))
   && (rakia < recommended_rakia
      || wein < recommended_wein
      || beer < recommended_beer
      || salad < recommended_salad
      || meze < recommended_meze))
{
   throw new BulgarianException(rakia, wein, beer, salad, meze, "Oh, come on! It's new year, dude!!!", null);
}

No comments: