Example #1
0
        internal Wiki GetWikiByVerslion(WikiName name, WikiVersion ver)
        {
            Wiki wiki = null;

            using (SqlConnection connection = new SqlConnection())
            {
                connection.ConnectionString = connectionString;

                SqlCommand cmd = connection.CreateCommand();

                cmd.CommandText = "SELECT TOP 1 * FROM [Wiki] WHERE [Name]=@name ORDER BY [Version] DESC";
                cmd.Parameters.AddWithValue("@name", name.Text);

                logger.Info(cmd.CommandText);

                connection.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    wiki = new Wiki();
                    wiki.Name = new WikiName(reader.GetString(1));
                    wiki.Content = new WikiContent(reader.GetString(2));
                    wiki.Version = new WikiVersion(reader.GetInt32(3));
                    wiki.CreatedAt = reader.GetDateTime(4);
                }
            }

            if (wiki == null)
            {

                throw new WikiException("The Wiki not found.");
            }

            return wiki;
        }
Example #2
0
        internal WikiVersion GetLatestVersion(WikiName name)
        {
            if (!this.IsExist(name))
            {
                logger.Debug(String.Format("{0} was not found", name.Text));
                throw new WikiException(String.Format("Wiki {0} was not found", name.Text));
            }

            WikiVersion version = null;

            using (SqlConnection connection = new SqlConnection())
            {
                connection.ConnectionString = connectionString;
                connection.Open();
                SqlCommand cmd = connection.CreateCommand();

                cmd.CommandText = "SELECT TOP 1 * FROM [Wiki] WHERE name=@name ORDER BY version DESC";

                cmd.Parameters.AddWithValue("@name", name.Text);

                logger.Info(cmd.CommandText);

                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    version = new WikiVersion(reader.GetInt32(3));
                }
            }

            return version;
        }
        public WikiPage(WikiExport wiki, XmlWikiPage source)
        {
            this.wiki = wiki;
            this.source = source;
            displayName = source.Title;
            wikiName = WikiName.FromString(source.FullName);

            Url = string.Format("http://www.pathfinder-fr.org/Wiki/Pathfinder-RPG.{0}.ashx", Name);
        }
Example #4
0
        public void WikiNameEqualsTest()
        {
            string s = Guid.NewGuid().ToString();

            WikiName n1 = new WikiName(s);
            WikiName n2 = new WikiName(s);
            Assert.IsTrue(n1.Equals(n2));
            Assert.IsTrue(n2.Equals(n1));

            WikiName n3 = new WikiName(Guid.NewGuid().ToString());
            Assert.IsFalse(n1.Equals(n3));
        }
