Revision: 172
http://svn.sourceforge.net/nmailserver/?rev=172&view=rev
Author: tmyroadctfig
Date: 2007-03-08 01:46:39 -0800 (Thu, 08 Mar 2007)
Log Message:
-----------
Refactored folder.
Modified Paths:
--------------
NMail/trunk/NMail/DataTypes/Folder.cs
Modified: NMail/trunk/NMail/DataTypes/Folder.cs
===================================================================
--- NMail/trunk/NMail/DataTypes/Folder.cs 2007-03-08 09:45:38 UTC (rev 171)
+++ NMail/trunk/NMail/DataTypes/Folder.cs 2007-03-08 09:46:39 UTC (rev 172)
@@ -27,36 +27,27 @@
public class Folder {
#region Constructors
/// <summary>
+ /// Creates a new folder.
+ /// </summary>
+ public Folder() { }
+
+ /// <summary>
/// Creates a new folder from the given string.
/// </summary>
/// <param name="newFolder">The folder as a string.</param>
public Folder(string newFolder) {
- // TODO: validation / encoding of unicode strings
- this.delimiter = NMailConfiguration.Current.LocalStore.FolderDelimiter;
- this.folder = newFolder.Trim();
-
- removeWildCards();
-
- // Fully qualified folder, need to process out the namespace
- if (this.folder.StartsWith("#")) {
- // Remove the #
- this.folder = this.folder.Remove(0, 1);
-
- if (this.folder.IndexOf(this.delimiter) > 0) {
- // Split the folder and namespace out
- this.nameSpace = this.folder.Substring(0, this.folder.IndexOf(this.delimiter));
- this.folder = this.folder.Remove(0, this.nameSpace.Length + 1);
- } else {
- // Only a namespace given
- throw new ArgumentException("Only a namespace present.");
- }
+ if (newFolder.IndexOf(this.delimiter) > 0) {
+ // Split the folder and namespace out
+ this.nameSpace = newFolder.Substring(0, newFolder.IndexOf(this.delimiter));
+ this.folder = newFolder.Remove(0, this.nameSpace.Length + 1);
} else {
- throw new ArgumentException("No namespace present.");
+ // Only a namespace given
+ throw new ArgumentException("Only a namespace present.");
}
- removeTrailingDelimiters();
- fixFolderName();
+ this.folder = FixAndValidateFolderName(this.folder, this.delimiter);
+ this.nameSpace = FixAndValidateNameSpace(this.nameSpace, this.delimiter);
}
/// <summary>
@@ -65,20 +56,8 @@
/// <param name="newNameSpace">The namespace.</param>
/// <param name="newFolder">The folder as a string.</param>
public Folder(string newNameSpace, string newFolder) {
- // TODO: validation / encoding of unicode strings
-
- this.delimiter = NMailConfiguration.Current.LocalStore.FolderDelimiter;
- this.folder = newFolder.Trim();
- this.nameSpace = newNameSpace.Trim();
-
- // Remove the # if present
- if (this.nameSpace.StartsWith("#")) {
- this.nameSpace = this.nameSpace.Remove(0, 1);
- }
-
- removeWildCards();
- removeTrailingDelimiters();
- fixFolderName();
+ this.folder = FixAndValidateFolderName(newFolder, this.delimiter);
+ this.nameSpace = FixAndValidateFolderName(newNameSpace, this.delimiter);
}
/// <summary>
@@ -91,36 +70,70 @@
this.nameSpace = parent.nameSpace;
this.folder = parent.folder + this.delimiter + childName.Trim();
- removeWildCards();
- removeTrailingDelimiters();
- fixFolderName();
+ this.folder = FixAndValidateFolderName(this.folder, this.delimiter);
+ this.nameSpace = FixAndValidateNameSpace(this.nameSpace, this.delimiter);
}
+ #endregion
- private void removeWildCards() {
+ #region Fix And Validate Folder Name
+ /// <summary>
+ /// Fixes and validates the given folder name.
+ /// </summary>
+ /// <param name="folder">The name to fix and validate.</param>
+ /// <param name="delimiter">The delimiter to use.</param>
+ /// <returns>The fixed folder name.</returns>
+ protected static string FixAndValidateFolderName(string folder, char delimiter) {
+ // TODO: validation / encoding of unicode strings
+
// Remove any wildcards
- if (this.folder.EndsWith("*") || this.folder.EndsWith("%")) {
- this.folder = this.folder.Substring(0, this.folder.Length - 1);
+ if (folder.EndsWith("*") || folder.EndsWith("%")) {
+ folder = folder.Substring(0, folder.Length - 1);
}
- }
- private void removeTrailingDelimiters() {
// Remove a trailing delimiter if present
- if (this.folder.EndsWith(string.Empty + delimiter)) {
- this.folder = this.folder.Remove(this.folder.Length - 1, 1);
+ if (folder.EndsWith(string.Empty + delimiter)) {
+ folder = folder.Remove(folder.Length - 1, 1);
}
- }
- private void fixFolderName() {
// Convert any "INBOX" or "" to "Inbox"
- if (this.folder.ToUpper().StartsWith("INBOX")) {
- this.folder = "Inbox" + this.folder.Substring(5, this.folder.Length - 5);
+ if (folder.ToUpper().StartsWith("INBOX")) {
+ folder = "Inbox" + folder.Substring(5, folder.Length - 5);
}
- if (this.folder.Length == 0) {
- this.folder = "Inbox";
+ if (folder.Length == 0) {
+ folder = "Inbox";
}
+
+ return folder;
}
#endregion
+ #region Fix And Validate Name Space
+ /// <summary>
+ /// Fixes and validates the given namespace.
+ /// </summary>
+ /// <param name="nameSpace">The namespace to fix and validate.</param>
+ /// <param name="delimiter">The delimiter to use.</param>
+ /// <returns>The fixed namespace.</returns>
+ protected static string FixAndValidateNameSpace(string nameSpace, char delimiter) {
+ string result = nameSpace.Trim();
+
+ // Remove the leading # if present
+ if (result.StartsWith("#")) {
+ result = result.Remove(0, 1);
+ }
+
+ if (result.IndexOf('#') != -1) {
+ throw new ArgumentException("Invalid character '#' in namespace.");
+ }
+
+ if (result.IndexOf(delimiter) != -1) {
+ throw new ArgumentException("Delimiter present in namespace.");
+ }
+
+ return result;
+ }
+ #endregion
+
#region Folder Hierarchy
/// <summary>
/// Checks if the given folder is an ancestor of the current folder.
@@ -221,7 +234,9 @@
get {
return this.folder;
}
-
+ set {
+ this.folder = FixAndValidateFolderName(value, this.delimiter);
+ }
}
private string nameSpace;
@@ -233,6 +248,9 @@
get {
return this.nameSpace;
}
+ set {
+ this.nameSpace = FixAndValidateNameSpace(value, this.delimiter);
+ }
}
/// <summary>
@@ -244,7 +262,7 @@
}
}
- private char delimiter;
+ private char delimiter = NMailConfiguration.Current.LocalStore.FolderDelimiter;
/// <summary>
/// The delimiter for subfolders in above or below this folder.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|