PageRenderTime 25ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/SPCmdTest/SPDXWrappers/ContainerClasses/ItemBase.cs

#
C# | 247 lines | 217 code | 12 blank | 18 comment | 48 complexity | 4a9d46dcf91df9cfd5500bac6eb6ec17 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Microsoft.SharePoint;
  5. namespace MyNamespace
  6. {
  7. abstract public class ItemBase
  8. {
  9. #region Contructor
  10. public ItemBase(SPListItem p_item)
  11. {
  12. if (thisTypeContentTypeName != "" && p_item.ContentType != null)
  13. {
  14. if (p_item.ContentType == null) throw new PointBridgeEx(string.Format("Attempting to initialize a wrapper for Content Type '{0}' using SPListItem of Content Type '{1}'", thisTypeContentTypeName, "null"));
  15. if (p_item.ContentType.Name != thisTypeContentTypeName) throw new PointBridgeEx(string.Format("Attempting to initialize a wrapper for Content Type '{0}' using SPListItem of Content Type '{1}'", thisTypeContentTypeName, p_item.ContentType.Name));
  16. }
  17. _item = p_item;
  18. }
  19. #endregion
  20. #region Public Methods
  21. abstract public void Validate();
  22. public void UpdateWithValidate()
  23. {
  24. Validate();
  25. UpdateNoValidate();
  26. }
  27. public void UpdateNoValidate()
  28. {
  29. _item.Update();
  30. }
  31. public void Delete()
  32. {
  33. _item.Delete();
  34. }
  35. #endregion
  36. #region Accessors and Mutators
  37. public SPListItem item
  38. {
  39. get { return _item; }
  40. }
  41. public int itemID
  42. {
  43. get { return _item.ID; }
  44. }
  45. public SPAttachmentCollection Attachments
  46. {
  47. get { return _item.Attachments; }
  48. }
  49. #endregion
  50. #region Private Methods
  51. protected void ValidateItemContentTypeAgainstParentList()
  52. {
  53. if (_item.ContentType != null && _item.ContentType.Name != "")
  54. {
  55. try
  56. {
  57. if (_item.ParentList.ContentTypes[_item.ContentType.Name] == null) throw new Exception("");
  58. }
  59. catch (Exception)
  60. {
  61. throw new PointBridgeEx("SPListItem content type is '{0}' while its ParentList does not support that content type");
  62. }
  63. }
  64. }
  65. protected void ValidateFields(SPFieldCollection fields)
  66. {
  67. foreach (SPField field in fields) ValidateField(field);
  68. }
  69. protected void ValidateField(SPField columnDef)
  70. {
  71. string lookupName = ConvertSPNameToLookupStr(columnDef);
  72. object columnVal = _item[lookupName];
  73. //first check if it is empty and whether it is allowed
  74. if (columnDef.Required == true)
  75. {
  76. switch (columnDef.Type)
  77. {
  78. //for multi-selects we do spewcial cases
  79. case SPFieldType.MultiChoice:
  80. SPFieldMultiChoice multiChoiceColumnDef = (SPFieldMultiChoice)columnDef;
  81. if (MultiChoice.GetCountFromSPRepresentation(columnVal) == 0) throw new PointBridgeEx(string.Format("MultiChoice validation failed. Column \"{0}\" is required but is not set to null or no value.", lookupName));
  82. break;
  83. case SPFieldType.Lookup:
  84. SPFieldLookup lookupColumnDef = (SPFieldLookup)columnDef;
  85. if (lookupColumnDef.AllowMultipleValues == true)
  86. {
  87. if (MultiLookup.GetCountFromSPRepresentation(columnVal) == 0) throw new PointBridgeEx(string.Format("MultiLookup validation failed. Column \"{0}\" is required but is not set to null or no value.", lookupName));
  88. }
  89. else
  90. {
  91. goto default;
  92. }
  93. break;
  94. case SPFieldType.User:
  95. SPFieldUser userColumnDef = (SPFieldUser)columnDef;
  96. if (userColumnDef.AllowMultipleValues == true)
  97. {
  98. if (MultiUser.GetCountFromSPRepresentation(columnVal) == 0) throw new PointBridgeEx(string.Format("MultiUser validation failed. Column \"{0}\" is required but is not set to null or no value.", lookupName));
  99. }
  100. else
  101. {
  102. goto default;
  103. }
  104. break;
  105. default:
  106. if (columnVal == null) throw new PointBridgeEx(string.Format("SPFieldType.{0} validation failed. Column \"{1}\" is required but is set to null.", columnDef.Type.ToString(), lookupName));
  107. if (columnVal.GetType() == typeof(string))
  108. {
  109. string strColumnVal = (string)columnVal;
  110. if (strColumnVal.Trim().Length == 0) throw new PointBridgeEx(string.Format("SPFieldType.{0} validation failed. Column \"{1}\" is required but is set to an empty string.", columnDef.Type.ToString(), lookupName));
  111. }
  112. break;
  113. }
  114. }
  115. if (_item[lookupName] == null) return; //if field is null, there is no data to validate
  116. //validate content
  117. switch (columnDef.Type)
  118. {
  119. case SPFieldType.Text:
  120. SPFieldText textColumnDef = (SPFieldText)columnDef;
  121. string textVal = (string)columnVal;
  122. if (textVal.Length > textColumnDef.MaxLength) throw new PointBridgeEx(string.Format("Validation failed. Column \"{0}\" length exceeds maximum length allowed for this column.", lookupName));
  123. break;
  124. case SPFieldType.Note:
  125. SPFieldMultiLineText noteColumnDef = (SPFieldMultiLineText)columnDef;
  126. string noteVal = (string)columnVal;
  127. //No validation here
  128. break;
  129. case SPFieldType.URL:
  130. SPFieldUrl urlColumnDef = (SPFieldUrl)columnDef;
  131. string urlVal = (string)columnVal;
  132. //No validation here. maybe urlColumnDef.UnlimitedLengthInDocumentLibrary???
  133. break;
  134. case SPFieldType.Guid:
  135. SPField guidColumnDef = (SPField)columnDef;
  136. string guidVal = (string)columnVal;
  137. //No validation here
  138. break;
  139. case SPFieldType.File:
  140. SPFieldFile fileColumnDef = (SPFieldFile)columnDef;
  141. string fileVal = (string)columnVal;
  142. //No validation here
  143. break;
  144. case SPFieldType.ModStat:
  145. SPFieldModStat modStatColumnDef = (SPFieldModStat)columnDef;
  146. //No validation here, validation is done within the object
  147. break;
  148. case SPFieldType.Currency:
  149. SPFieldCurrency currencyColumnDef = (SPFieldCurrency)columnDef;
  150. double currencyVal = (double)columnVal;
  151. if (currencyVal < currencyColumnDef.MinimumValue || currencyVal > currencyColumnDef.MaximumValue) throw new PointBridgeEx(string.Format("Validation failed. Column \"{0}\" value ({1}) does not fall within allowed range of {2}-{3}.", lookupName, currencyVal, currencyColumnDef.MinimumValue, currencyColumnDef.MaximumValue));
  152. break;
  153. case SPFieldType.Number:
  154. SPFieldNumber numberColumnDef = (SPFieldNumber)columnDef;
  155. double numberVal = (double)columnVal;
  156. if (numberVal < numberColumnDef.MinimumValue || numberVal > numberColumnDef.MaximumValue) throw new PointBridgeEx(string.Format("Validation failed. Column \"{0}\" value ({1}) does not fall within allowed range of {2}-{3}.", lookupName, numberVal, numberColumnDef.MinimumValue, numberColumnDef.MaximumValue));
  157. break;
  158. case SPFieldType.Integer:
  159. SPFieldNumber intColumnDef = (SPFieldNumber)columnDef;
  160. int intColumnVal = (int)columnVal;
  161. if (intColumnVal < intColumnDef.MinimumValue || intColumnVal > intColumnDef.MaximumValue) throw new PointBridgeEx(string.Format("Validation failed. Column \"{0}\" value ({1}) does not fall within allowed range of {2}-{3}.", lookupName, intColumnVal, intColumnDef.MinimumValue, intColumnDef.MaximumValue));
  162. break;
  163. case SPFieldType.Counter:
  164. SPField counterColumnDef = (SPField)columnDef;
  165. int counterColumnVal = (int)columnVal;
  166. //No validation here
  167. break;
  168. case SPFieldType.Boolean:
  169. SPFieldBoolean booleanColumnDef = (SPFieldBoolean)columnDef;
  170. bool booleanVal = (bool)columnVal;
  171. break;
  172. case SPFieldType.Attachments:
  173. SPFieldAttachments attachmentsColumnDef = (SPFieldAttachments)columnDef;
  174. bool attchmentsColumnVal = (bool)columnVal;
  175. break;
  176. case SPFieldType.DateTime:
  177. SPFieldDateTime dateTimeColumnDef = (SPFieldDateTime)columnDef;
  178. DateTime dateTimeVal = (DateTime)columnVal;
  179. //No validation here
  180. break;
  181. case SPFieldType.ContentTypeId:
  182. SPField contentTypeIdColumnDef = (SPField)columnDef;
  183. SPContentTypeId contentTypeIdVal = (SPContentTypeId)columnVal;
  184. //No validation here
  185. break;
  186. case SPFieldType.Choice:
  187. SPFieldChoice choiceColumnDef = (SPFieldChoice)columnDef;
  188. //No validation here, validation is done within the object
  189. break;
  190. case SPFieldType.MultiChoice:
  191. SPFieldMultiChoice multiChoiceColumnDef = (SPFieldMultiChoice)columnDef;
  192. //No validation here, validation is done within the object
  193. break;
  194. case SPFieldType.Lookup:
  195. SPFieldLookup lookupColumnDef = (SPFieldLookup)columnDef;
  196. //No validation here, validation is done within the object
  197. break;
  198. case SPFieldType.User:
  199. SPFieldUser userColumnDef = (SPFieldUser)columnDef;
  200. //No validation here, validation is done within the object
  201. break;
  202. case SPFieldType.Computed:
  203. SPFieldComputed computedColumnDef = (SPFieldComputed)columnDef;
  204. //No validation here, value could be any type
  205. break;
  206. case SPFieldType.Invalid:
  207. //this could be Html field or somehting else. Can't validate
  208. break;
  209. //for these there is no validation and caset testing is problematic
  210. case SPFieldType.AllDayEvent:
  211. case SPFieldType.Recurrence:
  212. case SPFieldType.CrossProjectLink:
  213. case SPFieldType.Calculated:
  214. case SPFieldType.ThreadIndex:
  215. default:
  216. break;
  217. }
  218. }
  219. public string ConvertSPNameToLookupStr(SPField field)
  220. {
  221. if (thisTypeContentTypeName != null && thisTypeContentTypeName != "") return field.StaticName.Replace("_x0020_", " ");
  222. else return field.InternalName;
  223. }
  224. #endregion
  225. #region Constants
  226. public abstract string thisTypeContentTypeName
  227. {
  228. get;
  229. }
  230. #endregion
  231. #region Internal Fields
  232. protected SPListItem _item;
  233. #endregion
  234. }
  235. }