Example #5
0
        public void WikiNameTextLengthOverflowExceptionTest()
        {
            Int32 total = 101;
            StringBuilder testName = new StringBuilder();
            for (int i = 0; i < total; i++)
            {
                testName.Append('A');
            }

            WikiName wikiName = new WikiName();
            wikiName.Text = testName.ToString();

            wikiName = new WikiName(testName.ToString());
        }
        public WikiPage FindPage(WikiName name)
        {
            WikiPage page;
            ICollection<WikiName> links;

            int i = 0;
            while (i < 10)
            {
                if (!pages.TryGet(name, out page))
                {
                    if (!this.links.TryGetValue(name, out links))
                    {
                        // Pas de lien
                        return null;
                    }

                    if (links.Count != 1)
                    {
                        // S'il s'agit d'une redirection, il n'y aura qu'un seul lien
                        // Sinon on ne fait rien
                        return null;
                    }

                    var linkName = links.ElementAt(0);

                    if (name == linkName)
                    {
                        // Boucle de redirection
                        return null;
                    }

                    name = linkName;
                }
                else
                {
                    return page;
                }

                i++;
            }

            return null;
        }
            private FeatPrerequisite CreateInstance(string markup, WikiExport export)
            {
                var lower = markup.ToLowerInvariant();

                Match match;

                if (IsMatch(lower, AttributePattern, out match))
                {
                    return AsAttribute(match);
                }

                if (IsMatch(lower, AttributeShortPattern, out match))
                {
                    return AsAttribute(match);
                }

                if (IsMatch(lower, MarkupUtil.LinkOnlyPattern, out match))
                {
                    var target = MarkupUtil.ExtractLinkTargetName(match);

                    var targetName = new WikiName(WikiName.DefaultNamespace, target);

                    var targetPage = export.FindPage(targetName);
                    if (targetPage == null)
                    {
                        log.Warning("{0}: Impossible de trouver la page nommée '{1}' désignée par le lien '{2}'", page.Title, target, markup);
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Other};
                    }

                    string subValue;
                    int number;
                    FeatPrerequisiteType targetType = ResolveTypeFromPageCategories(targetPage, out subValue, out number);

                    if (targetType == FeatPrerequisiteType.Other)
                    {
                        log.Warning(
                            "{3}: Impossible de déterminer le type de lien pour la page '{0}' désignée par le lien '{1}' avec les catégories '{2}'",
                            targetPage.Title,
                            markup,
                            string.Join(", ", targetPage.Categories.Select(c => c.Name)),
                            page.Title
                            );

                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Other};
                    }

                    return new FeatPrerequisite
                    {
                        Type = targetType,
                        Value = WikiName.IdFromTitle(target),
                        SubValue = subValue,
                        Number = number
                    };
                }

                if (IsMatch(markup, BbaPattern, out match))
                {
                    return new FeatPrerequisite
                    {
                        Type = FeatPrerequisiteType.BBA,
                        Number = int.Parse(match.Groups["Value"].Value)
                    };
                }

                if (IsMatch(markup, SpellCasterLevelPatterns, out match))
                {
                    return new FeatPrerequisite
                    {
                        Type = FeatPrerequisiteType.SpellcasterLevel,
                        Number = int.Parse(match.Groups["Level"].Value)
                    };
                }

                if (IsMatch(markup, SkillRankLevelPatterns, out match))
                {
                    return new FeatPrerequisite
                    {
                        Type = FeatPrerequisiteType.SkillRank,
                        Value = WikiName.IdFromTitle(match.Groups["Skill"].Value),
                        SubValue = WikiName.IdFromTitle(match.Groups["Speciality"].Value).EmptyAsNull(),
                        Number = int.Parse(match.Groups["Ranks"].Value)
                    };
                }

                if (IsMatch(markup, ClassLevelPatterns, out match))
                {
                    return new FeatPrerequisite
                    {
                        Type = FeatPrerequisiteType.ClassLevel,
                        Value = WikiName.IdFromTitle(match.Groups["Class"].Value),
                        Number = int.Parse(match.Groups["Level"].Value)
                    };
                }

                if (IsMatch(markup, ClassPowerPatterns, out match))
                {
                    return new FeatPrerequisite
                    {
                        Type = FeatPrerequisiteType.Other,
                        OtherType = FeatPrerequisiteOtherTypes.ClassPower,
                        Value = WikiName.IdFromTitle(match.Groups["Name"].Value)
                    };
                }

                if (IsMatch(markup, SpellCastPatterns, out match))
                {
                    return new FeatPrerequisite
                    {
                        Type = FeatPrerequisiteType.SpellCast,
                        Value = WikiName.IdFromTitle(MarkupUtil.ExtractLinkTargetName(match))
                    };
                }

                if (otherTypes.Contains(markup))
                {
                    return new FeatPrerequisite {Type = FeatPrerequisiteType.Other};
                }

                switch (lower)
                {
                    case "pouvoir de classe ancrage":
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Other, OtherType = FeatPrerequisiteOtherTypes.ClassPower, Value = WikiName.IdFromTitle("Ancrage")};

                    case "pouvoir de classe [[oracle#mystere|mystère]]":
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Other, OtherType = FeatPrerequisiteOtherTypes.ClassPower, Value = WikiName.IdFromTitle("Mystère")};

                    case "[[maniement dune arme exotique|maniement d'une arme exotique]] (filet)":
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Other, OtherType = FeatPrerequisiteOtherTypes.ExoticWeaponProficiency, Value = WikiName.IdFromTitle("filet")};

                    case "[[arme de prédilection]] pour l’arme choisie":
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Feat, Value = WikiName.IdFromTitle("arme de prédilection")};

                    case "[[arme de prédilection]] (bâton)":
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Feat, Value = WikiName.IdFromTitle("arme de prédilection"), SubValue = WikiName.IdFromTitle("bâton")};

                    case "aptitude de classe de [[représentation bardique]]":
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Other, OtherType = FeatPrerequisiteOtherTypes.ClassPower, Value = WikiName.IdFromTitle("représentation bardique")};

                    case "capacité de classe de [[canalisation|canalisation d’énergie]]":
                    case "capacité de classe permettant de [[canalisation|canaliser de l’énergie négative]]":
                    case "capacité de [[classe]] à [[canalisation|canaliser de l’énergie]]":
                    case "capacité de [[classe]] permettant de [[canalisation|canaliser de l’énergie]]":
                    case "Capacité de classe permettant de canaliser de l’énergie":
                        return new FeatPrerequisite {Type = FeatPrerequisiteType.Other, OtherType = FeatPrerequisiteOtherTypes.ClassPower, Value = WikiName.IdFromTitle("canalisation")};
                }

                log.Warning(string.Format("{1}: Condition '{0}' non reconnue", markup, page.Title));
                return new FeatPrerequisite {Type = FeatPrerequisiteType.Other};
            }
        private void LoadPage(XmlSerializer serializer, string subDir, string fileName)
        {
            // Désérialisation page
            XmlWikiPage xmlPage;
            using (var reader = new StreamReader(fileName))
            {
                xmlPage = (XmlWikiPage) serializer.Deserialize(reader);
                xmlPage.FileName = fileName;
            }

            if (string.IsNullOrWhiteSpace(xmlPage.FullName))
            {
                throw new ApplicationException(string.Format("La page du fichier {0} ne contient pas de nom complet", fileName));
            }

            var name = new WikiName(xmlPage.FullName);

            // Chargement catégories
            foreach (var categoryName in xmlPage.Categories)
            {
                var category = WikiName.FromString(categoryName);
                if (!categories.ContainsKey(category))
                {
                    categories.Add(category, category);
                }
            }

            // Chargement page
            var page = new WikiPage(this, xmlPage);
            pages.Add(name, page);

            // Chargement liens entrants
            ICollection<WikiName> targets;
            foreach (var linkName in xmlPage.InLinksNames)
            {
                if (!links.TryGetValue(linkName, out targets))
                {
                    targets = new HashSet<WikiName>();
                    links[linkName] = targets;
                }

                if (!targets.Contains(name))
                {
                    targets.Add(name);
                }
            }

            // Chargement liens sortants
            if (!links.TryGetValue(name, out targets))
            {
                targets = new HashSet<WikiName>();
                links[name] = targets;
            }

            foreach (var linkName in xmlPage.OutLinksNames)
            {
                if (!targets.Contains(name))
                {
                    targets.Add(name);
                }
            }
        }
