示例#1
0
        /// <summary>
        /// Parse input stream into contacts while collecting
        /// parsing errors.
        /// </summary>
        /// <returns></returns>
        public List<Logic.Entities.Contact> Parse()
        {
            int lineNumber = 0;
            using (StreamReader reader = new StreamReader(stream))
            {
                string line;
                char separator = ';';
                while ((line = reader.ReadLine()) != null)
                {
                    ++lineNumber;
                    line = line.Trim();
                    // Choose field separator
                    if (lineNumber == 1)
                    {
                        if (line.IndexOf(';') == -1)
                        {
                            separator = ','; // Common in Scandinavian countries
                        }
                        string[] titles = line.Split(separator);
                        if (titles.Length != 5)
                        {
                            errors.Add(new ParsingError(lineNumber, line,
                                String.Format("Expected 5 title fields, got {0}, stopping",
                                    titles.Length)));
                            break;
                        }
                    }
                    else
                    {
                        if (line.Length == 0) // Ignore empty lines
                        {
                            continue;
                        }
                        string[] fields = line.Split(separator);
                        if (fields.Length != 5)
                        {
                            errors.Add(new ParsingError(lineNumber, line,
                                String.Format("Expected 5 fields, got {0}", fields.Length)));
                            continue;
                        }
                        for (int i = 0; i < fields.Length; i++)
                        {
                            fields[i] = fields[i].Trim();
                        }
                        // Fill in contact
                        Logic.Entities.Contact contact = new Logic.Entities.Contact();
                        contact.Title = fields[0];
                        contact.FirstName = fields[1];
                        contact.LastName = fields[2];
                        contact.Email = fields[3];
                        contact.MobilePhone = fields[4];
                        contacts.Add(contact);
                    }
                    // No title row
                    if (lineNumber == 0)
                    {
                        errors.Add(new ParsingError(1, string.Empty,
                            "No data rows in uploaded file"));
                    }
                }

            }
            return contacts;
        }
示例#2
0
        private bool ValidateContacts(out IList<Logic.Entities.Contact> list)
        {
            bool allValid = true;
            list = new List<Logic.Entities.Contact>();
            foreach (RepeaterItem item in rptrContacts.Items)
            {
                TextBox tbTitle = (TextBox)item.FindControl("tbTitle");
                TextBox tbFirstName = (TextBox)item.FindControl("tbFirstName");
                TextBox tbLastName = (TextBox)item.FindControl("tbLastName");
                TextBox tbEmail = (TextBox)item.FindControl("tbEmail");
                TextBox tbPhone = (TextBox)item.FindControl("tbPhone");

                Logic.Entities.Contact contact = new Logic.Entities.Contact();
                contact.Title = tbTitle.Text.Trim();
                contact.FirstName = tbFirstName.Text.Trim();
                contact.LastName = tbLastName.Text.Trim();
                contact.Email = tbEmail.Text.Trim();
                contact.MobilePhone = tbPhone.Text.Trim();

                // Validate
                List<string> validationMessages = new List<string>();
                if (contact.FirstName == string.Empty)
                {
                    validationMessages.Add("First name is required.");
                }
                if (contact.LastName == string.Empty)
                {
                    validationMessages.Add("Second name is required.");
                }
                if (contact.Email == string.Empty)
                {
                    validationMessages.Add("Email is required.");
                }
                else if (!patternEmail.Match(contact.Email).Success)
                {
                    validationMessages.Add("Email has invalid format.");
                }
                if (contact.MobilePhone != string.Empty &&
                    !patternPhone.Match(contact.MobilePhone).Success)
                {
                    validationMessages.Add("Phone must be composed of digits and other special characters.");
                }
                if (validationMessages.Count > 0)
                {
                    HtmlTableRow trMessages = (HtmlTableRow)item.FindControl("trMessages");
                    HtmlContainerControl pMessage = (HtmlContainerControl)item.FindControl("pMessage");
                    allValid = false;
                    trMessages.Visible = true;
                    pMessage.InnerHtml = string.Join("<br/>", validationMessages.ToArray());
                }
                else
                {
                    list.Add(contact);
                }
            }
            return allValid;
        }