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; }
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); }
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)); }
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); } } }
internal Wiki GetLatestWiki(WikiName name) { return GetWikiByVerslion(name, this.GetLatestVersion(name)); }
internal void WriteWiki(WikiName name, WikiContent content) { Wiki wiki = new Wiki(); wiki.Name = name; wiki.Content = content; WriteWiki(wiki); }
internal bool IsExist(WikiName name) { var con = ContextFactory.GetNewContext(); var wiki = con.Wikis.SingleOrDefault(w => w.Name == name.Text); return wiki != null; }
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; }