Example #9
0
 internal Wiki GetLatestWiki(WikiName name)
 {
     return GetWikiByVerslion(name, this.GetLatestVersion(name));
 }
Example #10
0
        internal void WriteWiki(WikiName name, WikiContent content)
        {
            Wiki wiki = new Wiki();
            wiki.Name = name;
            wiki.Content = content;

            WriteWiki(wiki);
        }
Example #11
0
 internal bool IsExist(WikiName name)
 {
     var con = ContextFactory.GetNewContext();
     var wiki = con.Wikis.SingleOrDefault(w => w.Name == name.Text);
     return wiki != null;
 }
Example #12
0
        internal List<Wiki> GetWikisByName(WikiName name)
        {
            List<Wiki> list = new List<Wiki>();
            var con = ContextFactory.GetNewContext();
            list = (from wiki in con.Wikis
                    where wiki.Name == name.Text
                    select new Wiki()
                    {
                        Content = new WikiContent(wiki.Content),
                        Name = new WikiName(wiki.Name),
                        Version = new WikiVersion(wiki.Version),
                        CreatedAt = wiki.CreatedAt
                    }).ToList();
            return list;

            using (SqlConnection connection = new SqlConnection())
            {
                connection.ConnectionString = connectionString;

                SqlCommand cmd = connection.CreateCommand();

                cmd.CommandText = "SELECT * FROM [Wiki] WHERE name='" + name.Text + "'";

                logger.Info(cmd.CommandText);

                connection.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                try
                {
                    while (reader.Read())
                    {
                        Wiki wiki = new Wiki();
                        WikiName n = new WikiName(reader.GetString(1));
                        WikiContent c = new WikiContent(reader.GetString(2));
                        WikiVersion v = new WikiVersion(reader.GetInt32(3));
                        wiki.Name = n;
                        wiki.Content = c;
                        wiki.Version = v;
                        wiki.CreatedAt = reader.GetDateTime(4);

                        list.Add(wiki);
                    }

                }
                finally
                {
                    if (!reader.IsClosed)
                    {
                        reader.Close();
                    }
                }

            }

            return list;
        }
 public bool IsRedirection(out WikiName target)
 {
     var raw = Raw.Trim();
     if (raw.StartsWith(">>> "))
     {
         target = WikiName.FromString(raw.Substring(4));
         return true;
     }
     target = null;
     return false;
 }