コード例 #1
0
ファイル: EntryImporter.cs プロジェクト: plntxt/dasblog
        public static int Import(string from, string to)
        {
			if(from == null || from.Length == 0)
			{
				throw new ArgumentException("The source directory is required.");
			}
			else if(to == null || to.Length == 0)
			{
				throw new ArgumentException("The content directory is required.");
			}
			else if(!Directory.Exists(from))
			{
				throw new ArgumentException(
					string.Format("The source directory, '{0}' does not exist.", from));
			}
			else if(!Directory.Exists(to))
			{
				throw new ArgumentException(
					string.Format("The content directory, '{0}' does not exist.", to));
			}

			IBlogDataService dataService = BlogDataServiceFactory.GetService(to,null);

            ArrayList tables = new ArrayList();

            XmlDocument masterDoc = new XmlDocument();
            StringBuilder sb = new StringBuilder();
            sb.Append("<tables>");

            foreach (FileInfo file in new DirectoryInfo(from).GetFiles("*.xml"))
            {
                XmlDocument entry = new XmlDocument();
                entry.Load(file.FullName);
                sb.Append(entry.FirstChild.NextSibling.OuterXml);
            }
            sb.Append("</tables>");

            masterDoc.Load(new StringReader(sb.ToString()));

            foreach (XmlNode node in masterDoc.FirstChild)
            {
                EntryTable table = new EntryTable();
                table.Name = node.Attributes["name"].Value;
                foreach (XmlNode child in node)
                {
                    switch (child.Name)
                    {
                        case "date":
                            table.Data[child.Attributes["name"].Value] = DateTime.Parse(child.Attributes["value"].Value);
                            break;
                        case "boolean":
                            table.Data[child.Attributes["name"].Value] = bool.Parse(child.Attributes["value"].Value);
                            break;
                        case "string":
                            table.Data[child.Attributes["name"].Value] = child.Attributes["value"].Value;
                            break;
                        case "table":
                            if (child.Attributes["name"].Value == "categories")
                            {
                                foreach (XmlNode catNode in child)
                                {
                                    if (catNode.Name == "boolean" && catNode.Attributes["value"].Value == "true")
                                    {
                                        if (table.Data.Contains("categories"))
                                        {
                                            table.Data["categories"] = (string)table.Data["categories"] + ";" + catNode.Attributes["name"].Value;
                                        }
                                        else
                                        {
                                            table.Data["categories"] = catNode.Attributes["name"].Value;
                                        }
                                    }
                                }
                            }
                            break;
                        case "link":
                            table.Data[child.Attributes["name"].Value] = child.Attributes["value"].Value;
                            break;
						case "flNotOnHomePage":
							table.Data[child.Attributes["name"].Value] = child.Attributes["value"].Value;
							break;
                    }
                }
                tables.Add(table);
            }

            foreach (EntryTable table in tables)
            {
                Entry entry = new Entry();
                entry.CreatedUtc = table.When;
                entry.Title = table.Title;
                entry.Link = table.Link;
                entry.Content = table.Text;
                entry.Categories = table.Categories;
                entry.EntryId = table.UniqueId;
				entry.ShowOnFrontPage = !table.NotOnHomePage;
                dataService.SaveEntry( entry );
            }

			Console.WriteLine("{0} entrys were imported", tables.Count);
            return 0;
        }