diff --git a/.github/BUILD.md b/.github/BUILD.md index 2d3de57b1b0..f406553c1af 100644 --- a/.github/BUILD.md +++ b/.github/BUILD.md @@ -27,12 +27,12 @@ If you wish to make changes to that project, please keep this in mind. DNN uses the following technologies to create a working build: 1. MSBuild. This is Microsoft Visual Studio's built in mechanism to compile C#. It can also run auxiliary tasks (like packaging the included modules). These tasks are specified in `.build` and `.targets` files and can leverage .net assemblies to do its magic. Almost all central MSBuild code is in the `Build/BuildScripts` folder. Main folder location settings can be found in the `DNN_Platform.build` file in the root of the repository which can be overridden using a `DNN_Platform.local.build` file at the same location. -2. Webpack. The "Admin Experience" (which is the project that contains the UI for managing DNN) contains a number of client-side Javascript projects (mostly React projects). These are built using Webpack. Webpack is triggered in the main build process in the `Build/BuildScripts/AEModule.build` script. But it can be run on individual projects if you need to. +2. Rsbuild. The "Admin Experience" (which is the project that contains the UI for managing DNN) contains a number of client-side Javascript projects (mostly React projects). These are built using Rsbuild. Rsbuild is triggered in the main build process in the `Build/BuildScripts/AEModule.build` script. But it can be run on individual projects if you need to. 3. [Cake Build](https://cakebuild.net/). This uses C# code to run build tasks. We use Cake for orchestrating the entire build process (e.g. packaging of the platform) and for auxiliary tasks like creating a dev site. All Cake scripts are found in the `Build/Cake` folder. After Cake first runs it bootstraps itself and creates the `tools` folder where the various assemblies can be found. Note the scripts use the [DNN Cake Utils](https://github.com/DNNCommunity/Dnn.CakeUtils) assembly to do the heavy lifting. ## Build to create packages -This process uses Cake. Open Powershell at the root of the repository folder and enter: +This process uses Cake. Open PowerShell at the root of the repository folder and enter: ``` .\build.ps1 @@ -115,7 +115,7 @@ To build the .net projects to the right location, you'll need to create your ove Once you've created this file every time you click "rebuild" in Visual Studio on a project (or the solution) you'll see the content change in your dev site. **Note**: You may have to restart Visual Studio for this new build file to take effect. -For the Webpack projects it is set up to read from the `settings.local.json` file and use the `WebsitePath` to copy generated js files to their right place. +For the Rsbuild projects it is set up to read from the `settings.local.json` file and use the `WebsitePath` to copy generated js files to their right place. ## Build React Projects diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 20ed92b9bcc..775f90d0a38 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -72,7 +72,7 @@ body: **NOTE:** _If your version is not listed, please upgrade to the latest version. If you cannot upgrade at this time, please open a [Discussion](https://github.com/dnnsoftware/Dnn.Platform/discussions) instead._ multiple: true options: - - 10.2.3 (latest release) + - 10.3.0 (latest release) - develop build (unreleased) validations: required: true diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index cb68a4f6f31..cc605128899 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -1,4 +1,4 @@ -name: "Scorecard supply-chain security" +name: "Scorecard supply-chain security" on: # For Branch-Protection check. Only the default branch is supported. See # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection @@ -56,6 +56,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard (optional). # Commenting out will disable upload of results to your repo's Code Scanning dashboard - name: "Upload to code-scanning" - uses: "github/codeql-action/upload-sarif@b1bff81932f5cdfc8695c7752dcee935dcd061c8" # v4.33.0 + uses: "github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13" # v4.35.1 with: sarif_file: "results.sarif" diff --git a/.gitignore b/.gitignore index 4a5dea9ff13..0f968f6a3fa 100644 --- a/.gitignore +++ b/.gitignore @@ -85,6 +85,9 @@ UpgradeLog*.XML # Node node_modules/ +# AI Assistants +.cursor/ + ############ ## DNN ############ @@ -148,10 +151,3 @@ yarn-error.log /DotNetNuke.Internal.SourceGenerators/bin/ /DNN Platform/Tests/DotNetNuke.Tests.SourceGenerators/Snapshots/*.received.* -/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Pages/scripts/bundles/ -/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Roles/scripts/bundles/ -/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Prompt/css/Prompt.css -/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Roles/css/Roles.css -/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Security/css/Security.css -/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Seo/css/Seo.css -/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/css/Servers.css diff --git a/Build/BuildScripts/AEPackage.targets b/Build/BuildScripts/AEPackage.targets index 92ce88234f9..9434e04d6b1 100644 --- a/Build/BuildScripts/AEPackage.targets +++ b/Build/BuildScripts/AEPackage.targets @@ -1,7 +1,7 @@ - True + True diff --git a/Build/BuildScripts/Package.targets b/Build/BuildScripts/Package.targets index f541cce89c3..2103cb2e5c4 100644 --- a/Build/BuildScripts/Package.targets +++ b/Build/BuildScripts/Package.targets @@ -2,7 +2,6 @@ $(BuildScriptsPath)\DotNetNuke.MSBuild.Tasks.dll - $(BuildScriptsPath)\Yahoo.Yui.Compressor.MsBuild.dll @@ -35,8 +34,6 @@ - - - + - + @@ -74,37 +71,14 @@ - - + - <_Step2FilesToZip Include="$(MSBuildProjectDirectory)\Package\Resources\**\*" /> - - - - <_CSSFilesToCompress Include="$(MSBuildProjectDirectory)\*\*.css;$(MSBuildProjectDirectory)\*\*\*.css;$(MSBuildProjectDirectory)\*\*\*\*.css;$(MSBuildProjectDirectory)\*\*\*\*\*.css;" Exclude="Package\**\*;**\node_modules\**;**\WebApps\**" /> - - - - - diff --git a/Build/BuildScripts/Yahoo.Yui.Compressor.MsBuild.dll b/Build/BuildScripts/Yahoo.Yui.Compressor.MsBuild.dll deleted file mode 100644 index 7f73ac31c0d..00000000000 Binary files a/Build/BuildScripts/Yahoo.Yui.Compressor.MsBuild.dll and /dev/null differ diff --git a/Build/BuildScripts/Yahoo.Yui.Compressor.dll b/Build/BuildScripts/Yahoo.Yui.Compressor.dll deleted file mode 100644 index e8c5faa0c28..00000000000 Binary files a/Build/BuildScripts/Yahoo.Yui.Compressor.dll and /dev/null differ diff --git a/Build/Context.cs b/Build/Context.cs index 6090f98f76f..dc652f4a778 100644 --- a/Build/Context.cs +++ b/Build/Context.cs @@ -4,9 +4,11 @@ namespace DotNetNuke.Build { using System; + using System.Globalization; using System.IO; using Cake.Common; + using Cake.Common.Build; using Cake.Common.Diagnostics; using Cake.Common.IO; using Cake.Common.IO.Paths; @@ -63,7 +65,11 @@ public Context(ICakeContext context) this.Settings = LoadSettings(context, settingsFile); this.WriteSettings(context, settingsFile); - this.BuildId = context.EnvironmentVariable("BUILD_BUILDID") ?? "0"; + this.BuildId = context.AzurePipelines().IsRunningOnAzurePipelines + ? context.AzurePipelines().Environment.Build.Id.ToString(CultureInfo.InvariantCulture) + : context.GitHubActions().IsRunningOnGitHubActions + ? context.GitHubActions().Environment.Workflow.RunId + : "0"; context.Information($"BuildId: {this.BuildId}"); this.BuildNumber = string.Empty; this.ProductVersion = string.Empty; diff --git a/Build/Symbols/DotNetNuke_Symbols.dnn b/Build/Symbols/DotNetNuke_Symbols.dnn index 03c6f248e4d..ba97d2ea412 100644 --- a/Build/Symbols/DotNetNuke_Symbols.dnn +++ b/Build/Symbols/DotNetNuke_Symbols.dnn @@ -1,6 +1,6 @@  - + DNN Platform Symbols This package contains Debug Symbols and Intellisense files for DNN Platform. diff --git a/Build/Tasks/CopyWebConfig.cs b/Build/Tasks/CopyWebConfig.cs deleted file mode 100644 index aaecdaafe65..00000000000 --- a/Build/Tasks/CopyWebConfig.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information -namespace DotNetNuke.Build.Tasks -{ - using System; - using System.Linq; - - using Cake.Common.IO; - using Cake.Frosting; - - /// A cake task to copy the release.config to the web.config. - public sealed class CopyWebConfig : FrostingTask - { - /// - public override void Run(Context context) - { - context.CopyFile(context.WebsiteFolder + "release.config", context.WebsiteFolder + "web.config"); - } - } -} diff --git a/Build/Tasks/CreateGitHubPullRequest.cs b/Build/Tasks/CreateGitHubPullRequest.cs index efbb42d1804..4f07dfddddf 100644 --- a/Build/Tasks/CreateGitHubPullRequest.cs +++ b/Build/Tasks/CreateGitHubPullRequest.cs @@ -14,6 +14,7 @@ namespace DotNetNuke.Build.Tasks using System.Text.RegularExpressions; using Cake.Common; + using Cake.Common.Build; using Cake.Common.Diagnostics; using Cake.Core; using Cake.Core.IO; @@ -61,7 +62,11 @@ public override void Run(Context context) return; } - var sourceBranch = context.EnvironmentVariable("BUILD_SOURCEBRANCH") ?? string.Empty; + var sourceBranch = context.AzurePipelines().IsRunningOnAzurePipelines + ? context.AzurePipelines().Environment.Repository.SourceBranch + : context.GitHubActions().IsRunningOnGitHubActions + ? context.GitHubActions().Environment.Workflow.Ref + : string.Empty; context.Information("CreateGitHubPullRequest: BUILD_SOURCEBRANCH is '{0}'.", sourceBranch); if (!IsTargetedBranch(sourceBranch)) { @@ -78,8 +83,11 @@ public override void Run(Context context) } // owner/repo – e.g. "dnnsoftware/Dnn.Platform" - var repoSlug = context.EnvironmentVariable("BUILD_REPOSITORY_NAME") - ?? throw new CakeException("BUILD_REPOSITORY_NAME environment variable is not set."); + var repoSlug = context.AzurePipelines().IsRunningOnAzurePipelines + ? context.AzurePipelines().Environment.Repository.RepoName + : context.GitHubActions().IsRunningOnGitHubActions + ? context.GitHubActions().Environment.Workflow.Repository + : throw new CakeException("BUILD_REPOSITORY_NAME environment variable is not set."); var parts = repoSlug.Split('/'); if (parts.Length != 2) diff --git a/Build/Tasks/OtherPackages.cs b/Build/Tasks/OtherPackages.cs index e77d8d93a8e..f851751d297 100644 --- a/Build/Tasks/OtherPackages.cs +++ b/Build/Tasks/OtherPackages.cs @@ -27,6 +27,7 @@ namespace DotNetNuke.Build.Tasks [IsDependentOn(typeof(PackageSharpZipLib))] [IsDependentOn(typeof(PackageMicrosoftExtensionsDependencyInjection))] [IsDependentOn(typeof(PackageMicrosoftWebInfrastructure))] + [IsDependentOn(typeof(PackageMicrosoftCodeDomProvidersDotNetCompilerPlatform))] public sealed class OtherPackages : FrostingTask { private static readonly string[] IncludeAll = ["**/*",]; diff --git a/Build/Tasks/PackageAspNetMvc.cs b/Build/Tasks/PackageAspNetMvc.cs index fc334c5ff6a..6cb8a4b48c5 100644 --- a/Build/Tasks/PackageAspNetMvc.cs +++ b/Build/Tasks/PackageAspNetMvc.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the ASP.NET MVC package. -public sealed class PackageAspNetMvc : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageAspNetMvc() - : base("AspNetMvc", "System.Web.Mvc.dll", "Microsoft.AspNetMvc") - { - } -} +public sealed class PackageAspNetMvc() + : PackageComponentTaskBase("AspNetMvc", "System.Web.Mvc.dll", "Microsoft.AspNetMvc"); diff --git a/Build/Tasks/PackageAspNetWebApi.cs b/Build/Tasks/PackageAspNetWebApi.cs index 04be9c488fd..39f8833a4ba 100644 --- a/Build/Tasks/PackageAspNetWebApi.cs +++ b/Build/Tasks/PackageAspNetWebApi.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the ASP.NET Web API package. -public sealed class PackageAspNetWebApi : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageAspNetWebApi() - : base("AspNetWebApi", "System.Web.Http.dll", "Microsoft.AspNetWebApi") - { - } -} +public sealed class PackageAspNetWebApi() + : PackageComponentTaskBase("AspNetWebApi", "System.Web.Http.dll", "Microsoft.AspNetWebApi"); diff --git a/Build/Tasks/PackageAspNetWebPages.cs b/Build/Tasks/PackageAspNetWebPages.cs index e36d499330a..82aa69a5551 100644 --- a/Build/Tasks/PackageAspNetWebPages.cs +++ b/Build/Tasks/PackageAspNetWebPages.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the ASP.NET Web Pages package. -public sealed class PackageAspNetWebPages : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageAspNetWebPages() - : base("AspNetWebPages", "System.Web.WebPages.dll", "Microsoft.AspNetWebPages") - { - } -} +public sealed class PackageAspNetWebPages() + : PackageComponentTaskBase("AspNetWebPages", "System.Web.WebPages.dll", "Microsoft.AspNetWebPages"); diff --git a/Build/Tasks/PackageComponentTask.cs b/Build/Tasks/PackageComponentTaskBase.cs similarity index 70% rename from Build/Tasks/PackageComponentTask.cs rename to Build/Tasks/PackageComponentTaskBase.cs index 1424a52fd61..69efef6bf67 100644 --- a/Build/Tasks/PackageComponentTask.cs +++ b/Build/Tasks/PackageComponentTaskBase.cs @@ -1,96 +1,121 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Build.Tasks; - -using System.IO; -using System.Linq; -using System.Xml; - -using Cake.Common.Diagnostics; -using Cake.Common.IO; -using Cake.Core.IO; -using Cake.Frosting; -using Dnn.CakeUtils; - -/// Provides the base functionality for packaging a folder inside Components. -public abstract class PackageComponentTask : FrostingTask -{ - private static readonly string[] AllFiles = ["*",]; - private static readonly string[] ManifestFiles = ["*.dnn",]; - - /// Initializes a new instance of the class. - /// The name of the component. - /// The name of the primary assembly. - /// The name of the folder in DNN Platform/Components/. - protected PackageComponentTask(string componentName, FilePath primaryAssemblyName = null, DirectoryPath componentFolderName = null) - { - this.ComponentName = componentName; - this.ComponentFolderName = componentFolderName ?? componentName; - this.PrimaryAssemblyName = primaryAssemblyName ?? $"{componentName}.dll"; - } - - /// Gets the name of the component. - public string ComponentName { get; } - - /// Gets the name of the folder in DNN Platform/Components/ where the component files are. - public DirectoryPath ComponentFolderName { get; } - - /// Gets the name of the primary assembly. - public FilePath PrimaryAssemblyName { get; } - - /// - public override void Run(Context context) - { - var binDir = context.WebsiteDir.Path.Combine("bin"); - var mainAssemblyPath = binDir.CombineWithFilePath(this.PrimaryAssemblyName); - var packageVersion = context.GetAssemblyFileVersion(mainAssemblyPath); - - var packageZip = context.WebsiteDir.Path.CombineWithFilePath($"Install/Library/{this.ComponentName}_{packageVersion}_Install.zip"); - var packageDir = context.Directory($"DNN Platform/Components/{this.ComponentFolderName}"); - - context.Information($"Creating {packageZip}"); - context.Zip( - packageDir.ToString(), - packageZip, - context.GetFilesByPatterns(packageDir, AllFiles, ManifestFiles)); - - var manifestPath = context.GetFiles(packageDir.Path.CombineWithFilePath("*.dnn").ToString()).Single(); - context.Information($"Reading manifest from {manifestPath}"); - var manifest = new XmlDocument(); - using (var manifestReader = XmlReader.Create(new StringReader(context.ReadFile(manifestPath)), new XmlReaderSettings { XmlResolver = null, })) - { - manifest.Load(manifestReader); - } - - var assemblies = - from XmlNode assemblyNode in manifest.SelectNodes("//assembly") - from XmlNode childNode in assemblyNode.ChildNodes - where childNode.LocalName.Equals("name", System.StringComparison.Ordinal) - select childNode; - - foreach (var assemblyNameNode in assemblies) - { - var assemblyPath = binDir.CombineWithFilePath(assemblyNameNode.InnerText); - context.Information($"Adding {assemblyPath} to {packageZip}"); - context.AddFilesToZip( - packageZip, - context.MakeAbsolute(context.WebsiteDir.Path), - context.GetFiles(assemblyPath.ToString()), - append: true); - - var versionNode = assemblyNameNode.ParentNode?.ChildNodes.Cast() - .SingleOrDefault(childNode => childNode.LocalName.Equals("version", System.StringComparison.Ordinal)); - if (versionNode != null) - { - versionNode.InnerText = context.GetAssemblyFileVersion(assemblyPath); - context.Information($"Set {assemblyPath} version to {versionNode.InnerText}"); - } - } - - manifest.SelectSingleNode("//package[@version]").Attributes["version"].Value = packageVersion; - - context.AddXmlFileToZip(packageZip, manifest, manifestPath.GetFilename().ToString(), append: true); - } -} +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Build.Tasks; + +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using System.Xml; + +using Cake.Common.Diagnostics; +using Cake.Common.IO; +using Cake.Core.IO; +using Cake.Frosting; +using Dnn.CakeUtils; + +/// Provides the base functionality for packaging a folder inside Components. +public abstract class PackageComponentTaskBase : AsyncFrostingTask +{ + private static readonly string[] AllFiles = ["*",]; + private static readonly string[] ManifestFiles = ["*.dnn",]; + + /// Initializes a new instance of the class. + /// The name of the component. + /// The name of the primary assembly. + /// The name of the folder in DNN Platform/Components/. + protected PackageComponentTaskBase(string componentName, FilePath primaryAssemblyName = null, DirectoryPath componentFolderName = null) + { + this.ComponentName = componentName; + this.ComponentFolderName = componentFolderName ?? componentName; + this.PrimaryAssemblyName = primaryAssemblyName ?? $"{componentName}.dll"; + } + + /// Gets the name of the component. + public string ComponentName { get; } + + /// Gets the name of the folder in DNN Platform/Components/ where the component files are. + public DirectoryPath ComponentFolderName { get; } + + /// Gets the name of the primary assembly. + public FilePath PrimaryAssemblyName { get; } + + /// + public override Task RunAsync(Context context) + { + var binDir = GetBinDir(context); + var packageZip = this.GetPackageZipPath(context, binDir); + var packageDir = context.Directory($"DNN Platform/Components/{this.ComponentFolderName}"); + + context.Information($"Creating {packageZip}"); + context.Zip( + packageDir.ToString(), + packageZip, + context.GetFilesByPatterns(packageDir, AllFiles, ManifestFiles)); + + var manifestPath = context.GetFiles(packageDir.Path.CombineWithFilePath("*.dnn").ToString()).Single(); + context.Information($"Reading manifest from {manifestPath}"); + var manifest = new XmlDocument(); + using (var manifestReader = XmlReader.Create(new StringReader(context.ReadFile(manifestPath)), new XmlReaderSettings { XmlResolver = null, })) + { + manifest.Load(manifestReader); + } + + var assemblies = + from XmlNode assemblyNode in manifest.SelectNodes("//assembly") + where assemblyNode.Attributes?["action"]?.Value != "UnRegister" + from XmlNode childNode in assemblyNode.ChildNodes + where childNode.LocalName.Equals("name", System.StringComparison.Ordinal) + select childNode; + + foreach (var assemblyNameNode in assemblies) + { + var assemblyPath = binDir.CombineWithFilePath(assemblyNameNode.InnerText); + context.Information($"Adding {assemblyPath} to {packageZip}"); + context.AddFilesToZip( + packageZip, + context.MakeAbsolute(context.WebsiteDir.Path), + context.GetFiles(assemblyPath.ToString()), + append: true); + + var versionNode = assemblyNameNode.ParentNode?.ChildNodes.Cast() + .SingleOrDefault(childNode => childNode.LocalName.Equals("version", System.StringComparison.Ordinal)); + if (versionNode != null) + { + versionNode.InnerText = context.GetAssemblyFileVersion(assemblyPath); + context.Information($"Set {assemblyPath} version to {versionNode.InnerText}"); + } + } + + manifest.SelectSingleNode("//package[@version]").Attributes["version"].Value = this.GetPackageVersion(context, binDir); + + context.AddXmlFileToZip(packageZip, manifest, manifestPath.GetFilename().ToString(), append: true); + + return Task.CompletedTask; + } + + /// Get the path to the bin directory, from which to get DLLs. + /// The context. + /// The path. + protected static DirectoryPath GetBinDir(Context context) + { + return context.WebsiteDir.Path.Combine("bin"); + } + + /// Gets the path to the zip file generated by this task. + /// The context. + /// The path to the bin directory (from ). + /// The file path. + protected FilePath GetPackageZipPath(Context context, DirectoryPath binDir) + { + return context.WebsiteDir.Path.CombineWithFilePath($"Install/Library/{this.ComponentName}_{this.GetPackageVersion(context, binDir)}_Install.zip"); + } + + private string GetPackageVersion(Context context, DirectoryPath binDir) + { + var mainAssemblyPath = binDir.CombineWithFilePath(this.PrimaryAssemblyName); + var packageVersion = context.GetAssemblyFileVersion(mainAssemblyPath); + return packageVersion; + } +} diff --git a/Build/Tasks/PackageHtmlSanitizer.cs b/Build/Tasks/PackageHtmlSanitizer.cs index fa6ff57759b..ced21440f18 100644 --- a/Build/Tasks/PackageHtmlSanitizer.cs +++ b/Build/Tasks/PackageHtmlSanitizer.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the MailKit package. -public sealed class PackageHtmlSanitizer : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageHtmlSanitizer() - : base("HtmlSanitizer") - { - } -} +public sealed class PackageHtmlSanitizer() + : PackageComponentTaskBase("HtmlSanitizer"); diff --git a/Build/Tasks/PackageMailKit.cs b/Build/Tasks/PackageMailKit.cs index b434707156e..ce6552c4f11 100644 --- a/Build/Tasks/PackageMailKit.cs +++ b/Build/Tasks/PackageMailKit.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the MailKit package. -public sealed class PackageMailKit : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageMailKit() - : base("MailKit") - { - } -} +public sealed class PackageMailKit() + : PackageComponentTaskBase("MailKit"); diff --git a/Build/Tasks/PackageMicrosoftCodeDomProvidersDotNetCompilerPlatform.cs b/Build/Tasks/PackageMicrosoftCodeDomProvidersDotNetCompilerPlatform.cs new file mode 100644 index 00000000000..b02dfba576f --- /dev/null +++ b/Build/Tasks/PackageMicrosoftCodeDomProvidersDotNetCompilerPlatform.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Build.Tasks; + +using System.IO; +using System.IO.Compression; +using System.Threading.Tasks; + +using Dnn.CakeUtils; + +/// A cake task to generate the Microsoft.CodeDom.Providers.DotNetCompilerPlatform package. +public sealed class PackageMicrosoftCodeDomProvidersDotNetCompilerPlatform() + : PackageComponentTaskBase("Microsoft.CodeDom.Providers.DotNetCompilerPlatform") +{ + /// + public override async Task RunAsync(Context context) + { + await base.RunAsync(context); + + var binDir = GetBinDir(context); + using var zipStream = new MemoryStream(); + await ZipFile.CreateFromDirectoryAsync(binDir.Combine("roslyn").ToString(), zipStream); + await zipStream.FlushAsync(); + zipStream.Position = 0; + context.AddStreamToZip(this.GetPackageZipPath(context, binDir), zipStream, "roslyn.zip", append: true); + } +} diff --git a/Build/Tasks/PackageMicrosoftExtensionsDependencyInjection.cs b/Build/Tasks/PackageMicrosoftExtensionsDependencyInjection.cs index d3dc7e06c48..c33953a3e36 100644 --- a/Build/Tasks/PackageMicrosoftExtensionsDependencyInjection.cs +++ b/Build/Tasks/PackageMicrosoftExtensionsDependencyInjection.cs @@ -3,74 +3,6 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Build.Tasks; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Xml; - -using Cake.Common.Diagnostics; -using Cake.Common.IO; -using Cake.Frosting; - -using Dnn.CakeUtils; - /// A cake task to generate the Microsoft.Extensions.DependencyInjection package. -public sealed class PackageMicrosoftExtensionsDependencyInjection : FrostingTask -{ - private static readonly string[] AllFiles = ["*",]; - private static readonly string[] ManifestFiles = ["*.dnn",]; - - /// - public override void Run(Context context) - { - var binDir = context.WebsiteDir.Path.Combine("bin"); - var mainAssemblyPath = binDir.CombineWithFilePath("Microsoft.Extensions.DependencyInjection.dll"); - var packageVersion = FileVersionInfo.GetVersionInfo(context.MakeAbsolute(mainAssemblyPath).FullPath).FileVersion; - - var packageZip = context.WebsiteDir.Path.CombineWithFilePath($"Install/Library/Microsoft.Extensions.DependencyInjection_{packageVersion}_Install.zip"); - var packageDir = context.Directory("DNN Platform/Components/Microsoft.Extensions.DependencyInjection"); - - context.Information($"Creating {packageZip}"); - context.Zip( - packageDir.ToString(), - packageZip, - context.GetFilesByPatterns(packageDir, AllFiles, ManifestFiles)); - - var manifestPath = context.GetFiles(packageDir.Path.CombineWithFilePath("*.dnn").ToString()).Single(); - context.Information($"Reading manifest from {manifestPath}"); - var manifest = new XmlDocument(); - using (var manifestReader = XmlReader.Create(new StringReader(context.ReadFile(manifestPath)), new XmlReaderSettings { XmlResolver = null, })) - { - manifest.Load(manifestReader); - } - - var assemblies = - from XmlNode assemblyNode in manifest.SelectNodes("//assembly") - from XmlNode childNode in assemblyNode.ChildNodes - where childNode.LocalName.Equals("name", System.StringComparison.Ordinal) - select childNode; - - foreach (var assemblyNameNode in assemblies) - { - var assemblyPath = binDir.CombineWithFilePath(assemblyNameNode.InnerText); - context.Information($"Adding {assemblyPath} to {packageZip}"); - context.AddFilesToZip( - packageZip, - context.MakeAbsolute(context.WebsiteDir.Path), - context.GetFiles(assemblyPath.ToString()), - append: true); - - var versionNode = assemblyNameNode.ParentNode.ChildNodes.Cast() - .SingleOrDefault(childNode => childNode.LocalName.Equals("version", System.StringComparison.Ordinal)); - if (versionNode != null) - { - versionNode.InnerText = FileVersionInfo.GetVersionInfo(context.MakeAbsolute(assemblyPath).FullPath).FileVersion; - context.Information($"Set {assemblyPath} version to {versionNode.InnerText}"); - } - } - - manifest.SelectSingleNode("//package[@version]").Attributes["version"].Value = packageVersion; - - context.AddXmlFileToZip(packageZip, manifest, manifestPath.GetFilename().ToString(), append: true); - } -} +public sealed class PackageMicrosoftExtensionsDependencyInjection() + : PackageComponentTaskBase("Microsoft.Extensions.DependencyInjection"); diff --git a/Build/Tasks/PackageMicrosoftGlobbing.cs b/Build/Tasks/PackageMicrosoftGlobbing.cs index 6c43a5d3a01..17b79701b34 100644 --- a/Build/Tasks/PackageMicrosoftGlobbing.cs +++ b/Build/Tasks/PackageMicrosoftGlobbing.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the Microsoft.Extensions.FileSystemGlobbing package. -public sealed class PackageMicrosoftGlobbing : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageMicrosoftGlobbing() - : base("Microsoft.Extensions.FileSystemGlobbing") - { - } -} +public sealed class PackageMicrosoftGlobbing() + : PackageComponentTaskBase("Microsoft.Extensions.FileSystemGlobbing"); diff --git a/Build/Tasks/PackageMicrosoftWebInfrastructure.cs b/Build/Tasks/PackageMicrosoftWebInfrastructure.cs index 7d7eb90a4e4..9d350423ec0 100644 --- a/Build/Tasks/PackageMicrosoftWebInfrastructure.cs +++ b/Build/Tasks/PackageMicrosoftWebInfrastructure.cs @@ -4,73 +4,6 @@ namespace DotNetNuke.Build.Tasks; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Xml; - -using Cake.Common.Diagnostics; -using Cake.Common.IO; -using Cake.Frosting; -using Dnn.CakeUtils; - /// A cake task to generate the Microsoft.Web.Infrastructure package. -public sealed class PackageMicrosoftWebInfrastructure : FrostingTask -{ - private static readonly string[] AllFiles = ["*",]; - private static readonly string[] ManifestFiles = ["*.dnn",]; - - /// - public override void Run(Context context) - { - var binDir = context.WebsiteDir.Path.Combine("bin"); - var mainAssemblyPath = binDir.CombineWithFilePath("Microsoft.Web.Infrastructure.dll"); - var packageVersion = FileVersionInfo.GetVersionInfo(context.MakeAbsolute(mainAssemblyPath).FullPath).FileVersion; - - var packageZip = context.WebsiteDir.Path.CombineWithFilePath($"Install/Library/Microsoft.Web.Infrastructure_{packageVersion}_Install.zip"); - var packageDir = context.Directory("DNN Platform/Components/Microsoft.Web.Infrastructure"); - - context.Information($"Creating {packageZip}"); - context.Zip( - packageDir.ToString(), - packageZip, - context.GetFilesByPatterns(packageDir, AllFiles, ManifestFiles)); - - var manifestPath = context.GetFiles(packageDir.Path.CombineWithFilePath("*.dnn").ToString()).Single(); - context.Information($"Reading manifest from {manifestPath}"); - var manifest = new XmlDocument(); - using (var manifestReader = XmlReader.Create(new StringReader(context.ReadFile(manifestPath)), new XmlReaderSettings { XmlResolver = null, })) - { - manifest.Load(manifestReader); - } - - var assemblies = - from XmlNode assemblyNode in manifest.SelectNodes("//assembly") - from XmlNode childNode in assemblyNode.ChildNodes - where childNode.LocalName.Equals("name", System.StringComparison.Ordinal) - select childNode; - - foreach (var assemblyNameNode in assemblies) - { - var assemblyPath = binDir.CombineWithFilePath(assemblyNameNode.InnerText); - context.Information($"Adding {assemblyPath} to {packageZip}"); - context.AddFilesToZip( - packageZip, - context.MakeAbsolute(context.WebsiteDir.Path), - context.GetFiles(assemblyPath.ToString()), - append: true); - - var versionNode = assemblyNameNode.ParentNode.ChildNodes.Cast() - .SingleOrDefault(childNode => childNode.LocalName.Equals("version", System.StringComparison.Ordinal)); - if (versionNode != null) - { - versionNode.InnerText = FileVersionInfo.GetVersionInfo(context.MakeAbsolute(assemblyPath).FullPath).FileVersion; - context.Information($"Set {assemblyPath} version to {versionNode.InnerText}"); - } - } - - manifest.SelectSingleNode("//package[@version]").Attributes["version"].Value = packageVersion; - - context.AddXmlFileToZip(packageZip, manifest, manifestPath.GetFilename().ToString(), append: true); - } -} +public sealed class PackageMicrosoftWebInfrastructure() + : PackageComponentTaskBase("Microsoft.Web.Infrastructure"); diff --git a/Build/Tasks/PackageNewtonsoft.cs b/Build/Tasks/PackageNewtonsoft.cs index 11b60f5aaf0..288a9058688 100644 --- a/Build/Tasks/PackageNewtonsoft.cs +++ b/Build/Tasks/PackageNewtonsoft.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the Newtonsoft.Json package. -public sealed class PackageNewtonsoft : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageNewtonsoft() - : base("Newtonsoft.Json", "Newtonsoft.Json.dll", "Newtonsoft") - { - } -} +public sealed class PackageNewtonsoft() + : PackageComponentTaskBase("Newtonsoft.Json", "Newtonsoft.Json.dll", "Newtonsoft"); diff --git a/Build/Tasks/PackageSharpZipLib.cs b/Build/Tasks/PackageSharpZipLib.cs index 6b9bd3dfa33..6f1417332ae 100644 --- a/Build/Tasks/PackageSharpZipLib.cs +++ b/Build/Tasks/PackageSharpZipLib.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the SharpZipLib package. -public sealed class PackageSharpZipLib : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageSharpZipLib() - : base("SharpZipLib", "ICSharpCode.SharpZipLib.dll") - { - } -} +public sealed class PackageSharpZipLib() + : PackageComponentTaskBase("SharpZipLib", "ICSharpCode.SharpZipLib.dll"); diff --git a/Build/Tasks/PackageWebFormsMvp.cs b/Build/Tasks/PackageWebFormsMvp.cs index af073bcc89a..94acfd64dda 100644 --- a/Build/Tasks/PackageWebFormsMvp.cs +++ b/Build/Tasks/PackageWebFormsMvp.cs @@ -4,11 +4,5 @@ namespace DotNetNuke.Build.Tasks; /// A cake task to generate the WebFormsMvp package. -public sealed class PackageWebFormsMvp : PackageComponentTask -{ - /// Initializes a new instance of the class. - public PackageWebFormsMvp() - : base("WebFormsMvp") - { - } -} +public sealed class PackageWebFormsMvp() + : PackageComponentTaskBase("WebFormsMvp"); diff --git a/Build/Tasks/PreparePackaging.cs b/Build/Tasks/PreparePackaging.cs index 5d741f01530..24fdf6cefd8 100644 --- a/Build/Tasks/PreparePackaging.cs +++ b/Build/Tasks/PreparePackaging.cs @@ -3,6 +3,10 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Build.Tasks { + using System; + using System.Linq; + using System.Xml.Linq; + using Cake.Common.Diagnostics; using Cake.Common.IO; using Cake.Frosting; @@ -12,11 +16,11 @@ namespace DotNetNuke.Build.Tasks /// A cake task to prepare for packaging (by building the platform and copying files). [IsDependentOn(typeof(CopyWebsite))] [IsDependentOn(typeof(Build))] - [IsDependentOn(typeof(CopyWebConfig))] [IsDependentOn(typeof(CopyWebsiteBinFolder))] public sealed class PreparePackaging : FrostingTask { private static readonly string[] SampleModuleArtifactsPattern = ["SampleModules/*.zip",]; + private static readonly string[] BinFolderInclude = ["bin/**/*.dll",]; /// public override void Run(Context context) @@ -24,12 +28,6 @@ public override void Run(Context context) context.PackagingPatterns = context.DeserializeJsonFromFile("./Build/Tasks/packaging.json"); // Various fixes - context.CopyFile( - "./DNN Platform/Components/DataAccessBlock/bin/Microsoft.ApplicationBlocks.Data.dll", - context.WebsiteFolder + "bin/Microsoft.ApplicationBlocks.Data.dll"); - context.CopyFiles( - "./DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.*", - context.WebsiteFolder + "bin/"); context.CopyFile( "./DNN Platform/Library/bin/PetaPoco.dll", context.WebsiteFolder + "bin/PetaPoco.dll"); @@ -45,6 +43,31 @@ public override void Run(Context context) context.Information($" Copied {file.GetFilename()} to {destination}"); } } + + CreateWebConfig(context); + } + + private static void CreateWebConfig(Context context) + { + var configFile = context.WebsiteDir + context.File("release.config"); + var doc = XDocument.Load(configFile); + XNamespace asm = "urn:schemas-microsoft-com:asm.v1"; + var assemblyBinding = doc.Element("configuration")?.Element("runtime")?.Element(asm + "assemblyBinding"); + if (assemblyBinding == null) + { + throw new InvalidOperationException("Could not find configuration/runtime/assemblyBinding in release.config."); + } + + context.PackagingPatterns = context.DeserializeJsonFromFile("./Build/Tasks/packaging.json"); + var files = context.GetFilesByPatterns(context.WebsiteFolder, BinFolderInclude, context.PackagingPatterns.InstallExclude); + var parsedAssemblies = files.ParseAssemblies(); + parsedAssemblies.RemoveAll(a => a.PublicKeyToken is null); + var redirects = parsedAssemblies.ConvertAll(a => a.AssemblyBindingRedirect()); + assemblyBinding.Add(redirects.ToArray()); + + // save XML document to target file + var targetFile = context.WebsiteDir + context.File("web.config"); + doc.Save(targetFile); } } } diff --git a/Build/Tasks/packaging.json b/Build/Tasks/packaging.json index 4a4d51aa504..c4c3fd2793d 100644 --- a/Build/Tasks/packaging.json +++ b/Build/Tasks/packaging.json @@ -13,6 +13,7 @@ "/release.config", "/web.*.config", "/App_Data/RadSpell/en-US.tdf", + "/bin/roslyn/*", "/bin/Dnn.AuthServices.Jwt.*", "/bin/Dnn.EditBar.*", "/bin/Dnn.Modules.*", @@ -58,6 +59,15 @@ "/bin/System.Numerics.Vectors.dll", "/bin/System.Formats.Asn1.dll", "/bin/System.Memory.dll", + "/bin/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll", + "/bin/Lucene.Net.Contrib.Core.dll", + "/bin/Lucene.Net.Contrib.Highlighter.dll", + "/bin/Lucene.Net.Contrib.Memory.dll", + "/bin/Lucene.Net.Contrib.Queries.dll", + "/bin/Lucene.Net.Contrib.Regex.dll", + "/bin/Lucene.Net.Contrib.SimpleFacetedSearch.dll", + "/bin/Lucene.Net.Contrib.Snowball.dll", + "/bin/Lucene.Net.Contrib.SpellChecker.dll", "/Install/Module/DNNCE_Website.Deprecated_*_Install.zip", "/Install/Module/DNNCE_TelerikRemoval_*_Install.zip" ], diff --git a/Build/Tasks/thirdparty.json b/Build/Tasks/thirdparty.json index 8ad8325c54e..393aec0b649 100644 --- a/Build/Tasks/thirdparty.json +++ b/Build/Tasks/thirdparty.json @@ -48,10 +48,5 @@ "name": "Selectize", "folder": "DNN Platform/JavaScript Libraries/Selectize/", "destination": "Install/JavaScriptLibrary" - }, - { - "name": "Microsoft.CodeDom.Providers.DotNetCompilerPlatform", - "folder": "DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/", - "destination": "Install/Library" } ] diff --git a/DNN Platform/Admin Modules/Dnn.Modules.Console/dnn_Console.dnn b/DNN Platform/Admin Modules/Dnn.Modules.Console/dnn_Console.dnn index 7c7eb2437a9..17473fa0dbd 100644 --- a/DNN Platform/Admin Modules/Dnn.Modules.Console/dnn_Console.dnn +++ b/DNN Platform/Admin Modules/Dnn.Modules.Console/dnn_Console.dnn @@ -1,6 +1,6 @@  - + Console Display children pages as icon links for navigation. ~/DesktopModules/Admin/Console/console.png diff --git a/DNN Platform/Components/DataAccessBlock/bin/Microsoft.ApplicationBlocks.Data.dll b/DNN Platform/Components/DataAccessBlock/bin/Microsoft.ApplicationBlocks.Data.dll deleted file mode 100644 index 8158be3ead4..00000000000 Binary files a/DNN Platform/Components/DataAccessBlock/bin/Microsoft.ApplicationBlocks.Data.dll and /dev/null differ diff --git a/DNN Platform/Components/Log4Net/bin/DotNetNuke.Log4Net.XML b/DNN Platform/Components/Log4Net/bin/DotNetNuke.Log4Net.XML deleted file mode 100644 index 04f33a3d926..00000000000 --- a/DNN Platform/Components/Log4Net/bin/DotNetNuke.Log4Net.XML +++ /dev/null @@ -1,29610 +0,0 @@ - - - - DotNetNuke.Log4Net - - - - - Abstract class that provides the formatting functionality that - derived classes need. - - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - - Nicko Cadell - Gert Driesen - - - - Initial buffer size - - - - - Maximum buffer size before it is recycled - - - - - Protected constructor - - - - Initializes a new instance of the class. - - - - - - Evaluate this pattern converter and write the output to a writer. - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the appropriate way. - - - - - - Set the next pattern converter in the chains - - the pattern converter that should follow this converter in the chain - the next converter - - - The PatternConverter can merge with its neighbor during this method (or a sub class). - Therefore the return value may or may not be the value of the argument passed in. - - - - - - Write the pattern converter to the writer with appropriate formatting - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - This method calls to allow the subclass to perform - appropriate conversion of the pattern converter. If formatting options have - been specified via the then this method will - apply those formattings before writing the output. - - - - - - Fast space padding method. - - to which the spaces will be appended. - The number of spaces to be padded. - - - Fast space padding method. - - - - - - The option string to the converter - - - - - Write an dictionary to a - - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the to a writer in the form: - - - {key1=value1, key2=value2, key3=value3} - - - If the specified - is not null then it is used to render the key and value to text, otherwise - the object's ToString method is called. - - - - - - Write an dictionary to a - - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the to a writer in the form: - - - {key1=value1, key2=value2, key3=value3} - - - If the specified - is not null then it is used to render the key and value to text, otherwise - the object's ToString method is called. - - - - - - Write an object to a - - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the Object to a writer. If the specified - is not null then it is used to render the object to text, otherwise - the object's ToString method is called. - - - - - - Get the next pattern converter in the chain - - - the next pattern converter in the chain - - - - Get the next pattern converter in the chain - - - - - - Gets or sets the formatting info for this converter - - - The formatting info for this converter - - - - Gets or sets the formatting info for this converter - - - - - - Gets or sets the option value for this converter - - - The option for this converter - - - - Gets or sets the option value for this converter - - - - - - - - - - - This class aggregates several PropertiesDictionary collections together. - - - - Provides a dictionary style lookup over an ordered list of - collections. - - - Nicko Cadell - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Add a Properties Dictionary to this composite collection - - the properties to add - - - Properties dictionaries added first take precedence over dictionaries added - later. - - - - - - Flatten this composite collection into a single properties dictionary - - the flattened dictionary - - - Reduces the collection of ordered dictionaries to a single dictionary - containing the resultant values for the keys. - - - - - - Gets the value of a property - - - The value for the property with the specified key - - - - Looks up the value for the specified. - The collections are searched - in the order in which they were added to this collection. The value - returned is the value held by the first collection that contains - the specified key. - - - If none of the collections contain the specified key then - null is returned. - - - - - - Base implementation of - - - - Default abstract implementation of the interface. - - - Skeleton implementation of the interface. - All types can extend this type. - - - Nicko Cadell - Gert Driesen - - - - Interface implemented by logger repositories. - - - - This interface is implemented by logger repositories. e.g. - . - - - This interface is used by the - to obtain interfaces. - - - Nicko Cadell - Gert Driesen - - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - The name of the logger to lookup - The Logger object with the name specified - - - If the names logger exists it is returned, otherwise - null is returned. - - - - - - Returns all the currently defined loggers as an Array. - - All the defined loggers - - - Returns all the currently defined loggers as an Array. - - - - - - Returns a named logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Returns a named logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - - Shutdown the repository - - - Shutting down a repository will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - - The name of the repository - - - The name of the repository - - - - The name of the repository. - - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository. - - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - - Collection of internal messages captured during the most - recent configuration process. - - - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - - Repository specific properties - - - Repository specific properties - - - - These properties can be specified on a repository specific basis. - - - - - - Default Constructor - - - - Initializes the repository with default (empty) properties. - - - - - - Construct the repository using specific properties - - the properties to set for this repository - - - Initializes the repository with specified properties. - - - - - - Test if logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - - - - - Returns all the currently defined loggers in the repository - - All the defined loggers - - - Returns all the currently defined loggers in the repository as an Array. - - - - - - Return a new logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Return a new logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - - - Shutdown the repository - - - - Shutdown the repository. Can be overridden in a subclass. - This base class implementation notifies the - listeners and all attached plugins of the shutdown event. - - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the logEvent through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - - The fully qualified type of the LoggerRepositorySkeleton class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Adds an object renderer for a specific class. - - The type that will be rendered by the renderer supplied. - The object renderer used to render the object. - - - Adds an object renderer for a specific class. - - - - - - Notify the registered listeners that the repository is shutting down - - Empty EventArgs - - - Notify any listeners that this repository is shutting down. - - - - - - Notify the registered listeners that the repository has had its configuration reset - - Empty EventArgs - - - Notify any listeners that this repository's configuration has been reset. - - - - - - Notify the registered listeners that the repository has had its configuration changed - - Empty EventArgs - - - Notify any listeners that this repository's configuration has changed. - - - - - - Raise a configuration changed event on this repository - - EventArgs.Empty - - - Applications that programmatically change the configuration of the repository should - raise this event notification to notify listeners. - - - - - - The name of the repository - - - The string name of the repository - - - - The name of this repository. The name is - used to store and lookup the repositories - stored by the . - - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository - - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - - Contains a list of internal messages captures during the - last configuration. - - - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - - Repository specific properties - - - Repository specific properties - - - These properties can be specified on a repository specific basis - - - - - The default object Renderer. - - - - The default renderer supports rendering objects and collections to strings. - - - See the method for details of the output. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface in order to render objects as strings - - - - Certain types require special case conversion to - string form. This conversion is done by an object renderer. - Object renderers implement the - interface. - - - Nicko Cadell - Gert Driesen - - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a - string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - - - - Default constructor - - - - Default constructor - - - - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - The default renderer supports rendering objects to strings as follows: - - - - Value - Rendered String - - - null - - "(null)" - - - - - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - , & - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: {a, b, c}. - - - All collection classes that implement its subclasses, - or generic equivalents all implement the interface. - - - - - - - - Rendered as the key, an equals sign ('='), and the value (using the appropriate - renderer). - - - For example: key=value. - - - - - other - - Object.ToString() - - - - - - - - Render the array argument into a string - - The map used to lookup renderers - the array to render - The writer to render to - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - - Render the enumerator argument into a string - - The map used to lookup renderers - the enumerator to render - The writer to render to - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - {a, b, c}. - - - - - - Render the DictionaryEntry argument into a string - - The map used to lookup renderers - the DictionaryEntry to render - The writer to render to - - - Render the key, an equals sign ('='), and the value (using the appropriate - renderer). For example: key=value. - - - - - - Layout that formats the log events as XML elements. - - - - The output of the consists of a series of - log4net:event elements. It does not output a complete well-formed XML - file. The output is designed to be included as an external entity - in a separate file to form a correct XML file. - - - For example, if abc is the name of the file where - the output goes, then a well-formed XML file would - be: - - - <?xml version="1.0" ?> - - <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> - - <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> - &data; - </log4net:events> - - - This approach enforces the independence of the - and the appender where it is embedded. - - - The version attribute helps components to correctly - interpret output generated by . The value of - this attribute should be "1.2" for release 1.2 and later. - - - Alternatively the Header and Footer properties can be - configured to output the correct XML header, open tag and close tag. - When setting the Header and Footer properties it is essential - that the underlying data store not be appendable otherwise the data - will become invalid XML. - - - Nicko Cadell - Gert Driesen - - - - Layout that formats the log events as XML elements. - - - - This is an abstract class that must be subclassed by an implementation - to conform to a specific schema. - - - Deriving classes must implement the method. - - - Nicko Cadell - Gert Driesen - - - - Extend this abstract class to create your own log layout format. - - - - This is the base implementation of the - interface. Most layout objects should extend this class. - - - - - - Subclasses must implement the - method. - - - Subclasses should set the in their default - constructor. - - - - Nicko Cadell - Gert Driesen - - - - Interface implemented by layout objects - - - - An object is used to format a - as text. The method is called by an - appender to transform the into a string. - - - The layout can also supply and - text that is appender before any events and after all the events respectively. - - - Nicko Cadell - Gert Driesen - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text and output to a writer. - - - If the caller does not have a and prefers the - event to be formatted as a then the following - code can be used to format the event into a . - - - StringWriter writer = new StringWriter(); - Layout.Format(writer, loggingEvent); - string formattedEvent = writer.ToString(); - - - - - - The content type output by this layout. - - The content type - - - The content type output by this layout. - - - This is a MIME type e.g. "text/plain". - - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - - Flag indicating if this layout handle exceptions - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - - - - Interface used to delay activate a configured object. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then the method - must be called by the container after its all the configured properties have been set - and before the component can be used. - - - Nicko Cadell - - - - Activate the options that were previously set with calls to properties. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then this method must be called - after its properties have been set before the component can be used. - - - - - - The header text - - - - See for more information. - - - - - - The footer text - - - - See for more information. - - - - - - Flag indicating if this layout handles exceptions - - - - false if this layout handles exceptions - - - - - - Empty default constructor - - - - Empty default constructor - - - - - - Activate component options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This method must be implemented by the subclass. - - - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text. - - - - - - Convenience method for easily formatting the logging event into a string variable. - - - - Creates a new StringWriter instance to store the formatted logging event. - - - - - The content type output by this layout. - - The content type is "text/plain" - - - The content type output by this layout. - - - This base class uses the value "text/plain". - To change this value a subclass must override this - property. - - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - - Flag indicating if this layout handles exceptions - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - Set this value to override a this default setting. The default - value is true, this layout does not handle the exception. - - - - - - Protected constructor to support subclasses - - - - Initializes a new instance of the class - with no location info. - - - - - - Protected constructor to support subclasses - - - - The parameter determines whether - location information will be output by the layout. If - is set to true, then the - file name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a formatted string. - - The event being logged. - The TextWriter to write the formatted event to - - - Format the and write it to the . - - - This method creates an that writes to the - . The is passed - to the method. Subclasses should override the - method rather than this method. - - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Subclasses should override this method to format - the as XML. - - - - - - Flag to indicate if location information should be included in - the XML events. - - - - - Writer adapter that ignores Close - - - - - The string to replace invalid chars with - - - - - Gets a value indicating whether to include location information in - the XML events. - - - true if location information should be included in the XML - events; otherwise, false. - - - - If is set to true, then the file - name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - The string to replace characters that can not be expressed in XML with. - - - Not all characters may be expressed in XML. This property contains the - string to replace those that can not with. This defaults to a ?. Set it - to the empty string to simply remove offending characters. For more - details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets - Character replacement will occur in the log message, the property names - and the property values. - - - - - - - Gets the content type output by this layout. - - - As this is the XML layout, the value is always "text/xml". - - - - As this is the XML layout, the value is always "text/xml". - - - - - - Constructs an XmlLayout - - - - - Constructs an XmlLayout. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SmtpAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Builds a cache of the element names - - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Override the base class method - to write the to the . - - - - - - The prefix to use for all generated element names - - - - - The prefix to use for all element names - - - - The default prefix is log4net. Set this property - to change the prefix. If the prefix is set to an empty string - then no prefix will be written. - - - - - - Set whether or not to base64 encode the message. - - - - By default the log message will be written as text to the xml - output. This can cause problems when the message contains binary - data. By setting this to true the contents of the message will be - base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the log message. - - - - - - Set whether or not to base64 encode the property values. - - - - By default the properties will be written as text to the xml - output. This can cause problems when one or more properties contain - binary data. By setting this to true the values of the properties - will be base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the property values. - - - - - - Converter to include event NDC - - - - Outputs the value of the event property named NDC. - - - The should be used instead. - - - Nicko Cadell - - - - Abstract class that provides the formatting functionality that - derived classes need. - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - Nicko Cadell - - - - Initializes a new instance of the class. - - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - that will receive the formatted result. - The on which the pattern converter should be executed. - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - - Flag indicating if this converter handles exceptions - - - false if this converter handles exceptions - - - - - Flag indicating if this converter handles the logging event exception - - false if this converter handles the logging event exception - - - If this converter handles the exception object contained within - , then this property should be set to - false. Otherwise, if the layout ignores the exception - object, then the property should be set to true. - - - Set this value to override a this default setting. The default - value is true, this converter does not handle the exception. - - - - - - Write the event NDC to the output - - that will receive the formatted result. - the event being logged - - - As the thread context stacks are now stored in named event properties - this converter simply looks up the value of the NDC property. - - - The should be used instead. - - - - - - Writes the event identity to the output - - - - Writes the value of the to - the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - - Writes the event identity to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the - to - the output . - - - - - - A flexible layout configurable with pattern string. - - - - The goal of this class is to a - as a string. The results - depend on the conversion pattern. - - - The conversion pattern is closely related to the conversion - pattern of the printf function in C. A conversion pattern is - composed of literal text and format control expressions called - conversion specifiers. - - - You are free to insert any literal text within the conversion - pattern. - - - Each conversion specifier starts with a percent sign (%) and is - followed by optional format modifiers and a conversion - pattern name. The conversion pattern name specifies the type of - data, e.g. logger, level, date, thread name. The format - modifiers control such things as field width, padding, left and - right justification. The following is a simple example. - - - Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume - that the log4net environment was set to use a PatternLayout. Then the - statements - - - ILog log = LogManager.GetLogger(typeof(TestApp)); - log.Debug("Message 1"); - log.Warn("Message 2"); - - would yield the output - - DEBUG [main]: Message 1 - WARN [main]: Message 2 - - - Note that there is no explicit separator between text and - conversion specifiers. The pattern parser knows when it has reached - the end of a conversion specifier when it reads a conversion - character. In the example above the conversion specifier - %-5level means the level of the logging event should be left - justified to a width of five characters. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - a - Equivalent to appdomain - - - appdomain - - Used to output the friendly name of the AppDomain where the - logging event was generated. - - - - aspnet-cache - - TODO - - - - aspnet-context - - TODO - - - - aspnet-request - - TODO - - - - aspnet-session - - TODO - - - - c - Equivalent to logger - - - C - Equivalent to type - - - class - Equivalent to type - - - d - Equivalent to date - - - date - - - Used to output the date of the logging event in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - exception - - - Used to output the exception passed in with the log message. - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - - - F - Equivalent to file - - - file - - - Used to output the file name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - WARNING Generating caller information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - l - Equivalent to location - - - L - Equivalent to line - - - location - - - Used to output location information of the caller which generated - the logging event. - - - The location information depends on the CLI implementation but - usually consists of the fully qualified name of the calling - method followed by the callers source the file name and line - number between parentheses. - - - The location information can be very useful. However, its - generation is extremely slow. Its use should be avoided - unless execution speed is not an issue. - - - See the note below on the availability of caller location information. - - - - - level - - - Used to output the level of the logging event. - - - - - line - - - Used to output the line number from where the logging request - was issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - logger - - - Used to output the logger of the logging event. The - logger conversion specifier can be optionally followed by - precision specifier, that is a decimal constant in - brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the logger name will be - printed. By default the logger name is printed in full. - - - For example, for the logger name "a.b.c" the pattern - %logger{2} will output "b.c". - - - - - m - Equivalent to message - - - M - Equivalent to method - - - message - - - Used to output the application supplied message associated with - the logging event. - - - - - mdc - - - The MDC (old name for the ThreadContext.Properties) is now part of the - combined event properties. This pattern is supported for compatibility - but is equivalent to property. - - - - - method - - - Used to output the method name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - n - Equivalent to newline - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - ndc - - - Used to output the NDC (nested diagnostic context) associated - with the thread that generated the logging event. - - - - - p - Equivalent to level - - - P - Equivalent to property - - - properties - Equivalent to property - - - property - - - Used to output the an event specific property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are added to events by loggers or appenders. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the event properties - - The event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - - r - Equivalent to timestamp - - - stacktrace - - - Used to output the stack trace of the logging event - The stack trace level specifier may be enclosed - between braces. For example, %stacktrace{level}. - If no stack trace level specifier is given then 1 is assumed - - - - - t - Equivalent to thread - - - timestamp - - - Used to output the number of milliseconds elapsed since the start - of the application until the creation of the logging event. - - - - - thread - - - Used to output the name of the thread that generated the - logging event. Uses the thread number if no name is available. - - - - - type - - - Used to output the fully qualified type name of the caller - issuing the logging request. This conversion specifier - can be optionally followed by precision specifier, that - is a decimal constant in brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the class name will be - printed. By default the class name is output in fully qualified form. - - - For example, for the class name "log4net.Layout.PatternLayout", the - pattern %type{1} will output "PatternLayout". - - - WARNING Generating the caller class information is - slow. Thus, its use should be avoided unless execution speed is - not an issue. - - - See the note below on the availability of caller location information. - - - - - u - Equivalent to identity - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - WARNING Generating caller WindowsIdentity information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - w - Equivalent to username - - - x - Equivalent to ndc - - - X - Equivalent to mdc - - - % - - - The sequence %% outputs a single percent sign. - - - - - - The single letter patterns are deprecated in favor of the - longer more descriptive pattern names. - - - By default the relevant information is output as is. However, - with the aid of format modifiers it is possible to change the - minimum field width, the maximum field width and justification. - - - The optional format modifier is placed between the percent sign - and the conversion pattern name. - - - The first optional format modifier is the left justification - flag which is just the minus (-) character. Then comes the - optional minimum field width modifier. This is a decimal - constant that represents the minimum number of characters to - output. If the data item requires fewer characters, it is padded on - either the left or the right until the minimum width is - reached. The default is to pad on the left (right justify) but you - can specify right padding with the left justification flag. The - padding character is space. If the data item is larger than the - minimum field width, the field is expanded to accommodate the - data. The value is never truncated. - - - This behavior can be changed using the maximum field - width modifier which is designated by a period followed by a - decimal constant. If the data item is longer than the maximum - field, then the extra characters are removed from the - beginning of the data item and not from the end. For - example, it the maximum field width is eight and the data item is - ten characters long, then the first two characters of the data item - are dropped. This behavior deviates from the printf function in C - where truncation is done from the end. - - - Below are various format modifier examples for the logger - conversion specifier. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none - - Left pad with spaces if the logger name is less than 20 - characters long. - -
%-20loggertrue20none - - Right pad with spaces if the logger - name is less than 20 characters long. - -
%.30loggerNAnone30 - - Truncate from the beginning if the logger - name is longer than 30 characters. - -
%20.30loggerfalse2030 - - Left pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
%-20.30loggertrue2030 - - Right pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
-
- - Note about caller location information.
- The following patterns %type %file %line %method %location %class %C %F %L %l %M - all generate caller location information. - Location information uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. -
- - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - - Additional pattern converters may be registered with a specific - instance using the method. - -
- - This is a more detailed pattern. - %timestamp [%thread] %level %logger %ndc - %message%newline - - - A similar pattern except that the relative time is - right padded if less than 6 digits, thread name is right padded if - less than 15 characters and truncated if longer and the logger - name is left padded if shorter than 30 characters and truncated if - longer. - %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino -
- - - Default pattern string for log output. - - - - Default pattern string for log output. - Currently set to the string "%message%newline" - which just prints the application supplied message. - - - - - - A detailed conversion pattern - - - - A conversion pattern which includes Time, Thread, Logger, and Nested Context. - Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. - - - - - - Internal map of converter identifiers to converter types. - - - - This static map is overridden by the m_converterRegistry instance map - - - - - - the pattern - - - - - the head of the pattern converter chain - - - - - patterns defined on this PatternLayout only - - - - - Initialize the global registry - - - - Defines the builtin global rules. - - - - - - Constructs a PatternLayout using the DefaultConversionPattern - - - - The default pattern just produces the application supplied message. - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - As per the contract the - method must be called after the properties on this object have been - configured. - - - - - - Constructs a PatternLayout using the supplied conversion pattern - - the pattern to use - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - When using this constructor the method - need not be called. This may not be the case when using a subclass. - - - - - - Create the pattern parser instance - - the pattern to parse - The that will format the event - - - Creates the used to parse the conversion string. Sets the - global and instance rules on the . - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a formatted string as specified by the conversion pattern. - - the event being logged - The TextWriter to write the formatted event to - - - Parse the using the patter format - specified in the property. - - - - - - Add a converter to this PatternLayout - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - - Add a converter to this PatternLayout - - the name of the conversion pattern for this converter - the type of the converter - - - Add a named pattern converter to this instance. This - converter will be used in the formatting of the event. - This method must be called before . - - - The specified must extend the - type. - - - - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - - Formats the using the method. - - - - Formats the using the method. - - - Nicko Cadell - Gert Driesen - - - - Render a as a string. - - - - Interface to abstract the rendering of a - instance into a string. - - - The method is used to render the - date to a text writer. - - - Nicko Cadell - Gert Driesen - - - - Formats the specified date as a string. - - The date to format. - The writer to write to. - - - Format the as a string and write it - to the provided. - - - - - - Constructor - - The format string. - - - Initializes a new instance of the class - with the specified format string. - - - The format string must be compatible with the options - that can be supplied to . - - - - - - Formats the date using . - - The date to convert to a string. - The writer to write to. - - - Uses the date format string supplied to the constructor to call - the method to format the date. - - - - - - The format string used to format the . - - - - The format string must be compatible with the options - that can be supplied to . - - - - - - Assembly level attribute that specifies a domain to alias to this assembly's repository. - - - - AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - - - An assembly's logger repository is defined by its , - however this can be overridden by an assembly loaded before the target assembly. - - - An assembly can alias another assembly's domain to its repository by - specifying this attribute with the name of the target domain. - - - This attribute can only be specified on the assembly and may be used - as many times as necessary to alias all the required domains. - - - Nicko Cadell - Gert Driesen - - - - Assembly level attribute that specifies a repository to alias to this assembly's repository. - - - - An assembly's logger repository is defined by its , - however this can be overridden by an assembly loaded before the target assembly. - - - An assembly can alias another assembly's repository to its repository by - specifying this attribute with the name of the target repository. - - - This attribute can only be specified on the assembly and may be used - as many times as necessary to alias all the required repositories. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class with - the specified repository to alias to this assembly's repository. - - The repository to alias to this assemby's repository. - - - Initializes a new instance of the class with - the specified repository to alias to this assembly's repository. - - - - - - Gets or sets the repository to alias to this assemby's repository. - - - The repository to alias to this assemby's repository. - - - - The name of the repository to alias to this assemby's repository. - - - - - - Initializes a new instance of the class with - the specified domain to alias to this assembly's repository. - - The domain to alias to this assemby's repository. - - - Obsolete. Use instead of . - - - - - - Implementation of Properties collection for the - - - - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . - - - Nicko Cadell - - - - Base class for Context Properties implementations - - - - This class defines a basic property get set accessor - - - Nicko Cadell - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - - The thread local data slot to use to store a PropertiesDictionary. - - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property - - the key for the entry to remove - - - Remove a property - - - - - - Clear all properties - - - - Clear all properties - - - - - - Get the PropertiesDictionary for this thread. - - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread - - - The collection returned is only to be used on the calling thread. If the - caller needs to share the collection between different threads then the - caller must clone the collection before doing so. - - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - - Utility class that represents a format string. - - - - Utility class that represents a format string. - - - Nicko Cadell - - - - Initialise the - - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - - - Format the string and arguments - - the formatted string - - - - Replaces the format item in a specified with the text equivalent - of the value of a corresponding instance in a specified array. - A specified parameter supplies culture-specific formatting information. - - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - A copy of format in which the format items have been replaced by the - equivalent of the corresponding instances of in args. - - - - This method does not throw exceptions. If an exception thrown while formatting the result the - exception and arguments are returned in the result string. - - - - - - Process an error during StringFormat - - - - - Dump the contents of an array into a string builder - - - - - Dump an object to a string - - - - - The fully qualified type of the SystemStringFormat class. - - - Used by the internal logger to record the Type of the - log message. - - - - - A fixed size rolling buffer of logging events. - - - - An array backed fixed size leaky bucket. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The maximum number of logging events in the buffer. - - - Initializes a new instance of the class with - the specified maximum number of buffered logging events. - - - The argument is not a positive integer. - - - - Appends a to the buffer. - - The event to append to the buffer. - The event discarded from the buffer, if the buffer is full, otherwise null. - - - Append an event to the buffer. If the buffer still contains free space then - null is returned. If the buffer is full then an event will be dropped - to make space for the new event, the event dropped is returned. - - - - - - Get and remove the oldest event in the buffer. - - The oldest logging event in the buffer - - - Gets the oldest (first) logging event in the buffer and removes it - from the buffer. - - - - - - Pops all the logging events from the buffer into an array. - - An array of all the logging events in the buffer. - - - Get all the events in the buffer and clear the buffer. - - - - - - Clear the buffer - - - - Clear the buffer of all events. The events in the buffer are lost. - - - - - - Gets the th oldest event currently in the buffer. - - The th oldest event currently in the buffer. - - - If is outside the range 0 to the number of events - currently in the buffer, then null is returned. - - - - - - Gets the maximum size of the buffer. - - The maximum size of the buffer. - - - Gets the maximum size of the buffer - - - - - - Gets the number of logging events in the buffer. - - The number of logging events in the buffer. - - - This number is guaranteed to be in the range 0 to - (inclusive). - - - - - - Wrapper class used to map converter names to converter types - - - - Pattern converter info class used during configuration by custom - PatternString and PatternLayer converters. - - - - - - default constructor - - - - - - - - - - - Gets or sets the name of the conversion pattern - - - - The name of the pattern in the format string - - - - - - Gets or sets the type of the converter - - - - The value specified must extend the - type. - - - - - - - - - - - Write the caller location info to the output - - - - Writes the to the output writer. - - - Nicko Cadell - - - - Write the caller location info to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the output writer. - - - - - - Date pattern converter, uses a to format - the date of a . - - - - Render the to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the - method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - - The is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - - Initialize the converter pattern based on the property. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Convert the pattern into the rendered message - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone. - - - - - - The fully qualified type of the DatePatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Simple filter to match a string in the - - - - Simple filter to match a string in the - - - As the MDC has been replaced with named stacks stored in the - properties collections the should - be used instead. - - - Nicko Cadell - Gert Driesen - - - - Simple filter to match a string an event property - - - - Simple filter to match a string in the value for a - specific event property - - - Nicko Cadell - - - - Simple filter to match a string in the rendered message - - - - Simple filter to match a string in the rendered message - - - Nicko Cadell - Gert Driesen - - - - Subclass this type to implement customized logging event filtering - - - - Users should extend this class to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface to provide customized logging event filtering - - - - Users should implement this interface to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - - Decide if the logging event should be logged through an appender. - - The LoggingEvent to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - - Points to the next filter in the filter chain. - - - - See for more information. - - - - - - Initialize the filter with the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Typically filter's options become active immediately on set, - however this method must still be called. - - - - - - Decide if the should be logged through an appender. - - The to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - This method is marked abstract and must be implemented - in a subclass. - - - - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - - Flag to indicate the behavior when we have a match - - - - - The string to substring match against the message - - - - - A string regex to match - - - - - A regex object to match (generated from m_stringRegexToMatch) - - - - - Default constructor - - - - - Initialize and precompile the Regex if required - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the occurs as a substring within - the message then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - when matching or - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - Sets the static string to match - - - - The string that will be substring matched against - the rendered message. If the message contains this - string then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - - Sets the regular expression to match - - - - The regular expression pattern that will be matched against - the rendered message. If the message matches this - pattern then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - - The key to use to lookup the string from the event properties - - - - - Default constructor - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The event property for the is matched against - the . - If the occurs as a substring within - the property value then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - The key to lookup in the event properties and then match against. - - - - The key name to use to lookup in the properties map of the - . The match will be performed against - the value of this property if it exists. - - - - - - Default constructor - - - - Sets the to "NDC". - - - - - - Implementation of wrapper interface. - - - - This implementation of the interface - forwards to the held by the base class. - - - This logger has methods to allow the caller to log at the following - levels: - - - - DEBUG - - The and methods log messages - at the DEBUG level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - INFO - - The and methods log messages - at the INFO level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - WARN - - The and methods log messages - at the WARN level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - ERROR - - The and methods log messages - at the ERROR level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - FATAL - - The and methods log messages - at the FATAL level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - - The values for these levels and their semantic meanings can be changed by - configuring the for the repository. - - - Nicko Cadell - Gert Driesen - - - - Implementation of the interface. - - - - This class should be used as the base for all wrapper implementations. - - - Nicko Cadell - Gert Driesen - - - - Base interface for all wrappers - - - - Base interface for all wrappers. - - - All wrappers must implement this interface. - - - Nicko Cadell - - - - Get the implementation behind this wrapper object. - - - The object that in implementing this object. - - - - The object that in implementing this - object. The Logger object may not - be the same object as this object because of logger decorators. - This gets the actual underlying objects that is used to process - the log events. - - - - - - Constructs a new wrapper for the specified logger. - - The logger to wrap. - - - Constructs a new wrapper for the specified logger. - - - - - - The logger that this object is wrapping - - - - - Gets the implementation behind this wrapper object. - - - The object that this object is implementing. - - - - The Logger object may not be the same object as this object - because of logger decorators. - - - This gets the actual underlying objects that is used to process - the log events. - - - - - - The ILog interface is use by application to log messages into - the log4net framework. - - - - Use the to obtain logger instances - that implement this interface. The - static method is used to get logger instances. - - - This class contains methods for logging at different levels and also - has properties for determining if those logging levels are - enabled in the current configuration. - - - This interface can be implemented in different ways. This documentation - specifies reasonable behavior that a caller can expect from the actual - implementation, however different implementations reserve the right to - do things differently. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - - log.Info("Application Start"); - log.Debug("This is a debug message"); - - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - - Nicko Cadell - Gert Driesen - - - Log a message object with the level. - - Log a message object with the level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Logs a message object with the level. - - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Logs a message object with the INFO level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Logs a message object with the level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - For some ILog interface log, when you write: - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, string construction and concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed (who isn't), then you should write: - - - if (log.IsDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in and once in - the . This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. This is the preferred style of logging. - - Alternatively if your logger is available statically then the is debug - enabled state can be stored in a static variable like this: - - - private static readonly bool isDebugEnabled = log.IsDebugEnabled; - - - Then when you come to log you can write: - - - if (isDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way the debug enabled state is only queried once - when the class is loaded. Using a private static readonly - variable is the most efficient because it is a run time constant - and can be heavily optimized by the JIT compiler. - - - Of course if you use a static readonly variable to - hold the enabled state of the logger then you cannot - change the enabled state at runtime to vary the logging - that is produced. You have to decide if you need absolute - speed or runtime flexibility. - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Construct a new wrapper for the specified logger. - - The logger to wrap. - - - Construct a new wrapper for the specified logger. - - - - - - Virtual method called when the configuration of the repository changes - - the repository holding the levels - - - Virtual method called when the configuration of the repository changes - - - - - - Logs a message object with the DEBUG level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - DEBUG level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the DEBUG level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the DEBUG level including - the stack trace of the passed - as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the INFO level. - - The message object to log. - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - INFO level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the INFO level. - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the INFO level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the WARN level. - - the message object to log - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - WARN level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the WARN level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the WARN level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the ERROR level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - ERROR level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the ERROR level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the ERROR level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the FATAL level. - - The message object to log. - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - FATAL level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the FATAL level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the FATAL level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Event handler for the event - - the repository - Empty - - - - The fully qualified name of this declaring type not the type of any subclass. - - - - - Checks if this logger is enabled for the DEBUG - level. - - - true if this logger is enabled for DEBUG events, - false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - - For some log Logger object, when you write: - - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed, then you should write: - - - if (log.IsDebugEnabled()) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in IsDebugEnabled and once in - the Debug. This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. - - - - - - Checks if this logger is enabled for the INFO level. - - - true if this logger is enabled for INFO events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - - Checks if this logger is enabled for the WARN level. - - - true if this logger is enabled for WARN events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - - Checks if this logger is enabled for the ERROR level. - - - true if this logger is enabled for ERROR events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - - Checks if this logger is enabled for the FATAL level. - - - true if this logger is enabled for FATAL events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - - Sends logging events as connectionless UDP datagrams to a remote host or a - multicast group using an . - - - - UDP guarantees neither that messages arrive, nor that they arrive in the correct order. - - - To view the logging results, a custom application can be developed that listens for logging - events. - - - When decoding events send via this appender remember to use the same encoding - to decode the events as was used to send the events. See the - property to specify the encoding to use. - - - - This example shows how to log receive logging events that are sent - on IP address 244.0.0.1 and port 8080 to the console. The event is - encoded in the packet as a unicode string and it is decoded as such. - - IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); - UdpClient udpClient; - byte[] buffer; - string loggingEvent; - - try - { - udpClient = new UdpClient(8080); - - while(true) - { - buffer = udpClient.Receive(ref remoteEndPoint); - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); - Console.WriteLine(loggingEvent); - } - } - catch(Exception e) - { - Console.WriteLine(e.ToString()); - } - - - Dim remoteEndPoint as IPEndPoint - Dim udpClient as UdpClient - Dim buffer as Byte() - Dim loggingEvent as String - - Try - remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) - udpClient = new UdpClient(8080) - - While True - buffer = udpClient.Receive(ByRef remoteEndPoint) - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) - Console.WriteLine(loggingEvent) - Wend - Catch e As Exception - Console.WriteLine(e.ToString()) - End Try - - - An example configuration section to log information using this appender to the - IP 224.0.0.1 on port 8080: - - - - - - - - - - Gert Driesen - Nicko Cadell - - - - Abstract base class implementation of . - - - - This class provides the code for common functionality, such - as support for threshold filtering and support for general filters. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface for your own strategies for printing log statements. - - - - Implementors should consider extending the - class which provides a default implementation of this interface. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Log the logging event in Appender specific way. - - The event to log - - - This method is called to log a message into this appender. - - - - - - Gets or sets the name of this appender. - - The name of the appender. - - The name uniquely identifies the appender. - - - - - Interface for appenders that support bulk logging. - - - - This interface extends the interface to - support bulk logging of objects. Appenders - should only implement this interface if they can bulk log efficiently. - - - Nicko Cadell - - - - Log the array of logging events in Appender specific way. - - The events to log - - - This method is called to log an array of events into this appender. - - - - - - Initial buffer size - - - - - Maximum buffer size before it is recycled - - - - - Default constructor - - - Empty default constructor - - - - - Finalizes this appender by calling the implementation's - method. - - - - If this appender has not been closed then the Finalize method - will call . - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Closes the appender and release resources. - - - - Release any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - This method cannot be overridden by subclasses. This method - delegates the closing of the appender to the - method which must be overridden in the subclass. - - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The event to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the abstract method. - - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The array of events to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the method. - - - - - - Test if the logging event should we output by this appender - - the event to test - true if the event should be output, false if the event should be ignored - - - This method checks the logging event against the threshold level set - on this appender and also against the filters specified on this - appender. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - - - - - Adds a filter to the end of the filter chain. - - the filter to add to this appender - - - The Filters are organized in a linked list. - - - Setting this property causes the new filter to be pushed onto the - back of the filter chain. - - - - - - Clears the filter list for this appender. - - - - Clears the filter list for this appender. - - - - - - Checks if the message level is below this appender's threshold. - - to test against. - - - If there is no threshold set, then the return value is always true. - - - - true if the meets the - requirements of this appender. - - - - - Is called when the appender is closed. Derived classes should override - this method if resources need to be released. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Subclasses of should implement this method - to perform actual logging. - - The event to append. - - - A subclass must implement this method to perform - logging of the . - - This method will be called by - if all the conditions listed for that method are met. - - - To restrict the logging of events in the appender - override the method. - - - - - - Append a bulk array of logging events. - - the array of logging events - - - This base class implementation calls the - method for each element in the bulk array. - - - A sub class that can better process a bulk array of events should - override this method in addition to . - - - - - - Called before as a precondition. - - - - This method is called by - before the call to the abstract method. - - - This method can be overridden in a subclass to extend the checks - made before the event is passed to the method. - - - A subclass should ensure that they delegate this call to - this base class if it is overridden. - - - true if the call to should proceed. - - - - Renders the to a string. - - The event to render. - The event rendered as a string. - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Where possible use the alternative version of this method - . - That method streams the rendering onto an existing Writer - which can give better performance if the caller already has - a open and ready for writing. - - - - - - Renders the to a string. - - The event to render. - The TextWriter to write the formatted event to - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Use this method in preference to - where possible. If, however, the caller needs to render the event - to a string then does - provide an efficient mechanism for doing so. - - - - - - The layout of this appender. - - - See for more information. - - - - - The name of this appender. - - - See for more information. - - - - - The level threshold of this appender. - - - - There is no level threshold filtering by default. - - - See for more information. - - - - - - It is assumed and enforced that errorHandler is never null. - - - - It is assumed and enforced that errorHandler is never null. - - - See for more information. - - - - - - The first filter in the filter chain. - - - - Set to null initially. - - - See for more information. - - - - - - The last filter in the filter chain. - - - See for more information. - - - - - Flag indicating if this appender is closed. - - - See for more information. - - - - - The guard prevents an appender from repeatedly calling its own DoAppend method - - - - - StringWriter used to render events - - - - - The fully qualified type of the AppenderSkeleton class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or sets the threshold of this appender. - - - The threshold of the appender. - - - - All log events with lower level than the threshold level are ignored - by the appender. - - - In configuration files this option is specified by setting the - value of the option to a level - string, such as "DEBUG", "INFO" and so on. - - - - - - Gets or sets the for this appender. - - The of the appender - - - The provides a default - implementation for the property. - - - - - - The filter chain. - - The head of the filter chain filter chain. - - - Returns the head Filter. The Filters are organized in a linked list - and so all Filters on this Appender are available through the result. - - - - - - Gets or sets the for this appender. - - The layout of the appender. - - - See for more information. - - - - - - - Gets or sets the name of this appender. - - The name of the appender. - - - The name uniquely identifies the appender. - - - - - - Tests if this appender requires a to be set. - - - - In the rather exceptional case, where the appender - implementation admits a layout but can also work without it, - then the appender should return true. - - - This default implementation always returns true. - - - - true if the appender requires a layout object, otherwise false. - - - - - Initializes a new instance of the class. - - - The default constructor initializes all fields to their default values. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The appender will be ignored if no was specified or - an invalid remote or local TCP port number was specified. - - - The required property was not specified. - The TCP port number assigned to or is less than or greater than . - - - - This method is called by the method. - - The event to log. - - - Sends the event using an UDP datagram. - - - Exceptions are passed to the . - - - - - - Closes the UDP connection and releases all resources associated with - this instance. - - - - Disables the underlying and releases all managed - and unmanaged resources associated with the . - - - - - - Initializes the underlying connection. - - - - The underlying is initialized and binds to the - port number from which you intend to communicate. - - - Exceptions are passed to the . - - - - - - The IP address of the remote host or multicast group to which - the logging event will be sent. - - - - - The TCP port number of the remote host or multicast group to - which the logging event will be sent. - - - - - The cached remote endpoint to which the logging events will be sent. - - - - - The TCP port number from which the will communicate. - - - - - The instance that will be used for sending the - logging events. - - - - - The encoding to use for the packet. - - - - - Gets or sets the IP address of the remote host or multicast group to which - the underlying should sent the logging event. - - - The IP address of the remote host or multicast group to which the logging event - will be sent. - - - - Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to - 239.255.255.255). Multicast packets can pass across different networks through routers, so - it is possible to use multicasts in an Internet scenario as long as your network provider - supports multicasting. - - - Hosts that want to receive particular multicast messages must register their interest by joining - the multicast group. Multicast messages are not sent to networks where no host has joined - the multicast group. Class D IP addresses are used for multicast groups, to differentiate - them from normal host addresses, allowing nodes to easily detect if a message is of interest. - - - Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: - - - - - IP Address - Description - - - 224.0.0.1 - - - Sends a message to all system on the subnet. - - - - - 224.0.0.2 - - - Sends a message to all routers on the subnet. - - - - - 224.0.0.12 - - - The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. - - - - - - - A complete list of actually reserved multicast addresses and their owners in the ranges - defined by RFC 3171 can be found at the IANA web site. - - - The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative - addresses. These addresses can be reused with other local groups. Routers are typically - configured with filters to prevent multicast traffic in this range from flowing outside - of the local network. - - - - - - Gets or sets the TCP port number of the remote host or multicast group to which - the underlying should sent the logging event. - - - An integer value in the range to - indicating the TCP port number of the remote host or multicast group to which the logging event - will be sent. - - - The underlying will send messages to this TCP port number - on the remote host or multicast group. - - The value specified is less than or greater than . - - - - Gets or sets the TCP port number from which the underlying will communicate. - - - An integer value in the range to - indicating the TCP port number from which the underlying will communicate. - - - - The underlying will bind to this port for sending messages. - - - Setting the value to 0 (the default) will cause the udp client not to bind to - a local port. - - - The value specified is less than or greater than . - - - - Gets or sets used to write the packets. - - - The used to write the packets. - - - - The used to write the packets. - - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to send logging events - over a network. Classes deriving from can use this - property to get or set this . Use the underlying - returned from if you require access beyond that which - provides. - - - - - Gets or sets the cached remote endpoint to which the logging events should be sent. - - - The cached remote endpoint to which the logging events will be sent. - - - The method will initialize the remote endpoint - with the values of the and - properties. - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appends logging events to the console. - - - - ColoredConsoleAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. It also allows the color of a specific type of message to be set. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes directly to the application's attached console - not to the System.Console.Out or System.Console.Error TextWriter. - The System.Console.Out and System.Console.Error streams can be - programmatically redirected (for example NUnit does this to capture program output). - This appender will ignore these redirections because it needs to use Win32 - API calls to colorize the output. To respect these redirections the - must be used. - - - When configuring the colored console appender, mapping should be - specified to map a logging level to a color. For example: - - - - - - - - - - - - - - The Level is the standard log4net logging level and ForeColor and BackColor can be any - combination of the following values: - - Blue - Green - Red - White - Yellow - Purple - Cyan - HighIntensity - - - - Rick Hobbs - Nicko Cadell - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - flag set to true to write to the console error stream - - When is set to true, output is written to - the standard error output stream. Otherwise, output is written to the standard - output stream. - - - - - Add a mapping of level to color - done by the config file - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the foreground and background colors - for a level. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to color mappings set on this appender. - - - - - - Flag to write output to the error stream rather than the standard output stream - - - - - Mapping from level object to color value - - - - - The console output stream writer to write to - - - - This writer is not thread safe. - - - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - The enum of possible color values for use with the color mapping method - - - - The following flags can be combined together to - form the colors. - - - - - - - color is blue - - - - - color is green - - - - - color is red - - - - - color is white - - - - - color is yellow - - - - - color is purple - - - - - color is cyan - - - - - color is intensified - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and the color it should be displayed in. - - - - - - An entry in the - - - - This is an abstract base class for types that are stored in the - object. - - - Nicko Cadell - - - - Default protected constructor - - - - Default protected constructor - - - - - - Initialize any options defined on this entry - - - - Should be overridden by any classes that need to initialise based on their options - - - - - - The level that is the key for this mapping - - - The that is the key for this mapping - - - - Get or set the that is the key for this - mapping subclass. - - - - - - Initialize the options for the object - - - - Combine the and together. - - - - - - The mapped foreground color for the specified level - - - - Required property. - The mapped foreground color for the specified level. - - - - - - The mapped background color for the specified level - - - - Required property. - The mapped background color for the specified level. - - - - - - The combined and suitable for - setting the console color. - - - - - - Appends log events to the ASP.NET system. - - - - - Diagnostic information and tracing messages that you specify are appended to the output - of the page that is sent to the requesting browser. Optionally, you can view this information - from a separate trace viewer (Trace.axd) that displays trace information for every page in a - given application. - - - Trace statements are processed and displayed only when tracing is enabled. You can control - whether tracing is displayed to a page, to the trace viewer, or both. - - - The logging event is passed to the or - method depending on the level of the logging event. - The event's logger name is the default value for the category parameter of the Write/Warn method. - - - Nicko Cadell - Gert Driesen - Ron Grabowski - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Write the logging event to the ASP.NET trace - - the event to log - - - Write the logging event to the ASP.NET trace - HttpContext.Current.Trace - (). - - - - - - Defaults to %logger - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - The category parameter sent to the Trace method. - - - - Defaults to %logger which will use the logger name of the current - as the category parameter. - - - - - - - - Interface supported by type converters - - - - This interface supports conversion from a single type to arbitrary types. - See . - - - Nicko Cadell - - - - Returns whether this converter can convert the object to the specified type - - A Type that represents the type you want to convert to - true if the conversion is possible - - - Test if the type supported by this converter can be converted to the - . - - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Converts the (which must be of the type supported - by this converter) to the specified.. - - - - - - Pattern converter for literal string instances in the pattern - - - - Writes the literal string value specified in the - property to - the output. - - - Nicko Cadell - - - - Set the next converter in the chain - - The next pattern converter in the chain - The next pattern converter - - - Special case the building of the pattern converter chain - for instances. Two adjacent - literals in the pattern can be represented by a single combined - pattern converter. This implementation detects when a - is added to the chain - after this converter and combines its value with this converter's - literal value. - - - - - - Write the literal to the output - - the writer to write to - null, not set - - - Override the formatting behavior to ignore the FormattingInfo - because we have a literal instead. - - - Writes the value of - to the output . - - - - - - Convert this pattern into the rendered message - - that will receive the formatted result. - null, not set - - - This method is not used. - - - - - - Initializes the log4net environment using an XML DOM. - - - - Configures a using an XML DOM. - - - Nicko Cadell - Gert Driesen - - - - Construct the configurator for a hierarchy - - The hierarchy to build. - - - Initializes a new instance of the class - with the specified . - - - - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - The root element to parse. - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - - - - - Parse appenders by IDREF. - - The appender ref element. - The instance of the appender that the ref refers to. - - - Parse an XML element that represents an appender and return - the appender. - - - - - - Parses an appender element. - - The appender element. - The appender instance or null when parsing failed. - - - Parse an XML element that represents an appender and return - the appender instance. - - - - - - Parses a logger element. - - The logger element. - - - Parse an XML element that represents a logger. - - - - - - Parses the root logger element. - - The root element. - - - Parse an XML element that represents the root logger. - - - - - - Parses the children of a logger element. - - The category element. - The logger instance. - Flag to indicate if the logger is the root logger. - - - Parse the child elements of a <logger> element. - - - - - - Parses an object renderer. - - The renderer element. - - - Parse an XML element that represents a renderer. - - - - - - Parses a level element. - - The level element. - The logger object to set the level on. - Flag to indicate if the logger is the root logger. - - - Parse an XML element that represents a level. - - - - - - Sets a parameter on an object. - - The parameter element. - The object to set the parameter on. - - The parameter name must correspond to a writable property - on the object. The value of the parameter is a string, - therefore this function will attempt to set a string - property first. If unable to set a string property it - will inspect the property and its argument type. It will - attempt to call a static method called Parse on the - type of the property. This method will take a single - string argument and return a value that can be used to - set the property. - - - - - Test if an element has no attributes or child elements - - the element to inspect - true if the element has any attributes or child elements, false otherwise - - - - Test if a is constructible with Activator.CreateInstance. - - the type to inspect - true if the type is creatable using a default constructor, false otherwise - - - - Look for a method on the that matches the supplied - - the type that has the method - the name of the method - the method info found - - - The method must be a public instance method on the . - The method must be named or "Add" followed by . - The method must take a single parameter. - - - - - - Converts a string value to a target type. - - The type of object to convert the string to. - The string value to use as the value of the object. - - - An object of type with value or - null when the conversion could not be performed. - - - - - - Creates an object as specified in XML. - - The XML element that contains the definition of the object. - The object type to use if not explicitly specified. - The type that the returned object must be or must inherit from. - The object or null - - - Parse an XML element and create an object instance based on the configuration - data. - - - The type of the instance may be specified in the XML. If not - specified then the is used - as the type. However the type is specified it must support the - type. - - - - - - key: appenderName, value: appender. - - - - - The Hierarchy being configured. - - - - - The fully qualified type of the XmlHierarchyConfigurator class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Pattern converter for the class name - - - - Outputs the of the event. - - - Nicko Cadell - - - - Converter to output and truncate '.' separated strings - - - - This abstract class supports truncating a '.' separated string - to show a specified number of elements from the right hand side. - This is used to truncate class names that are fully qualified. - - - Subclasses should override the method to - return the fully qualified string. - - - Nicko Cadell - - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Get the fully qualified string data - - the event being logged - the fully qualified name - - - Overridden by subclasses to get the fully qualified name before the - precision is applied to it. - - - Return the fully qualified '.' (dot/period) separated string. - - - - - - Convert the pattern to the rendered message - - that will receive the formatted result. - the event being logged - - Render the to the precision - specified by the property. - - - - - The fully qualified type of the NamedPatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets the fully qualified name of the class - - the event being logged - The fully qualified type name for the caller location - - - Returns the of the . - - - - - - The internal representation of caller location information. - - - - This class uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. - - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - Nicko Cadell - Gert Driesen - - - - When location information is not available the constant - NA is returned. Current value of this string - constant is ?. - - - - - Constructor - - The declaring type of the method that is - the stack boundary into the logging system for this call. - - - Initializes a new instance of the - class based on the current thread. - - - - - - Constructor - - The fully qualified class name. - The method name. - The file name. - The line number of the method within the file. - - - Initializes a new instance of the - class with the specified data. - - - - - - The fully qualified type of the LocationInfo class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets the fully qualified class name of the caller making the logging - request. - - - The fully qualified class name of the caller making the logging - request. - - - - Gets the fully qualified class name of the caller making the logging - request. - - - - - - Gets the file name of the caller. - - - The file name of the caller. - - - - Gets the file name of the caller. - - - - - - Gets the line number of the caller. - - - The line number of the caller. - - - - Gets the line number of the caller. - - - - - - Gets the method name of the caller. - - - The method name of the caller. - - - - Gets the method name of the caller. - - - - - - Gets all available caller information - - - All available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - - Gets all available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - - - - Gets the stack frames from the stack trace of the caller making the log request - - - - - Interface for attaching appenders to objects. - - - - Interface for attaching, removing and retrieving appenders. - - - Nicko Cadell - Gert Driesen - - - - Attaches an appender. - - The appender to add. - - - Add the specified appender. The implementation may - choose to allow or deny duplicate appenders. - - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Returns an attached appender with the specified. - If no appender with the specified name is found null will be - returned. - - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Gets all attached appenders. - - - A collection of attached appenders. - - - - Gets a collection of attached appenders. - If there are no attached appenders the - implementation should return an empty - collection rather than null. - - - - - - Base class for all log4net configuration attributes. - - - This is an abstract class that must be extended by - specific configurators. This attribute allows the - configurator to be parameterized by an assembly level - attribute. - - Nicko Cadell - Gert Driesen - - - - Constructor used by subclasses. - - the ordering priority for this configurator - - - The is used to order the configurator - attributes before they are invoked. Higher priority configurators are executed - before lower priority ones. - - - - - - Configures the for the specified assembly. - - The assembly that this attribute was defined on. - The repository to configure. - - - Abstract method implemented by a subclass. When this method is called - the subclass should configure the . - - - - - - Compare this instance to another ConfiguratorAttribute - - the object to compare to - see - - - Compares the priorities of the two instances. - Sorts by priority in descending order. Objects with the same priority are - randomly ordered. - - - - - - Logs events to a remote syslog daemon. - - - - The BSD syslog protocol is used to remotely log to - a syslog daemon. The syslogd listens for for messages - on UDP port 514. - - - The syslog UDP protocol is not authenticated. Most syslog daemons - do not accept remote log messages because of the security implications. - You may be able to use the LocalSyslogAppender to talk to a local - syslog service. - - - There is an RFC 3164 that claims to document the BSD Syslog Protocol. - This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. - This appender generates what the RFC calls an "Original Device Message", - i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation - this format of message will be accepted by all current syslog daemon - implementations. The daemon will attach the current time and the source - hostname or IP address to any messages received. - - - Syslog messages must have a facility and and a severity. The severity - is derived from the Level of the logging event. - The facility must be chosen from the set of defined syslog - values. The facilities list is predefined - and cannot be extended. - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - Rob Lyon - Nicko Cadell - - - - Syslog port 514 - - - - - Initializes a new instance of the class. - - - This instance of the class is set up to write - to a remote syslog daemon. - - - - - Add a mapping of level to severity - - The mapping to add - - - Add a mapping to this appender. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to a remote syslog daemon. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to syslog severity mappings set on this appender. - - - - - - Translates a log4net level to a syslog severity. - - A log4net level. - A syslog severity. - - - Translates a log4net level to a syslog severity. - - - - - - Generate a syslog priority. - - The syslog facility. - The syslog severity. - A syslog priority. - - - Generate a syslog priority. - - - - - - The facility. The default facility is . - - - - - The message identity - - - - - Mapping from level object to syslog severity - - - - - Message identity - - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - - - - Syslog facility - - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - - - - syslog severities - - - - The syslog severities. - - - - - - system is unusable - - - - - action must be taken immediately - - - - - critical conditions - - - - - error conditions - - - - - warning conditions - - - - - normal but significant condition - - - - - informational - - - - - debug-level messages - - - - - syslog facilities - - - - The syslog facilities - - - - - - kernel messages - - - - - random user-level messages - - - - - mail system - - - - - system daemons - - - - - security/authorization messages - - - - - messages generated internally by syslogd - - - - - line printer subsystem - - - - - network news subsystem - - - - - UUCP subsystem - - - - - clock (cron/at) daemon - - - - - security/authorization messages (private) - - - - - ftp daemon - - - - - NTP subsystem - - - - - log audit - - - - - log alert - - - - - clock daemon - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - - - The mapped syslog severity for the specified level - - - - Required property. - The mapped syslog severity for the specified level - - - - - - Appends logging events to the terminal using ANSI color escape sequences. - - - - AnsiColorTerminalAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. It also allows the color of a specific level of message to be set. - - - This appender expects the terminal to understand the VT100 control set - in order to interpret the color codes. If the terminal or console does not - understand the control codes the behavior is not defined. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - When configuring the ANSI colored terminal appender, a mapping should be - specified to map a logging level to a color. For example: - - - - - - - - - - - - - - - The Level is the standard log4net logging level and ForeColor and BackColor can be any - of the following values: - - Blue - Green - Red - White - Yellow - Purple - Cyan - - These color values cannot be combined together to make new colors. - - - The attributes can be any combination of the following: - - Brightforeground is brighter - Dimforeground is dimmer - Underscoremessage is underlined - Blinkforeground is blinking (does not work on all terminals) - Reverseforeground and background are reversed - Hiddenoutput is hidden - Strikethroughmessage has a line through it - - While any of these attributes may be combined together not all combinations - work well together, for example setting both Bright and Dim attributes makes - no sense. - - - Patrick Wagstrom - Nicko Cadell - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Ansi code to reset terminal - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Add a mapping of level to color - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the foreground and background colours - for a level. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to color mappings set on this appender. - - - - - - Flag to write output to the error stream rather than the standard output stream - - - - - Mapping from level object to color value - - - - - Target is the value of the console output stream. - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - The enum of possible display attributes - - - - The following flags can be combined together to - form the ANSI color attributes. - - - - - - - text is bright - - - - - text is dim - - - - - text is underlined - - - - - text is blinking - - - Not all terminals support this attribute - - - - - text and background colors are reversed - - - - - text is hidden - - - - - text is displayed with a strikethrough - - - - - The enum of possible foreground or background color values for - use with the color mapping method - - - - The output can be in one for the following ANSI colors. - - - - - - - color is black - - - - - color is red - - - - - color is green - - - - - color is yellow - - - - - color is blue - - - - - color is magenta - - - - - color is cyan - - - - - color is white - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and the color it should be displayed in. - - - - - - Initialize the options for the object - - - - Combine the and together - and append the attributes. - - - - - - The mapped foreground color for the specified level - - - - Required property. - The mapped foreground color for the specified level - - - - - - The mapped background color for the specified level - - - - Required property. - The mapped background color for the specified level - - - - - - The color attributes for the specified level - - - - Required property. - The color attributes for the specified level - - - - - - The combined , and - suitable for setting the ansi terminal color. - - - - - Attribute used to associate a type converter - - - - Class and Interface level attribute that specifies a type converter - to use with the associated type. - - - To associate a type converter with a target type apply a - TypeConverterAttribute to the target type. Specify the - type of the type converter on the attribute. - - - Nicko Cadell - Gert Driesen - - - - The string type name of the type converter - - - - - Default constructor - - - - Default constructor - - - - - - Create a new type converter attribute for the specified type name - - The string type name of the type converter - - - The type specified must implement the - or the interfaces. - - - - - - Create a new type converter attribute for the specified type - - The type of the type converter - - - The type specified must implement the - or the interfaces. - - - - - - The string type name of the type converter - - - The string type name of the type converter - - - - The type specified must implement the - or the interfaces. - - - - - - Base implementation of - - - - Default abstract implementation of the - interface. This base class can be used by implementors - of the interface. - - - Nicko Cadell - Gert Driesen - - - - Interface implemented by logger repository plugins. - - - - Plugins define additional behavior that can be associated - with a . - The held by the - property is used to store the plugins for a repository. - - - The log4net.Config.PluginAttribute can be used to - attach plugins to repositories created using configuration - attributes. - - - Nicko Cadell - Gert Driesen - - - - Attaches the plugin to the specified . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - - Gets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - - - - Constructor - - the name of the plugin - - Initializes a new Plugin with the specified name. - - - - - Attaches this plugin to a . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - - The name of this plugin. - - - - - The repository this plugin is attached to. - - - - - Gets or sets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - The name of the plugin must not change one the - plugin has been attached to a repository. - - - - - - The repository for this plugin - - - The that this plugin is attached to. - - - - Gets or sets the that this plugin is - attached to. - - - - - - Converter for items in the . - - - - Outputs an item from the . - - - Ron Grabowski - - - - Abstract class that provides access to the current HttpContext () that - derived classes need. - - - This class handles the case when HttpContext.Current is null by writing - to the writer. - - Ron Grabowski - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. - - - - Write the ASP.Net HttpContext item to the output - - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. - - - Writes out the value of a named property. The property name - should be set in the - property. - - - - - - This filter drops all . - - - - You can add this filter to the end of a filter chain to - switch from the default "accept all unless instructed otherwise" - filtering behavior to a "deny all unless instructed otherwise" - behavior. - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - - Always returns the integer constant - - the LoggingEvent to filter - Always returns - - - Ignores the event being logged and just returns - . This can be used to change the default filter - chain behavior from to . This filter - should only be used as the last filter in the chain - as any further filters will be ignored! - - - - - - Formats a as "HH:mm:ss,fff". - - - - Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". - - - Nicko Cadell - Gert Driesen - - - - String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. - - - - - String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. - - - - - String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. - - - - - Renders the date into a string. Format is "HH:mm:ss". - - The date to render into a string. - The string builder to write to. - - - Subclasses should override this method to render the date - into a string using a precision up to the second. This method - will be called at most once per second and the result will be - reused if it is needed again during the same second. - - - - - - Renders the date into a string. Format is "HH:mm:ss,fff". - - The date to render into a string. - The writer to write to. - - - Uses the method to generate the - time string up to the seconds and then appends the current - milliseconds. The results from are - cached and is called at most once - per second. - - - Sub classes should override - rather than . - - - - - - Last stored time with precision up to the second. - - - - - Last stored time with precision up to the second, formatted - as a string. - - - - - Last stored time with precision up to the second, formatted - as a string. - - - - - Defined error codes that can be passed to the method. - - - - Values passed to the method. - - - Nicko Cadell - - - - A general error - - - - - Error while writing output - - - - - Failed to flush file - - - - - Failed to close file - - - - - Unable to open output file - - - - - No layout specified - - - - - Failed to parse address - - - - - Assembly level attribute to configure the . - - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - If neither of the or - properties are set the configuration is loaded from the application's .config file. - If set the property takes priority over the - property. The property - specifies a path to a file to load the config from. The path is relative to the - application's base directory; . - The property is used as a postfix to the assembly file name. - The config file must be located in the application's base directory; . - For example in a console application setting the to - config has the same effect as not specifying the or - properties. - - - The property can be set to cause the - to watch the configuration file for changes. - - - - Log4net will only look for assembly level configuration attributes once. - When using the log4net assembly level attributes to control the configuration - of log4net you must ensure that the first call to any of the - methods is made from the assembly with the configuration - attributes. - - - If you cannot guarantee the order in which log4net calls will be made from - different assemblies you must use programmatic configuration instead, i.e. - call the method directly. - - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Default constructor - - - - - - Configures the for the specified assembly. - - The assembly that this attribute was defined on. - The repository to configure. - - - Configure the repository using the . - The specified must extend the - class otherwise the will not be able to - configure it. - - - The does not extend . - - - - Attempt to load configuration from the local file system - - The assembly that this attribute was defined on. - The repository to configure. - - - - Configure the specified repository using a - - The repository to configure. - the FileInfo pointing to the config file - - - - Attempt to load configuration from a URI - - The assembly that this attribute was defined on. - The repository to configure. - - - - The fully qualified type of the XmlConfiguratorAttribute class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or sets the filename of the configuration file. - - - The filename of the configuration file. - - - - If specified, this is the name of the configuration file to use with - the . This file path is relative to the - application base directory (). - - - The takes priority over the . - - - - - - Gets or sets the extension of the configuration file. - - - The extension of the configuration file. - - - - If specified this is the extension for the configuration file. - The path to the config file is built by using the application - base directory (), - the assembly file name and the config file extension. - - - If the is set to MyExt then - possible config file names would be: MyConsoleApp.exe.MyExt or - MyClassLibrary.dll.MyExt. - - - The takes priority over the . - - - - - - Gets or sets a value indicating whether to watch the configuration file. - - - true if the configuration should be watched, false otherwise. - - - - If this flag is specified and set to true then the framework - will watch the configuration file and will reload the config each time - the file is modified. - - - The config file can only be watched if it is loaded from local disk. - In a No-Touch (Smart Client) deployment where the application is downloaded - from a web server the config file may not reside on the local disk - and therefore it may not be able to watch it. - - - Watching configuration is not supported on the SSCLI. - - - - - - Assembly level attribute that specifies a plugin to attach to - the repository. - - - - Specifies the type of a plugin to create and attach to the - assembly's repository. The plugin type must implement the - interface. - - - Nicko Cadell - Gert Driesen - - - - Interface used to create plugins. - - - - Interface used to create a plugin. - - - Nicko Cadell - Gert Driesen - - - - Creates the plugin object. - - the new plugin instance - - - Create and return a new plugin instance. - - - - - - Initializes a new instance of the class - with the specified type. - - The type name of plugin to create. - - - Create the attribute with the plugin type specified. - - - Where possible use the constructor that takes a . - - - - - - Initializes a new instance of the class - with the specified type. - - The type of plugin to create. - - - Create the attribute with the plugin type specified. - - - - - - Creates the plugin object defined by this attribute. - - - - Creates the instance of the object as - specified by this attribute. - - - The plugin object. - - - - Returns a representation of the properties of this object. - - - - Overrides base class method to - return a representation of the properties of this object. - - - A representation of the properties of this object - - - - Gets or sets the type for the plugin. - - - The type for the plugin. - - - - The type for the plugin. - - - - - - Gets or sets the type name for the plugin. - - - The type name for the plugin. - - - - The type name for the plugin. - - - Where possible use the property instead. - - - - - - Appender that rolls log files based on size or date or both. - - - - RollingFileAppender can roll log files based on size or date or both - depending on the setting of the property. - When set to the log file will be rolled - once its size exceeds the . - When set to the log file will be rolled - once the date boundary specified in the property - is crossed. - When set to the log file will be - rolled once the date boundary specified in the property - is crossed, but within a date boundary the file will also be rolled - once its size exceeds the . - When set to the log file will be rolled when - the appender is configured. This effectively means that the log file can be - rolled once per program execution. - - - A of few additional optional features have been added: - - Attach date pattern for current log file - Backup number increments for newer files - Infinite number of backups by file size - - - - - - For large or infinite numbers of backup files a - greater than zero is highly recommended, otherwise all the backup files need - to be renamed each time a new backup is created. - - - When Date/Time based rolling is used setting - to will reduce the number of file renamings to few or none. - - - - - - Changing or without clearing - the log file directory of backup files will cause unexpected and unwanted side effects. - - - - - If Date/Time based rolling is enabled this appender will attempt to roll existing files - in the directory without a Date/Time tag based on the last write date of the base log file. - The appender only rolls the log file when a message is logged. If Date/Time based rolling - is enabled then the appender will not roll the log file at the Date/Time boundary but - at the point when the next message is logged after the boundary has been crossed. - - - - The extends the and - has the same behavior when opening the log file. - The appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - When rolling a backup file necessitates deleting an older backup file the - file to be deleted is moved to a temporary name before being deleted. - - - - - A maximum number of backup files when rolling on date/time boundaries is not supported. - - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - Edward Smit - - - - Appends logging events to a file. - - - - Logging events are sent to the file specified by - the property. - - - The file can be opened in either append or overwrite mode - by specifying the property. - If the file path is relative it is taken as relative from - the application base directory. The file encoding can be - specified by setting the property. - - - The layout's and - values will be written each time the file is opened and closed - respectively. If the property is - then the file may contain multiple copies of the header and footer. - - - This appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - The supports pluggable file locking models via - the property. - The default behavior, implemented by - is to obtain an exclusive write lock on the file until this appender is closed. - The alternative model, , only holds a - write lock while the appender is writing a logging event. - - - Nicko Cadell - Gert Driesen - Rodrigo B. de Oliveira - Douglas de la Torre - Niall Daley - - - - Sends logging events to a . - - - - An Appender that writes to a . - - - This appender may be used stand alone if initialized with an appropriate - writer, however it is typically used as a base class for an appender that - can open a to write to. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initializes a new instance of the class and - sets the output destination to a new initialized - with the specified . - - The layout to use with this appender. - The to output to. - - - Obsolete constructor. - - - - - - Initializes a new instance of the class and sets - the output destination to the specified . - - The layout to use with this appender - The to output to - - The must have been previously opened. - - - - Obsolete constructor. - - - - - - This method determines if there is a sense in attempting to append. - - - - This method checks if an output target has been set and if a - layout has been set. - - - false if any of the preconditions fail. - - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - - This method is called by the - method. - - The array of events to log. - - - This method writes all the bulk logged events to the output writer - before flushing the stream. - - - - - - Close this appender instance. The underlying stream or writer is also closed. - - - Closed appenders cannot be reused. - - - - - Writes the footer and closes the underlying . - - - - Writes the footer and closes the underlying . - - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - - Clears internal references to the underlying - and other variables. - - - - Subclasses can override this method for an alternate closing behavior. - - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - - Called to allow a subclass to lazily initialize the writer - - - - This method is called when an event is logged and the or - have not been set. This allows a subclass to - attempt to initialize the writer multiple times. - - - - - - This is the where logging events - will be written to. - - - - - Immediate flush means that the underlying - or output stream will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logging events are not actually persisted if and when the application - crashes. - - - The default value is true. - - - - - - The fully qualified type of the TextWriterAppender class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or set whether the appender will flush at the end - of each append operation. - - - - The default behavior is to flush at the end of each - append operation. - - - If this option is set to false, then the underlying - stream can defer persisting the logging event to a later - time. - - - - Avoiding the flush operation at the end of each append results in - a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - Sets the where the log output will go. - - - - The specified must be open and writable. - - - The will be closed when the appender - instance is closed. - - - Note: Logging to an unopened will fail. - - - - - - Gets or set the and the underlying - , if any, for this appender. - - - The for this appender. - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Gets or sets the where logging events - will be written to. - - - The where logging events are written. - - - - This is the where logging events - will be written to. - - - - - - Default constructor - - - - Default constructor - - - - - - Construct a new appender using the layout, file and append mode. - - the layout to use with this appender - the full path to the file to write to - flag to indicate if the file should be appended to - - - Obsolete constructor. - - - - - - Construct a new appender using the layout and file specified. - The file will be appended to. - - the layout to use with this appender - the full path to the file to write to - - - Obsolete constructor. - - - - - - Activate the options on the file appender. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This will cause the file to be opened. - - - - - - Closes any previously opened file and calls the parent's . - - - - Resets the filename and the file stream. - - - - - - Called to initialize the file writer - - - - Will be called for each logged message until the file is - successfully opened. - - - - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - - This method is called by the - method. - - The array of events to log. - - - Acquires the output file locks once before writing all the events to - the stream. - - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - - Closes the previously opened file. - - - - Writes the to the file and then - closes the file. - - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - Calls but guarantees not to throw an exception. - Errors are passed to the . - - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - If there was already an opened file, then the previous file - is closed first. - - - This method will ensure that the directory structure - for the specified exists. - - - - - - Sets the quiet writer used for file output - - the file stream that has been opened for writing - - - This implementation of creates a - over the and passes it to the - method. - - - This method can be overridden by sub classes that want to wrap the - in some way, for example to encrypt the output - data using a System.Security.Cryptography.CryptoStream. - - - - - - Sets the quiet writer being used. - - the writer over the file stream that has been opened for writing - - - This method can be overridden by sub classes that want to - wrap the in some way. - - - - - - Convert a path into a fully qualified path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - - - - Flag to indicate if we should append to the file - or overwrite the file. The default is to append. - - - - - The name of the log file. - - - - - The encoding to use for the file stream. - - - - - The security context to use for privileged calls - - - - - The stream to log to. Has added locking semantics - - - - - The locking model to use - - - - - The fully qualified type of the FileAppender class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or sets the path to the file that logging will be written to. - - - The path to the file that logging will be written to. - - - - If the path is relative it is taken as relative from - the application base directory. - - - - - - Gets or sets a flag that indicates whether the file should be - appended to or overwritten. - - - Indicates whether the file should be appended to or overwritten. - - - - If the value is set to false then the file will be overwritten, if - it is set to true then the file will be appended to. - - The default value is true. - - - - - Gets or sets used to write to the file. - - - The used to write to the file. - - - - The default encoding set is - which is the encoding for the system's current ANSI code page. - - - - - - Gets or sets the used to write to the file. - - - The used to write to the file. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - Gets or sets the used to handle locking of the file. - - - The used to lock the file. - - - - Gets or sets the used to handle locking of the file. - - - There are two built in locking models, and . - The former locks the file from the start of logging to the end and the - later lock only for the minimal amount of time when logging each message. - - - The default locking model is the . - - - - - - Write only that uses the - to manage access to an underlying resource. - - - - - True asynchronous writes are not supported, the implementation forces a synchronous write. - - - - - Exception base type for log4net. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class with - the specified message. - - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - - Serialization constructor - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - - Locking model base class - - - - Base class for the locking models available to the derived loggers. - - - - - - Open the output file - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - - Helper method that creates a FileStream under CurrentAppender's SecurityContext. - - - - Typically called during OpenFile or AcquireLock. - - - If the directory portion of the does not exist, it is created - via Directory.CreateDirecctory. - - - - - - - - - - Helper method to close under CurrentAppender's SecurityContext. - - - Does not set to null. - - - - - - Gets or sets the for this LockingModel - - - The for this LockingModel - - - - The file appender this locking model is attached to and working on - behalf of. - - - The file appender is used to locate the security context and the error handler to use. - - - The value of this property will be set before is - called. - - - - - - Hold an exclusive lock on the output file - - - - Open the file once for writing and hold it open until is called. - Maintains an exclusive lock on the file during this time. - - - - - - Open the file specified and prepare for logging. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Does nothing. The lock is already taken - - - - - - Release the lock on the file - - - - Does nothing. The lock will be released when the file is closed. - - - - - - Acquires the file lock for each write - - - - Opens the file once for each / cycle, - thus holding the lock for the minimal amount of time. This method of locking - is considerably slower than but allows - other processes to move/delete the log file whilst logging continues. - - - - - - Prepares to open the file when the first message is logged. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - - Provides cross-process file locking. - - Ron Grabowski - Steve Wranovsky - - - - Open the file specified and prepare for logging. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Does nothing. The lock is already taken - - - - - - - - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - The fully qualified type of the RollingFileAppender class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Sets the quiet writer being used. - - - This method can be overridden by sub classes. - - the writer to set - - - - Write out a logging event. - - the event to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Write out an array of logging events. - - the events to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Performs any required rolling before outputting the next event - - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Creates and opens the file for logging. If - is false then the fully qualified name is determined and used. - - the name of the file to open - true to append to existing file - - This method will ensure that the directory structure - for the specified exists. - - - - - Get the current output file name - - the base file name - the output file name - - The output file name is based on the base fileName specified. - If is set then the output - file name is the same as the base file passed in. Otherwise - the output file depends on the date pattern, on the count - direction or both. - - - - - Determines curSizeRollBackups (only within the current roll point) - - - - - Generates a wildcard pattern that can be used to find all files - that are similar to the base file name. - - - - - - - Builds a list of filenames for all files matching the base filename plus a file - pattern. - - - - - - - Initiates a roll over if needed for crossing a date boundary since the last run. - - - - - Initializes based on existing conditions at time of . - - - - Initializes based on existing conditions at time of . - The following is done - - determine curSizeRollBackups (only within the current roll point) - initiates a roll over if needed for crossing a date boundary since the last run. - - - - - - - Does the work of bumping the 'current' file counter higher - to the highest count when an incremental file name is seen. - The highest count is either the first file (when count direction - is greater than 0) or the last file (when count direction less than 0). - In either case, we want to know the highest count that is present. - - - - - - - Attempts to extract a number from the end of the file name that indicates - the number of the times the file has been rolled over. - - - Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. - - - - - - - Takes a list of files and a base file name, and looks for - 'incremented' versions of the base file. Bumps the max - count up to the highest count seen. - - - - - - - Calculates the RollPoint for the datePattern supplied. - - the date pattern to calculate the check period for - The RollPoint that is most accurate for the date pattern supplied - - Essentially the date pattern is examined to determine what the - most suitable roll point is. The roll point chosen is the roll point - with the smallest period that can be detected using the date pattern - supplied. i.e. if the date pattern only outputs the year, month, day - and hour then the smallest roll point that can be detected would be - and hourly roll point as minutes could not be detected. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Sets initial conditions including date/time roll over information, first check, - scheduledFilename, and calls to initialize - the current number of backups. - - - - - - - - - .1, .2, .3, etc. - - - - - Rollover the file(s) to date/time tagged file(s). - - set to true if the file to be rolled is currently open - - - Rollover the file(s) to date/time tagged file(s). - Resets curSizeRollBackups. - If fileIsOpen is set then the new file is opened (through SafeOpenFile). - - - - - - Renames file to file . - - Name of existing file to roll. - New name for file. - - - Renames file to file . It - also checks for existence of target file and deletes if it does. - - - - - - Test if a file exists at a specified path - - the path to the file - true if the file exists - - - Test if a file exists at a specified path - - - - - - Deletes the specified file if it exists. - - The file to delete. - - - Delete a file if is exists. - The file is first moved to a new filename then deleted. - This allows the file to be removed even when it cannot - be deleted, but it still can be moved. - - - - - - Implements file roll base on file size. - - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. Moreover, File is - renamed File.1 and closed. - - - A new file is created to receive further log output. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - - - - Implements file roll. - - the base name to rename - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - This is called by to rename the files. - - - - - - Get the start time of the next window for the current rollpoint - - the current date - the type of roll point we are working with - the start time for the next roll point an interval after the currentDateTime date - - - Returns the date of the next roll point after the currentDateTime date passed to the method. - - - The basic strategy is to subtract the time parts that are less significant - than the rollpoint from the current time. This should roll the time back to - the start of the time window for the current rollpoint. Then we add 1 window - worth of time and get the start time of the next window for the rollpoint. - - - - - - This object supplies the current date/time. Allows test code to plug in - a method to control this class when testing date/time based rolling. The default - implementation uses the underlying value of DateTime.Now. - - - - - The date pattern. By default, the pattern is set to ".yyyy-MM-dd" - meaning daily rollover. - - - - - The actual formatted filename that is currently being written to - or will be the file transferred to on roll over - (based on staticLogFileName). - - - - - The timestamp when we shall next recompute the filename. - - - - - Holds date of last roll over - - - - - The type of rolling done - - - - - The default maximum file size is 10MB - - - - - There is zero backup files by default - - - - - How many sized based backups have been made so far - - - - - The rolling file count direction. - - - - - The rolling mode used in this appender. - - - - - Cache flag set if we are rolling by date. - - - - - Cache flag set if we are rolling by size. - - - - - Value indicating whether to always log to the same file. - - - - - Value indicating whether to preserve the file name extension when rolling. - - - - - FileName provided in configuration. Used for rolling properly - - - - - The 1st of January 1970 in UTC - - - - - Gets or sets the strategy for determining the current date and time. The default - implementation is to use LocalDateTime which internally calls through to DateTime.Now. - DateTime.UtcNow may be used by specifying - . - - - An implementation of the interface which returns the current date and time. - - - - Gets or sets the used to return the current date and time. - - - There are two built strategies for determining the current date and time, - and . - - - The default strategy is . - - - - - - Gets or sets the date pattern to be used for generating file names - when rolling over on date. - - - The date pattern to be used for generating file names when rolling - over on date. - - - - Takes a string in the same format as expected by - . - - - This property determines the rollover schedule when rolling over - on date. - - - - - - Gets or sets the maximum number of backup files that are kept before - the oldest is erased. - - - The maximum number of backup files that are kept before the oldest is - erased. - - - - If set to zero, then there will be no backup files and the log file - will be truncated when it reaches . - - - If a negative number is supplied then no deletions will be made. Note - that this could result in very slow performance as a large number of - files are rolled over unless is used. - - - The maximum applies to each time based group of files and - not the total. - - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size in bytes that the output file is allowed to reach before being - rolled over to backup files. - - - - This property is equivalent to except - that it is required for differentiating the setter taking a - argument from the setter taking a - argument. - - - The default maximum file size is 10MB (10*1024*1024). - - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size that the output file is allowed to reach before being - rolled over to backup files. - - - - This property allows you to specify the maximum size with the - suffixes "KB", "MB" or "GB" so that the size is interpreted being - expressed respectively in kilobytes, megabytes or gigabytes. - - - For example, the value "10KB" will be interpreted as 10240 bytes. - - - The default maximum file size is 10MB. - - - If you have the option to set the maximum file size programmatically - consider using the property instead as this - allows you to set the size in bytes as a . - - - - - - Gets or sets the rolling file count direction. - - - The rolling file count direction. - - - - Indicates if the current file is the lowest numbered file or the - highest numbered file. - - - By default newer files have lower numbers ( < 0), - i.e. log.1 is most recent, log.5 is the 5th backup, etc... - - - >= 0 does the opposite i.e. - log.1 is the first backup made, log.5 is the 5th backup made, etc. - For infinite backups use >= 0 to reduce - rollover costs. - - The default file count direction is -1. - - - - - Gets or sets the rolling style. - - The rolling style. - - - The default rolling style is . - - - When set to this appender's - property is set to false, otherwise - the appender would append to a single file rather than rolling - the file each time it is opened. - - - - - - Gets or sets a value indicating whether to preserve the file name extension when rolling. - - - true if the file name extension should be preserved. - - - - By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. - However, under Windows the new file name will loose any program associations as the - extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or - file.curSizeRollBackup.log to maintain any program associations. - - - - - - Gets or sets a value indicating whether to always log to - the same file. - - - true if always should be logged to the same file, otherwise false. - - - - By default file.log is always the current file. Optionally - file.log.yyyy-mm-dd for current formatted datePattern can by the currently - logging file (or file.log.curSizeRollBackup or even - file.log.yyyy-mm-dd.curSizeRollBackup). - - - This will make time based rollovers with a large number of backups - much faster as the appender it won't have to rename all the backups! - - - - - - Style of rolling to use - - - - Style of rolling to use - - - - - - Roll files once per program execution - - - - Roll files once per program execution. - Well really once each time this appender is - configured. - - - Setting this option also sets AppendToFile to - false on the RollingFileAppender, otherwise - this appender would just be a normal file appender. - - - - - - Roll files based only on the size of the file - - - - - Roll files based only on the date - - - - - Roll files based on both the size and date of the file - - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - - - Roll the log not based on the date - - - - - Roll the log for each minute - - - - - Roll the log for each hour - - - - - Roll the log twice a day (midday and midnight) - - - - - Roll the log each day (midnight) - - - - - Roll the log each week - - - - - Roll the log each month - - - - - This interface is used to supply Date/Time information to the . - - - This interface is used to supply Date/Time information to the . - Used primarily to allow test classes to plug themselves in so they can - supply test date/times. - - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - - Default implementation of that returns the current time. - - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - - Implementation of that returns the current time as the coordinated universal time (UTC). - - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - - Logs events to a local syslog service. - - - - This appender uses the POSIX libc library functions openlog, syslog, and closelog. - If these functions are not available on the local system then this appender will not work! - - - The functions openlog, syslog, and closelog are specified in SUSv2 and - POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. - - - This appender talks to a local syslog service. If you need to log to a remote syslog - daemon and you cannot configure your local syslog service to do this you may be - able to use the to log via UDP. - - - Syslog messages must have a facility and and a severity. The severity - is derived from the Level of the logging event. - The facility must be chosen from the set of defined syslog - values. The facilities list is predefined - and cannot be extended. - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - Rob Lyon - Nicko Cadell - - - - Initializes a new instance of the class. - - - This instance of the class is set up to write - to a local syslog service. - - - - - Add a mapping of level to severity - - The mapping to add - - - Adds a to this appender. - - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to a remote syslog daemon. - - - The format of the output will depend on the appender's layout. - - - - - - Close the syslog when the appender is closed - - - - Close the syslog when the appender is closed - - - - - - Translates a log4net level to a syslog severity. - - A log4net level. - A syslog severity. - - - Translates a log4net level to a syslog severity. - - - - - - Generate a syslog priority. - - The syslog facility. - The syslog severity. - A syslog priority. - - - - The facility. The default facility is . - - - - - The message identity - - - - - Marshaled handle to the identity string. We have to hold on to the - string as the openlog and syslog APIs just hold the - pointer to the ident and dereference it for each log message. - - - - - Mapping from level object to syslog severity - - - - - Open connection to system logger. - - - - - Generate a log message. - - - - The libc syslog method takes a format string and a variable argument list similar - to the classic printf function. As this type of vararg list is not supported - by C# we need to specify the arguments explicitly. Here we have specified the - format string with a single message argument. The caller must set the format - string to "%s". - - - - - - Close descriptor used to write to system logger. - - - - - Message identity - - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - - - - Syslog facility - - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - syslog severities - - - - The log4net Level maps to a syslog severity using the - method and the - class. The severity is set on . - - - - - - system is unusable - - - - - action must be taken immediately - - - - - critical conditions - - - - - error conditions - - - - - warning conditions - - - - - normal but significant condition - - - - - informational - - - - - debug-level messages - - - - - syslog facilities - - - - The syslog facility defines which subsystem the logging comes from. - This is set on the property. - - - - - - kernel messages - - - - - random user-level messages - - - - - mail system - - - - - system daemons - - - - - security/authorization messages - - - - - messages generated internally by syslogd - - - - - line printer subsystem - - - - - network news subsystem - - - - - UUCP subsystem - - - - - clock (cron/at) daemon - - - - - security/authorization messages (private) - - - - - ftp daemon - - - - - NTP subsystem - - - - - log audit - - - - - log alert - - - - - clock daemon - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - - - The mapped syslog severity for the specified level - - - - Required property. - The mapped syslog severity for the specified level - - - - - - Abstract base class implementation of that - buffers events in a fixed size buffer. - - - - This base class should be used by appenders that need to buffer a - number of events before logging them. For example the - buffers events and then submits the entire contents of the buffer to - the underlying database in one go. - - - Subclasses should override the - method to deliver the buffered events. - - The BufferingAppenderSkeleton maintains a fixed size cyclic - buffer of events. The size of the buffer is set using - the property. - - A is used to inspect - each event as it arrives in the appender. If the - triggers, then the current buffer is sent immediately - (see ). Otherwise the event - is stored in the buffer. For example, an evaluator can be used to - deliver the events immediately when an ERROR event arrives. - - - The buffering appender can be configured in a mode. - By default the appender is NOT lossy. When the buffer is full all - the buffered events are sent with . - If the property is set to true then the - buffer will not be sent when it is full, and new events arriving - in the appender will overwrite the oldest event in the buffer. - In lossy mode the buffer will only be sent when the - triggers. This can be useful behavior when you need to know about - ERROR events but not about events with a lower level, configure an - evaluator that will trigger when an ERROR event arrives, the whole - buffer will be sent which gives a history of events leading up to - the ERROR event. - - - Nicko Cadell - Gert Driesen - - - - The default buffer size. - - - The default size of the cyclic buffer used to store events. - This is set to 512 by default. - - - - - Initializes a new instance of the class. - - - - Protected default constructor to allow subclassing. - - - - - - Initializes a new instance of the class. - - the events passed through this appender must be - fixed by the time that they arrive in the derived class' SendBuffer method. - - - Protected constructor to allow subclassing. - - - The should be set if the subclass - expects the events delivered to be fixed even if the - is set to zero, i.e. when no buffering occurs. - - - - - - Flush the currently buffered events - - - - Flushes any events that have been buffered. - - - If the appender is buffering in mode then the contents - of the buffer will NOT be flushed to the appender. - - - - - - Flush the currently buffered events - - set to true to flush the buffer of lossy events - - - Flushes events that have been buffered. If is - false then events will only be flushed if this buffer is non-lossy mode. - - - If the appender is buffering in mode then the contents - of the buffer will only be flushed if is true. - In this case the contents of the buffer will be tested against the - and if triggering will be output. All other buffered - events will be discarded. - - - If is true then the buffer will always - be emptied by calling this method. - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Close this appender instance. - - - - Close this appender instance. If this appender is marked - as not then the remaining events in - the buffer must be sent when the appender is closed. - - - - - - This method is called by the method. - - the event to log - - - Stores the in the cyclic buffer. - - - The buffer will be sent (i.e. passed to the - method) if one of the following conditions is met: - - - - The cyclic buffer is full and this appender is - marked as not lossy (see ) - - - An is set and - it is triggered for the - specified. - - - - Before the event is stored in the buffer it is fixed - (see ) to ensure that - any data referenced by the event will be valid when the buffer - is processed. - - - - - - Sends the contents of the buffer. - - The first logging event. - The buffer containing the events that need to be send. - - - The subclass must override . - - - - - - Sends the events. - - The events that need to be send. - - - The subclass must override this method to process the buffered events. - - - - - - The size of the cyclic buffer used to hold the logging events. - - - Set to by default. - - - - - The cyclic buffer used to store the logging events. - - - - - The triggering event evaluator that causes the buffer to be sent immediately. - - - The object that is used to determine if an event causes the entire - buffer to be sent immediately. This field can be null, which - indicates that event triggering is not to be done. The evaluator - can be set using the property. If this appender - has the ( property) set to - true then an must be set. - - - - - Indicates if the appender should overwrite events in the cyclic buffer - when it becomes full, or if the buffer should be flushed when the - buffer is full. - - - If this field is set to true then an must - be set. - - - - - The triggering event evaluator filters discarded events. - - - The object that is used to determine if an event that is discarded should - really be discarded or if it should be sent to the appenders. - This field can be null, which indicates that all discarded events will - be discarded. - - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - - The events delivered to the subclass must be fixed. - - - - - Gets or sets a value that indicates whether the appender is lossy. - - - true if the appender is lossy, otherwise false. The default is false. - - - - This appender uses a buffer to store logging events before - delivering them. A triggering event causes the whole buffer - to be send to the remote sink. If the buffer overruns before - a triggering event then logging events could be lost. Set - to false to prevent logging events - from being lost. - - If is set to true then an - must be specified. - - - - - Gets or sets the size of the cyclic buffer used to hold the - logging events. - - - The size of the cyclic buffer used to hold the logging events. - - - - The option takes a positive integer - representing the maximum number of logging events to collect in - a cyclic buffer. When the is reached, - oldest events are deleted as new events are added to the - buffer. By default the size of the cyclic buffer is 512 events. - - - If the is set to a value less than - or equal to 1 then no buffering will occur. The logging event - will be delivered synchronously (depending on the - and properties). Otherwise the event will - be buffered. - - - - - - Gets or sets the that causes the - buffer to be sent immediately. - - - The that causes the buffer to be - sent immediately. - - - - The evaluator will be called for each event that is appended to this - appender. If the evaluator triggers then the current buffer will - immediately be sent (see ). - - If is set to true then an - must be specified. - - - - - Gets or sets the value of the to use. - - - The value of the to use. - - - - The evaluator will be called for each event that is discarded from this - appender. If the evaluator triggers then the current buffer will immediately - be sent (see ). - - - - - - Gets or sets a value indicating if only part of the logging event data - should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the - event data to be fixed and serialized. This will improve performance. - - - See for more information. - - - - - - Gets or sets a the fields that will be fixed in the event - - - The event fields that will be fixed before the event is buffered - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - - - Impersonate a Windows Account - - - - This impersonates a Windows account. - - - How the impersonation is done depends on the value of . - This allows the context to either impersonate a set of user credentials specified - using username, domain name and password or to revert to the process credentials. - - - - - - A SecurityContext used by log4net when interacting with protected resources - - - - A SecurityContext used by log4net when interacting with protected resources - for example with operating system services. This can be used to impersonate - a principal that has been granted privileges on the system resources. - - - Nicko Cadell - - - - Impersonate this SecurityContext - - State supplied by the caller - An instance that will - revoke the impersonation of this SecurityContext, or null - - - Impersonate this security context. Further calls on the current - thread should now be made in the security context provided - by this object. When the result - method is called the security - context of the thread should be reverted to the state it was in - before was called. - - - - - - Default constructor - - - - Default constructor - - - - - - Initialize the SecurityContext based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The security context will try to Logon the specified user account and - capture a primary token for impersonation. - - - The required , - or properties were not specified. - - - - Impersonate the Windows account specified by the and properties. - - caller provided state - - An instance that will revoke the impersonation of this SecurityContext - - - - Depending on the property either - impersonate a user using credentials supplied or revert - to the process credentials. - - - - - - Create a given the userName, domainName and password. - - the user name - the domain name - the password - the for the account specified - - - Uses the Windows API call LogonUser to get a principal token for the account. This - token is used to initialize the WindowsIdentity. - - - - - - Gets or sets the impersonation mode for this security context - - - The impersonation mode for this security context - - - - Impersonate either a user with user credentials or - revert this thread to the credentials of the process. - The value is one of the - enum. - - - The default value is - - - When the mode is set to - the user's credentials are established using the - , and - values. - - - When the mode is set to - no other properties need to be set. If the calling thread is - impersonating then it will be reverted back to the process credentials. - - - - - - Gets or sets the Windows username for this security context - - - The Windows username for this security context - - - - This property must be set if - is set to (the default setting). - - - - - - Gets or sets the Windows domain name for this security context - - - The Windows domain name for this security context - - - - The default value for is the local machine name - taken from the property. - - - This property must be set if - is set to (the default setting). - - - - - - Sets the password for the Windows account specified by the and properties. - - - The password for the Windows account specified by the and properties. - - - - This property must be set if - is set to (the default setting). - - - - - - The impersonation modes for the - - - - See the property for - details. - - - - - - Impersonate a user using the credentials supplied - - - - - Revert this the thread to the credentials of the process - - - - - Adds to - - - - Helper class to expose the - through the interface. - - - - - - Constructor - - the impersonation context being wrapped - - - Constructor - - - - - - Revert the impersonation - - - - Revert the impersonation - - - - - - Interface supported by type converters - - - - This interface supports conversion from arbitrary types - to a single target type. See . - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Test if the can be converted to the - type supported by this converter. - - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Converts the to the type supported - by this converter. - - - - - - Write the UTC date time to the output - - - - Date pattern converter, uses a to format - the current date and time in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - - Write the current date to the output - - - - Date pattern converter, uses a to format - the current date and time to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the - method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - - The date and time is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write the current date to the output - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date and time passed is in the local time zone. - - - - - - The fully qualified type of the DatePatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Write the current date and time to the output - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date is in Universal time when it is rendered. - - - - - - - The fully qualified type of the UtcDatePatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Write the current process ID to the output - - - - Write the current process ID to the output writer - - - Nicko Cadell - - - - Write the current process ID to the output - - the writer to write to - null, state is not set - - - Write the current process ID to the output . - - - - - - The fully qualified type of the ProcessIdPatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Test if the enumerator can advance, if so advance - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - - The singleton instance of the . - - - - - Get the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Extract the date from the - - - - Extract the date from the - - - Nicko Cadell - Gert Driesen - - - - Interface for raw layout objects - - - - Interface used to format a - to an object. - - - This interface should not be confused with the - interface. This interface is used in - only certain specialized situations where a raw object is - required rather than a formatted string. The - is not generally useful than this interface. - - - Nicko Cadell - Gert Driesen - - - - Implement this method to create your own layout format. - - The event to format - returns the formatted event - - - Implement this method to create your own layout format. - - - - - - Constructs a RawTimeStampLayout - - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in local time. To format the time stamp - in universal time use . - - - - - - Write the caller stack frames to the output - - - - Writes the to the output writer, using format: - type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 - - - Michael Cromwell - - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write the strack frames to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the output writer. - - - - - - Returns the Name of the method - - - This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter - string - - - - The fully qualified type of the StackTracePatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Converter to output the relative time of the event - - - - Converter to output the time of the event relative to the start of the program. - - - Nicko Cadell - - - - Write the relative time to the output - - that will receive the formatted result. - the event being logged - - - Writes out the relative time of the event in milliseconds. - That is the number of milliseconds between the event - and the . - - - - - - Helper method to get the time difference between two DateTime objects - - start time (in the current local time zone) - end time (in the current local time zone) - the time difference in milliseconds - - - - Converter for logger name - - - - Outputs the of the event. - - - Nicko Cadell - - - - Gets the fully qualified name of the logger - - the event being logged - The fully qualified logger name - - - Returns the of the . - - - - - - Delegate used to handle logger repository creation event notifications - - The which created the repository. - The event args - that holds the instance that has been created. - - - Delegate used to handle logger repository creation event notifications. - - - - - - Provides data for the event. - - - - A - event is raised every time a is created. - - - - - - The created - - - - - Construct instance using specified - - the that has been created - - - Construct instance using specified - - - - - - The that has been created - - - The that has been created - - - - The that has been created - - - - - - Interface used by the to select the . - - - - The uses a - to specify the policy for selecting the correct - to return to the caller. - - - Nicko Cadell - Gert Driesen - - - - Gets the for the specified assembly. - - The assembly to use to lookup to the - The for the assembly. - - - Gets the for the specified assembly. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. The results of this method must be repeatable, i.e. - when called again with the same arguments the result must be the - save value. - - - - - - Gets the named . - - The name to use to lookup to the . - The named - - Lookup a named . This is the repository created by - calling . - - - - - Creates a new repository for the assembly specified. - - The assembly to use to create the domain to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the domain - specified such that a call to with the - same assembly specified will return the same repository instance. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. - - - - - - Creates a new repository with the name specified. - - The name to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the name - specified such that a call to with the - same name will return the same repository instance. - - - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets an array of all currently defined repositories. - - - An array of the instances created by - this . - - - Gets an array of all of the repositories created by this selector. - - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - Assembly level attribute that specifies the logging repository for the assembly. - - - - Assemblies are mapped to logging repository. This attribute specified - on the assembly controls - the configuration of the repository. The property specifies the name - of the repository that this assembly is a part of. The - specifies the type of the object - to create for the assembly. If this attribute is not specified or a - is not specified then the assembly will be part of the default shared logging repository. - - - This attribute can only be specified on the assembly and may only be used - once per assembly. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initialize a new instance of the class - with the name of the repository. - - The name of the repository. - - - Initialize the attribute with the name for the assembly's repository. - - - - - - Gets or sets the name of the logging repository. - - - The string name to use as the name of the repository associated with this - assembly. - - - - This value does not have to be unique. Several assemblies can share the - same repository. They will share the logging configuration of the repository. - - - - - - Gets or sets the type of repository to create for this assembly. - - - The type of repository to create for this assembly. - - - - The type of the repository to create for the assembly. - The type must implement the - interface. - - - This will be the type of repository created when - the repository is created. If multiple assemblies reference the - same repository then the repository is only created once using the - of the first assembly to call into the - repository. - - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - The repository to configure. - - - - Configures log4net using a log4net element - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The element to parse. - - - - Configures the using the specified XML - element. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures log4net using the specified configuration file. - - A stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures log4net using the file specified, monitors the file for changes - and reloads the configuration if a change is detected. - - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Configures the using the file specified, - monitors the file for changes and reloads the configuration if a change - is detected. - - The repository to configure. - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Assembly level attribute that specifies the logging domain for the assembly. - - - - DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - Assemblies are mapped to logging domains. Each domain has its own - logging repository. This attribute specified on the assembly controls - the configuration of the domain. The property specifies the name - of the domain that this assembly is a part of. The - specifies the type of the repository objects to create for the domain. If - this attribute is not specified and a is not specified - then the assembly will be part of the default shared logging domain. - - - This attribute can only be specified on the assembly and may only be used - once per assembly. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - - - - Initialize a new instance of the class - with the name of the domain. - - The name of the domain. - - - Obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - - - - Delivers logging events to a remote logging sink. - - - - This Appender is designed to deliver events to a remote sink. - That is any object that implements the - interface. It delivers the events using .NET remoting. The - object to deliver events to is specified by setting the - appenders property. - - The RemotingAppender buffers events before sending them. This allows it to - make more efficient use of the remoting infrastructure. - - Once the buffer is full the events are still not sent immediately. - They are scheduled to be sent using a pool thread. The effect is that - the send occurs asynchronously. This is very important for a - number of non obvious reasons. The remoting infrastructure will - flow thread local variables (stored in the ), - if they are marked as , across the - remoting boundary. If the server is not contactable then - the remoting infrastructure will clear the - objects from the . To prevent a logging failure from - having side effects on the calling application the remoting call must be made - from a separate thread to the one used by the application. A - thread is used for this. If no thread is available then - the events will block in the thread pool manager until a thread is available. - - Because the events are sent asynchronously using pool threads it is possible to close - this appender before all the queued events have been sent. - When closing the appender attempts to wait until all the queued events have been sent, but - this will timeout after 30 seconds regardless. - - If this appender is being closed because the - event has fired it may not be possible to send all the queued events. During process - exit the runtime limits the time that a - event handler is allowed to run for. If the runtime terminates the threads before - the queued events have been sent then they will be lost. To ensure that all events - are sent the appender must be closed before the application exits. See - for details on how to shutdown - log4net programmatically. - - - Nicko Cadell - Gert Driesen - Daniel Cazzulino - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Send the contents of the buffer to the remote sink. - - - The events are not sent immediately. They are scheduled to be sent - using a pool thread. The effect is that the send occurs asynchronously. - This is very important for a number of non obvious reasons. The remoting - infrastructure will flow thread local variables (stored in the ), - if they are marked as , across the - remoting boundary. If the server is not contactable then - the remoting infrastructure will clear the - objects from the . To prevent a logging failure from - having side effects on the calling application the remoting call must be made - from a separate thread to the one used by the application. A - thread is used for this. If no thread is available then - the events will block in the thread pool manager until a thread is available. - - The events to send. - - - - Override base class close. - - - - This method waits while there are queued work items. The events are - sent asynchronously using work items. These items - will be sent once a thread pool thread is available to send them, therefore - it is possible to close the appender before all the queued events have been - sent. - - This method attempts to wait until all the queued events have been sent, but this - method will timeout after 30 seconds regardless. - - If the appender is being closed because the - event has fired it may not be possible to send all the queued events. During process - exit the runtime limits the time that a - event handler is allowed to run for. - - - - - A work item is being queued into the thread pool - - - - - A work item from the thread pool has completed - - - - - Send the contents of the buffer to the remote sink. - - - This method is designed to be used with the . - This method expects to be passed an array of - objects in the state param. - - the logging events to send - - - - The URL of the remote sink. - - - - - The local proxy (.NET remoting) for the remote logging sink. - - - - - The number of queued callbacks currently waiting or executing - - - - - Event used to signal when there are no queued work items - - - This event is set when there are no queued work items. In this - state it is safe to close the appender. - - - - - Gets or sets the URL of the well-known object that will accept - the logging events. - - - The well-known URL of the remote sink. - - - - The URL of the remoting sink that will accept logging events. - The sink must implement the - interface. - - - - - - Interface used to deliver objects to a remote sink. - - - This interface must be implemented by a remoting sink - if the is to be used - to deliver logging events to the sink. - - - - - Delivers logging events to the remote sink - - Array of events to log. - - - Delivers logging events to the remote sink - - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - debug system. - - - Events are written using the - method. The event's logger name is passed as the value for the category name to the Write method. - - - Nicko Cadell - - - - Initializes a new instance of the . - - - - Default constructor. - - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - If is true then the - is called. - - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - String keyed object map. - - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - - String keyed object map that is read only. - - - - This collection is readonly and cannot be modified. - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - - The Hashtable used to store the properties data - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Copy Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - - Deserialization constructor - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - - Gets the key names. - - An array of all the keys. - - - Gets the key names. - - - - - - Test if the dictionary contains a specified key - - the key to look for - true if the dictionary contains the specified key - - - Test if the dictionary contains a specified key - - - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - Serializes this object into the provided. - - - - - - See - - - - - See - - - - - - See - - - - - - - Remove all properties from the properties collection - - - - - See - - - - - - - See - - - - - - - See - - - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - - The hashtable used to store the properties - - - The internal collection used to store the properties - - - - The hashtable used to store the properties - - - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - The number of properties in this collection - - - - - See - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Because this class is sealed the serialization constructor is private. - - - - - - Remove the entry with the specified key from this dictionary - - the key for the entry to remove - - - Remove the entry with the specified key from this dictionary - - - - - - See - - an enumerator - - - Returns a over the contest of this collection. - - - - - - See - - the key to remove - - - Remove the entry with the specified key from this dictionary - - - - - - See - - the key to lookup in the collection - true if the collection contains the specified key - - - Test if this collection contains a specified key. - - - - - - Remove all properties from the properties collection - - - - Remove all properties from the properties collection - - - - - - See - - the key - the value to store for the key - - - Store a value for the specified . - - - Thrown if the is not a string - - - - See - - - - - - - See - - - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - - See - - - false - - - - This collection is modifiable. This property always - returns false. - - - - - - See - - - The value for the key specified. - - - - Get or set a value for the specified . - - - Thrown if the is not a string - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - - - - - - - - Outputs log statements from within the log4net assembly. - - - - Log4net components cannot make log4net logging calls. However, it is - sometimes useful for the user to learn about what log4net is - doing. - - - All log4net internal debug calls go to the standard output stream - whereas internal error messages are sent to the standard error output - stream. - - - Nicko Cadell - Gert Driesen - - - - Formats Prefix, Source, and Message in the same format as the value - sent to Console.Out and Trace.Write. - - - - - - Initializes a new instance of the class. - - - - - - - - - Static constructor that initializes logging by reading - settings from the application configuration file. - - - - The log4net.Internal.Debug application setting - controls internal debugging. This setting should be set - to true to enable debugging. - - - The log4net.Internal.Quiet application setting - suppresses all internal logging including error messages. - This setting should be set to true to enable message - suppression. - - - - - - Raises the LogReceived event when an internal messages is received. - - - - - - - - - Writes log4net internal debug messages to the - standard output stream. - - - The message to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - - Writes log4net internal debug messages to the - standard output stream. - - The Type that generated this message. - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - - Writes log4net internal warning messages to the - standard error stream. - - The Type that generated this message. - The message to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - - Writes log4net internal warning messages to the - standard error stream. - - The Type that generated this message. - The message to log. - An exception to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - - Writes log4net internal error messages to the - standard error stream. - - The Type that generated this message. - The message to log. - - - All internal error messages are prepended with - the string "log4net:ERROR ". - - - - - - Writes log4net internal error messages to the - standard error stream. - - The Type that generated this message. - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net:ERROR ". - - - - - - Writes output to the standard output stream. - - The message to log. - - - Writes to both Console.Out and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - - Writes output to the standard error stream. - - The message to log. - - - Writes to both Console.Error and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - - Default debug level - - - - - In quietMode not even errors generate any output. - - - - - The event raised when an internal message has been received. - - - - - The Type that generated the internal message. - - - - - The DateTime stamp of when the internal message was received. - - - - - A string indicating the severity of the internal message. - - - "log4net: ", - "log4net:ERROR ", - "log4net:WARN " - - - - - The internal log message. - - - - - The Exception related to the message. - - - Optional. Will be null if no Exception was passed. - - - - - Gets or sets a value indicating whether log4net internal logging - is enabled or disabled. - - - true if log4net internal logging is enabled, otherwise - false. - - - - When set to true, internal debug level logging will be - displayed. - - - This value can be set by setting the application setting - log4net.Internal.Debug in the application configuration - file. - - - The default value is false, i.e. debugging is - disabled. - - - - - The following example enables internal debugging using the - application configuration file : - - - - - - - - - - - - - Gets or sets a value indicating whether log4net should generate no output - from internal logging, not even for errors. - - - true if log4net should generate no output at all from internal - logging, otherwise false. - - - - When set to true will cause internal logging at all levels to be - suppressed. This means that no warning or error reports will be logged. - This option overrides the setting and - disables all debug also. - - This value can be set by setting the application setting - log4net.Internal.Quiet in the application configuration file. - - - The default value is false, i.e. internal logging is not - disabled. - - - - The following example disables internal logging using the - application configuration file : - - - - - - - - - - - - - - - - - Test if LogLog.Debug is enabled for output. - - - true if Debug is enabled - - - - Test if LogLog.Debug is enabled for output. - - - - - - Test if LogLog.Warn is enabled for output. - - - true if Warn is enabled - - - - Test if LogLog.Warn is enabled for output. - - - - - - Test if LogLog.Error is enabled for output. - - - true if Error is enabled - - - - Test if LogLog.Error is enabled for output. - - - - - - Subscribes to the LogLog.LogReceived event and stores messages - to the supplied IList instance. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The log4net Thread Context. - - - - The ThreadContext provides a location for thread specific debugging - information to be stored. - The ThreadContext properties override any - properties with the same name. - - - The thread context has a properties map and a stack. - The properties and stack can - be included in the output of log messages. The - supports selecting and outputting these properties. - - - The Thread Context provides a diagnostic context for the current thread. - This is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The Thread Context is managed on a per thread basis. - - - Example of using the thread context properties to store a username. - - ThreadContext.Properties["user"] = userName; - log.Info("This log message has a ThreadContext Property called 'user'"); - - - Example of how to push a message into the context stack - - using(ThreadContext.Stacks["NDC"].Push("my context message")) - { - log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); - - } // at the end of the using block the message is automatically popped - - - - Nicko Cadell - - - - Private Constructor. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - The thread context properties instance - - - - - The thread context stacks instance - - - - - The thread properties map - - - The thread properties map - - - - The ThreadContext properties override any - properties with the same name. - - - - - - The thread stacks - - - stack map - - - - The thread local stacks. - - - - - - Extract the value of a property from the - - - - Extract the value of a property from the - - - Nicko Cadell - - - - Constructs a RawPropertyLayout - - - - - Lookup the property for - - The event to format - returns property value - - - Looks up and returns the object value of the property - named . If there is no property defined - with than name then null will be returned. - - - - - - The name of the value to lookup in the LoggingEvent Properties collection. - - - Value to lookup in the LoggingEvent Properties collection - - - - String name of the property to lookup in the . - - - - - - Write the caller stack frames to the output - - - - Writes the to the output writer, using format: - type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) - - - Adam Davies - - - - The fully qualified type of the StackTraceDetailPatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Writes the event message to the output - - - - Uses the method - to write out the event message. - - - Nicko Cadell - - - - Writes the event message to the output - - that will receive the formatted result. - the event being logged - - - Uses the method - to write out the event message. - - - - - - Write the event level to the output - - - - Writes the display name of the event - to the writer. - - - Nicko Cadell - - - - Write the event level to the output - - that will receive the formatted result. - the event being logged - - - Writes the of the - to the . - - - - - - Write the event appdomain name to the output - - - - Writes the to the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - - Write the event appdomain name to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the output . - - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - To use this method to configure log4net you must specify - the section - handler for the log4net configuration section. See the - for an example. - - - - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - To use this method to configure log4net you must specify - the section - handler for the log4net configuration section. See the - for an example. - - - The repository to configure. - - - - Configures log4net using a log4net element - - - - Loads the log4net configuration from the XML element - supplied as . - - - The element to parse. - - - - Configures the using the specified XML - element. - - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The first element matching <configuration> will be read as the - configuration. If this file is also a .NET .config file then you must specify - a configuration section for the log4net element otherwise .NET will - complain. Set the type for the section handler to , for example: - - -
- - - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures log4net using the specified configuration URI. - - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The must support the URI scheme specified. - - - - - - Configures log4net using the specified configuration data stream. - - A stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The first element matching <configuration> will be read as the - configuration. If this file is also a .NET .config file then you must specify - a configuration section for the log4net element otherwise .NET will - complain. Set the type for the section handler to , for example: - - -
- - - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures the using the specified configuration - URI. - - The repository to configure. - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The must support the URI scheme specified. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures log4net using the file specified, monitors the file for changes - and reloads the configuration if a change is detected. - - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Configures the using the file specified, - monitors the file for changes and reloads the configuration if a change - is detected. - - The repository to configure. - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Configures the specified repository using a log4net element. - - The hierarchy to configure. - The element to parse. - - - Loads the log4net configuration from the XML element - supplied as . - - - This method is ultimately called by one of the Configure methods - to load the configuration from an . - - - - - - Maps repository names to ConfigAndWatchHandler instances to allow a particular - ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is - reconfigured. - - - - - The fully qualified type of the XmlConfigurator class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Class used to watch config files. - - - - Uses the to monitor - changes to a specified file. Because multiple change notifications - may be raised when the file is modified, a timer is used to - compress the notifications into a single event. The timer - waits for time before delivering - the event notification. If any further - change notifications arrive while the timer is waiting it - is reset and waits again for to - elapse. - - - - - - The default amount of time to wait after receiving notification - before reloading the config file. - - - - - Holds the FileInfo used to configure the XmlConfigurator - - - - - Holds the repository being configured. - - - - - The timer used to compress the notification events. - - - - - Watches file for changes. This object should be disposed when no longer - needed to free system handles on the watched resources. - - - - - Initializes a new instance of the class to - watch a specified config file used to configure a repository. - - The repository to configure. - The configuration file to watch. - - - Initializes a new instance of the class. - - - - - - Event handler used by . - - The firing the event. - The argument indicates the file that caused the event to be fired. - - - This handler reloads the configuration from the file when the event is fired. - - - - - - Event handler used by . - - The firing the event. - The argument indicates the file that caused the event to be fired. - - - This handler reloads the configuration from the file when the event is fired. - - - - - - Called by the timer when the configuration has been updated. - - null - - - - Release the handles held by the watcher and timer. - - - - - Class to register for the log4net section of the configuration file - - - The log4net section of the configuration file needs to have a section - handler registered. This is the section handler used. It simply returns - the XML element that is the root of the section. - - - Example of registering the log4net section handler : - - - -
- - - log4net configuration XML goes here - - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Parses the configuration section. - - The configuration settings in a corresponding parent configuration section. - The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. - The for the log4net section. - The for the log4net section. - - - Returns the containing the configuration data, - - - - - - Appends logging events to the console. - - - - ConsoleAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - Nicko Cadell - Gert Driesen - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - flag set to true to write to the console error stream - - When is set to true, output is written to - the standard error output stream. Otherwise, output is written to the standard - output stream. - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a Type - the Type - - - Uses the method to convert the - argument to a . - Additional effort is made to locate partially specified types - by searching the loaded assemblies. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Type converter for Boolean. - - - - Supports conversion from string to bool type. - - - - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Property pattern converter - - - - This pattern converter reads the thread and global properties. - The thread properties take priority over global properties. - See for details of the - thread properties. See for - details of the global properties. - - - If the is specified then that will be used to - lookup a single property. If no is specified - then all properties will be dumped as a list of key value pairs. - - - Nicko Cadell - - - - Write the property value to the output - - that will receive the formatted result. - null, state is not set - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - - Implements log4net's default error handling policy which consists - of emitting a message for the first error in an appender and - ignoring all subsequent errors. - - - - The error message is processed using the LogLog sub-system. - - - This policy aims at protecting an otherwise working application - from being flooded with error messages when logging fails. - - - Nicko Cadell - Gert Driesen - Ron Grabowski - - - - Appenders may delegate their error handling to an . - - - - Error handling is a particularly tedious to get right because by - definition errors are hard to predict and to reproduce. - - - Nicko Cadell - Gert Driesen - - - - Handles the error and information about the error condition is passed as - a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - The error code associated with the error. - - - Handles the error and information about the error condition is passed as - a parameter. - - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - - - See . - - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - - - See . - - - - - - Default Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - The prefix to use for each message. - - - Initializes a new instance of the class - with the specified prefix. - - - - - - Reset the error handler back to its initial disabled state. - - - - - Log an Error - - The error message. - The exception. - The internal error code. - - - Sends the error information to 's Error method. - - - - - - Log an Error - - The error message. - The exception. - - - Prints the message and the stack trace of the exception on the standard - error output stream. - - - - - - Log an error - - The error message. - - - Print a the error message passed as parameter on the standard - error output stream. - - - - - - The date the error was recorded. - - - - - Flag to indicate if it is the first error - - - - - The message recorded during the first error. - - - - - The exception recorded during the first error. - - - - - The error code recorded during the first error. - - - - - String to prefix each message with - - - - - The fully qualified type of the OnlyOnceErrorHandler class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Is error logging enabled - - - - Is error logging enabled. Logging is only enabled for the - first error delivered to the . - - - - - - The date the first error that trigged this error handler occured. - - - - - The message from the first error that trigged this error handler. - - - - - The exception from the first error that trigged this error handler. - - - May be . - - - - - The error code from the first error that trigged this error handler. - - - Defaults to - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - The singleton instance of the empty collection. - - - - - Gets the singleton instance of the empty collection. - - The singleton instance of the empty collection. - - - Gets the singleton instance of the empty collection. - - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - - The sits at the root of the logger hierarchy tree. - - - - The is a regular except - that it provides several guarantees. - - - First, it cannot be assigned a null - level. Second, since the root logger cannot have a parent, the - property always returns the value of the - level field without walking the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Implementation of used by - - - - Internal class used to provide implementation of - interface. Applications should use to get - logger instances. - - - This is one of the central classes in the log4net implementation. One of the - distinctive features of log4net are hierarchical loggers and their - evaluation. The organizes the - instances into a rooted tree hierarchy. - - - The class is abstract. Only concrete subclasses of - can be created. The - is used to create instances of this type for the . - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - - - - Interface that all loggers implement - - - - This interface supports logging events and testing if a level - is enabled for logging. - - - These methods will not throw exceptions. Note to implementor, ensure - that the implementation of these methods cannot allow an exception - to be thrown to the caller. - - - Nicko Cadell - Gert Driesen - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - the exception to log, including its stack trace. Pass null to not log an exception. - - - Generates a logging event for the specified using - the and . - - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - - - - Gets the name of the logger. - - - The name of the logger. - - - - The name of this logger - - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - - This constructor created a new instance and - sets its name. - - The name of the . - - - This constructor is protected and designed to be used by - a subclass that is not abstract. - - - Loggers are constructed by - objects. See for the default - logger creator. - - - - - - Add to the list of appenders of this - Logger instance. - - An appender to add to this logger - - - Add to the list of appenders of this - Logger instance. - - - If is already in the list of - appenders, then it won't be added again. - - - - - - Look for the appender named as name - - The name of the appender to lookup - The appender with the name specified, or null. - - - Returns the named appender, or null if the appender is not found. - - - - - - Remove all previously added appenders from this Logger instance. - - - - Remove all previously added appenders from this Logger instance. - - - This is useful when re-reading configuration information. - - - - - - Remove the appender passed as parameter form the list of appenders. - - The appender to remove - The appender removed from the list - - - Remove the appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Remove the appender passed as parameter form the list of appenders. - - The name of the appender to remove - The appender removed from the list - - - Remove the named appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the and . - - - This method must not throw any exception to the caller. - - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - This method must not throw any exception to the caller. - - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - This method must not throw any exception to the caller. - - - - - - Deliver the to the attached appenders. - - The event to log. - - - Call the appenders in the hierarchy starting at - this. If no appenders could be found, emit a - warning. - - - This method calls all the appenders inherited from the - hierarchy circumventing any evaluation of whether to log or not - to log the particular log request. - - - - - - Closes all attached appenders implementing the interface. - - - - Used to ensure that the appenders are correctly shutdown. - - - - - - This is the most generic printing method. This generic form is intended to be used by wrappers - - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the . - - - - - - Creates a new logging event and logs the event without further checks. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generates a logging event and delivers it to the attached - appenders. - - - - - - Creates a new logging event and logs the event without further checks. - - The event being logged. - - - Delivers the logging event to the attached appenders. - - - - - - The fully qualified type of the Logger class. - - - - - The name of this logger. - - - - - The assigned level of this logger. - - - - The level variable need not be - assigned a value in which case it is inherited - form the hierarchy. - - - - - - The parent of this logger. - - - - The parent of this logger. - All loggers have at least one ancestor which is the root logger. - - - - - - Loggers need to know what Hierarchy they are in. - - - - Loggers need to know what Hierarchy they are in. - The hierarchy that this logger is a member of is stored - here. - - - - - - Helper implementation of the interface - - - - - Flag indicating if child loggers inherit their parents appenders - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - - Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl - - - - - Gets or sets the parent logger in the hierarchy. - - - The parent logger in the hierarchy. - - - - Part of the Composite pattern that makes the hierarchy. - The hierarchy is parent linked rather than child linked. - - - - - - Gets or sets a value indicating if child loggers inherit their parent's appenders. - - - true if child loggers inherit their parent's appenders. - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - - Gets the effective level for this logger. - - The nearest level in the logger hierarchy. - - - Starting from this logger, searches the logger hierarchy for a - non-null level and returns it. Otherwise, returns the level of the - root logger. - - The Logger class is designed so that this method executes as - quickly as possible. - - - - - Gets or sets the where this - Logger instance is attached to. - - The hierarchy that this logger belongs to. - - - This logger must be attached to a single . - - - - - - Gets or sets the assigned , if any, for this Logger. - - - The of this logger. - - - - The assigned can be null. - - - - - - Get the appenders contained in this logger as an - . - - A collection of the appenders in this logger - - - Get the appenders contained in this logger as an - . If no appenders - can be found, then a is returned. - - - - - - Gets the logger name. - - - The name of the logger. - - - - The name of this logger - - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - - Construct a - - The level to assign to the root logger. - - - Initializes a new instance of the class with - the specified logging level. - - - The root logger names itself as "root". However, the root - logger cannot be retrieved by name. - - - - - - The fully qualified type of the RootLogger class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets the assigned level value without walking the logger hierarchy. - - The assigned level value without walking the logger hierarchy. - - - Because the root logger cannot have a parent and its level - must not be null this property just returns the - value of . - - - - - - Gets or sets the assigned for the root logger. - - - The of the root logger. - - - - Setting the level of the root logger to a null reference - may have catastrophic results. We prevent this here. - - - - - - A Layout that renders only the Exception text from the logging event - - - - A Layout that renders only the Exception text from the logging event. - - - This Layout should only be used with appenders that utilize multiple - layouts (e.g. ). - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Constructs a ExceptionLayout - - - - - - Activate component options - - - - Part of the component activation - framework. - - - This method does nothing as options become effective immediately. - - - - - - Gets the exception text from the logging event - - The TextWriter to write the formatted event to - the event being logged - - - Write the exception string to the . - The exception string is retrieved from . - - - - - - The default implementation of the interface. - - - - Uses attributes defined on the calling assembly to determine how to - configure the hierarchy for the repository. - - - Nicko Cadell - Gert Driesen - - - - Creates a new repository selector. - - The type of the repositories to create, must implement - - - Create an new repository selector. - The default type for repositories must be specified, - an appropriate value would be . - - - is . - does not implement . - - - - Gets the for the specified assembly. - - The assembly use to lookup the . - - - The type of the created and the repository - to create can be overridden by specifying the - attribute on the . - - - The default values are to use the - implementation of the interface and to use the - as the name of the repository. - - - The created will be automatically configured using - any attributes defined on - the . - - - The for the assembly - is . - - - - Gets the for the specified repository. - - The repository to use to lookup the . - The for the specified repository. - - - Returns the named repository. If is null - a is thrown. If the repository - does not exist a is thrown. - - - Use to create a repository. - - - is . - does not exist. - - - - Create a new repository for the assembly specified - - the assembly to use to create the repository to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The type of the created and - the repository to create can be overridden by specifying the - attribute on the - . The default values are to use the - implementation of the - interface and to use the - as the name of the repository. - - - The created will be automatically - configured using any - attributes defined on the . - - - If a repository for the already exists - that repository will be returned. An error will not be raised and that - repository may be of a different type to that specified in . - Also the attribute on the - assembly may be used to override the repository type specified in - . - - - is . - - - - Creates a new repository for the assembly specified. - - the assembly to use to create the repository to associate with the . - The type of repository to create, must implement . - The name to assign to the created repository - Set to true to read and apply the assembly attributes - The repository created. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The type of the created and - the repository to create can be overridden by specifying the - attribute on the - . The default values are to use the - implementation of the - interface and to use the - as the name of the repository. - - - The created will be automatically - configured using any - attributes defined on the . - - - If a repository for the already exists - that repository will be returned. An error will not be raised and that - repository may be of a different type to that specified in . - Also the attribute on the - assembly may be used to override the repository type specified in - . - - - is . - - - - Creates a new repository for the specified repository. - - The repository to associate with the . - The type of repository to create, must implement . - If this param is then the default repository type is used. - The new repository. - - - The created will be associated with the repository - specified such that a call to with the - same repository specified will return the same repository instance. - - - is . - already exists. - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets a list of objects - - an array of all known objects - - - Gets an array of all of the repositories created by this selector. - - - - - - Aliases a repository to an existing repository. - - The repository to alias. - The repository that the repository is aliased to. - - - The repository specified will be aliased to the repository when created. - The repository must not already exist. - - - When the repository is created it must utilize the same repository type as - the repository it is aliased to, otherwise the aliasing will fail. - - - - is . - -or- - is . - - - - - Notifies the registered listeners that the repository has been created. - - The repository that has been created. - - - Raises the event. - - - - - - Gets the repository name and repository type for the specified assembly. - - The assembly that has a . - in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. - in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. - is . - - - - Configures the repository using information from the assembly. - - The assembly containing - attributes which define the configuration for the repository. - The repository to configure. - - is . - -or- - is . - - - - - Loads the attribute defined plugins on the assembly. - - The assembly that contains the attributes. - The repository to add the plugins to. - - is . - -or- - is . - - - - - Loads the attribute defined aliases on the assembly. - - The assembly that contains the attributes. - The repository to alias to. - - is . - -or- - is . - - - - - The fully qualified type of the DefaultRepositorySelector class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - Assembly level attribute to configure the . - - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - Nicko Cadell - - - - Construct provider attribute with type specified - - the type of the provider to use - - - The provider specified must subclass the - class. - - - - - - Configures the SecurityContextProvider - - The assembly that this attribute was defined on. - The repository to configure. - - - Creates a provider instance from the specified. - Sets this as the default security context provider . - - - - - - The fully qualified type of the SecurityContextProviderAttribute class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or sets the type of the provider to use. - - - the type of the provider to use. - - - - The provider specified must subclass the - class. - - - - - - This appender forwards logging events to attached appenders. - - - - The forwarding appender can be used to specify different thresholds - and filters for the same appender at different locations within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Forward the logging event to the attached appenders - - The event to log. - - - Delivers the logging event to all the attached appenders. - - - - - - Forward the logging events to the attached appenders - - The array of events to log. - - - Delivers the logging events to all the attached appenders. - - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this appender. - - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Implementation of the interface - - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - - Appender that logs to a database. - - - - appends logging events to a table within a - database. The appender can be configured to specify the connection - string by setting the property. - The connection type (provider) can be specified by setting the - property. For more information on database connection strings for - your specific database see http://www.connectionstrings.com/. - - - Records are written into the database either using a prepared - statement or a stored procedure. The property - is set to (System.Data.CommandType.Text) to specify a prepared statement - or to (System.Data.CommandType.StoredProcedure) to specify a stored - procedure. - - - The prepared statement text or the name of the stored procedure - must be set in the property. - - - The prepared statement or stored procedure can take a number - of parameters. Parameters are added using the - method. This adds a single to the - ordered list of parameters. The - type may be subclassed if required to provide database specific - functionality. The specifies - the parameter name, database type, size, and how the value should - be generated using a . - - - - An example of a SQL Server table that could be logged to: - - CREATE TABLE [dbo].[Log] ( - [ID] [int] IDENTITY (1, 1) NOT NULL , - [Date] [datetime] NOT NULL , - [Thread] [varchar] (255) NOT NULL , - [Level] [varchar] (20) NOT NULL , - [Logger] [varchar] (255) NOT NULL , - [Message] [varchar] (4000) NOT NULL - ) ON [PRIMARY] - - - - An example configuration to log to the above table: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Julian Biddle - Nicko Cadell - Gert Driesen - Lance Nehring - - - - Initializes a new instance of the class. - - - Public default constructor to initialize a new instance of this class. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Override the parent method to close the database - - - - Closes the database command and database connection. - - - - - - Inserts the events into the database. - - The events to insert into the database. - - - Insert all the events specified in the - array into the database. - - - - - - Adds a parameter to the command. - - The parameter to add to the command. - - - Adds a parameter to the ordered list of command parameters. - - - - - - Writes the events to the database using the transaction specified. - - The transaction that the events will be executed under. - The array of events to insert into the database. - - - The transaction argument can be null if the appender has been - configured not to use transactions. See - property for more information. - - - - - - Formats the log message into database statement text. - - The event being logged. - - This method can be overridden by subclasses to provide - more control over the format of the database statement. - - - Text that can be passed to a . - - - - - Creates an instance used to connect to the database. - - - This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). - - The of the object. - The connectionString output from the ResolveConnectionString method. - An instance with a valid connection string. - - - - Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey - property. - - - ConnectiongStringName is only supported on .NET 2.0 and higher. - - Additional information describing the connection string. - A connection string used to connect to the database. - - - - Retrieves the class type of the ADO.NET provider. - - - - Gets the Type of the ADO.NET provider to use to connect to the - database. This method resolves the type specified in the - property. - - - Subclasses can override this method to return a different type - if necessary. - - - The of the ADO.NET provider - - - - Prepares the database command and initialize the parameters. - - - - - Connects to the database. - - - - - Cleanup the existing command. - - - If true, a message will be written using LogLog.Warn if an exception is encountered when calling Dispose. - - - - - Cleanup the existing connection. - - - Calls the IDbConnection's method. - - - - - Flag to indicate if we are using a command object - - - - Set to true when the appender is to use a prepared - statement or stored procedure to insert into the database. - - - - - - The list of objects. - - - - The list of objects. - - - - - - The security context to use for privileged calls - - - - - The that will be used - to insert logging events into a database. - - - - - The database command. - - - - - Database connection string. - - - - - The appSettings key from App.Config that contains the connection string. - - - - - The connectionStrings key from App.Config that contains the connection string. - - - - - String type name of the type name. - - - - - The text of the command. - - - - - The command type. - - - - - Indicates whether to use transactions when writing to the database. - - - - - Indicates whether to use transactions when writing to the database. - - - - - The fully qualified type of the AdoNetAppender class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or sets the database connection string that is used to connect to - the database. - - - The database connection string used to connect to the database. - - - - The connections string is specific to the connection type. - See for more information. - - - Connection string for MS Access via ODBC: - "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" - - Another connection string for MS Access via ODBC: - "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" - - Connection string for MS Access via OLE DB: - "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" - - - - - The appSettings key from App.Config that contains the connection string. - - - - - The connectionStrings key from App.Config that contains the connection string. - - - This property requires at least .NET 2.0. - - - - - Gets or sets the type name of the connection - that should be created. - - - The type name of the connection. - - - - The type name of the ADO.NET provider to use. - - - The default is to use the OLE DB provider. - - - Use the OLE DB Provider. This is the default value. - System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Use the MS SQL Server Provider. - System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Use the ODBC Provider. - Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for ODBC .NET Data Provider. - - Use the Oracle Provider. - System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for .NET Managed Provider for Oracle. - - - - - Gets or sets the command text that is used to insert logging events - into the database. - - - The command text used to insert logging events into the database. - - - - Either the text of the prepared statement or the - name of the stored procedure to execute to write into - the database. - - - The property determines if - this text is a prepared statement or a stored procedure. - - - - - - Gets or sets the command type to execute. - - - The command type to execute. - - - - This value may be either (System.Data.CommandType.Text) to specify - that the is a prepared statement to execute, - or (System.Data.CommandType.StoredProcedure) to specify that the - property is the name of a stored procedure - to execute. - - - The default value is (System.Data.CommandType.Text). - - - - - - Should transactions be used to insert logging events in the database. - - - true if transactions should be used to insert logging events in - the database, otherwise false. The default value is true. - - - - Gets or sets a value that indicates whether transactions should be used - to insert logging events in the database. - - - When set a single transaction will be used to insert the buffered events - into the database. Otherwise each event will be inserted without using - an explicit transaction. - - - - - - Gets or sets the used to call the NetSend method. - - - The used to call the NetSend method. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - Should this appender try to reconnect to the database on error. - - - true if the appender should try to reconnect to the database after an - error has occurred, otherwise false. The default value is false, - i.e. not to try to reconnect. - - - - The default behaviour is for the appender not to try to reconnect to the - database if an error occurs. Subsequent logging events are discarded. - - - To force the appender to attempt to reconnect to the database set this - property to true. - - - When the appender attempts to connect to the database there may be a - delay of up to the connection timeout specified in the connection string. - This delay will block the calling application's thread. - Until the connection can be reestablished this potential delay may occur multiple times. - - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to insert - logging events into a database. Classes deriving from - can use this property to get or set this . Use the - underlying returned from if - you require access beyond that which provides. - - - - - Parameter type used by the . - - - - This class provides the basic database parameter properties - as defined by the interface. - - This type can be subclassed to provide database specific - functionality. The two methods that are called externally are - and . - - - - - - Initializes a new instance of the class. - - - Default constructor for the AdoNetAppenderParameter class. - - - - - Prepare the specified database command object. - - The command to prepare. - - - Prepares the database command object by adding - this parameter to its collection of parameters. - - - - - - Renders the logging event and set the parameter value in the command. - - The command containing the parameter. - The event to be rendered. - - - Renders the logging event using this parameters layout - object. Sets the value of the parameter on the command object. - - - - - - The name of this parameter. - - - - - The database type for this parameter. - - - - - Flag to infer type rather than use the DbType - - - - - The precision for this parameter. - - - - - The scale for this parameter. - - - - - The size for this parameter. - - - - - The to use to render the - logging event into an object for this parameter. - - - - - Gets or sets the name of this parameter. - - - The name of this parameter. - - - - The name of this parameter. The parameter name - must match up to a named parameter to the SQL stored procedure - or prepared statement. - - - - - - Gets or sets the database type for this parameter. - - - The database type for this parameter. - - - - The database type for this parameter. This property should - be set to the database type from the - enumeration. See . - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the type from the value. - - - - - - - Gets or sets the precision for this parameter. - - - The precision for this parameter. - - - - The maximum number of digits used to represent the Value. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the precision from the value. - - - - - - - Gets or sets the scale for this parameter. - - - The scale for this parameter. - - - - The number of decimal places to which Value is resolved. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the scale from the value. - - - - - - - Gets or sets the size for this parameter. - - - The size for this parameter. - - - - The maximum size, in bytes, of the data within the column. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the size from the value. - - - - - - - Gets or sets the to use to - render the logging event into an object for this - parameter. - - - The used to render the - logging event into an object for this parameter. - - - - The that renders the value for this - parameter. - - - The can be used to adapt - any into a - for use in the property. - - - - - - Convert between string and - - - - Supports conversion from string to type, - and from a type to a string. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - - Can the target type be converted to the type supported by this object - - A that represents the type you want to convert to - true if the conversion is possible - - - Returns true if the is - assignable from a type. - - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - . To check for this condition use the - method. - - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternString - the PatternString - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Adapter that extends and forwards all - messages to an instance of . - - - - Adapter that extends and forwards all - messages to an instance of . - - - Nicko Cadell - - - - The writer to forward messages to - - - - - Create an instance of that forwards all - messages to a . - - The to forward to - - - Create an instance of that forwards all - messages to a . - - - - - - Closes the writer and releases any system resources associated with the writer - - - - - - - - - Dispose this writer - - flag indicating if we are being disposed - - - Dispose this writer - - - - - - Flushes any buffered output - - - - Clears all buffers for the writer and causes any buffered data to be written - to the underlying device - - - - - - Writes a character to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a character to the wrapped TextWriter - - - - - - Writes a character buffer to the wrapped TextWriter - - the data buffer - the start index - the number of characters to write - - - Writes a character buffer to the wrapped TextWriter - - - - - - Writes a string to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a string to the wrapped TextWriter - - - - - - Gets or sets the underlying . - - - The underlying . - - - - Gets or sets the underlying . - - - - - - The Encoding in which the output is written - - - The - - - - The Encoding in which the output is written - - - - - - Gets an object that controls formatting - - - The format provider - - - - Gets an object that controls formatting - - - - - - Gets or sets the line terminator string used by the TextWriter - - - The line terminator to use - - - - Gets or sets the line terminator string used by the TextWriter - - - - - - A that can be and reused - - - - A that can be and reused. - This uses a single buffer for string operations. - - - Nicko Cadell - - - - Create an instance of - - the format provider to use - - - Create an instance of - - - - - - Override Dispose to prevent closing of writer - - flag - - - Override Dispose to prevent closing of writer - - - - - - Reset this string writer so that it can be reused. - - the maximum buffer capacity before it is trimmed - the default size to make the buffer - - - Reset this string writer so that it can be reused. - The internal buffers are cleared and reset. - - - - - - Interface abstracts creation of instances - - - - This interface is used by the to - create new objects. - - - The method is called - to create a named . - - - Implement this interface to create new subclasses of . - - - Nicko Cadell - Gert Driesen - - - - Create a new instance - - The that will own the . - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - - Map of repository plugins. - - - - This class is a name keyed map of the plugins that are - attached to a repository. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The repository that the plugins should be attached to. - - - Initialize a new instance of the class with a - repository that the plugins should be attached to. - - - - - - Adds a to the map. - - The to add to the map. - - - The will be attached to the repository when added. - - - If there already exists a plugin with the same name - attached to the repository then the old plugin will - be and replaced with - the new plugin. - - - - - - Removes a from the map. - - The to remove from the map. - - - Remove a specific plugin from this map. - - - - - - Gets a by name. - - The name of the to lookup. - - The from the map with the name specified, or - null if no plugin is found. - - - - Lookup a plugin by name. If the plugin is not found null - will be returned. - - - - - - Gets all possible plugins as a list of objects. - - All possible plugins as a list of objects. - - - Get a collection of all the plugins defined in this map. - - - - - - The log4net Logical Thread Context. - - - - The LogicalThreadContext provides a location for specific debugging - information to be stored. - The LogicalThreadContext properties override any or - properties with the same name. - - - The Logical Thread Context has a properties map and a stack. - The properties and stack can - be included in the output of log messages. The - supports selecting and outputting these properties. - - - The Logical Thread Context provides a diagnostic context for the current call context. - This is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The Logical Thread Context is managed on a per basis. - - - The requires a link time - for the - . - If the calling code does not have this permission then this context will be disabled. - It will not store any property values set on it. - - - Example of using the thread context properties to store a username. - - LogicalThreadContext.Properties["user"] = userName; - log.Info("This log message has a LogicalThreadContext Property called 'user'"); - - - Example of how to push a message into the context stack - - using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) - { - log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); - - } // at the end of the using block the message is automatically popped - - - - Nicko Cadell - - - - Private Constructor. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - The thread context properties instance - - - - - The thread context stacks instance - - - - - The thread properties map - - - The thread properties map - - - - The LogicalThreadContext properties override any - or properties with the same name. - - - - - - The thread stacks - - - stack map - - - - The logical thread stacks. - - - - - - Formats a as "dd MMM yyyy HH:mm:ss,fff" - - - - Formats a in the format - "dd MMM yyyy HH:mm:ss,fff" for example, - "06 Nov 1994 15:49:37,459". - - - Nicko Cadell - Gert Driesen - Angelika Schnagl - - - - Default constructor. - - - - Initializes a new instance of the class. - - - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" - for example, "06 Nov 1994 15:49:37". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - - The format info for the invariant culture. - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - Adds an element with the provided key and value to the - . - - The to use as the key of the element to add. - The to use as the value of the element to add. - - - As the collection is empty no new values can be added. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - Removes all elements from the . - - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - Determines whether the contains an element - with the specified key. - - The key to locate in the . - false - - - As the collection is empty the method always returns false. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - The singleton instance of the empty dictionary. - - - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - - Gets the number of elements contained in the - - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - - Gets a value indicating whether the has a fixed size. - - true - - - As the collection is empty always returns true. - - - - - - Gets a value indicating whether the is read-only. - - true - - - As the collection is empty always returns true. - - - - - - Gets an containing the keys of the . - - An containing the keys of the . - - - As the collection is empty a is returned. - - - - - - Gets an containing the values of the . - - An containing the values of the . - - - As the collection is empty a is returned. - - - - - - Gets or sets the element with the specified key. - - The key of the element to get or set. - null - - - As the collection is empty no values can be looked up or stored. - If the index getter is called then null is returned. - A is thrown if the setter is called. - - - This dictionary is always empty and cannot be modified. - - - - Provision nodes are used where no logger instance has been specified - - - - instances are used in the - when there is no specified - for that node. - - - A provision node holds a list of child loggers on behalf of - a logger that does not exist. - - - Nicko Cadell - Gert Driesen - - - - Create a new provision node with child node - - A child logger to add to this node. - - - Initializes a new instance of the class - with the specified child logger. - - - - - - Used internally to accelerate hash table searches. - - - - Internal class used to improve performance of - string keyed hashtables. - - - The hashcode of the string is cached for reuse. - The string is stored as an interned value. - When comparing two objects for equality - the reference equality of the interned strings is compared. - - - Nicko Cadell - Gert Driesen - - - - Construct key with string name - - - - Initializes a new instance of the class - with the specified name. - - - Stores the hashcode of the string and interns - the string key to optimize comparisons. - - - The Compact Framework 1.0 the - method does not work. On the Compact Framework - the string keys are not interned nor are they - compared by reference. - - - The name of the logger. - - - - Returns a hash code for the current instance. - - A hash code for the current instance. - - - Returns the cached hashcode. - - - - - - Determines whether two instances - are equal. - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - Compares the references of the interned strings. - - - - - - Formats the as "yyyy-MM-dd HH:mm:ss,fff". - - - - Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - - An evaluator that triggers after specified number of seconds. - - - - This evaluator will trigger if the specified time period - has passed since last check. - - - Robert Sevcik - - - - Test if an triggers an action - - - - Implementations of this interface allow certain appenders to decide - when to perform an appender specific action. - - - The action or behavior triggered is defined by the implementation. - - - Nicko Cadell - - - - Test if this event triggers the action - - The event to check - true if this event triggers the action, otherwise false - - - Return true if this event triggers the action - - - - - - The default time threshold for triggering in seconds. Zero means it won't trigger at all. - - - - - The time threshold for triggering in seconds. Zero means it won't trigger at all. - - - - - The time of last check. This gets updated when the object is created and when the evaluator triggers. - - - - - Create a new evaluator using the time threshold in seconds. - - - - Create a new evaluator using the time threshold in seconds. - - - This evaluator will trigger if the specified time period - has passed since last check. - - - - - - Create a new evaluator using the specified time threshold in seconds. - - - The time threshold in seconds to trigger after. - Zero means it won't trigger at all. - - - - Create a new evaluator using the specified time threshold in seconds. - - - This evaluator will trigger if the specified time period - has passed since last check. - - - - - - Is this the triggering event? - - The event to check - This method returns true, if the specified time period - has passed since last check.. - Otherwise it returns false - - - This evaluator will trigger if the specified time period - has passed since last check. - - - - - - The time threshold in seconds to trigger after - - - The time threshold in seconds to trigger after. - Zero means it won't trigger at all. - - - - This evaluator will trigger if the specified time period - has passed since last check. - - - - - - Stores logging events in an array. - - - - The memory appender stores all the logging events - that are appended in an in-memory array. - - - Use the method to get - the current list of events that have been appended. - - - Use the method to clear the - current list of events. - - - Julian Biddle - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Gets the events that have been logged. - - The events that have been logged - - - Gets the events that have been logged. - - - - - - This method is called by the method. - - the event to log - - Stores the in the events list. - - - - - Clear the list of events - - - Clear the list of events - - - - - The list of events that have been appended. - - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - - Gets or sets a value indicating whether only part of the logging event - data should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the event - data to be fixed and stored in the appender, hereby improving performance. - - - See for more information. - - - - - - Gets or sets the fields that will be fixed in the event - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - - Defines a lock that supports single writers and multiple readers - - - - ReaderWriterLock is used to synchronize access to a resource. - At any given time, it allows either concurrent read access for - multiple threads, or write access for a single thread. In a - situation where a resource is changed infrequently, a - ReaderWriterLock provides better throughput than a simple - one-at-a-time lock, such as . - - - If a platform does not support a System.Threading.ReaderWriterLock - implementation then all readers and writers are serialized. Therefore - the caller must not rely on multiple simultaneous readers. - - - Nicko Cadell - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Acquires a reader lock - - - - blocks if a different thread has the writer - lock, or if at least one thread is waiting for the writer lock. - - - - - - Decrements the lock count - - - - decrements the lock count. When the count - reaches zero, the lock is released. - - - - - - Acquires the writer lock - - - - This method blocks if another thread has a reader lock or writer lock. - - - - - - Decrements the lock count on the writer lock - - - - ReleaseWriterLock decrements the writer lock count. - When the count reaches zero, the writer lock is released. - - - - - - Write the name of the current AppDomain to the output - - - - Write the name of the current AppDomain to the output writer - - - Nicko Cadell - - - - Write the name of the current AppDomain to the output - - the writer to write to - null, state is not set - - - Writes name of the current AppDomain to the output . - - - - - - This class implements a patterned string. - - - - This string has embedded patterns that are resolved and expanded - when the string is formatted. - - - This class functions similarly to the - in that it accepts a pattern and renders it to a string. Unlike the - however the PatternString - does not render the properties of a specific but - of the process in general. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - appdomain - - - Used to output the friendly name of the current AppDomain. - - - - - date - - - Used to output the current date and time in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - env - - - Used to output the a specific environment variable. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %env{COMPUTERNAME} would include the value - of the COMPUTERNAME environment variable. - - - The env pattern is not supported on the .NET Compact Framework. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern name offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - processid - - - Used to output the system process ID for the current process. - - - - - property - - - Used to output a specific context property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are stored in logging contexts. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - random - - - Used to output a random string of characters. The string is made up of - uppercase letters and numbers. By default the string is 4 characters long. - The length of the string can be specified within braces directly following the - pattern specifier, e.g. %random{8} would output an 8 character string. - - - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - % - - - The sequence %% outputs a single percent sign. - - - - - - Additional pattern converters may be registered with a specific - instance using or - . - - - See the for details on the - format modifiers supported by the patterns. - - - Nicko Cadell - - - - Internal map of converter identifiers to converter types. - - - - - the pattern - - - - - the head of the pattern converter chain - - - - - patterns defined on this PatternString only - - - - - Initialize the global registry - - - - - Default constructor - - - - Initialize a new instance of - - - - - - Constructs a PatternString - - The pattern to use with this PatternString - - - Initialize a new instance of with the pattern specified. - - - - - - Initialize object options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Create the used to parse the pattern - - the pattern to parse - The - - - Returns PatternParser used to parse the conversion string. Subclasses - may override this to return a subclass of PatternParser which recognize - custom conversion pattern name. - - - - - - Produces a formatted string as specified by the conversion pattern. - - The TextWriter to write the formatted event to - - - Format the pattern to the . - - - - - - Format the pattern as a string - - the pattern formatted as a string - - - Format the pattern to a string. - - - - - - Add a converter to this PatternString - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - - Add a converter to this PatternString - - the name of the conversion pattern for this converter - the type of the converter - - - Add a converter to this PatternString - - - - - - Gets or sets the pattern formatting string - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - - Implementation of Properties collection for the - - - - This class implements a properties collection that is thread safe and supports both - storing properties and capturing a read only copy of the current propertied. - - - This class is optimized to the scenario where the properties are read frequently - and are modified infrequently. - - - Nicko Cadell - - - - The read only copy of the properties. - - - - This variable is declared volatile to prevent the compiler and JIT from - reordering reads and writes of this thread performed on different threads. - - - - - - Lock object used to synchronize updates within this instance - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property from the global context - - the key for the entry to remove - - - Removing an entry from the global context properties is relatively expensive compared - with reading a value. - - - - - - Clear the global context properties - - - - - Get a readonly immutable copy of the properties - - the current global context properties - - - This implementation is fast because the GlobalContextProperties class - stores a readonly copy of the properties. - - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Reading the value for a key is faster than setting the value. - When the value is written a new read only copy of - the properties is created. - - - - - - Contain the information obtained when parsing formatting modifiers - in conversion modifiers. - - - - Holds the formatting information extracted from the format string by - the . This is used by the - objects when rendering the output. - - - Nicko Cadell - Gert Driesen - - - - Defaut Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - - - Initializes a new instance of the class - with the specified parameters. - - - - - - Gets or sets the minimum value. - - - The minimum value. - - - - Gets or sets the minimum value. - - - - - - Gets or sets the maximum value. - - - The maximum value. - - - - Gets or sets the maximum value. - - - - - - Gets or sets a flag indicating whether left align is enabled - or not. - - - A flag indicating whether left align is enabled or not. - - - - Gets or sets a flag indicating whether left align is enabled or not. - - - - - - - - - - - - - - - - - - - - - - This class is used by client applications to request logger instances. - - - - This class has static methods that are used by a client to request - a logger instance. The method is - used to retrieve a logger. - - - See the interface for more details. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - - log.Info("Application Start"); - log.Debug("This is a debug message"); - - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - Returns the named logger if it exists. - - Returns the named logger if it exists. - - - - If the named logger exists (in the default repository) then it - returns a reference to the logger, otherwise it returns null. - - - The fully qualified logger name to look for. - The logger found, or null if no logger could be found. - - - - Returns the named logger if it exists. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the logger doesn't exist in the specified - repository. - - - - - Returns the named logger if it exists. - - - - If the named logger exists (in the repository for the specified assembly) then it - returns a reference to the logger, otherwise it returns - null. - - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger, or null if the logger doesn't exist in the specified - assembly's repository. - - - - Get the currently defined loggers. - - Returns all the currently defined loggers in the default repository. - - - The root logger is not included in the returned array. - - All the defined loggers. - - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - - The root logger is not included in the returned array. - - All the defined loggers. - - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - - The root logger is not included in the returned array. - - All the defined loggers. - - - Get or create a logger. - - Retrieves or creates a named logger. - - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The name of the logger to retrieve. - The logger with the name specified. - - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Get the logger for the fully qualified name of the type specified. - - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The repository to lookup in. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The assembly to use to lookup the repository. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Shutdown a logger repository. - - Shuts down the default repository. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - default repository. - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The repository to shutdown. - - - - Shuts down the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The assembly to use to lookup the repository. - - - Reset the configuration of a repository - - Resets all values contained in this repository instance to their defaults. - - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The repository to reset. - - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The assembly to use to lookup the repository to reset. - - - Get the logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - - Get a logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - - Create a domain - - Creates a repository with the specified repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - Create a logger repository. - - Creates a repository with the specified repository type. - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - - - - Creates a repository with the specified name. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name. - - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - - Creates a repository for the specified assembly and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - - Creates a repository for the specified assembly and repository type. - - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - - Gets the list of currently defined repositories. - - - - Get an array of all the objects that have been created. - - - An array of all the known objects. - - - - Looks up the wrapper object for the logger specified. - - The logger to get the wrapper for. - The wrapper for the logger specified. - - - - Looks up the wrapper objects for the loggers specified. - - The loggers to get the wrappers for. - The wrapper objects for the loggers specified. - - - - Create the objects used by - this manager. - - The logger to wrap. - The wrapper for the logger specified. - - - - The wrapper map to use to hold the objects. - - - - - Type converter for the interface - - - - Used to convert objects to the interface. - Supports converting from the interface to - the interface using the . - - - Nicko Cadell - Gert Driesen - - - - Can the sourceType be converted to an - - the source to be to be converted - true if the source type can be converted to - - - Test if the can be converted to a - . Only is supported - as the . - - - - - - Convert the value to a object - - the value to convert - the object - - - Convert the object to a - object. If the object - is a then the - is used to adapt between the two interfaces, otherwise an - exception is thrown. - - - - - - Property pattern converter - - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - Nicko Cadell - - - - Write the property value to the output - - that will receive the formatted result. - the event being logged - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - - Writes the caller location file name to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - - Write the caller location file name to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - - Converter for items in the ASP.Net Cache. - - - - Outputs an item from the . - - - Ron Grabowski - - - - Write the ASP.Net Cache item to the output - - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. - - - Writes out the value of a named property. The property name - should be set in the - property. If no property has been set, all key value pairs from the Session will - be written to the output. - - - - - - The log4net Global Context. - - - - The GlobalContext provides a location for global debugging - information to be stored. - - - The global context has a properties map and these properties can - be included in the output of log messages. The - supports selecting and outputing these properties. - - - By default the log4net:HostName property is set to the name of - the current machine. - - - - - GlobalContext.Properties["hostname"] = Environment.MachineName; - - - - Nicko Cadell - - - - Private Constructor. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - The global context properties instance - - - - - The global properties map. - - - The global properties map. - - - - The global properties map. - - - - - - Defines the default set of levels recognized by the system. - - - - Each has an associated . - - - Levels have a numeric that defines the relative - ordering between levels. Two Levels with the same - are deemed to be equivalent. - - - The levels that are recognized by log4net are set for each - and each repository can have different levels defined. The levels are stored - in the on the repository. Levels are - looked up by name from the . - - - When logging at level INFO the actual level used is not but - the value of LoggerRepository.LevelMap["INFO"]. The default value for this is - , but this can be changed by reconfiguring the level map. - - - Each level has a in addition to its . The - is the string that is written into the output log. By default - the display name is the same as the level name, but this can be used to alias levels - or to localize the log output. - - - Some of the predefined levels recognized by the system are: - - - - . - - - . - - - . - - - . - - - . - - - . - - - . - - - - Nicko Cadell - Gert Driesen - - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - The display name for this level. This may be localized or otherwise different from the name - - - Initializes a new instance of the class with - the specified level name and value. - - - - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - - - Initializes a new instance of the class with - the specified level name and value. - - - - - - Returns the representation of the current - . - - - A representation of the current . - - - - Returns the level . - - - - - - Compares levels. - - The object to compare against. - true if the objects are equal. - - - Compares the levels of instances, and - defers to base class if the target object is not a - instance. - - - - - - Returns a hash code - - A hash code for the current . - - - Returns a hash code suitable for use in hashing algorithms and data - structures like a hash table. - - - Returns the hash code of the level . - - - - - - Compares this instance to a specified object and returns an - indication of their relative values. - - A instance or to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the - values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - This instance is less than . - - - Zero - This instance is equal to . - - - Greater than zero - - This instance is greater than . - -or- - is . - - - - - - - must be an instance of - or ; otherwise, an exception is thrown. - - - is not a . - - - - Returns a value indicating whether a specified - is greater than another specified . - - A - A - - true if is greater than - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is less than another specified . - - A - A - - true if is less than - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is greater than or equal to another specified . - - A - A - - true if is greater than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is less than or equal to another specified . - - A - A - - true if is less than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether two specified - objects have the same value. - - A or . - A or . - - true if the value of is the same as the - value of ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether two specified - objects have different values. - - A or . - A or . - - true if the value of is different from - the value of ; otherwise, false. - - - - Compares two levels. - - - - - - Compares two specified instances. - - The first to compare. - The second to compare. - - A 32-bit signed integer that indicates the relative order of the - two values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - is less than . - - - Zero - is equal to . - - - Greater than zero - is greater than . - - - - - - Compares two levels. - - - - - - The level designates a higher level than all the rest. - - - - - The level designates very severe error events. - System unusable, emergencies. - - - - - The level designates very severe error events. - System unusable, emergencies. - - - - - The level designates very severe error events - that will presumably lead the application to abort. - - - - - The level designates very severe error events. - Take immediate action, alerts. - - - - - The level designates very severe error events. - Critical condition, critical. - - - - - The level designates very severe error events. - - - - - The level designates error events that might - still allow the application to continue running. - - - - - The level designates potentially harmful - situations. - - - - - The level designates informational messages - that highlight the progress of the application at the highest level. - - - - - The level designates informational messages that - highlight the progress of the application at coarse-grained level. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates the lowest level possible. - - - - - Gets the name of this level. - - - The name of this level. - - - - Gets the name of this level. - - - - - - Gets the value of this level. - - - The value of this level. - - - - Gets the value of this level. - - - - - - Gets the display name of this level. - - - The display name of this level. - - - - Gets the display name of this level. - - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an encoding - the encoding - - - Uses the method to - convert the argument to an . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Exception base type for conversion errors. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class - with the specified message. - - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - - Serialization constructor - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - An instance of the . - - - Creates a new instance of the class. - - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - A nested exception to include. - An instance of the . - - - Creates a new instance of the class. - - - - - - Utility class for transforming strings. - - - - Utility class for transforming strings. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Write a string to an - - the writer to write to - the string to write - The string to replace non XML compliant chars with - - - The test is escaped either using XML escape entities - or using CDATA sections. - - - - - - Replace invalid XML characters in text string - - the XML text input string - the string to use in place of invalid characters - A string that does not contain invalid XML characters. - - - Certain Unicode code points are not allowed in the XML InfoSet, for - details see: http://www.w3.org/TR/REC-xml/#charsets. - - - This method replaces any illegal characters in the input string - with the mask string specified. - - - - - - Count the number of times that the substring occurs in the text - - the text to search - the substring to find - the number of times the substring occurs in the text - - - The substring is assumed to be non repeating within itself. - - - - - - Writes a newline to the output - - - - Writes the system dependent line terminator to the output. - This behavior can be overridden by setting the : - - - - Option Value - Output - - - DOS - DOS or Windows line terminator "\r\n" - - - UNIX - UNIX line terminator "\n" - - - - Nicko Cadell - - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Most of the work of the class - is delegated to the PatternParser class. - - - - The PatternParser processes a pattern string and - returns a chain of objects. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The pattern to parse. - - - Initializes a new instance of the class - with the specified pattern string. - - - - - - Parses the pattern into a chain of pattern converters. - - The head of a chain of pattern converters. - - - Parses the pattern into a chain of pattern converters. - - - - - - Build the unified cache of converters from the static and instance maps - - the list of all the converter names - - - Build the unified cache of converters from the static and instance maps - - - - - - Internal method to parse the specified pattern to find specified matches - - the pattern to parse - the converter names to match in the pattern - - - The matches param must be sorted such that longer strings come before shorter ones. - - - - - - Process a parsed literal - - the literal text - - - - Process a parsed converter pattern - - the name of the converter - the optional option for the converter - the formatting info for the converter - - - - Resets the internal state of the parser and adds the specified pattern converter - to the chain. - - The pattern converter to add. - - - - The first pattern converter in the chain - - - - - the last pattern converter in the chain - - - - - The pattern - - - - - Internal map of converter identifiers to converter types - - - - This map overrides the static s_globalRulesRegistry map. - - - - - - The fully qualified type of the PatternParser class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Get the converter registry used by this parser - - - The converter registry used by this parser - - - - Get the converter registry used by this parser - - - - - - Sort strings by length - - - - that orders strings by string length. - The longest strings are placed first - - - - - - Subclass of that maintains a count of - the number of bytes written. - - - - This writer counts the number of bytes written. - - - Nicko Cadell - Gert Driesen - - - - that does not leak exceptions - - - - does not throw exceptions when things go wrong. - Instead, it delegates error handling to its . - - - Nicko Cadell - Gert Driesen - - - - Constructor - - the writer to actually write to - the error handler to report error to - - - Create a new QuietTextWriter using a writer and error handler - - - - - - Writes a character to the underlying writer - - the char to write - - - Writes a character to the underlying writer - - - - - - Writes a buffer to the underlying writer - - the buffer to write - the start index to write from - the number of characters to write - - - Writes a buffer to the underlying writer - - - - - - Writes a string to the output. - - The string data to write to the output. - - - Writes a string to the output. - - - - - - Closes the underlying output writer. - - - - Closes the underlying output writer. - - - - - - The error handler instance to pass all errors to - - - - - Flag to indicate if this writer is closed - - - - - Gets or sets the error handler that all errors are passed to. - - - The error handler that all errors are passed to. - - - - Gets or sets the error handler that all errors are passed to. - - - - - - Gets a value indicating whether this writer is closed. - - - true if this writer is closed, otherwise false. - - - - Gets a value indicating whether this writer is closed. - - - - - - Constructor - - The to actually write to. - The to report errors to. - - - Creates a new instance of the class - with the specified and . - - - - - - Writes a character to the underlying writer and counts the number of bytes written. - - the char to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Writes a buffer to the underlying writer and counts the number of bytes written. - - the buffer to write - the start index to write from - the number of characters to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Writes a string to the output and counts the number of bytes written. - - The string data to write to the output. - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Total number of bytes written. - - - - - Gets or sets the total number of bytes written. - - - The total number of bytes written. - - - - Gets or sets the total number of bytes written. - - - - - - Extract the date from the - - - - Extract the date from the - - - Nicko Cadell - Gert Driesen - - - - Constructs a RawUtcTimeStampLayout - - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in universal time. To format the time stamp - in local time use . - - - - - - Write the exception text to the output - - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - Nicko Cadell - - - - Default constructor - - - - - Write the exception text to the output - - that will receive the formatted result. - the event being logged - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception or the exception property specified - by the Option value does not exist then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - Recognized values for the Option parameter are: - - - - Message - - - Source - - - StackTrace - - - TargetSite - - - HelpLink - - - - - - - The providers default instances. - - - - A configured component that interacts with potentially protected system - resources uses a to provide the elevated - privileges required. If the object has - been not been explicitly provided to the component then the component - will request one from this . - - - By default the is - an instance of which returns only - objects. This is a reasonable default - where the privileges required are not know by the system. - - - This default behavior can be overridden by subclassing the - and overriding the method to return - the desired objects. The default provider - can be replaced by programmatically setting the value of the - property. - - - An alternative is to use the log4net.Config.SecurityContextProviderAttribute - This attribute can be applied to an assembly in the same way as the - log4net.Config.XmlConfiguratorAttribute". The attribute takes - the type to use as the as an argument. - - - Nicko Cadell - - - - The default provider - - - - - Protected default constructor to allow subclassing - - - - Protected default constructor to allow subclassing - - - - - - Create a SecurityContext for a consumer - - The consumer requesting the SecurityContext - An impersonation context - - - The default implementation is to return a . - - - Subclasses should override this method to provide their own - behavior. - - - - - - Gets or sets the default SecurityContextProvider - - - The default SecurityContextProvider - - - - The default provider is used by configured components that - require a and have not had one - given to them. - - - By default this is an instance of - that returns objects. - - - The default provider can be set programmatically by setting - the value of this property to a sub class of - that has the desired behavior. - - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternLayout - the PatternLayout - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Write the current threads username to the output - - - - Write the current threads username to the output writer - - - Nicko Cadell - - - - Write the current threads username to the output - - the writer to write to - null, state is not set - - - Write the current threads username to the output . - - - - - - The fully qualified type of the UserNamePatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Implementation of Properties collection for the - - - - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . - - - This class stores its properties in a slot on the named - log4net.Util.LogicalThreadContextProperties. - - - The requires a link time - for the - . - If the calling code does not have this permission then this context will be disabled. - It will not store any property values set on it. - - - Nicko Cadell - - - - Flag used to disable this context if we don't have permission to access the CallContext. - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property - - the key for the entry to remove - - - Remove the value for the specified from the context. - - - - - - Clear all the context properties - - - - Clear all the context properties - - - - - - Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. - - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread - - - The collection returned is only to be used on the calling thread. If the - caller needs to share the collection between different threads then the - caller must clone the collection before doings so. - - - - - - Gets the call context get data. - - The peroperties dictionary stored in the call context - - The method has a - security link demand, therfore we must put the method call in a seperate method - that we can wrap in an exception handler. - - - - - Sets the call context data. - - The properties. - - The method has a - security link demand, therfore we must put the method call in a seperate method - that we can wrap in an exception handler. - - - - - The fully qualified type of the LogicalThreadContextProperties class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Get or set the property value for the specified. - - - - - - Delegate used to handle logger repository shutdown event notifications - - The that is shutting down. - Empty event args - - - Delegate used to handle logger repository shutdown event notifications. - - - - - - Delegate used to handle logger repository configuration reset event notifications - - The that has had its configuration reset. - Empty event args - - - Delegate used to handle logger repository configuration reset event notifications. - - - - - - Delegate used to handle event notifications for logger repository configuration changes. - - The that has had its configuration changed. - Empty event arguments. - - - Delegate used to handle event notifications for logger repository configuration changes. - - - - - - Default implementation of - - - - This default implementation of the - interface is used to create the default subclass - of the object. - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Create a new instance - - The that will own the . - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - - Default internal subclass of - - - - This subclass has no additional behavior over the - class but does allow instances - to be created. - - - - - - Construct a new Logger - - the name of the logger - - - Initializes a new instance of the class - with the specified name. - - - - - - Plugin that listens for events from the - - - - This plugin publishes an instance of - on a specified . This listens for logging events delivered from - a remote . - - - When an event is received it is relogged within the attached repository - as if it had been raised locally. - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Initializes a new instance of the class. - - - The property must be set. - - - - - - Construct with sink Uri. - - The name to publish the sink under in the remoting infrastructure. - See for more details. - - - Initializes a new instance of the class - with specified name. - - - - - - Attaches this plugin to a . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - When the plugin is shutdown the remote logging - sink is disconnected. - - - - - - The fully qualified type of the RemoteLoggingServerPlugin class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets or sets the URI of this sink. - - - The URI of this sink. - - - - This is the name under which the object is marshaled. - - - - - - - Delivers objects to a remote sink. - - - - Internal class used to listen for logging events - and deliver them to the local repository. - - - - - - Constructor - - The repository to log to. - - - Initializes a new instance of the for the - specified . - - - - - - Logs the events to the repository. - - The events to log. - - - The events passed are logged to the - - - - - - Obtains a lifetime service object to control the lifetime - policy for this instance. - - null to indicate that this instance should live forever. - - - Obtains a lifetime service object to control the lifetime - policy for this instance. This object should live forever - therefore this implementation returns null. - - - - - - The underlying that events should - be logged to. - - - - - Write the method name to the output - - - - Writes the caller location to - the output. - - - Nicko Cadell - - - - Write the method name to the output - - that will receive the formatted result. - the event being logged - - - Writes the caller location to - the output. - - - - - - Converter for items in the ASP.Net Cache. - - - - Outputs an item from the . - - - Ron Grabowski - - - - Write the ASP.Net Cache item to the output - - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. - - - Writes out the value of a named property. The property name - should be set in the - property. If no property has been set, all key value pairs from the Cache will - be written to the output. - - - - - - Adapts any to a - - - - Where an is required this adapter - allows a to be specified. - - - Nicko Cadell - Gert Driesen - - - - The layout to adapt - - - - - Construct a new adapter - - the layout to adapt - - - Create the adapter for the specified . - - - - - - Format the logging event as an object. - - The event to format - returns the formatted event - - - Format the logging event as an object. - - - Uses the object supplied to - the constructor to perform the formatting. - - - - - - This is a very simple filter based on matching. - - - - The filter admits two options and - . If there is an exact match between the value - of the option and the of the - , then the method returns in - case the option value is set - to true, if it is false then - is returned. If the does not match then - the result will be . - - - Nicko Cadell - Gert Driesen - - - - flag to indicate if the filter should on a match - - - - - the to match against - - - - - Default constructor - - - - - Tests if the of the logging event matches that of the filter - - the event to filter - see remarks - - - If the of the event matches the level of the - filter then the result of the function depends on the - value of . If it is true then - the function will return , it it is false then it - will return . If the does not match then - the result will be . - - - - - - when matching - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - The that the filter will match - - - - The level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - Static manager that controls the creation of repositories - - - - Static manager that controls the creation of repositories - - - This class is used by the wrapper managers (e.g. ) - to provide access to the objects. - - - This manager also holds the that is used to - lookup and create repositories. The selector can be set either programmatically using - the property, or by setting the log4net.RepositorySelector - AppSetting in the applications config file to the fully qualified type name of the - selector to use. - - - Nicko Cadell - Gert Driesen - - - - Private constructor to prevent instances. Only static methods should be used. - - - - Private constructor to prevent instances. Only static methods should be used. - - - - - - Hook the shutdown event - - - - On the full .NET runtime, the static constructor hooks up the - AppDomain.ProcessExit and AppDomain.DomainUnload> events. - These are used to shutdown the log4net system as the application exits. - - - - - - Register for ProcessExit and DomainUnload events on the AppDomain - - - - This needs to be in a separate method because the events make - a LinkDemand for the ControlAppDomain SecurityPermission. Because - this is a LinkDemand it is demanded at JIT time. Therefore we cannot - catch the exception in the method itself, we have to catch it in the - caller. - - - - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - Returns the default instance. - - - - - - Returns the named logger if it exists. - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified repository. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - - Returns the named logger if it exists. - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified assembly's repository. - - - - If the named logger exists (in the specified assembly's repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - - Retrieves or creates a named logger. - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - - Retrieves or creates a named logger. - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - - Shorthand for . - - The repository to lookup in. - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - - Shorthand for . - - the assembly to use to lookup the repository - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - The repository to shutdown. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - The assembly to use to lookup the repository. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Resets all values contained in this repository instance to their defaults. - - The repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - - Resets all values contained in this repository instance to their defaults. - - The assembly to use to lookup the repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - - Gets an array of all currently defined repositories. - - An array of all the known objects. - - - Gets an array of all currently defined repositories. - - - - - - Internal method to get pertinent version info. - - A string of version info. - - - - Called when the event fires - - the that is exiting - null - - - Called when the event fires. - - - When the event is triggered the log4net system is . - - - - - - Called when the event fires - - the that is exiting - null - - - Called when the event fires. - - - When the event is triggered the log4net system is . - - - - - - The fully qualified type of the LoggerManager class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Initialize the default repository selector - - - - - Gets or sets the repository selector used by the . - - - The repository selector used by the . - - - - The repository selector () is used by - the to create and select repositories - (). - - - The caller to supplies either a string name - or an assembly (if not supplied the assembly is inferred using - ). - - - This context is used by the selector to lookup a specific repository. - - - For the full .NET Framework, the default repository is DefaultRepositorySelector; - for the .NET Compact Framework CompactRepositorySelector is the default - repository. - - - - - - The implementation of the interface suitable - for use with the compact framework - - - - This implementation is a simple - mapping between repository name and - object. - - - The .NET Compact Framework 1.0 does not support retrieving assembly - level attributes therefore unlike the DefaultRepositorySelector - this selector does not examine the calling assembly for attributes. - - - Nicko Cadell - - - - Create a new repository selector - - the type of the repositories to create, must implement - - - Create an new compact repository selector. - The default type for repositories must be specified, - an appropriate value would be . - - - throw if is null - throw if does not implement - - - - Get the for the specified assembly - - not used - The default - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - - Get the named - - the name of the repository to lookup - The named - - - Get the named . The default - repository is log4net-default-repository. Other repositories - must be created using the . - If the named repository does not exist an exception is thrown. - - - throw if is null - throw if the does not exist - - - - Create a new repository for the assembly specified - - not used - the type of repository to create, must implement - the repository created - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - If the is null then the - default repository type specified to the constructor is used. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - - Create a new repository for the repository specified - - the repository to associate with the - the type of repository to create, must implement . - If this param is null then the default repository type is used. - the repository created - - - The created will be associated with the repository - specified such that a call to with the - same repository specified will return the same repository instance. - - - If the named repository already exists an exception will be thrown. - - - If is null then the default - repository type specified to the constructor is used. - - - throw if is null - throw if the already exists - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets a list of objects - - an array of all known objects - - - Gets an array of all of the repositories created by this selector. - - - - - - The fully qualified type of the CompactRepositorySelector class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Notify the registered listeners that the repository has been created - - The repository that has been created - - - Raises the LoggerRepositoryCreatedEvent - event. - - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a AppenderCollection instance. - - list to create a readonly wrapper arround - - An AppenderCollection wrapper that is read-only. - - - - - An empty readonly static AppenderCollection - - - - - Initializes a new instance of the AppenderCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the AppenderCollection class - that has the specified initial capacity. - - - The number of elements that the new AppenderCollection is initially capable of storing. - - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified AppenderCollection. - - The AppenderCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - - Copies the entire AppenderCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire AppenderCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the AppenderCollection. - - The to be added to the end of the AppenderCollection. - The index at which the value has been added. - - - - Removes all elements from the AppenderCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the AppenderCollection. - - The to check for. - true if is found in the AppenderCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the AppenderCollection. - - The to locate in the AppenderCollection. - - The zero-based index of the first occurrence of - in the entire AppenderCollection, if found; otherwise, -1. - - - - - Inserts an element into the AppenderCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the AppenderCollection. - - The to remove from the AppenderCollection. - - The specified was not found in the AppenderCollection. - - - - - Removes the element at the specified index of the AppenderCollection. - - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the AppenderCollection. - - An for the entire AppenderCollection. - - - - Adds the elements of another AppenderCollection to the current AppenderCollection. - - The AppenderCollection whose elements should be added to the end of the current AppenderCollection. - The new of the AppenderCollection. - - - - Adds the elements of a array to the current AppenderCollection. - - The array whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - - Adds the elements of a collection to the current AppenderCollection. - - The collection whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - - Sets the capacity to the actual number of elements. - - - - - Return the collection elements as an array - - the array - - - - is less than zero - -or- - is equal to or greater than . - - - - - is less than zero - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the AppenderCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - is less than zero - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - - Gets or sets the number of elements the AppenderCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - - A value - - - - - Supports simple iteration over a . - - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - - - - Register of type converters for specific types. - - - - Maintains a registry of type converters used to convert between - types. - - - Use the and - methods to register new converters. - The and methods - lookup appropriate converters to use. - - - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - Initializes a new instance of the class. - - - - - Static constructor. - - - - This constructor defines the intrinsic type converters. - - - - - - Adds a converter for a specific type. - - The type being converted to. - The type converter to use to convert to the destination type. - - - Adds a converter instance for a specific type. - - - - - - Adds a converter for a specific type. - - The type being converted to. - The type of the type converter to use to convert to the destination type. - - - Adds a converter for a specific type. - - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted from. - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - - Lookups the type converter to use as specified by the attributes on the - destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - - Creates the instance of the type converter. - - The type of the type converter. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - The type specified for the type converter must implement - the or interfaces - and must have a public default (no argument) constructor. - - - - - - The fully qualified type of the ConverterRegistry class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Mapping from to type converter. - - - - - Implementation of Stacks collection for the - - - - Implementation of Stacks collection for the - - - Nicko Cadell - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - The fully qualified type of the ThreadContextStacks class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets the named thread context stack - - - The named stack - - - - Gets the named thread context stack - - - - - - A straightforward implementation of the interface. - - - - This is the default implementation of the - interface. Implementors of the interface - should aggregate an instance of this type. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Append on on all attached appenders. - - The event being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - - Append on on all attached appenders. - - The array of events being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - - Calls the DoAppende method on the with - the objects supplied. - - The appender - The events - - - If the supports the - interface then the will be passed - through using that interface. Otherwise the - objects in the array will be passed one at a time. - - - - - - Attaches an appender. - - The appender to add. - - - If the appender is already in the list it won't be added again. - - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Lookup an attached appender by name. - - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - List of appenders - - - - - Array of appenders, used to cache the m_appenderList - - - - - The fully qualified type of the AppenderAttachedImpl class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Gets all attached appenders. - - - A collection of attached appenders, or null if there - are no attached appenders. - - - - The read only collection of all currently attached appenders. - - - - - - Delegate used to handle logger creation event notifications. - - The in which the has been created. - The event args that hold the instance that has been created. - - - Delegate used to handle logger creation event notifications. - - - - - - Provides data for the event. - - - - A event is raised every time a - is created. - - - - - - The created - - - - - Constructor - - The that has been created. - - - Initializes a new instance of the event argument - class,with the specified . - - - - - - Gets the that has been created. - - - The that has been created. - - - - The that has been created. - - - - - - Hierarchical organization of loggers - - - - The casual user should not have to deal with this class - directly. - - - This class is specialized in retrieving loggers by name and - also maintaining the logger hierarchy. Implements the - interface. - - - The structure of the logger hierarchy is maintained by the - method. The hierarchy is such that children - link to their parent but parents do not have any references to their - children. Moreover, loggers can be instantiated in any order, in - particular descendant before ancestor. - - - In case a descendant is created before a particular ancestor, - then it creates a provision node for the ancestor and adds itself - to the provision node. Other descendants of the same ancestor add - themselves to the previously created provision node. - - - Nicko Cadell - Gert Driesen - - - - Basic Configurator interface for repositories - - - - Interface used by basic configurator to configure a - with a default . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - - Initialize the repository using the specified appender - - the appender to use to log all logging events - - - Configure the repository to route all logging events to the - specified appender. - - - - - - Initialize the repository using the specified appenders - - the appenders to use to log all logging events - - - Configure the repository to route all logging events to the - specified appenders. - - - - - - Configure repository using XML - - - - Interface used by Xml configurator to configure a . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - - Initialize the repository using the specified config - - the element containing the root of the config - - - The schema for the XML configuration data is defined by - the implementation. - - - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Construct with properties - - The properties to pass to this repository. - - - Initializes a new instance of the class. - - - - - - Construct with a logger factory - - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - - Construct with properties and a logger factory - - The properties to pass to this repository. - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - - Test if a logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the hierarchy. If so return - its reference, otherwise returns null. - - - - - - Returns all the currently defined loggers in the hierarchy as an Array - - All the defined loggers - - - Returns all the currently defined loggers in the hierarchy as an Array. - The root logger is not included in the returned - enumeration. - - - - - - Return a new logger instance named as the first parameter using - the default factory. - - - - Return a new logger instance named as the first parameter using - the default factory. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - The name of the logger to retrieve - The logger object with the name specified - - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The Shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Reset all values contained in this hierarchy instance to their default. - - - - Reset all values contained in this hierarchy instance to their - default. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the logEvent through this hierarchy. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are currently configured - - An array containing all the currently configured appenders - - - Returns all the instances that are currently configured. - All the loggers are searched for appenders. The appenders may also be containers - for appenders and these are also searched for additional loggers. - - - The list returned is unordered but does not contain duplicates. - - - - - - Collect the appenders from an . - The appender may also be a container. - - - - - - - Collect the appenders from an container - - - - - - - Initialize the log4net system using the specified appender - - the appender to use to log all logging events - - - - Initialize the log4net system using the specified appenders - - the appenders to use to log all logging events - - - - Initialize the log4net system using the specified appenders - - the appenders to use to log all logging events - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - - Test if this hierarchy is disabled for the specified . - - The level to check against. - - true if the repository is disabled for the level argument, false otherwise. - - - - If this hierarchy has not been configured then this method will - always return true. - - - This method will return true if this repository is - disabled for level object passed as parameter and - false otherwise. - - - See also the property. - - - - - - Clear all logger definitions from the internal hashtable - - - - This call will clear all logger definitions from the internal - hashtable. Invoking this method will irrevocably mess up the - logger hierarchy. - - - You should really know what you are doing before - invoking this method. - - - - - - Return a new logger instance named as the first parameter using - . - - The name of the logger to retrieve - The factory that will make the new logger instance - The logger object with the name specified - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated by the - parameter and linked with its existing - ancestors as well as children. - - - - - - Sends a logger creation event to all registered listeners - - The newly created logger - - Raises the logger creation event. - - - - - Updates all the parents of the specified logger - - The logger to update the parents for - - - This method loops through all the potential parents of - . There 3 possible cases: - - - - No entry for the potential parent of exists - - We create a ProvisionNode for this potential - parent and insert in that provision node. - - - - The entry is of type Logger for the potential parent. - - The entry is 's nearest existing parent. We - update 's parent field with this entry. We also break from - he loop because updating our parent's parent is our parent's - responsibility. - - - - The entry is of type ProvisionNode for this potential parent. - - We add to the list of children for this - potential parent. - - - - - - - - Replace a with a in the hierarchy. - - - - - - We update the links for all the children that placed themselves - in the provision node 'pn'. The second argument 'log' is a - reference for the newly created Logger, parent of all the - children in 'pn'. - - - We loop on all the children 'c' in 'pn'. - - - If the child 'c' has been already linked to a child of - 'log' then there is no need to update 'c'. - - - Otherwise, we set log's parent field to c's parent and set - c's parent field to log. - - - - - - Define or redefine a Level using the values in the argument - - the level values - - - Define or redefine a Level using the values in the argument - - - Supports setting levels via the configuration file. - - - - - - Set a Property using the values in the argument - - the property value - - - Set a Property using the values in the argument. - - - Supports setting property values via the configuration file. - - - - - - The fully qualified type of the Hierarchy class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Event used to notify that a logger has been created. - - - - Event raised when a logger is created. - - - - - - Has no appender warning been emitted - - - - Flag to indicate if we have already issued a warning - about not having an appender warning. - - - - - - Get the root of this hierarchy - - - - Get the root of this hierarchy. - - - - - - Gets or sets the default instance. - - The default - - - The logger factory is used to create logger instances. - - - - - - A class to hold the value, name and display name for a level - - - - A class to hold the value, name and display name for a level - - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - - Value of the level - - - - If the value is not set (defaults to -1) the value will be looked - up for the current level with the same name. - - - - - - Name of the level - - - The name of the level - - - - The name of the level. - - - - - - Display name for the level - - - The display name of the level - - - - The display name of the level. - - - - - - Map class objects to an . - - - - Maintains a mapping between types that require special - rendering and the that - is used to render them. - - - The method is used to render an - object using the appropriate renderers defined in this map. - - - Nicko Cadell - Gert Driesen - - - - Default Constructor - - - - Default constructor. - - - - - - Render using the appropriate renderer. - - the object to render to a string - the object rendered as a string - - - This is a convenience method used to render an object to a string. - The alternative method - should be used when streaming output to a . - - - - - - Render using the appropriate renderer. - - the object to render to a string - The writer to render to - - - Find the appropriate renderer for the type of the - parameter. This is accomplished by calling the - method. Once a renderer is found, it is - applied on the object and the result is returned - as a . - - - - - - Gets the renderer for the specified object type - - the object to lookup the renderer for - the renderer for - - - Gets the renderer for the specified object type. - - - Syntactic sugar method that calls - with the type of the object parameter. - - - - - - Gets the renderer for the specified type - - the type to lookup the renderer for - the renderer for the specified type - - - Returns the renderer for the specified type. - If no specific renderer has been defined the - will be returned. - - - - - - Internal function to recursively search interfaces - - the type to lookup the renderer for - the renderer for the specified type - - - - Clear the map of renderers - - - - Clear the custom renderers defined by using - . The - cannot be removed. - - - - - - Register an for . - - the type that will be rendered by - the renderer for - - - Register an object renderer for a specific source type. - This renderer will be returned from a call to - specifying the same as an argument. - - - - - - Get the default renderer instance - - the default renderer - - - Get the default renderer - - - - - - Write the caller location line number to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - - Write the caller location line number to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - - The return result from - - - - The return result from - - - - - - The log event must be dropped immediately without - consulting with the remaining filters, if any, in the chain. - - - - - This filter is neutral with respect to the log event. - The remaining filters, if any, should be consulted for a final decision. - - - - - The log event must be logged immediately without - consulting with the remaining filters, if any, in the chain. - - - - - An evaluator that triggers at a threshold level - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - Nicko Cadell - - - - The threshold for triggering - - - - - Create a new evaluator using the threshold. - - - - Create a new evaluator using the threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Create a new evaluator using the specified threshold. - - the threshold to trigger at - - - Create a new evaluator using the specified threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Is this the triggering event? - - The event to check - This method returns true, if the event level - is equal or higher than the . - Otherwise it returns false - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - the threshold to trigger at - - - The that will cause this evaluator to trigger - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Interface for objects that require fixing. - - - - Interface that indicates that the object requires fixing before it - can be taken outside the context of the appender's - method. - - - When objects that implement this interface are stored - in the context properties maps - and - are fixed - (see ) the - method will be called. - - - Nicko Cadell - - - - Get a portable version of this object - - the portable instance of this object - - - Get a portable instance object that represents the current - state of this object. The portable object can be stored - and logged from any thread with identical results. - - - - - - An evaluator that triggers on an Exception type - - - - This evaluator will trigger if the type of the Exception - passed to - is equal to a Type in . /// - - - Drew Schaeffer - - - - The type that causes the trigger to fire. - - - - - Causes subclasses of to cause the trigger to fire. - - - - - Default ctor to allow dynamic creation through a configurator. - - - - - Constructs an evaluator and initializes to trigger on - - the type that triggers this evaluator. - If true, this evaluator will trigger on subclasses of . - - - - Is this the triggering event? - - The event to check - This method returns true, if the logging event Exception - Type is . - Otherwise it returns false - - - This evaluator will trigger if the Exception Type of the event - passed to - is . - - - - - - The type that triggers this evaluator. - - - - - If true, this evaluator will trigger on subclasses of . - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - trace system. - - - Events are written using the System.Diagnostics.Trace.Write(string,string) - method. The event's logger name is the default value for the category parameter - of the Write method. - - - Compact Framework
- The Compact Framework does not support the - class for any operation except Assert. When using the Compact Framework this - appender will write to the system rather than - the Trace system. This appender will therefore behave like the . -
-
- Douglas de la Torre - Nicko Cadell - Gert Driesen - Ron Grabowski -
- - - Initializes a new instance of the . - - - - Default constructor. - - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - - Defaults to %logger - - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - - The category parameter sent to the Trace method. - - - - Defaults to %logger which will use the logger name of the current - as the category parameter. - - - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appends log events to the OutputDebugString system. - - - - OutputDebugStringAppender appends log events to the - OutputDebugString system. - - - The string is passed to the native OutputDebugString - function. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Write the logging event to the output debug string API - - the event to log - - - Write the logging event to the output debug string API - - - - - - Stub for OutputDebugString native method - - the string to output - - - Stub for OutputDebugString native method - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Writes events to the system event log. - - - - The EventID of the event log entry can be - set using the EventLogEventID property () - on the . - - - There is a limit of 32K characters for an event log message - - - When configuring the EventLogAppender a mapping can be - specified to map a logging level to an event log entry type. For example: - - - <mapping> - <level value="ERROR" /> - <eventLogEntryType value="Error" /> - </mapping> - <mapping> - <level value="DEBUG" /> - <eventLogEntryType value="Information" /> - </mapping> - - - The Level is the standard log4net logging level and eventLogEntryType can be any value - from the enum, i.e.: - - Erroran error event - Warninga warning event - Informationan informational event - - - - Aspi Havewala - Douglas de la Torre - Nicko Cadell - Gert Driesen - Thomas Voss - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initializes a new instance of the class - with the specified . - - The to use with this appender. - - - Obsolete constructor. - - - - - - Add a mapping of level to - done by the config file - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the event log entry type for a level. - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Create an event log source - - - Uses different API calls under NET_2_0 - - - - - This method is called by the - method. - - the event to log - - Writes the event to the system event log using the - . - - If the event has an EventID property (see ) - set then this integer will be used as the event log event id. - - - There is a limit of 32K characters for an event log message - - - - - - Get the equivalent for a - - the Level to convert to an EventLogEntryType - The equivalent for a - - Because there are fewer applicable - values to use in logging levels than there are in the - this is a one way mapping. There is - a loss of information during the conversion. - - - - - The log name is the section in the event logs where the messages - are stored. - - - - - Name of the application to use when logging. This appears in the - application column of the event log named by . - - - - - The name of the machine which holds the event log. This is - currently only allowed to be '.' i.e. the current machine. - - - - - Mapping from level object to EventLogEntryType - - - - - The security context to use for privileged calls - - - - - The fully qualified type of the EventLogAppender class. - - - Used by the internal logger to record the Type of the - log message. - - - - - The name of the log where messages will be stored. - - - The string name of the log where messages will be stored. - - - This is the name of the log as it appears in the Event Viewer - tree. The default value is to log into the Application - log, this is where most applications write their events. However - if you need a separate log for your application (or applications) - then you should set the appropriately. - This should not be used to distinguish your event log messages - from those of other applications, the - property should be used to distinguish events. This property should be - used to group together events into a single log. - - - - - - Property used to set the Application name. This appears in the - event logs when logging. - - - The string used to distinguish events from different sources. - - - Sets the event log source property. - - - - - This property is used to return the name of the computer to use - when accessing the event logs. Currently, this is the current - computer, denoted by a dot "." - - - The string name of the machine holding the event log that - will be logged into. - - - This property cannot be changed. It is currently set to '.' - i.e. the local machine. This may be changed in future. - - - - - Gets or sets the used to write to the EventLog. - - - The used to write to the EventLog. - - - - The system security context used to write to the EventLog. - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and its event log entry type. - - - - - - The for this entry - - - - Required property. - The for this entry - - - - - - Implementation of Stack for the - - - - Implementation of Stack for the - - - Nicko Cadell - - - - The stack store. - - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Clears all the contextual information held in this stack. - - - - Clears all the contextual information held in this stack. - Only call this if you think that this tread is being reused after - a previous call execution which may not have completed correctly. - You do not need to use this method if you always guarantee to call - the method of the - returned from even in exceptional circumstances, - for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - syntax. - - - - - - Removes the top context from this stack. - - The message in the context that was removed from the top of this stack. - - - Remove the top context from this stack, and return - it to the caller. If this stack is empty then an - empty string (not ) is returned. - - - - - - Pushes a new context message into this stack. - - The new context message. - - An that can be used to clean up the context stack. - - - - Pushes a new context onto this stack. An - is returned that can be used to clean up this stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - { - log.Warn("This should have an ThreadContext Stack message"); - } - - - - - - Gets the current context information for this stack. - - The current context information. - - - - Gets the current context information for this stack. - - Gets the current context information - - - Gets the current context information for this stack. - - - - - - Get a portable version of this object - - the portable instance of this object - - - Get a cross thread portable version of this object - - - - - - The number of messages in the stack - - - The current number of messages in the stack - - - - The current number of messages in the stack. That is - the number of times has been called - minus the number of times has been called. - - - - - - Gets and sets the internal stack used by this - - The internal storage stack - - - This property is provided only to support backward compatability - of the . Tytpically the internal stack should not - be modified. - - - - - - Inner class used to represent a single context frame in the stack. - - - - Inner class used to represent a single context frame in the stack. - - - - - - Constructor - - The message for this context. - The parent context in the chain. - - - Initializes a new instance of the class - with the specified message and parent context. - - - - - - Get the message. - - The message. - - - Get the message. - - - - - - Gets the full text of the context down to the root level. - - - The full text of the context down to the root level. - - - - Gets the full text of the context down to the root level. - - - - - - Struct returned from the method. - - - - This struct implements the and is designed to be used - with the pattern to remove the stack frame at the end of the scope. - - - - - - The ThreadContextStack internal stack - - - - - The depth to trim the stack to when this instance is disposed - - - - - Constructor - - The internal stack used by the ThreadContextStack. - The depth to return the stack to when this object is disposed. - - - Initializes a new instance of the class with - the specified stack and return depth. - - - - - - Returns the stack to the correct depth. - - - - Returns the stack to the correct depth. - - - - - - A that ignores the message - - - - This writer is used in special cases where it is necessary - to protect a writer from being closed by a client. - - - Nicko Cadell - - - - Constructor - - the writer to actually write to - - - Create a new ProtectCloseTextWriter using a writer - - - - - - Attach this instance to a different underlying - - the writer to attach to - - - Attach this instance to a different underlying - - - - - - Does not close the underlying output writer. - - - - Does not close the underlying output writer. - This method does nothing. - - - - - - A Pattern converter that generates a string of random characters - - - - The converter generates a string of random characters. By default - the string is length 4. This can be changed by setting the - to the string value of the length required. - - - The random characters in the string are limited to uppercase letters - and numbers only. - - - The random number generator used by this class is not cryptographically secure. - - - Nicko Cadell - - - - Shared random number generator - - - - - Length of random string to generate. Default length 4. - - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write a randoim string to the output - - the writer to write to - null, state is not set - - - Write a randoim string to the output . - - - - - - The fully qualified type of the RandomStringPatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Write an folder path to the output - - - - Write an special path environment folder path to the output writer. - The value of the determines - the name of the variable to output. - should be a value in the enumeration. - - - Ron Grabowski - - - - Write an special path environment folder path to the output - - the writer to write to - null, state is not set - - - Writes the special path environment folder path to the output . - The name of the special path environment folder path to output must be set - using the - property. - - - - - - The fully qualified type of the EnvironmentFolderPathPatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - A SecurityContext used when a SecurityContext is not required - - - - The is a no-op implementation of the - base class. It is used where a - is required but one has not been provided. - - - Nicko Cadell - - - - Singleton instance of - - - - Singleton instance of - - - - - - Private constructor - - - - Private constructor for singleton pattern. - - - - - - Impersonate this SecurityContext - - State supplied by the caller - null - - - No impersonation is done and null is always returned. - - - - - - Manages a mapping from levels to - - - - Manages an ordered mapping from instances - to subclasses. - - - Nicko Cadell - - - - Default constructor - - - - Initialise a new instance of . - - - - - - Add a to this mapping - - the entry to add - - - If a has previously been added - for the same then that entry will be - overwritten. - - - - - - Lookup the mapping for the specified level - - the level to lookup - the for the level or null if no mapping found - - - Lookup the value for the specified level. Finds the nearest - mapping value for the level that is equal to or less than the - specified. - - - If no mapping could be found then null is returned. - - - - - - Initialize options - - - - Caches the sorted list of in an array - - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a PluginCollection instance. - - list to create a readonly wrapper arround - - A PluginCollection wrapper that is read-only. - - - - - Initializes a new instance of the PluginCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the PluginCollection class - that has the specified initial capacity. - - - The number of elements that the new PluginCollection is initially capable of storing. - - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified PluginCollection. - - The PluginCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - - Copies the entire PluginCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire PluginCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the PluginCollection. - - The to be added to the end of the PluginCollection. - The index at which the value has been added. - - - - Removes all elements from the PluginCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the PluginCollection. - - The to check for. - true if is found in the PluginCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the PluginCollection. - - The to locate in the PluginCollection. - - The zero-based index of the first occurrence of - in the entire PluginCollection, if found; otherwise, -1. - - - - - Inserts an element into the PluginCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the PluginCollection. - - The to remove from the PluginCollection. - - The specified was not found in the PluginCollection. - - - - - Removes the element at the specified index of the PluginCollection. - - The zero-based index of the element to remove. - - is less than zero. - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the PluginCollection. - - An for the entire PluginCollection. - - - - Adds the elements of another PluginCollection to the current PluginCollection. - - The PluginCollection whose elements should be added to the end of the current PluginCollection. - The new of the PluginCollection. - - - - Adds the elements of a array to the current PluginCollection. - - The array whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - - Adds the elements of a collection to the current PluginCollection. - - The collection whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - - Sets the capacity to the actual number of elements. - - - - - is less than zero. - -or- - is equal to or greater than . - - - - - is less than zero. - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the PluginCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - An object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - - The at the specified index. - - The zero-based index of the element to get or set. - - is less than zero. - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false. - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false. - - - - Gets or sets the number of elements the PluginCollection can contain. - - - The number of elements the PluginCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - - A value - - - - - Supports simple iteration over a . - - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - - - - Implementation of Nested Diagnostic Contexts. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - A Nested Diagnostic Context, or NDC in short, is an instrument - to distinguish interleaved log output from different sources. Log - output is typically interleaved when a server handles multiple - clients near-simultaneously. - - - Interleaved log output can still be meaningful if each log entry - from different contexts had a distinctive stamp. This is where NDCs - come into play. - - - Note that NDCs are managed on a per thread basis. The NDC class - is made up of static methods that operate on the context of the - calling thread. - - - How to push a message into the context - - using(NDC.Push("my context message")) - { - ... all log calls will have 'my context message' included ... - - } // at the end of the using block the message is automatically removed - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Clears all the contextual information held on the current thread. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Clears the stack of NDC data held on the current thread. - - - - - - Creates a clone of the stack of context information. - - A clone of the context info for this thread. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The results of this method can be passed to the - method to allow child threads to inherit the context of their - parent thread. - - - - - - Inherits the contextual information from another thread. - - The context stack to inherit. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This thread will use the context information from the stack - supplied. This can be used to initialize child threads with - the same contextual information as their parent threads. These - contexts will NOT be shared. Any further contexts that - are pushed onto the stack will not be visible to the other. - Call to obtain a stack to pass to - this method. - - - - - - Removes the top context from the stack. - - - The message in the context that was removed from the top - of the stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Remove the top context from the stack, and return - it to the caller. If the stack is empty then an - empty string (not null) is returned. - - - - - - Pushes a new context message. - - The new context message. - - An that can be used to clean up - the context stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Pushes a new context onto the context stack. An - is returned that can be used to clean up the context stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.NDC.Push("NDC_Message")) - { - log.Warn("This should have an NDC message"); - } - - - - - - Removes the context information for this thread. It is - not required to call this method. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This method is not implemented. - - - - - - Forces the stack depth to be at most . - - The maximum depth of the stack - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Forces the stack depth to be at most . - This may truncate the head of the stack. This only affects the - stack in the current thread. Also it does not prevent it from - growing, it only sets the maximum depth at the time of the - call. This can be used to return to a known context depth. - - - - - - Gets the current context depth. - - The current context depth. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The number of context values pushed onto the context stack. - - - Used to record the current depth of the context. This can then - be restored using the method. - - - - - - - Layout that formats the log events as XML elements compatible with the log4j schema - - - - Formats the log events according to the http://logging.apache.org/log4j schema. - - - Nicko Cadell - - - - The 1st of January 1970 in UTC - - - - - Constructs an XMLLayoutSchemaLog4j - - - - - Constructs an XMLLayoutSchemaLog4j. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Actually do the writing of the xml - - the writer to use - the event to write - - - Generate XML that is compatible with the log4j schema. - - - - - - The version of the log4j schema to use. - - - - Only version 1.2 of the log4j schema is supported. - - - - - - A very simple layout - - - - SimpleLayout consists of the level of the log statement, - followed by " - " and then the log message itself. For example, - - DEBUG - Hello world - - - - Nicko Cadell - Gert Driesen - - - - Constructs a SimpleLayout - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a simple formatted output. - - the event being logged - The TextWriter to write the formatted event to - - - Formats the event as the level of the even, - followed by " - " and then the log message itself. The - output is terminated by a newline. - - - - - - Write the TimeStamp to the output - - - - Date pattern converter, uses a to format - the date of a . - - - Uses a to format the - in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - - Write the TimeStamp to the output - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone, this is converted - to Universal time before it is rendered. - - - - - - - The fully qualified type of the UtcDatePatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Simple filter to match a keyed string in the - - - - Simple filter to match a keyed string in the - - - As the MDC has been replaced with layered properties the - should be used instead. - - - Nicko Cadell - Gert Driesen - - - - Write the current thread identity to the output - - - - Write the current thread identity to the output writer - - - Nicko Cadell - - - - Write the current thread identity to the output - - the writer to write to - null, state is not set - - - Writes the current thread identity to the output . - - - - - - The fully qualified type of the IdentityPatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Write an environment variable to the output - - - - Write an environment variable to the output writer. - The value of the determines - the name of the variable to output. - - - Nicko Cadell - - - - Write an environment variable to the output - - the writer to write to - null, state is not set - - - Writes the environment variable to the output . - The name of the environment variable to output must be set - using the - property. - - - - - - The fully qualified type of the EnvironmentPatternConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - A convenience class to convert property values to specific types. - - - - Utility functions for converting types and parsing values. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Converts a string to a value. - - String to convert. - The default value. - The value of . - - - If is "true", then true is returned. - If is "false", then false is returned. - Otherwise, is returned. - - - - - - Parses a file size into a number. - - String to parse. - The default value. - The value of . - - - Parses a file size of the form: number[KB|MB|GB] into a - long value. It is scaled with the appropriate multiplier. - - - is returned when - cannot be converted to a value. - - - - - - Converts a string to an object. - - The target type to convert to. - The string to convert to an object. - - The object converted from a string or null when the - conversion failed. - - - - Converts a string to an object. Uses the converter registry to try - to convert the string value into the specified target type. - - - - - - Checks if there is an appropriate type conversion from the source type to the target type. - - The type to convert from. - The type to convert to. - true if there is a conversion from the source type to the target type. - - Checks if there is an appropriate type conversion from the source type to the target type. - - - - - - - Converts an object to the target type. - - The object to convert to the target type. - The type to convert to. - The converted object. - - - Converts an object to the target type. - - - - - - Instantiates an object given a class name. - - The fully qualified class name of the object to instantiate. - The class to which the new object should belong. - The object to return in case of non-fulfillment. - - An instance of the or - if the object could not be instantiated. - - - - Checks that the is a subclass of - . If that test fails or the object could - not be instantiated, then is returned. - - - - - - Performs variable substitution in string from the - values of keys found in . - - The string on which variable substitution is performed. - The dictionary to use to lookup variables. - The result of the substitutions. - - - The variable substitution delimiters are ${ and }. - - - For example, if props contains key=value, then the call - - - - string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); - - - - will set the variable s to "Value of key is value.". - - - If no value could be found for the specified key, then substitution - defaults to an empty string. - - - For example, if system properties contains no value for the key - "nonExistentKey", then the call - - - - string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); - - - - will set s to "Value of nonExistentKey is []". - - - An Exception is thrown if contains a start - delimiter "${" which is not balanced by a stop delimiter "}". - - - - - - Converts the string representation of the name or numeric value of one or - more enumerated constants to an equivalent enumerated object. - - The type to convert to. - The enum string value. - If true, ignore case; otherwise, regard case. - An object of type whose value is represented by . - - - - The fully qualified type of the OptionConverter class. - - - Used by the internal logger to record the Type of the - log message. - - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Test if the enumerator can advance, if so advance. - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - - The singleton instance of the . - - - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current key from the enumerator. - - - Throws an exception because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current value from the enumerator. - - The current value from the enumerator. - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current entry from the enumerator. - - - Throws an because the - never has a current entry. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Implementation of Mapped Diagnostic Contexts. - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - The MDC class is similar to the class except that it is - based on a map instead of a stack. It provides mapped - diagnostic contexts. A Mapped Diagnostic Context, or - MDC in short, is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The MDC is managed on a per thread basis. - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Gets the context value identified by the parameter. - - The key to lookup in the MDC. - The string value held for the key, or a null reference if no corresponding value is found. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - If the parameter does not look up to a - previously defined context then null will be returned. - - - - - - Add an entry to the MDC - - The key to store the value under. - The value to store. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Puts a context value (the parameter) as identified - with the parameter into the current thread's - context map. - - - If a value is already defined for the - specified then the value will be replaced. If the - is specified as null then the key value mapping will be removed. - - - - - - Removes the key value mapping for the key specified. - - The key to remove. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove the specified entry from this thread's MDC - - - - - - Clear all entries in the MDC - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove all the entries from this thread's MDC - - - - - - Converter to include event user name - - Douglas de la Torre - Nicko Cadell - - - - Convert the pattern to the rendered message - - that will receive the formatted result. - the event being logged - - - - Converter for items in the ASP.Net Cache. - - - - Outputs an item from the . - - - Ron Grabowski - - - - Write the ASP.Net Cache item to the output - - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. - - - Writes out the value of a named property. The property name - should be set in the - property. - - - - - - Mapping between string name and Level object - - - - Mapping between string name and object. - This mapping is held separately for each . - The level name is case insensitive. - - - Nicko Cadell - - - - Mapping from level name to Level object. The - level name is case insensitive - - - - - Construct the level map - - - - Construct the level map. - - - - - - Clear the internal maps of all levels - - - - Clear the internal maps of all levels - - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - - - Create a new Level and add it to the map - - - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - the display name to give to the Level - - - Create a new Level and add it to the map - - - - - - Add a Level to the map - - the Level to add - - - Add a Level to the map - - - - - - Lookup a named level from the map - - the name of the level to lookup is taken from this level. - If the level is not set on the map then this level is added - the level in the map with the name specified - - - Lookup a named level from the map. The name of the level to lookup is taken - from the property of the - argument. - - - If no level with the specified name is found then the - argument is added to the level map - and returned. - - - - - - Lookup a by name - - The name of the Level to lookup - a Level from the map with the name specified - - - Returns the from the - map with the name specified. If the no level is - found then null is returned. - - - - - - Return all possible levels as a list of Level objects. - - all possible levels as a list of Level objects - - - Return all possible levels as a list of Level objects. - - - - - - Use this class to quickly configure a . - - - - Allows very simple programmatic configuration of log4net. - - - Only one appender can be configured using this configurator. - The appender is set at the root of the hierarchy and all logging - events will be delivered to that appender. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - The fully qualified type of the BasicConfigurator class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Initializes the log4net system with a default configuration. - - - - Initializes the log4net logging system using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - - Initializes the log4net system using the specified appender. - - The appender to use to log all logging events. - - - Initializes the log4net system using the specified appender. - - - - - - Initializes the log4net system using the specified appenders. - - The appenders to use to log all logging events. - - - Initializes the log4net system using the specified appenders. - - - - - - Initializes the with a default configuration. - - The repository to configure. - - - Initializes the specified repository using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - - Initializes the using the specified appender. - - The repository to configure. - The appender to use to log all logging events. - - - Initializes the using the specified appender. - - - - - - Initializes the using the specified appenders. - - The repository to configure. - The appenders to use to log all logging events. - - - Initializes the using the specified appender. - - - - - - A class to hold the key and data for a property set in the config file - - - - A class to hold the key and data for a property set in the config file - - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - - Property Key - - - Property Key - - - - Property Key. - - - - - - Property Value - - - Property Value - - - - Property Value. - - - - - - Converter to include event thread name - - - - Writes the to the output. - - - Nicko Cadell - - - - Write the ThreadName to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the . - - - - - - Simple filter to match a string in the event's logger name. - - - - The works very similar to the . It admits two - options and . If the - of the starts - with the value of the option, then the - method returns in - case the option value is set to true, - if it is false then is returned. - - - Daniel Cazzulino - - - - Flag to indicate the behavior when we have a match - - - - - The logger name string to substring match against the event - - - - - Default constructor - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the equals the beginning of - the incoming () - then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - when matching - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - The that the filter will match - - - - This filter will attempt to match this value against logger name in - the following way. The match will be done against the beginning of the - logger name (using ). The match is - case sensitive. If a match is found then - the result depends on the value of . - - - - - - Portable data structure used by - - - - Portable data structure used by - - - Nicko Cadell - - - - The logger name. - - - - The logger name. - - - - - - Level of logging event. - - - - Level of logging event. Level cannot be Serializable - because it is a flyweight. Due to its special serialization it - cannot be declared final either. - - - - - - The application supplied message. - - - - The application supplied message of logging event. - - - - - - The name of thread - - - - The name of thread in which this logging event was generated - - - - - - The time the event was logged - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - - Location information for the caller. - - - - Location information for the caller. - - - - - - String representation of the user - - - - String representation of the user's windows name, - like DOMAIN\username - - - - - - String representation of the identity. - - - - String representation of the current thread's principal identity. - - - - - - The string representation of the exception - - - - The string representation of the exception - - - - - - String representation of the AppDomain. - - - - String representation of the AppDomain. - - - - - - Additional event specific properties - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - - - - Flags passed to the property - - - - Flags passed to the property - - - Nicko Cadell - - - - Fix the MDC - - - - - Fix the NDC - - - - - Fix the rendered message - - - - - Fix the thread name - - - - - Fix the callers location information - - - CAUTION: Very slow to generate - - - - - Fix the callers windows user name - - - CAUTION: Slow to generate - - - - - Fix the domain friendly name - - - - - Fix the callers principal name - - - CAUTION: May be slow to generate - - - - - Fix the exception text - - - - - Fix the event properties. Active properties must implement in order to be eligible for fixing. - - - - - No fields fixed - - - - - All fields fixed - - - - - Partial fields fixed - - - - This set of partial fields gives good performance. The following fields are fixed: - - - - - - - - - - - - - The internal representation of logging events. - - - - When an affirmative decision is made to log then a - instance is created. This instance - is passed around to the different log4net components. - - - This class is of concern to those wishing to extend log4net. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino - - - - The key into the Properties map for the host name value. - - - - - The key into the Properties map for the thread identity value. - - - - - The key into the Properties map for the user name value. - - - - - Initializes a new instance of the class - from the supplied parameters. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - The name of the logger of this event. - The level of this event. - The message of this event. - The exception for this event. - - - Except , and , - all fields of LoggingEvent are filled when actually needed. Call - to cache all data locally - to prevent inconsistencies. - - This method is called by the log4net framework - to create a logging event. - - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - The fields in the struct that have already been fixed. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - The parameter should be used to specify which fields in the - struct have been preset. Fields not specified in the - will be captured from the environment if requested or fixed. - - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - - Initializes a new instance of the class - using specific data. - - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - - Serialization constructor - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - - Ensure that the repository is set. - - the value for the repository - - - - Write the rendered message to a TextWriter - - the writer to write the message to - - - Unlike the property this method - does store the message data in the internal cache. Therefore - if called only once this method should be faster than the - property, however if the message is - to be accessed multiple times then the property will be more efficient. - - - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - The data in this event must be fixed before it can be serialized. - - - The method must be called during the - method call if this event - is to be used outside that method. - - - - - - Gets the portable data for this . - - The for this event. - - - A new can be constructed using a - instance. - - - Does a fix of the data - in the logging event before returning the event data. - - - - - - Gets the portable data for this . - - The set of data to ensure is fixed in the LoggingEventData - The for this event. - - - A new can be constructed using a - instance. - - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Obsolete. Use instead. - - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Returns this event's exception's rendered using the - . - - - - - - Fix instance fields that hold volatile data. - - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - incurred by calling but it - is essential to maintaining data consistency. - - - Calling is equivalent to - calling passing the parameter - false. - - - See for more - information. - - - - - - Fixes instance fields that hold volatile data. - - Set to true to not fix data that takes a long time to fix. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - The param controls the data that - is fixed. Some of the data that can be fixed takes a long time to - generate, therefore if you do not require those settings to be fixed - they can be ignored by setting the param - to true. This setting will ignore the - and settings. - - - Set to false to ensure that all - settings are fixed. - - - - - - Fix the fields specified by the parameter - - the fields to fix - - - Only fields specified in the will be fixed. - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - - Lookup a composite property in this event - - the key for the property to lookup - the value for the property - - - This event has composite properties that combine together properties from - several different contexts in the following order: - - - this events properties - - This event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - - - Get all the composite properties in this event - - the containing all the properties - - - See for details of the composite properties - stored by the event. - - - This method returns a single containing all the - properties defined for this event. - - - - - - The internal logging event data. - - - - - The internal logging event data. - - - - - The internal logging event data. - - - - - The fully qualified Type of the calling - logger class in the stack frame (i.e. the declaring type of the method). - - - - - The application supplied message of logging event. - - - - - The exception that was thrown. - - - This is not serialized. The string representation - is serialized instead. - - - - - The repository that generated the logging event - - - This is not serialized. - - - - - The fix state for this event - - - These flags indicate which fields have been fixed. - Not serialized. - - - - - Indicated that the internal cache is updateable (ie not fixed) - - - This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler - changes in the caching strategy. - - - - - Gets the time when the current process started. - - - This is the time when this process started. - - - - The TimeStamp is stored in the local time zone for this computer. - - - Tries to get the start time for the current process. - Failing that it returns the time of the first call to - this property. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating and therefore - without the process start time being reset. - - - - - - Gets the of the logging event. - - - The of the logging event. - - - - Gets the of the logging event. - - - - - - Gets the time of the logging event. - - - The time of the logging event. - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - - Gets the name of the logger that logged the event. - - - The name of the logger that logged the event. - - - - Gets the name of the logger that logged the event. - - - - - - Gets the location information for this logging event. - - - The location information for this logging event. - - - - The collected information is cached for future use. - - - See the class for more information on - supported frameworks and the different behavior in Debug and - Release builds. - - - - - - Gets the message object used to initialize this event. - - - The message object used to initialize this event. - - - - Gets the message object used to initialize this event. - Note that this event may not have a valid message object. - If the event is serialized the message object will not - be transferred. To get the text of the message the - property must be used - not this property. - - - If there is no defined message object for this event then - null will be returned. - - - - - - Gets the exception object used to initialize this event. - - - The exception object used to initialize this event. - - - - Gets the exception object used to initialize this event. - Note that this event may not have a valid exception object. - If the event is serialized the exception object will not - be transferred. To get the text of the exception the - method must be used - not this property. - - - If there is no defined exception object for this event then - null will be returned. - - - - - - The that this event was created in. - - - - The that this event was created in. - - - - - - Gets the message, rendered through the . - - - The message rendered through the . - - - - The collected information is cached for future use. - - - - - - Gets the name of the current thread. - - - The name of the current thread, or the thread ID when - the name is not available. - - - - The collected information is cached for future use. - - - - - - Gets the name of the current user. - - - The name of the current user, or NOT AVAILABLE when the - underlying runtime has no support for retrieving the name of the - current user. - - - - Calls WindowsIdentity.GetCurrent().Name to get the name of - the current windows user. - - - To improve performance, we could cache the string representation of - the name, and reuse that as long as the identity stayed constant. - Once the identity changed, we would need to re-assign and re-render - the string. - - - However, the WindowsIdentity.GetCurrent() call seems to - return different objects every time, so the current implementation - doesn't do this type of caching. - - - Timing for these operations: - - - - Method - Results - - - WindowsIdentity.GetCurrent() - 10000 loops, 00:00:00.2031250 seconds - - - WindowsIdentity.GetCurrent().Name - 10000 loops, 00:00:08.0468750 seconds - - - - This means we could speed things up almost 40 times by caching the - value of the WindowsIdentity.GetCurrent().Name property, since - this takes (8.04-0.20) = 7.84375 seconds. - - - - - - Gets the identity of the current thread principal. - - - The string name of the identity of the current thread principal. - - - - Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get - the name of the current thread principal. - - - - - - Gets the AppDomain friendly name. - - - The AppDomain friendly name. - - - - Gets the AppDomain friendly name. - - - - - - Additional event specific properties. - - - Additional event specific properties. - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - This property is for events that have been added directly to - this event. The aggregate properties (which include these - event properties) can be retrieved using - and . - - - Once the properties have been fixed this property - returns the combined cached properties. This ensures that updates to - this property are always reflected in the underlying storage. When - returning the combined properties there may be more keys in the - Dictionary than expected. - - - - - - The fixed fields in this event - - - The set of fields that are fixed in this event - - - - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - - Appender that allows clients to connect via Telnet to receive log messages - - - - The TelnetAppender accepts socket connections and streams logging messages - back to the client. - The output is provided in a telnet-friendly way so that a log can be monitored - over a TCP/IP socket. - This allows simple remote monitoring of application logging. - - - The default is 23 (the telnet port). - - - Keith Long - Nicko Cadell - - - - Default constructor - - - - Default constructor - - - - - - The fully qualified type of the TelnetAppender class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Overrides the parent method to close the socket handler - - - - Closes all the outstanding connections. - - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Create the socket handler and wait for connections - - - - - - Writes the logging event to each connected client. - - The event to log. - - - Writes the logging event to each connected client. - - - - - - Gets or sets the TCP port number on which this will listen for connections. - - - An integer value in the range to - indicating the TCP port number on which this will listen for connections. - - - - The default value is 23 (the telnet port). - - - The value specified is less than - or greater than . - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Helper class to manage connected clients - - - - The SocketHandler class is used to accept connections from - clients. It is threaded so that clients can connect/disconnect - asynchronously. - - - - - - Opens a new server port on - - the local port to listen on for connections - - - Creates a socket handler on the specified local server port. - - - - - - Sends a string message to each of the connected clients - - the text to send - - - Sends a string message to each of the connected clients - - - - - - Add a client to the internal clients list - - client to add - - - - Remove a client from the internal clients list - - client to remove - - - - Callback used to accept a connection on the server socket - - The result of the asynchronous operation - - - On connection adds to the list of connections - if there are two many open connections you will be disconnected - - - - - - Close all network connections - - - - Make sure we close all network connections - - - - - - Test if this handler has active connections - - - true if this handler has active connections - - - - This property will be true while this handler has - active connections, that is at least one connection that - the handler will attempt to send a message to. - - - - - - Class that represents a client connected to this handler - - - - Class that represents a client connected to this handler - - - - - - Create this for the specified - - the client's socket - - - Opens a stream writer on the socket. - - - - - - Write a string to the client - - string to send - - - Write a string to the client - - - - - - Cleanup the clients connection - - - - Close the socket connection. - - - - - - Logs entries by sending network messages using the - native function. - - - - You can send messages only to names that are active - on the network. If you send the message to a user name, - that user must be logged on and running the Messenger - service to receive the message. - - - The receiver will get a top most window displaying the - messages one at a time, therefore this appender should - not be used to deliver a high volume of messages. - - - The following table lists some possible uses for this appender : - - - - - Action - Property Value(s) - - - Send a message to a user account on the local machine - - - = <name of the local machine> - - - = <user name> - - - - - Send a message to a user account on a remote machine - - - = <name of the remote machine> - - - = <user name> - - - - - Send a message to a domain user account - - - = <name of a domain controller | uninitialized> - - - = <user name> - - - - - Send a message to all the names in a workgroup or domain - - - = <workgroup name | domain name>* - - - - - Send a message from the local machine to a remote machine - - - = <name of the local machine | uninitialized> - - - = <name of the remote machine> - - - - - - - Note : security restrictions apply for sending - network messages, see - for more information. - - - - - An example configuration section to log information - using this appender from the local machine, named - LOCAL_PC, to machine OPERATOR_PC : - - - - - - - - - - Nicko Cadell - Gert Driesen - - - - The DNS or NetBIOS name of the server on which the function is to execute. - - - - - The sender of the network message. - - - - - The message alias to which the message should be sent. - - - - - The security context to use for privileged calls - - - - - Initializes the appender. - - - The default constructor initializes all fields to their default values. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The appender will be ignored if no was specified. - - - The required property was not specified. - - - - This method is called by the method. - - The event to log. - - - Sends the event using a network message. - - - - - - Sends a buffer of information to a registered message alias. - - The DNS or NetBIOS name of the server on which the function is to execute. - The message alias to which the message buffer should be sent - The originator of the message. - The message text. - The length, in bytes, of the message text. - - - The following restrictions apply for sending network messages: - - - - - Platform - Requirements - - - Windows NT - - - No special group membership is required to send a network message. - - - Admin, Accounts, Print, or Server Operator group membership is required to - successfully send a network message on a remote server. - - - - - Windows 2000 or later - - - If you send a message on a domain controller that is running Active Directory, - access is allowed or denied based on the access control list (ACL) for the securable - object. The default ACL permits only Domain Admins and Account Operators to send a network message. - - - On a member server or workstation, only Administrators and Server Operators can send a network message. - - - - - - - For more information see Security Requirements for the Network Management Functions. - - - - - If the function succeeds, the return value is zero. - - - - - - Gets or sets the sender of the message. - - - The sender of the message. - - - If this property is not specified, the message is sent from the local computer. - - - - - Gets or sets the message alias to which the message should be sent. - - - The recipient of the message. - - - This property should always be specified in order to send a message. - - - - - Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. - - - DNS or NetBIOS name of the remote server on which the function is to execute. - - - - For Windows NT 4.0 and earlier, the string should begin with \\. - - - If this property is not specified, the local computer is used. - - - - - - Gets or sets the used to call the NetSend method. - - - The used to call the NetSend method. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an IPAddress - the IPAddress - - - Uses the method to convert the - argument to an . - If that fails then the string is resolved as a DNS hostname. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) - - - - - Utility class for system specific information. - - - - Utility class of static methods for system specific information. - - - Nicko Cadell - Gert Driesen - Alexey Solofnenko - - - - Private constructor to prevent instances. - - - - Only static methods are exposed from this type. - - - - - - Initialize default values for private static fields. - - - - Only static methods are exposed from this type. - - - - - - Gets the assembly location path for the specified assembly. - - The assembly to get the location for. - The location of the assembly. - - - This method does not guarantee to return the correct path - to the assembly. If only tries to give an indication as to - where the assembly was loaded from. - - - - - - Gets the fully qualified name of the , including - the name of the assembly from which the was - loaded. - - The to get the fully qualified name for. - The fully qualified name for the . - - - This is equivalent to the Type.AssemblyQualifiedName property, - but this method works on the .NET Compact Framework 1.0 as well as - the full .NET runtime. - - - - - - Gets the short name of the . - - The to get the name for. - The short name of the . - - - The short name of the assembly is the - without the version, culture, or public key. i.e. it is just the - assembly's file name without the extension. - - - Use this rather than Assembly.GetName().Name because that - is not available on the Compact Framework. - - - Because of a FileIOPermission security demand we cannot do - the obvious Assembly.GetName().Name. We are allowed to get - the of the assembly so we - start from there and strip out just the assembly name. - - - - - - Gets the file name portion of the , including the extension. - - The to get the file name for. - The file name of the assembly. - - - Gets the file name portion of the , including the extension. - - - - - - Loads the type specified in the type string. - - A sibling type to use to load the type. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified, it will be loaded from the assembly - containing the specified relative type. If the type is not found in the assembly - then all the loaded assemblies will be searched for the type. - - - - - - Loads the type specified in the type string. - - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the - assembly that is directly calling this method. If the type is not found - in the assembly then all the loaded assemblies will be searched for the type. - - - - - - Loads the type specified in the type string. - - An assembly to load the type from. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the specified - assembly. If the type is not found in the assembly then all the loaded assemblies - will be searched for the type. - - - - - - Generate a new guid - - A new Guid - - - Generate a new guid - - - - - - Create an - - The name of the parameter that caused the exception - The value of the argument that causes this exception - The message that describes the error - the ArgumentOutOfRangeException object - - - Create a new instance of the class - with a specified error message, the parameter name, and the value - of the argument. - - - The Compact Framework does not support the 3 parameter constructor for the - type. This method provides an - implementation that works for all platforms. - - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - - Lookup an application setting - - the application settings key to lookup - the value for the key, or null - - - Configuration APIs are not supported under the Compact Framework - - - - - - Convert a path into a fully qualified local file path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - The path specified must be a local file path, a URI is not supported. - - - - - - Creates a new case-insensitive instance of the class with the default initial capacity. - - A new case-insensitive instance of the class with the default initial capacity - - - The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. - - - - - - Gets an empty array of types. - - - - The Type.EmptyTypes field is not available on - the .NET Compact Framework 1.0. - - - - - - The fully qualified type of the SystemInfo class. - - - Used by the internal logger to record the Type of the - log message. - - - - - Cache the host name for the current machine - - - - - Cache the application friendly name - - - - - Text to output when a null is encountered. - - - - - Text to output when an unsupported feature is requested. - - - - - Start time for the current process. - - - - - Gets the system dependent line terminator. - - - The system dependent line terminator. - - - - Gets the system dependent line terminator. - - - - - - Gets the base directory for this . - - The base directory path for the current . - - - Gets the base directory for this . - - - The value returned may be either a local file path or a URI. - - - - - - Gets the path to the configuration file for the current . - - The path to the configuration file for the current . - - - The .NET Compact Framework 1.0 does not have a concept of a configuration - file. For this runtime, we use the entry assembly location as the root for - the configuration file name. - - - The value returned may be either a local file path or a URI. - - - - - - Gets the path to the file that first executed in the current . - - The path to the entry assembly. - - - Gets the path to the file that first executed in the current . - - - - - - Gets the ID of the current thread. - - The ID of the current thread. - - - On the .NET framework, the AppDomain.GetCurrentThreadId method - is used to obtain the thread ID for the current thread. This is the - operating system ID for the thread. - - - On the .NET Compact Framework 1.0 it is not possible to get the - operating system thread ID for the current thread. The native method - GetCurrentThreadId is implemented inline in a header file - and cannot be called. - - - On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this - gives a stable id unrelated to the operating system thread ID which may - change if the runtime is using fibers. - - - - - - Get the host name or machine name for the current machine - - - The hostname or machine name - - - - Get the host name or machine name for the current machine - - - The host name () or - the machine name (Environment.MachineName) for - the current machine, or if neither of these are available - then NOT AVAILABLE is returned. - - - - - - Get this application's friendly name - - - The friendly name of this application as a string - - - - If available the name of the application is retrieved from - the AppDomain using AppDomain.CurrentDomain.FriendlyName. - - - Otherwise the file name of the entry assembly is used. - - - - - - Get the start time for the current process. - - - - This is the time at which the log4net library was loaded into the - AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime - this is not the start time for the current process. - - - The log4net library should be loaded by an application early during its - startup, therefore this start time should be a good approximation for - the actual start time. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating, however this start time - will be set per AppDomain. - - - - - - Text to output when a null is encountered. - - - - Use this value to indicate a null has been encountered while - outputting a string representation of an item. - - - The default value is (null). This value can be overridden by specifying - a value for the log4net.NullText appSetting in the application's - .config file. - - - - - - Text to output when an unsupported feature is requested. - - - - Use this value when an unsupported feature is requested. - - - The default value is NOT AVAILABLE. This value can be overridden by specifying - a value for the log4net.NotAvailableText appSetting in the application's - .config file. - - - - - - Represents a native error code and message. - - - - Represents a Win32 platform native error. - - - Nicko Cadell - Gert Driesen - - - - Create an instance of the class with the specified - error number and message. - - The number of the native error. - The message of the native error. - - - Create an instance of the class with the specified - error number and message. - - - - - - Create a new instance of the class for the last Windows error. - - - An instance of the class for the last windows error. - - - - The message for the error number is lookup up using the - native Win32 FormatMessage function. - - - - - - Create a new instance of the class. - - the error number for the native error - - An instance of the class for the specified - error number. - - - - The message for the specified error number is lookup up using the - native Win32 FormatMessage function. - - - - - - Retrieves the message corresponding with a Win32 message identifier. - - Message identifier for the requested message. - - The message corresponding with the specified message identifier. - - - - The message will be searched for in system message-table resource(s) - using the native FormatMessage function. - - - - - - Return error information string - - error information string - - - Return error information string - - - - - - Formats a message string. - - Formatting options, and how to interpret the parameter. - Location of the message definition. - Message identifier for the requested message. - Language identifier for the requested message. - If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . - If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. - Pointer to an array of values that are used as insert values in the formatted message. - - - The function requires a message definition as input. The message definition can come from a - buffer passed into the function. It can come from a message table resource in an - already-loaded module. Or the caller can ask the function to search the system's message - table resource(s) for the message definition. The function finds the message definition - in a message table resource based on a message identifier and a language identifier. - The function copies the formatted message text to an output buffer, processing any embedded - insert sequences if requested. - - - To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. - - - - - If the function succeeds, the return value is the number of TCHARs stored in the output - buffer, excluding the terminating null character. - - - If the function fails, the return value is zero. To get extended error information, - call . - - - - - - Gets the number of the native error. - - - The number of the native error. - - - - Gets the number of the native error. - - - - - - Gets the message of the native error. - - - The message of the native error. - - - - - Gets the message of the native error. - - - - - This is a simple filter based on matching. - - - - The filter admits three options and - that determine the range of priorities that are matched, and - . If there is a match between the range - of priorities and the of the , then the - method returns in case the - option value is set to true, if it is false - then is returned. If there is no match, is returned. - - - Nicko Cadell - Gert Driesen - - - - Flag to indicate the behavior when matching a - - - - - the minimum value to match - - - - - the maximum value to match - - - - - Default constructor - - - - - Check if the event should be logged. - - the logging event to check - see remarks - - - If the of the logging event is outside the range - matched by this filter then - is returned. If the is matched then the value of - is checked. If it is true then - is returned, otherwise - is returned. - - - - - - when matching and - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - Set the minimum matched - - - - The minimum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - Sets the maximum matched - - - - The maximum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - Delegate used to handle creation of new wrappers. - - The logger to wrap in a wrapper. - - - Delegate used to handle creation of new wrappers. This delegate - is called from the - method to construct the wrapper for the specified logger. - - - The delegate to use is supplied to the - constructor. - - - - - - Maps between logger objects and wrapper objects. - - - - This class maintains a mapping between objects and - objects. Use the method to - lookup the for the specified . - - - New wrapper instances are created by the - method. The default behavior is for this method to delegate construction - of the wrapper to the delegate supplied - to the constructor. This allows specialization of the behavior without - requiring subclassing of this type. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the - - The handler to use to create the wrapper objects. - - - Initializes a new instance of the class with - the specified handler to create the wrapper objects. - - - - - - Gets the wrapper object for the specified logger. - - The wrapper object for the specified logger - - - If the logger is null then the corresponding wrapper is null. - - - Looks up the wrapper it it has previously been requested and - returns it. If the wrapper has never been requested before then - the virtual method is - called. - - - - - - Creates the wrapper object for the specified logger. - - The logger to wrap in a wrapper. - The wrapper object for the logger. - - - This implementation uses the - passed to the constructor to create the wrapper. This method - can be overridden in a subclass. - - - - - - Called when a monitored repository shutdown event is received. - - The that is shutting down - - - This method is called when a that this - is holding loggers for has signaled its shutdown - event . The default - behavior of this method is to release the references to the loggers - and their wrappers generated for this repository. - - - - - - Event handler for repository shutdown event. - - The sender of the event. - The event args. - - - - Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings - - - - - The handler to use to create the extension wrapper objects. - - - - - Internal reference to the delegate used to register for repository shutdown events. - - - - - Gets the map of logger repositories. - - - Map of logger repositories. - - - - Gets the hashtable that is keyed on . The - values are hashtables keyed on with the - value being the corresponding . - - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a LevelCollection instance. - - list to create a readonly wrapper arround - - A LevelCollection wrapper that is read-only. - - - - - Initializes a new instance of the LevelCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the LevelCollection class - that has the specified initial capacity. - - - The number of elements that the new LevelCollection is initially capable of storing. - - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified LevelCollection. - - The LevelCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - Copies the entire LevelCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire LevelCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the LevelCollection. - - The to be added to the end of the LevelCollection. - The index at which the value has been added. - - - - Removes all elements from the LevelCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the LevelCollection. - - The to check for. - true if is found in the LevelCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the LevelCollection. - - The to locate in the LevelCollection. - - The zero-based index of the first occurrence of - in the entire LevelCollection, if found; otherwise, -1. - - - - - Inserts an element into the LevelCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the LevelCollection. - - The to remove from the LevelCollection. - - The specified was not found in the LevelCollection. - - - - - Removes the element at the specified index of the LevelCollection. - - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the LevelCollection. - - An for the entire LevelCollection. - - - - Adds the elements of another LevelCollection to the current LevelCollection. - - The LevelCollection whose elements should be added to the end of the current LevelCollection. - The new of the LevelCollection. - - - - Adds the elements of a array to the current LevelCollection. - - The array whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - - Adds the elements of a collection to the current LevelCollection. - - The collection whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - - Sets the capacity to the actual number of elements. - - - - - is less than zero - -or- - is equal to or greater than . - - - - - is less than zero - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the LevelCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - is less than zero - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - - Gets or sets the number of elements the LevelCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - A value - - - - - Supports simple iteration over a . - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Assembly level attribute to configure the . - - - - AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - Nicko Cadell - Gert Driesen - - - - Buffers events and then forwards them to attached appenders. - - - - The events are buffered in this appender until conditions are - met to allow the appender to deliver the events to the attached - appenders. See for the - conditions that cause the buffer to be sent. - - The forwarding appender can be used to specify different - thresholds and filters for the same appender at different locations - within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Send the events. - - The events that need to be send. - - - Forwards the events to the attached appenders. - - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this buffering appender. - - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Implementation of the interface - - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - diff --git a/DNN Platform/Components/Log4Net/bin/DotNetNuke.Log4Net.dll b/DNN Platform/Components/Log4Net/bin/DotNetNuke.Log4Net.dll deleted file mode 100644 index 1e163919ef8..00000000000 Binary files a/DNN Platform/Components/Log4Net/bin/DotNetNuke.Log4Net.dll and /dev/null differ diff --git a/DNN Platform/Components/Log4Net/bin/dotnetnuke.log4net.pdb b/DNN Platform/Components/Log4Net/bin/dotnetnuke.log4net.pdb deleted file mode 100644 index c76bc68c8a4..00000000000 Binary files a/DNN Platform/Components/Log4Net/bin/dotnetnuke.log4net.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.XML b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.XML deleted file mode 100644 index dfb0b46dbbc..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.XML +++ /dev/null @@ -1,1277 +0,0 @@ - - - - Lucene.Net.Contrib.Analyzers - - - - - Returns an unmodifiable instance of the default stop-words set - - Returns an unmodifiable instance of the default stop-words set - - - - Builds an analyzer with the given stop words. - - Lucene compatibility version - a stopword set - - - - Returns an unmodifiable instance of the default stop-words set. - - Returns an unmodifiable instance of the default stop-words set. - - - - Contains the stopwords used with the StopFilter. - - - - - Contains words that should be indexed but not stemmed. - - - - - Filters CJKTokenizer with StopFilter. - - Che, Dong - - - - - An array containing some common English words that are not usually - useful for searching. and some double-byte interpunctions..... - - - - - Returns an unmodifiable instance of the default stop-words set. - - Returns an unmodifiable instance of the default stop-words set. - - - - stop word list - - - - - Builds an analyzer which removes words in the provided array. - - stop word array - - - - get token stream from input - - lucene field name - input reader - Token Stream - - - -

- CJKTokenizer was modified from StopTokenizer which does a decent job for - most European languages. and it perferm other token method for double-byte - chars: the token will return at each two charactors with overlap match.
- Example: "java C1C2C3C4" will be segment to: "java" "C1C2" "C2C3" "C3C4" it - also need filter filter zero length token ""
- for Digit: digit, '+', '#' will token as letter
- for more info on Asia language(Chinese Japanese Korean) text segmentation: - please search google -

- - @author Che, Dong - @version $Id: CJKTokenizer.java,v 1.3 2003/01/22 20:54:47 otis Exp $ -
-
- - - Word token type - - - - - Single byte token type - - - - - Double byte token type - - - - - Names for token types - - - - - Max word length - - - - - buffer size - - - - - word offset, used to imply which character(in ) is parsed - - - - - the index used only for ioBuffer - - - - - data length - - - - - character buffer, store the characters which are used to compose
- the returned Token -
-
- - - I/O buffer, used to store the content of the input(one of the
- members of Tokenizer) -
-
- - - word type: single=>ASCII double=>non-ASCII word=>default - - - - - tag: previous character is a cached double-byte character "C1C2C3C4" - ----(set the C1 isTokened) C1C2 "C2C3C4" ----(set the C2 isTokened) - C1C2 C2C3 "C3C4" ----(set the C3 isTokened) "C1C2 C2C3 C3C4" - - - - - Construct a token stream processing the given input. - - I/O reader - - - - An that tokenizes text with and - filters with - - - - - Creates a TokenStream which tokenizes all the text in the provided Reader. - - A TokenStream build from a ChineseTokenizer filtered with ChineseFilter. - - - - Returns a (possibly reused) which tokenizes all the text in the - provided . - - - A built from a - filtered with . - - - - - A {@link TokenFilter} with a stop word table. -
    -
  • Numeric tokens are removed.
  • -
  • English tokens must be larger than 1 char.
  • -
  • One Chinese char as one Chinese word.
  • -
- TO DO: -
    -
  1. Add Chinese stop words, such as \ue400
  2. -
  3. Dictionary based Chinese word extraction
  4. -
  5. Intelligent Chinese word extraction
  6. -
-
-
- - - Tokenize Chinese text as individual chinese chars. -

- The difference between ChineseTokenizer and - CJKTokenizer is that they have different - token parsing logic. -

-

- For example, if the Chinese text - "C1C2C3C4" is to be indexed: -

    -
  • The tokens returned from ChineseTokenizer are C1, C2, C3, C4
  • -
  • The tokens returned from the CJKTokenizer are C1C2, C2C3, C3C4.
  • -
-

-

- Therefore the index created by CJKTokenizer is much larger. -

-

- The problem is that when searching for C1, C1C2, C1C3, - C4C2, C1C2C3 ... the ChineseTokenizer works, but the - CJKTokenizer will not work. -

-
-
- - - Analyzer for German language. Supports an external list of stopwords (words that - will not be indexed at all) and an external list of exclusions (word that will - not be stemmed, but indexed). - A default set of stopwords is used unless an alternative list is specified, the - exclusion list is empty by default. - - - - - List of typical german stopwords. - - - - - Returns a set of default German-stopwords - - - - - Contains the stopwords used with the StopFilter. - - - - - Contains words that should be indexed but not stemmed. - - - - - Builds an analyzer with the default stop words: - - - - - - Builds an analyzer with the default stop words: - - - Lucene compatibility version - - - - Builds an analyzer with the default stop words: - - - Lucene compatibility version - Specifies if the DIN-2007-2 style stemmer should be used in addition to DIN1. This - will cause words with 'ae', 'ue', or 'oe' in them (expanded umlauts) to be first converted to 'a', 'u', and 'o' - respectively, before the DIN1 stemmer is invoked. - - - - Builds an analyzer with the given stop words, using the default DIN-5007-1 stemmer - - Lucene compatibility version - a stopword set - - - - Builds an analyzer with the given stop words - - Lucene compatibility version - a stopword set - Specifies if the DIN-2007-2 style stemmer should be used in addition to DIN1. This - will cause words with 'ae', 'ue', or 'oe' in them (expanded umlauts) to be first converted to 'a', 'u', and 'o' - respectively, before the DIN1 stemmer is invoked. - - - - Builds an analyzer with the given stop words, using the default DIN-5007-1 stemmer - - lucene compatibility version - a stopword set - a stemming exclusion set - - - - Builds an analyzer with the given stop words - - lucene compatibility version - a stopword set - a stemming exclusion set - Specifies if the DIN-2007-2 style stemmer should be used in addition to DIN1. This - will cause words with 'ae', 'ue', or 'oe' in them (expanded umlauts) to be first converted to 'a', 'u', and 'o' - respectively, before the DIN1 stemmer is invoked. - - - - Builds an analyzer with the given stop words. - - - - - - Builds an analyzer with the given stop words. - - - - - Builds an analyzer with the given stop words. - - - - - Builds an exclusionlist from an array of Strings. - - - - - Builds an exclusionlist from a IDictionary. - - - - - Builds an exclusionlist from the words contained in the given file. - - - - - Creates a TokenStream which tokenizes all the text in the provided TextReader. - - - - A TokenStream build from a StandardTokenizer filtered with StandardFilter, StopFilter, GermanStemFilter - - - - A filter that stems German words. It supports a table of words that should - not be stemmed at all. The stemmer used can be changed at runtime after the - filter object is created (as long as it is a GermanStemmer). - - - - - The actual token in the input stream. - - - - - Builds a GermanStemFilter that uses an exclusiontable. - - - - - - - Builds a GermanStemFilter that uses an exclusiontable. - - - - Specifies if the DIN-2007-2 style stemmer should be used in addition to DIN1. This - will cause words with 'ae', 'ue', or 'oe' in them (expanded umlauts) to be first converted to 'a', 'u', and 'o' - respectively, before the DIN1 stemmer is invoked. - - - - Returns true for next token in the stream, or false at EOS - - - - - Set a alternative/custom GermanStemmer for this filter. - - - - - - Set an alternative exclusion list for this filter. - - - - - - A stemmer for German words. The algorithm is based on the report - "A Fast and Simple Stemming Algorithm for German Words" by JГ¶rg - Caumanns (joerg.caumanns@isst.fhg.de). - - - - - Buffer for the terms while stemming them. - - - - - Amount of characters that are removed with Substitute() while stemming. - - - - - Stemms the given term to an unique discriminator. - - The term that should be stemmed. - Discriminator for term - - - - Checks if a term could be stemmed. - - - true if, and only if, the given term consists in letters. - - - - Suffix stripping (stemming) on the current term. The stripping is reduced - to the seven "base" suffixes "e", "s", "n", "t", "em", "er" and * "nd", - from which all regular suffixes are build of. The simplification causes - some overstemming, and way more irregular stems, but still provides unique. - discriminators in the most of those cases. - The algorithm is context free, except of the length restrictions. - - - - - - Does some optimizations on the term. This optimisations are contextual. - - - - - - Removes a particle denotion ("ge") from a term. - - - - - - Do some substitutions for the term to reduce overstemming: - - - Substitute Umlauts with their corresponding vowel: äöü -> aou, - "ß" is substituted by "ss" - - Substitute a second char of a pair of equal characters with - an asterisk: ?? -> ?* - - Substitute some common character combinations with a token: - sch/ch/ei/ie/ig/st -> $/В§/%/&/#/! - - - - - Undoes the changes made by Substitute(). That are character pairs and - character combinations. Umlauts will remain as their corresponding vowel, - as "?" remains as "ss". - - - - - - A stemmer for the german language that uses the - DIN-5007-2 "Phone Book" rules for handling - umlaut characters. - - - - - Wrapper class representing a hunspell affix. - - - - - Checks whether the String defined by the provided char array, offset - and length, meets the condition of this affix. - - - true if the String meets the condition, false otherwise. - - - - - Sets the condition that must be met before the affix can be applied. - - Condition to be met before affix application. - Condition as a regular expression pattern. - - - - The append defined for the affix. - - - - - The flags defined for the affix append. - - - - - The condition that must be met before the affix can be applied. - - - - - The affix flag. - - - - - Whether the affix is defined as cross product. - - - - - The stripping characters defined for the affix. - - - - - Creates a new HunspellDictionary containing the information read from the provided streams to hunspell affix and dictionary file. - - Stream for reading the hunspell affix file. - Stream for reading the hunspell dictionary file. - Can be thrown while reading from the streams. - Can be thrown if the content of the files does not meet expected formats. - - - - Creates a new HunspellDictionary containing the information read from the provided streams to hunspell affix and dictionary files. - - Stream for reading the hunspell affix file. - Streams for reading the hunspell dictionary file. - Can be thrown while reading from the streams. - Can be thrown if the content of the files does not meet expected formats. - - - - Looks up HunspellWords that match the String created from the given char array, offset and length. - - - - - Looks up HunspellAffix prefixes that have an append that matches the String created from the given char array, offset and length. - - Char array to generate the String from. - Offset in the char array that the String starts at. - Length from the offset that the String is. - List of HunspellAffix prefixes with an append that matches the String, or null if none are found. - - - - Looks up HunspellAffix suffixes that have an append that matches the String created from the given char array, offset and length. - - Char array to generate the String from. - Offset in the char array that the String starts at. - Length from the offset that the String is. - List of HunspellAffix suffixes with an append that matches the String, or null if none are found - - - - Reads the affix file through the provided Stream, building up the prefix and suffix maps. - - Stream to read the content of the affix file from. - Encoding to decode the content of the file. - IOException Can be thrown while reading from the Stream. - - - - Parse alias flag and put it in hash - - - - - - - Parses a specific affix rule putting the result into the provided affix map. - - Map where the result of the parsing will be put. - Header line of the affix rule. - TextReader to read the content of the rule from. - Pattern to be used to generate the condition regex pattern. - - - - Parses the encoding specificed in the affix file readable through the provided Stream. - - Stream for reading the affix file. - Encoding specified in the affix file. - - Thrown if the first non-empty non-comment line read from the file does not - adhere to the format SET encoding. - - - - - Determines the appropriate {@link FlagParsingStrategy} based on the FLAG definiton line taken from the affix file. - - Line containing the flag information - FlagParsingStrategy that handles parsing flags in the way specified in the FLAG definition. - - - - Reads the dictionary file through the provided Stream, building up the words map. - - Stream to read the dictionary file through. - Encoding used to decode the contents of the file. - Can be thrown while reading from the file. - - - - Implementation of {@link FlagParsingStrategy} that assumes each flag is encoded as - two ASCII characters whose codes must be combined into a single character. - - - - - Abstraction of the process of parsing flags taken from the affix and dic files - - - - - Parses the given String into a single flag. - - String to parse into a flag. - Parsed flag. - - - - Parses the given String into multiple flag. - - String to parse into a flags. - Parsed flags. - - - - Implementation of {@link FlagParsingStrategy} that assumes each flag is encoded in its - numerical form. In the case of multiple flags, each number is separated by a comma. - - - - - Simple implementation of {@link FlagParsingStrategy} that treats the chars in each - String as a individual flags. Can be used with both the ASCII and UTF-8 flag types. - - - - - Creates a new Stem wrapping the given word stem. - - - - - Adds a prefix to the list of prefixes used to generate this stem. Because it is - assumed that prefixes are added depth first, the prefix is added to the front of - the list. - - Prefix to add to the list of prefixes for this stem. - - - - Adds a suffix to the list of suffixes used to generate this stem. Because it - is assumed that suffixes are added depth first, the suffix is added to the end - of the list. - - Suffix to add to the list of suffixes for this stem. - - - - the actual word stem itself. - - - - - The stem length. - - - - - The list of prefixes used to generate the stem. - - - - - The list of suffixes used to generate the stem. - - - - - TokenFilter that uses hunspell affix rules and words to stem tokens. Since hunspell supports a - word having multiple stems, this filter can emit multiple tokens for each consumed token. - - - - - Creates a new HunspellStemFilter that will stem tokens from the given TokenStream using - affix rules in the provided HunspellDictionary. - - TokenStream whose tokens will be stemmed. - HunspellDictionary containing the affix rules and words that will be used to stem the tokens. - true if only unique terms should be output. - - - - HunspellStemmer uses the affix rules declared in the HunspellDictionary to generate one or - more stems for a word. It conforms to the algorithm in the original hunspell algorithm, - including recursive suffix stripping. - - Chris Male - - - - Constructs a new HunspellStemmer which will use the provided HunspellDictionary - to create its stems. - - HunspellDictionary that will be used to create the stems. - - - - Find the stem(s) of the provided word. - - Word to find the stems for. - List of stems for the word. - - - - Find the unique stem(s) of the provided word. - - Word to find the stems for. - List of stems for the word. - - - - Generates a list of stems for the provided word. - - Word to generate the stems for. - Flags from a previous stemming step that need to be cross-checked with any affixes in this recursive step. - Level of recursion this stemming step is at. - List of stems, pr an empty if no stems are found. - - - - Applies the affix rule to the given word, producing a list of stems if any are found. - - Word the affix has been removed and the strip added. - HunspellAffix representing the affix rule itself. - Level of recursion this stemming step is at. - List of stems for the word, or an empty list if none are found. - - - - Checks if the given flag cross checks with the given array of flags. - - Flag to cross check with the array of flags. - Array of flags to cross check against. Can be null. - true if the flag is found in the array or the array is null, false otherwise. - - - - Creates a new HunspellWord with no associated flags. - - - - - Constructs a new HunspellWord with the given flags. - - Flags to associate with the word. - - - - Checks whether the word has the given flag associated with it. - - Flag to check whether it is associated with the word. - true if the flag is associated, false otherwise - - - - An always exhausted token stream - - - - - Joins two token streams and leaves the last token of the first stream available - to be used when updating the token values in the second stream based on that token. - - The default implementation adds last prefix token end offset to the suffix token start and end offsets. -

- NOTE: This filter might not behave correctly if used with custom Attributes, i.e. Attributes other than - the ones located in Lucene.Net.Analysis.TokenAttributes. -

-
- - - The default implementation adds last prefix token end offset to the suffix token start and end offsets. - - a token from the suffix stream - the last token from the prefix stream - consumer token - - - - Links two PrefixAwareTokenFilter. -

- NOTE: This filter might not behave correctly if used with custom Attributes, i.e. Attributes other than - the ones located in Lucene.Net.Analysis.Tokenattributes. -

-
- - - A TokenStream containing a single token. - - - - - Specifies which side of the input the n-gram should be generated from - - - - - Base class for payload encoders. - - - - - Mainly for use with the DelimitedPayloadTokenFilter, converts char buffers to Payload -

- NOTE: this interface is subject to change -

-
- - - Convert a char array to a - - An encoded - - - - Characters before the delimiter are the "token", those after are the payload. -

- For example, if the delimiter is '|', then for the string "foo|bar", foo is the token - and "bar" is a payload. -

- Note, you can also include a {@link org.apache.lucene.analysis.payloads.PayloadEncoder} to convert the - payload in an appropriate way (from characters to bytes). -

- Note make sure your Tokenizer doesn't split on the delimiter, or this won't work -

- -
- - - Construct a token stream filtering the given input. - - - - - Encode a character array Float as a {@link org.apache.lucene.index.Payload}. - - - - - - Does nothing other than convert the char array to a byte array using the specified encoding. - - - - - Encode a character array Integer as a {@link org.apache.lucene.index.Payload}. - - - - - - Assigns a payload to a token based on the - - - - - Utility methods for encoding payloads. - - - - -

Decode the payload that was encoded using encodeFloat(float)

-

NOTE: the length of the array must be at least offset + 4 long.

-
- The bytes to decode - the decoded float -
- - -

Decode the payload that was encoded using encodeFloat(float)

-

NOTE: the length of the array must be at least offset + 4 long.

-
- The bytes to decode - The offset into the array. - The float that was encoded -
- - - Adds the - and - First 4 bytes are the start - - - - - Makes the Token.Type() a payload. - Encodes the type using as the encoding - - - - - Analyzer for Russian language. Supports an external list of stopwords (words that - will not be indexed at all). - A default set of stopwords is used unless an alternative list is specified. - - - - - List of typical Russian stopwords. - - - - - Contains the stopwords used with the StopFilter. - - - - - A RussianLetterTokenizer is a {@link Tokenizer} that extends {@link LetterTokenizer} - by also allowing the basic latin digits 0-9. - - - - - Normalizes token text to lower case. - - - - - A column focused matrix in three dimensions: - -
-            Token[column][row][z-axis] {
-                {{hello}, {greetings, and, salutations}},
-                {{world}, {earth}, {tellus}}
-            };
-            
- - todo consider row groups - to indicate that shingles is only to contain permutations with texts in that same row group. -
-
- - - Gets or sets the max shingle (ngram) size - - - - - Gets or sets whether or not to have the filter pass the original tokens - (the "unigrams") to the output stream - - - - -

A ShingleMatrixFilter constructs shingles (token n-grams) from a token stream. - In other words, it creates combinations of tokens as a single token.

- -

For example, the sentence "please divide this sentence into shingles" - might be tokenized into shingles "please divide", "divide this", - "this sentence", "sentence into", and "into shingles".

- -

Using a shingle filter at index and query time can in some instances - be used to replace phrase queries, especially them with 0 slop.

- -

Without a spacer character - it can be used to handle composition and decomposition of words - such as searching for "multi dimensional" instead of "multidimensional". - It is a rather common human problem at query time - in several languages, notably the northern Germanic branch.

- -

Shingles are amongst many things also known to solve problems - in spell checking, language detection and document clustering.

- -

This filter is backed by a three dimensional column oriented matrix - used to create permutations of the second dimension, the rows, - and leaves the third, the z-axis, for for multi token synonyms.

- -

In order to use this filter you need to define a way of positioning - the input stream tokens in the matrix. This is done using a - ShingleMatrixFilter.TokenSettingsCodec. - There are three simple implementations for demonstrational purposes, - see ShingleMatrixFilter.OneDimensionalNonWeightedTokenSettingsCodec, - ShingleMatrixFilter.TwoDimensionalNonWeightedSynonymTokenSettingsCodec - and ShingleMatrixFilter.SimpleThreeDimensionalTokenSettingsCodec.

- -

Consider this token matrix:

-
-              Token[column][row][z-axis]{
-                {{hello}, {greetings, and, salutations}},
-                {{world}, {earth}, {tellus}}
-              };
-             
- - It would produce the following 2-3 gram sized shingles: - -
-             "hello_world"
-             "greetings_and"
-             "greetings_and_salutations"
-             "and_salutations"
-             "and_salutations_world"
-             "salutations_world"
-             "hello_earth"
-             "and_salutations_earth"
-             "salutations_earth"
-             "hello_tellus"
-             "and_salutations_tellus"
-             "salutations_tellus"
-              
- -

This implementation can be rather heap demanding - if (maximum shingle size - minimum shingle size) is a great number and the stream contains many columns, - or if each column contains a great number of rows.

- -

The problem is that in order avoid producing duplicates - the filter needs to keep track of any shingle already produced and returned to the consumer.

- -

There is a bit of resource management to handle this - but it would of course be much better if the filter was written - so it never created the same shingle more than once in the first place.

- -

The filter also has basic support for calculating weights for the shingles - based on the weights of the tokens from the input stream, output shingle size, etc. - See CalculateShingleWeight. -

- NOTE: This filter might not behave correctly if used with custom Attributes, i.e. Attributes other than - the ones located in org.apache.lucene.analysis.tokenattributes.

-
-
- - - A set containing shingles that has been the result of a call to Next(Token), - used to avoid producing the same shingle more than once. - -

- NOTE: The Java List implementation uses a different equality comparison scheme - than .NET's Generic List. So We have to use a custom IEqualityComparer implementation - to get the same behaviour. -

-
-
- - - Creates a shingle filter based on a user defined matrix. - - The filter /will/ delete columns from the input matrix! You will not be able to reset the filter if you used this constructor. - todo: don't touch the matrix! use a bool, set the input stream to null or something, and keep track of where in the matrix we are at. - - - the input based for creating shingles. Does not need to contain any information until ShingleMatrixFilter.IncrementToken() is called the first time. - minimum number of tokens in any shingle. - maximum number of tokens in any shingle. - character to use between texts of the token parts in a shingle. null for none. - if true, shingles that only contains permutation of the first of the last column will not be produced as shingles. Useful when adding boundary marker tokens such as '^' and '$'. - codec used to read input token weight and matrix positioning. - - - - Creates a shingle filter using default settings. - - See ShingleMatrixFilter.DefaultSpacerCharacter, - ShingleMatrixFilter.IgnoringSinglePrefixOrSuffixShingleByDefault, - and ShingleMatrixFilter.DefaultSettingsCodec - - stream from which to construct the matrix - minimum number of tokens in any shingle. - maximum number of tokens in any shingle. - - - - Creates a shingle filter using default settings. - - See IgnoringSinglePrefixOrSuffixShingleByDefault, and DefaultSettingsCodec - - stream from which to construct the matrix - minimum number of tokens in any shingle. - maximum number of tokens in any shingle. - character to use between texts of the token parts in a shingle. null for none. - - - - Creates a shingle filter using the default . - - See DefaultSettingsCodec - - stream from which to construct the matrix - minimum number of tokens in any shingle. - maximum number of tokens in any shingle. - character to use between texts of the token parts in a shingle. null for none. - if true, shingles that only contains permutation of the first of the last column will not be produced as shingles. Useful when adding boundary marker tokens such as '^' and '$'. - - - - Creates a shingle filter with ad hoc parameter settings. - - stream from which to construct the matrix - minimum number of tokens in any shingle. - maximum number of tokens in any shingle. - character to use between texts of the token parts in a shingle. null for none. - if true, shingles that only contains permutation of the first of the last column will not be produced as shingles. Useful when adding boundary marker tokens such as '^' and '$'. - codec used to read input token weight and matrix positioning. - - - - This method exists in order to avoid recursive calls to the method - as the complexity of a fairly small matrix then easily would require - a gigabyte sized stack per thread. - - - null if exhausted, instance request_next_token if one more call is required for an answer, - or instance parameter resuableToken. - - - - Get next permutation of row combinations, - creates list of all tokens in the row and - an index from each such token to what row they exist in. - finally resets the current (next) shingle size and offset. - - - - - Final touch of a shingle token before it is passed on to the consumer from method . - - Calculates and sets type, flags, position increment, start/end offsets and weight. - - Shingle Token - Tokens used to produce the shingle token. - Start offset in parameter currentPermutationTokens - index to Matrix.Column.Row from the position of tokens in parameter currentPermutationTokens - tokens of the current permutation of rows in the matrix. - - - - Evaluates the new shingle token weight. - - for (shingle part token in shingle) - weight += shingle part token weight * (1 / sqrt(all shingle part token weights summed)) - - This algorithm gives a slightly greater score for longer shingles - and is rather penalising to great shingle token part weights. - - token returned to consumer - tokens the tokens used to produce the shingle token. - start offset in parameter currentPermutationRows and currentPermutationTokens. - an index to what matrix row a token in parameter currentPermutationTokens exist. - all tokens in the current row permutation of the matrix. A sub list (parameter offset, parameter shingle.size) equals parameter shingle. - weight to be set for parameter shingleToken - - - - Loads one column from the token stream. - - When the last token is read from the token stream it will column.setLast(true); - - true if it manage to read one more column from the input token stream - - - - Using this codec makes a ShingleMatrixFilter act like ShingleFilter. - It produces the most simple sort of shingles, ignoring token position increments, etc. - - It adds each token as a new column. - - - - - Strategy used to code and decode meta data of the tokens from the input stream - regarding how to position the tokens in the matrix, set and retreive weight, etc. - - - - - Retrieves information on how a Token is to be inserted to a ShingleMatrixFilter.Matrix. - - - - - - - Sets information on how a Token is to be inserted to a ShingleMatrixFilter.Matrix. - - - - - - - Have this method return 1f in order to 'disable' weights. - - - - - - - Have this method do nothing in order to 'disable' weights. - - - - - - - A full featured codec not to be used for something serious. - - It takes complete control of - payload for weight - and the bit flags for positioning in the matrix. - - Mainly exist for demonstrational purposes. - - - - - - - - the token flags int value as TokenPosition - - - - Sets the TokenPositioner as token flags int value. - - - - - - - Returns a 32 bit float from the payload, or 1f it null. - - - - - - - Stores a 32 bit float in the payload, or set it to null if 1f; - - - - - - - A codec that creates a two dimensional matrix - by treating tokens from the input stream with 0 position increment - as new rows to the current column. - - -
-
diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.dll deleted file mode 100644 index 392894d993d..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.pdb deleted file mode 100644 index 36aec6672f8..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Analyzers.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.XML b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.XML deleted file mode 100644 index d05eb52a69d..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.XML +++ /dev/null @@ -1,709 +0,0 @@ - - - - Lucene.Net.Contrib.Core - - - - - This analyzer targets short fields where *word* like searches are required. - [SomeUser@GMAIL.com 1234567890] will be tokenized as - [s.o.m.e.u.s.e.r..g.m.a.i.l..com..1.2.3.4.5.6.7.8.9.0] (read .'s as blank) - - Usage: - QueryParser p = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "fieldName", new SingleCharTokenAnalyzer()); - p.SetDefaultOperator(QueryParser.Operator.AND); - p.SetEnablePositionIncrements(true); - - TopDocs td = src.Search(p.Parse("678"), 10); - or - TopDocs td = src.Search(p.Parse("\"gmail.com 1234\""), 10); - - - - - - - - - Another Analyzer. Every char which is not a letter or digit is treated as a word separator. - [Name.Surname@gmail.com 123.456 ğüşıöç%ĞÜŞİÖÇ$ΑΒΓΔΕΖ#АБВГДЕ SSß] will be tokenized as - [name surname gmail com 123 456 gusioc gusioc αβγδεζ абвгде ssss] - - No problem with searches like someuser@gmail or 123.456 since they are - converted to phrase-query as "someuser gmail" or "123 456". - - - - - - - - - if a char is not a letter or digit, it is a word separator - - - - - - - - - - - - - The type of parser for the value of the term. - - - - - Base class for the typed enumerators. - - - There are five implementations of FieldEnumerator for - strings, integers, longs, floats, and doubles. The numeric enumerators support both - standard Field and NumericField implementations. The string and numeric enumerators - have slightly different options, but both should be used within a using statment - to close the underlying TermEnum/TermDocs. Refer to the unit tests for usage examples. - - - The type of data being enumerated. - - - - Whether the enumerator will include TermDocs. - - - - - The underlying TermEnum; - - - - - The optional TermDocs. - - - - - The specialized TermEnum enumerator. - - - - - The specialized TermDoc enumerator. - - - - - Whether or not the instance has been disposed. - - - - - Initialization method called by subclasses to simulate a shared - base constructor as generic classes cannot have a parameterized ctor. - - The index reader to read from. - The field to enumerate. - - - - Initialization method called by subclasses to simulate a shared - base constructor as generic classes cannot have a parameterized ctor. - - The index reader to read from. - The field to enumerate. - Whether this enumerator will support TermDocs. - - - - Method to attempt to parse out the value from the encoded string - and sets the value of Current. - - The encoded string. - True if the value was successfully parsed, false if we reached the - end of encoded values in the fiele and only the tries remain. - - - - Dispose of the instance. - - - - - Access the enumerator for the terms. - - - - - Access the enumerator for the TermDocs. - - - - - The enumerator over the terms in an index. - - - - - The underlying TermEnum; - - - - - The optional TermDocs. - - - - - The current term in the enum. - - - - - The field name, if any for the enum. - - - - - Whether the enumerator has moved beyond the first position. - - - - - THe enclosing instance, called back to in order to parse the field. - - - - - Ctor. - - The TermEnum to wrap. - The TermDocs to wrap. - - - - - - Advance to the next item. - - - - - - Reset the enumerator to the beginngin. - - - - - Accessor to IEnumerator-T-."/> - - - - - - Accessor to IEnumertor. - - - - - - The current item in the enumerator. - - - - - Current item in the enumerator. - - - - - Class to handle creating a TermDocs and allowing for seeking and enumeration. Used - when you have a set of one or moreterms for which you want to enumerate over the - documents that contain those terms. - - - - - The underlying TermDocs. - - - - - Ctor. - - The TermDocs to wrap. - - - - Seek to a specific term. - - - - - - Dispose of the instance, closing the termdocs. - - - - - Class to handle enumeration over the TermDocs that does NOT close them - on a call to Dispose! - - - - - A reference to an outside TermEnum that is used to position - the TermDocs. It can be null. - - - - - The underlying TermDocs. - - - - - Ctor. - - TermDocs to wrap - - - - Ctor. - - Underlying TermDocs. - Enclosing field enum. - - - - Seel to a term in the underlying TermDocs. - - The point to seek to. - - - - Get the enumerator. - - - - - - Get the enumerator. - - - - - - Dispose impl. - - - - - Move to the next item. - - True if more, false if not. - - - - Not implemented. Use Seek instead. - - - - - The current document id. - - - - - The current item. - - - - - Implementation for enumerating over terms with a string value. - - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - Whether the TermDocs will also be enumerated. - - - - Sets the value of current. - - The string. - Always true. - - - - Base for enumerating over numeric fields. - - - - - - The parser type for the field being enumerated. - - - - - Initialize the instance. - - The reader. - The field name. - Whether to include a TermDoc enum. - The parser to use on the field. - - - - Overridden from base. - - String to parse. - - - - - Parse out a standard string and set the value of current. - - String to parse. - True on success. - - - - Parse out an encoded numeric string and set the value of current. - - String to parse. - True on success. - - - - Implementation for enumerating over all of the terms in an int numeric field. - - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - Whether the TermDocs will also be enumerated. - - - - Parse the int from the string. - - String to parse. - Always true. - - - - Parse the int from an encoded string. - - String to parse. - True if the parse was successful, false indicating failure - and the end of useful terms in the numeric field. - - - - Implementation for enumerating over all of the terms in a float numeric field. - - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - Whether the TermDocs will also be enumerated. - - - - Parse the float from a string. - - The string to parse. - Always true. - - - - Parse the float from a numeric field. - - The string to parse. - True if the string was parsed, false to signify the - end of usable terms in a numeric field. - - - - Implementation for enumerating over all of the terms in a double numeric field. - - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - Whether the TermDocs will also be enumerated. - - - - Parse the double from a string. - - The string to parse. - Always true. - - - - Parse the double from a numeric field. - - The string to parse. - True if the string was parsed, false to indicate the end - of usable numeric terms. - - - - Implementation for enumerating over all of the terms in a long numeric field. - - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - - - - Construct an enumerator over one field. - - Index reader. - The field to read. - Whether the TermDocs will also be enumerated. - - - - Parse the long from a string. - - The string to parse. - Always true. - - - - Parse the long from a numeric field. - - The string to parse. - True if the string was parsed, false to inidicate - the end of usable terms in a numeric field. - - - - Class that will force an index writer to open an index based - on the generation in the segments.gen file as opposed to the - highest generation found in a directory listing. - - A use case for using this IndexCommit when opening an IndexWriter - would be if index snapshots (source) are being copied over an - existing index (target) and the source now has a lower generation - than the target due to initiating a rebuild of the index. - - - - - The index. - - - - - The generation to use. - - - - - Ctor. - - The index directory. - - - - Read the segments.gen file to get the generation number. - - - - - Get the segments_n file for the generation found in the - segments.gen file. - - The segments_n file to use. - - - - Class to allow for enumerating over the documents in the index to - retrieve the term vector for each one. - - - - - Current document being accessed. - - - - - The field name the vectors are being accessed from. - - - - - The index reader that the vetors are retreived from. - - - - - The return value should a document be deleted. - - - - - Ctor. - - The index reader used to read the vectors. - The name of the field the vectors are read from. - - - - Retrieve the current TermFreqVector from the index. - - The current TermFreqVector. - - - - A simple TermFreqVector implementation for an empty vector for use - with a deleted document or a document that does not have the field - that is being enumerated. - - - - - Root custom cache to allow a factory to retain references to the custom - caches without having to be aware of the type. - - - - - Used to warm up the cache. - - The reader to warm the cache for. - The inner key. - - - - Custom cache with two levels of keys, outer key is the IndexReader - with the inner key being a string, commonly a field name but can be anything. - Refer to the unit tests for an example implementation. - The type that is being cached. - - - - - The cache - outer key is the reader, inner key is the field name. Value is the item desired. - - - - - Lock to use when accessing the cache. - - - - - Value creation. - - The reader. - The key to the item under the reader. - The value. - - - - Warm the cache - simply calls Get and ignores the return value. - - The index reader to warm up. - The key of the item under the reader. - - - - Get the item from the cache. - - The IndexReader the cache is from. - The key of the item under the reader. - The item from cache. - - - - The number of outermost keys in the collection. - - - - - A weak referene wrapper for the hashtable keys. Whenever a key\value pair - is added to the hashtable, the key is wrapped using a WeakKey. WeakKey saves the - value of the original object hashcode for fast comparison. - - - - - The hashcode for the target. - - - - - Create a new WeakKey - - The object to use as the target. - - - - The hash code accessor. - - - - - - Equality between keys. - - The object to compare to. - True if they are equivalent. - - - diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.dll deleted file mode 100644 index 2308d3bd2ef..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.pdb deleted file mode 100644 index 3a0d6d49346..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Core.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.dll deleted file mode 100644 index 6b75bced7db..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.pdb deleted file mode 100644 index 77239d75583..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.xml b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.xml deleted file mode 100644 index a13a0d7ccfe..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.FastVectorHighlighter.xml +++ /dev/null @@ -1,248 +0,0 @@ - - - - Lucene.Net.Contrib.FastVectorHighlighter - - - - - FragmentsBuilder is an interface for fragments (snippets) builder classes. - A FragmentsBuilder class can be plugged in to Highlighter. - - - - - create a fragment. - - IndexReader of the index - document id to be highlighted - field of the document to be highlighted - FieldFragList object - a created fragment or null when no fragment created - - - - create multiple fragments. - - IndexReader of the index - document id to be highlighted - field of the document to be highlighted - ieldFragList object - maximum number of fragments - created fragments or null when no fragments created. Size of the array can be less than maxNumFragments - - - - the default constructor. - - - - - a constructor. Using SimpleFragListBuilder and ScoreOrderFragmentsBuilder. - - true or false for phrase highlighting - true of false for field matching - - - - a constructor. A FragListBuilder and a FragmentsBuilder can be specified (plugins). - - true of false for phrase highlighting - true of false for field matching - an instance of FragListBuilder - an instance of FragmentsBuilder - - - - create a FieldQuery object. - - a query - the created FieldQuery object - - - - return the best fragment. - - FieldQuery object - IndexReader of the index - document id to be highlighted - field of the document to be highlighted - the length (number of chars) of a fragment - the best fragment (snippet) string - - - - return the best fragments. - - FieldQuery object - IndexReader of the index - document id to be highlighted - field of the document to be highlighted - the length (number of chars) of a fragment - maximum number of fragments - created fragments or null when no fragments created. Size of the array can be less than maxNumFragments - - - - return whether phraseHighlight or not. - - return whether phraseHighlight or not. - - - - return whether fieldMatch or not. - - return whether fieldMatch or not. - - - - The maximum number of phrases to analyze when searching for the highest-scoring phrase. - The default is 5000. To ensure that all phrases are analyzed, use a negative number or Integer.MAX_VALUE. - - - - - FieldFragList has a list of "frag info" that is used by FragmentsBuilder class - to create fragments (snippets). - - - - - a constructor. - - the length (number of chars) of a fragment - - - - convert the list of WeightedPhraseInfo to WeightedFragInfo, then add it to the fragInfos - - start offset of the fragment - end offset of the fragment - list of WeightedPhraseInfo objects - - - - FieldPhraseList has a list of WeightedPhraseInfo that is used by FragListBuilder - to create a FieldFragList object. - - - - - create a FieldPhraseList that has no limit on the number of phrases to analyze - FieldTermStack object - FieldQuery object - - - - - a constructor. - - FieldTermStack object - FieldQuery object - maximum size of phraseList - - - - FieldTermStack is a stack that keeps query terms in the specified field - of the document to be highlighted. - - - - - a constructor. - - IndexReader of the index - document id to be highlighted - field of the document to be highlighted - FieldQuery object - - - - - - the top TermInfo object of the stack - - - - - - the TermInfo object to be put on the top of the stack - - - - to know whether the stack is empty - - true if the stack is empty, false if not - - - - - - field name - - - - - FragListBuilder is an interface for FieldFragList builder classes. - A FragListBuilder class can be plugged in to Highlighter. - - - - - create a FieldFragList. - - FieldPhraseList object - the length (number of chars) of a fragment - the created FieldFragList object - - - - a constructor. - - - - - a constructor. - - array of pre-tags for markup terms - array of post-tags for markup terms - - - - Sort by score the list of WeightedFragInfo - - - - - A simple implementation of FragListBuilder. - - - - - A simple implementation of FragmentsBuilder. - - - - - a constructor. - - - - - a constructor. - - array of pre-tags for markup terms - array of post-tags for markup terms - - - - do nothing. return the source list. - - - - - Check if the termToMatch is a match for the term, considering the use of a wildcards. - - - - diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.XML b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.XML deleted file mode 100644 index de2ccbaaeac..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.XML +++ /dev/null @@ -1,643 +0,0 @@ - - - - Lucene.Net.Contrib.Highlighter - - - - Simple implementation that does not modify the output - - - Encodes original text. The IEncoder works with the Formatter to generate the output. - - - The section of text being output - - - Processes terms found in the original text, typically by applying some form - of mark-up to highlight terms in HTML search results pages. - - - The section of text being considered for markup - contains one or several overlapping Tokens along with - their scores and positions. - - - Implements the policy for breaking text into multiple fragments for consideration - by the class. A sophisticated implementation may do this on the basis - of detecting end of sentences in the text. - - mark@searcharea.co.uk - - - - - Initializes the Fragmenter. You can grab references to the Attributes you are - interested in from tokenStream and then access the values in {@link #isNewFragment()}. - - the original source text - tokenStream the to be fragmented - - - - Test to see if this token from the stream should be held in a new - TextFragment. Every time this is called, the TokenStream - passed to start(String, TokenStream) will have been incremented. - - - - - Formats text with different color intensity depending on the score of the term. - - - - Sets the color range for the IDF scores - - The score (and above) displayed as maxColor (See QueryScorer.getMaxWeight - which can be used to callibrate scoring scale) - - - The hex color used for representing IDF scores of zero eg - #FFFFFF (white) or null if no foreground color required - - - The largest hex color used for representing IDF scores eg - #000000 (black) or null if no foreground color required - - - The hex color used for representing IDF scores of zero eg - #FFFFFF (white) or null if no background color required - - - The largest hex color used for representing IDF scores eg - #000000 (black) or null if no background color required - - - - Converts a hex string into an int. Integer.parseInt(hex, 16) assumes the - input is nonnegative unless there is a preceding minus sign. This method - reads the input as twos complement instead, so if the input is 8 bytes - long, it will correctly restore a negative int produced by - Integer.toHexString() but not neccesarily one produced by - Integer.toString(x,16) since that method will produce a string like '-FF' - for negative integer values. - - - - A string in capital or lower case hex, of no more then 16 - characters. - - if the string is more than 16 characters long, or if any - character is not in the set [0-9a-fA-f] - - - - Class used to markup highlighted terms found in the best sections of a - text, using configurable , , , - and tokenizers. - - - - - Highlights chosen terms in a text, extracting the most relevant section. - This is a convenience method that calls - - the analyzer that will be used to split text into chunks - Name of field used to influence analyzer's tokenization policy - text to highlight terms in - highlighted text fragment or null if no terms found - thrown if any token's endOffset exceeds the provided text's length - - - - Highlights chosen terms in a text, extracting the most relevant section. - The document text is analysed in chunks to record hit statistics - across the document. After accumulating stats, the fragment with the highest score - is returned - - - a stream of tokens identified in the text parameter, including offset information. - This is typically produced by an analyzer re-parsing a document's - text. Some work may be done on retrieving TokenStreams more efficiently - by adding support for storing original text position data in the Lucene - index but this support is not currently available (as of Lucene 1.4 rc2). - - text to highlight terms in - highlighted text fragment or null if no terms found - thrown if any token's endOffset exceeds the provided text's length - - - - Highlights chosen terms in a text, extracting the most relevant sections. - This is a convenience method that calls - - the analyzer that will be used to split text into chunks - the name of the field being highlighted (used by analyzer) - text to highlight terms in - the maximum number of fragments. - highlighted text fragments (between 0 and maxNumFragments number of fragments) - thrown if any token's endOffset exceeds the provided text's length - - - - Highlights chosen terms in a text, extracting the most relevant sections. - The document text is analysed in chunks to record hit statistics - across the document. After accumulating stats, the fragments with the highest scores - are returned as an array of strings in order of score (contiguous fragments are merged into - one in their original order to improve readability) - - - text to highlight terms in - the maximum number of fragments. - highlighted text fragments (between 0 and maxNumFragments number of fragments) - thrown if any token's endOffset exceeds the provided text's length - - - - Low level api to get the most relevant (formatted) sections of the document. - This method has been made public to allow visibility of score information held in TextFragment objects. - Thanks to Jason Calabrese for help in redefining the interface. - - - - - Improves readability of a score-sorted list of TextFragments by merging any fragments - that were contiguous in the original text into one larger fragment with the correct order. - This will leave a "null" in the array entry for the lesser scored fragment. - - An array of document fragments in descending score - - - - Highlights terms in the text , extracting the most relevant sections - and concatenating the chosen fragments with a separator (typically "..."). - The document text is analysed in chunks to record hit statistics - across the document. After accumulating stats, the fragments with the highest scores - are returned in order as "separator" delimited strings. - - - text to highlight terms in - the maximum number of fragments. - the separator used to intersperse the document fragments (typically "...") - highlighted text - - - implementation which does not fragment the text. - This is useful for highlighting the entire content of a document or field. - - - - - implementation which scores text fragments by the number of - unique query terms found. This class converts appropriate s to - s and attempts to score only those terms that participated in - generating the 'hit' on the document. - - - - Adds to the score for a fragment based on its tokens - - - - Called to init the Scorer with a {@link TokenStream}. You can grab references to - the attributes you are interested in here and access them from {@link #getTokenScore()}. - - the {@link TokenStream} that will be scored. - - either a {@link TokenStream} that the Highlighter should continue using (eg - if you read the tokenSream in this method) or null to continue - using the same {@link TokenStream} that was passed in. - - - - - - - Called when a new fragment is started for consideration. - - the fragment that will be scored next - - - - Called for each token in the current fragment. The {@link Highlighter} will - increment the {@link TokenStream} passed to init on every call. - - a score which is passed to the {@link Highlighter} class to influence the - mark-up of the text (this return value is NOT used to score the - fragment) - - - - Called when the {@link Highlighter} has no more tokens for the current fragment - - the Scorer returns the weighting it has derived for the most recent - fragment, typically based on the results of {@link #getTokenScore()}. - - - - - Constructs a new QueryScorer instance - - Query to use for highlighting - - - - Constructs a new QueryScorer instance - - Query to use for highlighting - Field to highlight - pass null to ignore fields - - - - Constructs a new QueryScorer instance - - Query to use for highlighting - to use for quasi tf/idf scoring - Field to highlight - pass null to ignore fields - - - - Constructs a new QueryScorer instance - - Query to use for highlighting - to use for quasi tf/idf scoring - Field to highlight - pass null to ignore fields - The default field for queries with the field name unspecified - - - - Constructs a new QueryScorer instance - - Query to use for highlighting - Field to highlight - pass null to ignore fields - The default field for queries with the field name unspecified - - - - Constructs a new QueryScorer instance - - an array of pre-created s - - - - - - - - - - Retrieve the for the specified token. Useful for passing - Span information to a . - - token to get {@link WeightedSpanTerm} for - WeightedSpanTerm for token - - - - - - - By default, s that are not of the type - are wrapped in a to - ensure an efficient reset - if you are already using a different caching - impl and you don't want it to be wrapped, set this to - false. - - - - - - - - The highest weighted term (useful for passing to GradientFormatter to set top end of coloring scale). - - - - - Controls whether or not multi-term queries are expanded - against a . - - - - Utility class used to extract the terms used in a query, plus any weights. - This class will not find terms for MultiTermQuery, RangeQuery and PrefixQuery classes - so the caller must pass a rewritten query (see Query.rewrite) to obtain a list of - expanded terms. - - - Extracts all terms texts of a given Query into an array of WeightedTerms - - - Query to extract term texts from - - an array of the terms used in a query, plus their weights. - - - - Extracts all terms texts of a given Query into an array of WeightedTerms - - - Query to extract term texts from - used to compute IDF which can be used to a) score selected fragments better - b) use graded highlights eg chaning intensity of font color - the field on which Inverse Document Frequency (IDF) calculations are based - an array of the terms used in a query, plus their weights. - - - Extracts all terms texts of a given Query into an array of WeightedTerms - Query to extract term texts from - true to extract "prohibited" terms, too - The fieldName used to filter query terms - an array of the terms used in a query, plus their weights. - - - Extracts all terms texts of a given Query into an array of WeightedTerms - - - Query to extract term texts from - - true to extract "prohibited" terms, too - - an array of the terms used in a query, plus their weights. - - - - extractTerms is currently the only query-independent means of introspecting queries but it only reveals - a list of terms for that query - not the boosts each individual term in that query may or may not have. - "Container" queries such as BooleanQuery should be unwrapped to get at the boost info held - in each child element. - Some discussion around this topic here: - http://www.gossamer-threads.com/lists/lucene/java-dev/34208?search_string=introspection;#34208 - Unfortunately there seemed to be limited interest in requiring all Query objects to implement - something common which would allow access to child queries so what follows here are query-specific - implementations for accessing embedded query elements. - - - - implementation which breaks text up into same-size - fragments with no concerns over spotting sentence boundaries. - - mark@searcharea.co.uk - - - - - Gets or sets the size in number of characters of each fragment - - - - Simple implementation to escape text for HTML output - - - Simple implementation to highlight terms with a pre and post tag - MAHarwood - - - - - Default constructor uses HTML: <B> tags to markup terms - - - - - - QueryScorer that was used to score hits - - - QueryScorer that was used to score hits - size in bytes of each fragment - - - - - - - - - - Formats text with different color intensity depending on the score of the - term using the span tag. GradientFormatter uses a bgcolor argument to the font tag which - doesn't work in Mozilla, thus this class. - - - - - Low-level class used to record information about a section of a document - with a score. - - - - - Fragment to be merged into this one - - - - true if this fragment follows the one passed - - - - - Returns the marked-up text for this text fragment - - - - - the fragment sequence number - - - - One, or several overlapping tokens, along with the score(s) and the - scope of the original text - - - - - the "n"th token - - a value between 0 and numTokens -1 - - - - the "n"th score - - a value between 0 and numTokens -1 - - - - the end position in the original text - - - - - The start position in the original text - - - - - All tokens' scores summed up - - - - Hides implementation issues associated with obtaining a TokenStream for use with - the higlighter - can obtain from TermFreqVectors with offsets and (optionally) positions or - from Analyzer class reparsing the stored content. - - - - - A convenience method that tries to first get a TermPositionVector for the specified docId, then, falls back to - using the passed in {@link org.apache.lucene.document.Document} to retrieve the TokenStream. This is useful when - you already have the document, but would prefer to use the vector first. - - The to use to try and get the vector from - The docId to retrieve. - The field to retrieve on the document - The document to fall back on - The analyzer to use for creating the TokenStream if the vector doesn't exist - The for the on the - if there was an error loading - - - - A convenience method that tries a number of approaches to getting a token stream. - The cost of finding there are no termVectors in the index is minimal (1000 invocations still - registers 0 ms). So this "lazy" (flexible?) approach to coding is probably acceptable - - null if field not stored correctly - - - - Low level api. - Returns a token stream or null if no offset info available in index. - This can be used to feed the highlighter with a pre-parsed token stream - - In my tests the speeds to recreate 1000 token streams using this method are: - - with TermVector offset only data stored - 420 milliseconds - - with TermVector offset AND position data stored - 271 milliseconds - (nb timings for TermVector with position data are based on a tokenizer with contiguous - positions - no overlaps or gaps) - The cost of not using TermPositionVector to store - pre-parsed content and using an analyzer to re-parse the original content: - - reanalyzing the original content - 980 milliseconds - - The re-analyze timings will typically vary depending on - - 1) The complexity of the analyzer code (timings above were using a - stemmer/lowercaser/stopword combo) - 2) The number of other fields (Lucene reads ALL fields off the disk - when accessing just one document field - can cost dear!) - 3) Use of compression on field storage - could be faster due to compression (less disk IO) - or slower (more CPU burn) depending on the content. - - - true if the token position numbers have no overlaps or gaps. If looking - to eek out the last drops of performance, set to true. If in doubt, set to false. - - - - Lightweight class to hold term, Weight, and positions used for scoring this term. - - - - - Lightweight class to hold term and a Weight value used for scoring this term - - - - - the term value (stemmed) - - - - - the Weight associated with this term - - - - - - Checks to see if this term is valid at position. - - to check against valid term postions - true iff this term is a hit at this position - - - - Class used to extract s from a based on whether - s from the are contained in a supplied . - - - - - Fills a Map with s using the terms from the supplied Query. - - Query to extract Terms from - Map to place created WeightedSpanTerms in - - - - Fills a Map with s using the terms from the supplied SpanQuery. - - Map to place created WeightedSpanTerms in - SpanQuery to extract Terms from - - - - Fills a Map with s using the terms from the supplied Query. - - - - - - - Necessary to implement matches for queries against defaultField - - - - - Creates a Map of WeightedSpanTerms from the given Query and TokenStream. - - query that caused hit - TokenStream of text to be highlighted - Map containing WeightedSpanTerms - - - - Creates a Map of WeightedSpanTerms from the given Query and TokenStream. - - query that caused hit - tokenStream of text to be highlighted - restricts Term's used based on field name - Map containing WeightedSpanTerms - - - - Creates a Map of WeightedSpanTerms from the given Query and TokenStream. Uses a supplied - IndexReader to properly Weight terms (for gradient highlighting). - - Query that caused hit - Tokenstream of text to be highlighted - restricts Term's used based on field name - to use for scoring - Map of WeightedSpanTerms with quasi tf/idf scores - - - - By default, s that are not of the type - are wrapped in a to - impl and you don't want it to be wrapped, set this to - false. - - - - - This class makes sure that if both position sensitive and insensitive - versions of the same term are added, the position insensitive one wins. - - - - - - A fake IndexReader class to extract the field from a MultiTermQuery - - - - diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.dll deleted file mode 100644 index a760f54f8f5..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.pdb deleted file mode 100644 index 5c7e61554ed..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Highlighter.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.XML b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.XML deleted file mode 100644 index 0d78a5771b3..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.XML +++ /dev/null @@ -1,147 +0,0 @@ - - - - Lucene.Net.Contrib.Memory - - - - - Returns an empty list of type T - - - - - High-performance single-document main memory Apache Lucene fulltext search index. - -

Overview

- - This class is a replacement/substitute for a large subset of - {@link RAMDirectory} functionality. It is designed to - enable maximum efficiency for on-the-fly matchmaking combining structured and - fuzzy fulltext search in realtime streaming applications such as Nux XQuery based XML - message queues, publish-subscribe systems for Blogs/newsfeeds, text chat, data acquisition and - distribution systems, application level routers, firewalls, classifiers, etc. - Rather than targeting fulltext search of infrequent queries over huge persistent - data archives (historic search), this class targets fulltext search of huge - numbers of queries over comparatively small transient realtime data (prospective - search). - For example as in -
-             float score = search(String text, Query query)
-             
-

- Each instance can hold at most one Lucene "document", with a document containing - zero or more "fields", each field having a name and a fulltext value. The - fulltext value is tokenized (split and transformed) into zero or more index terms - (aka words) on addField(), according to the policy implemented by an - Analyzer. For example, Lucene analyzers can split on whitespace, normalize to lower case - for case insensitivity, ignore common terms with little discriminatory value such as "he", "in", "and" (stop - words), reduce the terms to their natural linguistic root form such as "fishing" - being reduced to "fish" (stemming), resolve synonyms/inflexions/thesauri - (upon indexing and/or querying), etc. For details, see - Lucene Analyzer Intro. -

- Arbitrary Lucene queries can be run against this class - see Lucene Query Syntax - as well as Query Parser Rules. - Note that a Lucene query selects on the field names and associated (indexed) - tokenized terms, not on the original fulltext(s) - the latter are not stored - but rather thrown away immediately after tokenization. -

- For some interesting background information on search technology, see Bob Wyman's - Prospective Search, - Jim Gray's - - A Call to Arms - Custom subscriptions, and Tim Bray's - On Search, the Series. - - -

Example Usage

- -
-             Analyzer analyzer = PatternAnalyzer.DEFAULT_ANALYZER;
-             //Analyzer analyzer = new SimpleAnalyzer();
-             MemoryIndex index = new MemoryIndex();
-             index.addField("content", "Readings about Salmons and other select Alaska fishing Manuals", analyzer);
-             index.addField("author", "Tales of James", analyzer);
-             QueryParser parser = new QueryParser("content", analyzer);
-             float score = index.search(parser.parse("+author:james +salmon~ +fish/// manual~"));
-             if (score > 0.0f) {
-                 System.out.println("it's a match");
-             } else {
-                 System.out.println("no match found");
-             }
-             System.out.println("indexData=" + index.toString());
-             
- - -

Example XQuery Usage

- -
-             (: An XQuery that finds all books authored by James that have something to do with "salmon fishing manuals", sorted by relevance :)
-             declare namespace lucene = "java:nux.xom.pool.FullTextUtil";
-             declare variable $query := "+salmon~ +fish/// manual~"; (: any arbitrary Lucene query can go here :)
-             
-             for $book in /books/book[author="James" and lucene:match(abstract, $query) > 0.0]
-             let $score := lucene:match($book/abstract, $query)
-             order by $score descending
-             return $book
-             
- - -

No thread safety guarantees

- - An instance can be queried multiple times with the same or different queries, - but an instance is not thread-safe. If desired use idioms such as: -
-             MemoryIndex index = ...
-             synchronized (index) {
-                // read and/or write index (i.e. add fields and/or query)
-             } 
-             
- - -

Performance Notes

- - Internally there's a new data structure geared towards efficient indexing - and searching, plus the necessary support code to seamlessly plug into the Lucene - framework. -

- This class performs very well for very small texts (e.g. 10 chars) - as well as for large texts (e.g. 10 MB) and everything in between. - Typically, it is about 10-100 times faster than RAMDirectory. - Note that RAMDirectory has particularly - large efficiency overheads for small to medium sized texts, both in time and space. - Indexing a field with N tokens takes O(N) in the best case, and O(N logN) in the worst - case. Memory consumption is probably larger than for RAMDirectory. -

- Example throughput of many simple term queries over a single MemoryIndex: - ~500000 queries/sec on a MacBook Pro, jdk 1.5.0_06, server VM. - As always, your mileage may vary. -

- If you're curious about - the whereabouts of bottlenecks, run java 1.5 with the non-perturbing '-server - -agentlib:hprof=cpu=samples,depth=10' flags, then study the trace log and - correlate its hotspot trailer with its call stack headers (see - hprof tracing ). - -

-
- - - Fills the given float array with the values - as the collector scores the search - - - - - Sorts term entries into ascending order; also works for - Arrays.binarySearch() and Arrays.sort() - - -
-
diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.dll deleted file mode 100644 index 1b7df3b39aa..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.pdb deleted file mode 100644 index 24c6e628ae4..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Memory.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.XML b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.XML deleted file mode 100644 index 47c29577d98..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.XML +++ /dev/null @@ -1,657 +0,0 @@ - - - - Lucene.Net.Contrib.Queries - - - - - The filters that are optional clauses. - - - - - The filters that are used for exclusion. - - - - - The filters that must be met. - - - - - Get the iterator for a specific filter. - - The list of filters - The index of the iterator to get. - The reader for the index. - - - - - Get the id set for the filter. - - The reader. - The filter set to use. - - - - Add a filter clause. - - The clause to add. - - - - Determine equality between two lists. - - - - - - - - Equality - - - - - - - Hash code. - - - - - - String representation. - - - - - - Append individual filters. - - - - - - - - The BoostingQuery class can be used to effectively demote results that match a given query. - Unlike the "NOT" clause, this still selects documents that contain undesirable terms, - but reduces their overall score: -
-                 Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f);
-             
- In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to - select all matching documents, and the negativeQuery contains the undesirable elements which - are simply used to lessen the scores. Documents that match the negativeQuery have their score - multiplied by the supplied "boost" parameter, so this should be less than 1 to achieve a - demoting effect - - This code was originally made available here: - mailing list - and is documented here: Documentation -
-
- - - Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms. - In effect this mixes the behaviour of FuzzyQuery and MoreLikeThis but with special consideration - of fuzzy scoring factors. - This generally produces good results for queries where users may provide details in a number of - fields and have no knowledge of boolean query syntax and also want a degree of fuzzy matching and - a fast query. - - For each source term the fuzzy variants are held in a BooleanQuery with no coord factor (because - we are not looking for matches on multiple variants in any one doc). Additionally, a specialized - TermQuery is used for variants and does not use that variant term's IDF because this would favour rarer - terms eg misspellings. Instead, all variants use the same IDF ranking (the one for the source query - term) and this is factored into the variant's boost. If the source query term does not exist in the - index the average IDF of the variants is used. - - - - Generate "more like this" similarity queries. - Based on this mail: -
-            Lucene does let you access the document frequency of terms, with IndexReader.DocFreq().
-            Term frequencies can be computed by re-tokenizing the text, which, for a single document,
-            is usually fast enough.  But looking up the DocFreq() of every term in the document is
-            probably too slow.
-            
-            You can use some heuristics to prune the set of terms, to avoid calling DocFreq() too much,
-            or at all.  Since you're trying to maximize a tf*idf score, you're probably most interested
-            in terms with a high tf. Choosing a tf threshold even as low as two or three will radically
-            reduce the number of terms under consideration.  Another heuristic is that terms with a
-            high idf (i.e., a low df) tend to be longer.  So you could threshold the terms by the
-            number of characters, not selecting anything less than, e.g., six or seven characters.
-            With these sorts of heuristics you can usually find small set of, e.g., ten or fewer terms
-            that do a pretty good job of characterizing a document.
-            
-            It all depends on what you're trying to do.  If you're trying to eek out that last percent
-            of precision and recall regardless of computational difficulty so that you can win a TREC
-            competition, then the techniques I mention above are useless.  But if you're trying to
-            provide a "more like this" button on a search results page that does a decent job and has
-            good performance, such techniques might be useful.
-            
-            An efficient, effective "more-like-this" query generator would be a great contribution, if
-            anyone's interested.  I'd imagine that it would take a Reader or a String (the document's
-            text), analyzer Analyzer, and return a set of representative terms using heuristics like those
-            above.  The frequency and length thresholds could be parameters, etc.
-            
-            Doug
-            
- - -

-

Initial Usage

- - This class has lots of options to try to make it efficient and flexible. - See the body of below in the source for real code, or - if you want pseudo code, the simpliest possible usage is as follows. The bold - fragment is specific to this class. - -
-            
-            IndexReader ir = ...
-            IndexSearcher is = ...
-            
-            MoreLikeThis mlt = new MoreLikeThis(ir);
-            Reader target = ... // orig source of doc you want to find similarities to
-            Query query = mlt.Like( target);
-            
-            Hits hits = is.Search(query);
-            // now the usual iteration thru 'hits' - the only thing to watch for is to make sure
-            you ignore the doc if it matches your 'target' document, as it should be similar to itself 
-            
-            
- - Thus you: -
    -
  1. do your normal, Lucene setup for searching,
  2. -
  3. create a MoreLikeThis,
  4. -
  5. get the text of the doc you want to find similaries to
  6. -
  7. then call one of the Like() calls to generate a similarity query
  8. -
  9. call the searcher to find the similar docs
  10. -
- -

More Advanced Usage

- - You may want to use so you can examine - multiple fields (e.g. body and title) for similarity. -

- - Depending on the size of your index and the size and makeup of your documents you - may want to call the other set methods to control how the similarity queries are - generated: -

    -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
- -
-
-            Changes: Mark Harwood 29/02/04
-            Some bugfixing, some refactoring, some optimisation.
-            - bugfix: retrieveTerms(int docNum) was not working for indexes without a termvector -added missing code
-            - bugfix: No significant terms being created for fields with a termvector - because 
-            was only counting one occurence per term/field pair in calculations(ie not including frequency info from TermVector) 
-            - refactor: moved common code into isNoiseWord()
-            - optimise: when no termvector support available - used maxNumTermsParsed to limit amount of tokenization
-            
-
-
- - Default maximum number of tokens to parse in each example doc field that is not stored with TermVector support. - - - - - Ignore terms with less than this frequency in the source doc. - - - - - - - Ignore words which do not occur in at least this many docs. - - - - - - - - Ignore words wich occur in more than this many docs - - - - - - Boost terms in query based on score. - - - - - - - Ignore words less than this length or if 0 then this has no effect. - - - - - - - Ignore words greater than this length or if 0 then this has no effect. - - - - - - - Return a Query with no more than this many terms. - - - - - - - - - - - Default analyzer to parse source doc with. - - - - - Default field names. Null is used to specify that the field names should be looked - up at runtime from the provided reader. - - - - Default set of stopwords. - If null means to allow stop words. - - - - - - - - - Current set of stop words. - - - Analyzer that will be used to parse the doc. - - - Ignore words less freqent that this. - - - Ignore words which do not occur in at least this many docs. - - - - Ignore words which occur in more than this many docs. - - - - Should we apply a boost to the Query based on the scores? - - - Field name we'll analyze. - - - The maximum number of tokens to parse in each example doc field that is not stored with TermVector support - - - Ignore words if less than this len. - - - Ignore words if greater than this len. - - - Don't return a query longer than this. - - - For idf() calculations. - - - IndexReader to use - - - Boost factor to use when boosting the terms - - - Constructor requiring an IndexReader. - - - - Set the maximum percentage in which words may still appear. Words that appear - in more than this many percent of all docs will be ignored. - - - the maximum percentage of documents (0-100) that a term may appear - in to be still considered relevant - - - - Returns the field names that will be used when generating the 'More Like This' query. - The default field names that will be used is . - - - the field names that will be used when generating the 'More Like This' query. - - - - Sets the field names that will be used when generating the 'More Like This' query. - Set this to null for the field names to be determined at runtime from the IndexReader - provided in the constructor. - - - the field names that will be used when generating the 'More Like This' - query. - - - - Set the set of stopwords. - Any word in this set is considered "uninteresting" and ignored. - Even if your Analyzer allows stopwords, you might want to tell the MoreLikeThis code to ignore them, as - for the purposes of document similarity it seems reasonable to assume that "a stop word is never interesting". - - - set of stopwords, if null it means to allow stop words - - - - - - - - - Get the current stop words being used. - - - - - Return a query that will return docs like the passed lucene document ID. - the documentID of the lucene doc to generate the 'More Like This" query for. - a query that will return docs like the passed lucene document ID. - - - Return a query that will return docs like the passed file. - - - a query that will return docs like the passed file. - - - - Return a query that will return docs like the passed URL. - - - a query that will return docs like the passed URL. - - - - Return a query that will return docs like the passed stream. - - - a query that will return docs like the passed stream. - - - - Return a query that will return docs like the passed Reader. - - - a query that will return docs like the passed Reader. - - - - Create the More like query from a PriorityQueue - - - Create a PriorityQueue from a word->tf map. - - - a map of words keyed on the word(String) with Int objects as the values. - - - - Describe the parameters that control how the "more like this" query is formed. - - - Test driver. - Pass in "-i INDEX" and then either "-fn FILE" or "-url URL". - - - - Find words for a more-like-this query former. - - - the id of the lucene document from which to find terms - - - - Adds terms and frequencies found in vector into the Map termFreqMap - a Map of terms and their frequencies - - List of terms and their frequencies for a doc/field - - - - Adds term frequencies found by tokenizing text from reader into the Map words - a source of text to be tokenized - - a Map of terms and their frequencies - - Used by analyzer for any special per-field analysis - - - - determines if the passed term is likely to be of interest in "more like" comparisons - - - The word being considered - - true if should be ignored, false if should be used in further analysis - - - - Find words for a more-like-this query former. - The result is a priority queue of arrays with one entry for every word in the document. - Each array has 6 elements. - The elements are: -
    -
  1. The word (String)
  2. -
  3. The top field that this word comes from (String)
  4. -
  5. The score for this word (Float)
  6. -
  7. The IDF value (Float)
  8. -
  9. The frequency of this word in the index (Integer)
  10. -
  11. The frequency of this word in the source document (Integer)
  12. -
- This is a somewhat "advanced" routine, and in general only the 1st entry in the array is of interest. - This method is exposed so that you can identify the "interesting words" in a document. - For an easier method to call see . - -
- the reader that has the content of the document - - the most intresting words in the document ordered by score, with the highest scoring, or best entry, first - - - - -
- - Convenience routine to make it easy to return the most interesting words in a document. - More advanced users will call directly. - - the source document - - the most interesting words in the document - - - - - - - - - - Gets or sets the boost factor used when boosting terms - - - - Gets or sets the analyzer used to parse source doc with. The default analyzer - is the . - - An analyzer is not required for generating a query with the - method, all other 'like' methods require an analyzer. - - the analyzer that will be used to parse source doc with. - - - - - - Gets or sets the frequency below which terms will be ignored in the source doc. The default - frequency is the . - - - - - Gets or sets the frequency at which words will be ignored which do not occur in at least this - many docs. The default frequency is . - - - - - Gets or sets the maximum frequency in which words may still appear. - Words that appear in more than this many docs will be ignored. The default frequency is - - - - - Gets or sets a boolean indicating whether to boost terms in query based - on "score" or not. The default is . - - - - - Gets or sets the minimum word length below which words will be ignored. - Set this to 0 for no minimum word length. The default is . - - - - - Gets or sets the maximum word length above which words will be ignored. Set this to 0 for no - maximum word length. The default is . - - - - - Gets or sets the maximum number of query terms that will be included in any generated query. - The default is . - - - - - Gets or sets the maximum number of tokens to parse in each example doc - field that is not stored with TermVector support - - - - - PriorityQueue that orders words by score. - - - Use for frequencies and to avoid renewing Integers. - - - Simple similarity measures. - - - - - - - - - - - Simple similarity query generators. - Takes every unique word and forms a boolean query where all words are optional. - After you get this you'll use to to query your for similar docs. - The only caveat is the first hit returned should be your source document - you'll - need to then ignore that. - -

- - So, if you have a code fragment like this: -
- - Query q = formSimilaryQuery( "I use Lucene to search fast. Fast searchers are good", new StandardAnalyzer(), "contents", null); - - -

- - The query returned, in string form, will be '(i use lucene to search fast searchers are good'). - -

- The philosophy behind this method is "two documents are similar if they share lots of words". - Note that behind the scenes, Lucenes scoring algorithm will tend to give two documents a higher similarity score if the share more uncommon words. - -

- This method is fail-safe in that if a long 'body' is passed in and - (used internally) - throws - , the - query as it is will be returned. -

- the body of the document you want to find similar documents to - - the analyzer to use to parse the body - - the field you want to search on, probably something like "contents" or "body" - - optional set of stop words to ignore - - a query with all unique words in 'body' - - IOException this can't happen... -
- - - A filter that contains multiple terms. - - - - - The set of terms for this filter. - - - - - Add a term to the set. - - The term to add. - - - - Get the DocIdSet. - - Applcible reader. - The set. - -
-
diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.dll deleted file mode 100644 index 07266796b6b..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.pdb deleted file mode 100644 index 9193922bcf1..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Queries.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.dll deleted file mode 100644 index fe8f9cec900..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.pdb deleted file mode 100644 index 158389ad472..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.xml b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.xml deleted file mode 100644 index 0790b601eee..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Regex.xml +++ /dev/null @@ -1,154 +0,0 @@ - - - - Lucene.Net.Contrib.Regex - - - - - C# Regex based implementation of . - - http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/JavaUtilRegexCapabilities.java.htm - - - - Defines basic operations needed by for a regular expression implementation. - - http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexCapabilities.java.htm - - - - Called by the constructor of allowing implementations to cache - a compiled version of the regular expression pattern. - - regular expression pattern - - - - True on match. - - text to match - true on match - - - - A wise prefix implementation can reduce the term enumeration (and thus performance) - of RegexQuery dramatically. - - static non-regex prefix of the pattern last passed to . - May return null - - - - Called by the constructor of allowing implementations to cache - a compiled version of the regular expression pattern. - - regular expression pattern - - - - True on match. - - text to match - true on match - - - - A wise prefix implementation can reduce the term enumeration (and thus performance) - of RegexQuery dramatically. - - static non-regex prefix of the pattern last passed to . - May return null - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object - - - - Defines methods for regular expression supporting queries to use. - - http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexQueryCapable.java.htm - - - - Regular expression based query. - - http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexQuery.java.htm - - - Construct the enumeration to be used, expanding the pattern term. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object - - - - Subclass of FilteredTermEnum for enumerating all terms that match the - specified regular expression term using the specified regular expression - implementation. - Term enumerations are always ordered by Term.compareTo(). Each term in - the enumeration is greater than all that precede it. - - http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexTermEnum.java.htm - - - Equality compare on the term - - - Equality measure on the term - - - Indicates the end of the enumeration has been reached - - - - A SpanQuery version of allowing regular expression queries to be nested - within other SpanQuery subclasses. - - http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/SpanRegexQuery.java.htm - - - Expert: Returns the matches for this query in an index. Used internally - to search for spans. - - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - - True if this object equals the specified object. - - object - true on equality - - - - Get hash code for this object. - - hash code - - - Returns the name of the field matched by this query. - - - diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.dll deleted file mode 100644 index c0129ec6c99..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.pdb deleted file mode 100644 index 9af41745bd9..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.xml b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.xml deleted file mode 100644 index 35b8fd2ec6f..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SimpleFacetedSearch.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - Lucene.Net.Contrib.SimpleFacetedSearch - - - - diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.XML b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.XML deleted file mode 100644 index 3743a4ffaf6..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.XML +++ /dev/null @@ -1,114 +0,0 @@ - - - - Lucene.Net.Contrib.Snowball - - - - Filters with , {@link - LowerCaseFilter}, and . - - Available stemmers are listed in . The name of a - stemmer is the part of the class name before "Stemmer", e.g., the stemmer in - is named "English". - -

NOTE: This class uses the same - dependent settings as

-
-
- - Builds the named analyzer with no stop words. - - - Builds the named analyzer with the given stop words. - - - - Builds the named analyzer with the given stop words. - - - - Constructs a filtered by a {@link - StandardFilter}, a and a . - - - - A filter that stems words using a Snowball-generated stemmer. - - Available stemmers are listed in . The name of a - stemmer is the part of the class name before "Stemmer", e.g., the stemmer in - is named "English". - - - - Construct the named stemming filter. - - - the input tokens to stem - - the name of a stemmer - - - - Returns the next input Token, after being stemmed - - - Generated class implementing code defined by a snowball script. - - - - This is the rev 500 of the snowball SVN trunk, - but modified: - made abstract and introduced abstract method stem to avoid expensive reflection in filter class - - - - Set the current string. - - - Get the current string. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - - - Generated class implementing code defined by a snowball script. - -
-
diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.dll deleted file mode 100644 index 4eb6223b46a..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.pdb deleted file mode 100644 index 80d46bd6d9b..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.Snowball.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.XML b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.XML deleted file mode 100644 index 77b12b797c7..00000000000 --- a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.XML +++ /dev/null @@ -1,278 +0,0 @@ - - - - Lucene.Net.Contrib.SpellChecker - - - - A simple interface representing a Dictionary - - - return all the words present in the dictionary - Iterator - - - - - Interface for string distances. - - - - - Returns a float between 0 and 1 based on how similar the specified strings are to one another. - Returning a value of 1 means the specified strings are identical and 0 means the - string are maximally different. - - The first string. - The second string. - a float between 0 and 1 based on how similar the specified strings are to one another. - - - - Gets or sets the current value of the threshold used for adding the Winkler bonus. - Set to a negative value to get the Jaro distance. The default value is 0.7. - - - - - Levenshtein edit distance - - - - - Returns a float between 0 and 1 based on how similar the specified strings are to one another. - Returning a value of 1 means the specified strings are identical and 0 means the - string are maximally different. - - The first string. - The second string. - a float between 0 and 1 based on how similar the specified strings are to one another. - - - - Lucene Dictionary - - - - - Creates an N-Gram distance measure using n-grams of the specified size. - - The size of the n-gram to be used to compute the string distance. - - - - Creates an N-Gram distance measure using n-grams of size 2. - - - - Dictionary represented by a file text. -

Format allowed: 1 word per line:
- word1
- word2
- word3
- -

- Nicolas Maisonneuve - -
- -

- Spell Checker class (Main class)
- (initially inspired by the David Spencer code). -

- -

Example Usage:

- -
-            SpellChecker spellchecker = new SpellChecker(spellIndexDirectory);
-            // To index a field of a user index:
-            spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field));
-            // To index a file containing words:
-            spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt")));
-            String[] suggestions = spellchecker.suggestSimilar("misspelt", 5);
-            
- -
- Nicolas Maisonneuve - - 1.0 - -
- - Field name for each word in the ngram index. - - - Boost value for start and end grams - - - the spell index - - - - this locks all modifications to the current searcher. - - - - - Use the given directory as a spell checker index. The directory - is created if it doesn't exist yet. - - the spell index directory - the measurement to use - - - - Use the given directory as a spell checker index with a - as the default . The - directory is created if it doesn't exist yet. - - the spell index directory - - - - Use a different index as the spell checker index or re-open - the existing index if spellIndex is the same value - as given in the constructor. - - spellIndexDir the spell directory to use - AlreadyClosedException if the Spellchecker is already closed - IOException if spellchecker can not open the directory - - - - Sets the implementation for this - instance. - - the implementation for this - instance. - - - - Returns the instance used by this - instance. - - - Returns the instance used by this - instance. - - - - Set the accuracy 0 < min < 1; default 0.5 - - - Suggest similar words - String the word you want a spell check done on - - int the number of suggest words - - IOException - String[] - - - - Suggest similar words (restricted or not to a field of a user index) - String the word you want a spell check done on - - int the number of suggest words - - the indexReader of the user index (can be null see field param) - - String the field of the user index: if field is not null, the suggested - words are restricted to the words present in this field. - - boolean return only the suggest words that are more frequent than the searched word - (only if restricted mode = (indexReader!=null and field!=null) - - IOException - String[] the sorted list of the suggest words with this 2 criteria: - first criteria: the edit distance, second criteria (only if restricted mode): the popularity - of the suggest words in the field of the user index - - - - Add a clause to a boolean query. - - - Add a clause to a boolean query. - - - Form all ngrams for a given word. - the word to parse - - the ngram length e.g. 3 - - an array of all ngrams in the word and note that duplicates are not removed - - - - - Removes all terms from the spell check index. - - - - Check whether the word exists in the index. - String - - IOException - true iff the word exists in the index - - - - Index a Dictionary - the dictionary to index - mergeFactor to use when indexing - the max amount or memory in MB to use - IOException - AlreadyClosedException if the Spellchecker is already closed - - - - Indexes the data from the given . - - dict the dictionary to index - - - - Creates a new read-only IndexSearcher (for testing purposes) - - dir the directory used to open the searcher - a new read-only IndexSearcher. (throws IOException f there is a low-level IO error) - - - - Returns true if and only if the is - closed, otherwise false. - - true if and only if the is - closed, otherwise false. - - - - SuggestWord Class, used in suggestSimilar method in SpellChecker class. - - - Nicolas Maisonneuve - - - - the score of the word - - - The freq of the word - - - the suggested word - - - Edit distance class - - - Optimized to run a bit faster than the static getDistance(). - In one benchmark times were 5.3sec using ctr vs 8.5sec w/ static method, thus 37% faster. - - - - - -
-
diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.dll b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.dll deleted file mode 100644 index dfe4c781496..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.pdb b/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.pdb deleted file mode 100644 index fb1002b80d2..00000000000 Binary files a/DNN Platform/Components/Lucene.Net.Contrib/bin/Lucene.Net.Contrib.SpellChecker.pdb and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.XML b/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.XML deleted file mode 100644 index 1041be304c0..00000000000 --- a/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.XML +++ /dev/null @@ -1,21777 +0,0 @@ - - - - Lucene.Net - - - - An Analyzer builds TokenStreams, which analyze text. It thus represents a - policy for extracting index terms from text. -

- Typical implementations first build a Tokenizer, which breaks the stream of - characters from the Reader into raw Tokens. One or more TokenFilters may - then be applied to the output of the Tokenizer. -

-
- - Creates a TokenStream which tokenizes all the text in the provided - Reader. Must be able to handle null field name for - backward compatibility. - - - - Creates a TokenStream that is allowed to be re-used - from the previous time that the same thread called - this method. Callers that do not need to use more - than one TokenStream at the same time from this - analyzer should use this method for better - performance. - - - - This is only present to preserve - back-compat of classes that subclass a core analyzer - and override tokenStream but not reusableTokenStream - - - Java uses Class<? extends Analyer> to constrain to - only Types that inherit from Analyzer. C# does not have a generic type class, - ie Type<t>. The method signature stays the same, and an exception may - still be thrown, if the method doesn't exist. - - - - Invoked before indexing a Fieldable instance if - terms have already been added to that field. This allows custom - analyzers to place an automatic position increment gap between - Fieldable instances using the same field name. The default value - position increment gap is 0. With a 0 position increment gap and - the typical default token position increment of 1, all terms in a field, - including across Fieldable instances, are in successive positions, allowing - exact PhraseQuery matches, for instance, across Fieldable instance boundaries. - - - Fieldable name being indexed. - - position increment gap, added to the next token emitted from - - - - Just like , except for - Token offsets instead. By default this returns 1 for - tokenized fields and, as if the fields were joined - with an extra space character, and 0 for un-tokenized - fields. This method is only called if the field - produced at least one token for indexing. - - - the field just indexed - - offset gap, added to the next token emitted from - - - - Frees persistent resources used by this Analyzer - - - Used by Analyzers that implement reusableTokenStream - to retrieve previously saved TokenStreams for re-use - by the same thread. - - - - This class converts alphabetic, numeric, and symbolic Unicode characters - which are not in the first 127 ASCII characters (the "Basic Latin" Unicode - block) into their ASCII equivalents, if one exists. - - Characters from the following Unicode blocks are converted; however, only - those characters with reasonable ASCII alternatives are converted: - - - C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf - Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf - Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf - Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf - Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf - Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf - IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf - Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf - Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf - General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf - Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf - Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf - Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf - Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf - Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf - Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf - - - See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode - - The set of character conversions supported by this class is a superset of - those supported by Lucene's which strips - accents from Latin1 characters. For example, 'À' will be replaced by - 'a'. - - - - A TokenFilter is a TokenStream whose input is another TokenStream. -

- This is an abstract class; subclasses must override . - -

- - -
- - A TokenStream enumerates the sequence of tokens, either from - s of a or from query text. -

- This is an abstract class. Concrete subclasses are: - - , a TokenStream whose input is a Reader; and - , a TokenStream whose input is another - TokenStream. - - A new TokenStream API has been introduced with Lucene 2.9. This API - has moved from being based to based. While - still exists in 2.9 as a convenience class, the preferred way - to store the information of a is to use s. -

- TokenStream now extends , which provides - access to all of the token s for the TokenStream. - Note that only one instance per is created and reused - for every token. This approach reduces object creation and allows local - caching of references to the s. See - for further details. -

- The workflow of the new TokenStream API is as follows: - - Instantiation of TokenStream/s which add/get - attributes to/from the . - The consumer calls . - The consumer retrieves attributes from the stream and stores local - references to all attributes it wants to access - The consumer calls until it returns false and - consumes the attributes after each call. - The consumer calls so that any end-of-stream operations - can be performed. - The consumer calls to release any resource when finished - using the TokenStream - - To make sure that filters and consumers know which attributes are available, - the attributes must be added during instantiation. Filters and consumers are - not required to check for availability of attributes in - . -

- You can find some example code for the new API in the analysis package level - Javadoc. -

- Sometimes it is desirable to capture a current state of a TokenStream - , e. g. for buffering purposes (see , - ). For this usecase - and - can be used. -

-
- - An AttributeSource contains a list of different s, - and methods to add and get them. There can only be a single instance - of an attribute in the same AttributeSource instance. This is ensured - by passing in the actual type of the Attribute (Class<Attribute>) to - the , which then checks if an instance of - that type is already present. If yes, it returns the instance, otherwise - it creates a new instance and returns it. - - - - An AttributeSource using the default attribute factory . - - - An AttributeSource that uses the same attributes as the supplied one. - - - An AttributeSource using the supplied for creating new instances. - - - Returns a new iterator that iterates the attribute classes - in the same order they were added in. - Signature for Java 1.5: public Iterator<Class<? extends Attribute>> getAttributeClassesIterator() - - Note that this return value is different from Java in that it enumerates over the values - and not the keys - - - - Returns a new iterator that iterates all unique Attribute implementations. - This iterator may contain less entries that , - if one instance implements more than one Attribute interface. - Signature for Java 1.5: public Iterator<AttributeImpl> getAttributeImplsIterator() - - - - a cache that stores all interfaces for known implementation classes for performance (slow reflection) - - - - Expert: Adds a custom AttributeImpl instance with one or more Attribute interfaces. -

Please note: It is not guaranteed, that att is added to - the AttributeSource, because the provided attributes may already exist. - You should always retrieve the wanted attributes using after adding - with this method and cast to your class. - The recommended way to use custom implementations is using an -

-
-
- - The caller must pass in a Class<? extends Attribute> value. - This method first checks if an instance of that class is - already in this AttributeSource and returns it. Otherwise a - new instance is created, added to this AttributeSource and returned. - - - - The caller must pass in a Class<? extends Attribute> value. - Returns true, iff this AttributeSource contains the passed-in Attribute. - \ - - - - The caller must pass in a Class<? extends Attribute> value. - Returns the instance of the passed in Attribute contained in this AttributeSource - - - IllegalArgumentException if this AttributeSource does not contain the Attribute. - It is recommended to always use even in consumers - of TokenStreams, because you cannot know if a specific TokenStream really uses - a specific Attribute. will automatically make the attribute - available. If you want to only use the attribute, if it is available (to optimize - consuming), use . - - - - Resets all Attributes in this AttributeSource by calling - on each Attribute implementation. - - - - Captures the state of all Attributes. The return value can be passed to - to restore the state of this or another AttributeSource. - - - - Restores this state by copying the values of all attribute implementations - that this state contains into the attributes implementations of the targetStream. - The targetStream must contain a corresponding instance for each argument - contained in this state (e.g. it is not possible to restore the state of - an AttributeSource containing a TermAttribute into a AttributeSource using - a Token instance as implementation). - - Note that this method does not affect attributes of the targetStream - that are not contained in this state. In other words, if for example - the targetStream contains an OffsetAttribute, but this state doesn't, then - the value of the OffsetAttribute remains unchanged. It might be desirable to - reset its value to the default, in which case the caller should first - call on the targetStream. - - - - Performs a clone of all instances returned in a new - AttributeSource instance. This method can be used to e.g. create another TokenStream - with exactly the same attributes (using ) - - - - Returns the used AttributeFactory. - - - Returns true, iff this AttributeSource has any attributes - - - An AttributeFactory creates instances of s. - - - returns an for the supplied interface class. - - - This is the default factory that creates s using the - class name of the supplied interface class by appending Impl to it. - - - - This class holds the state of an AttributeSource. - - - - - - - A TokenStream using the default attribute factory. - - - A TokenStream that uses the same attributes as the supplied one. - - - A TokenStream using the supplied AttributeFactory for creating new instances. - - - Consumers (i.e., ) use this method to advance the stream to - the next token. Implementing classes must implement this method and update - the appropriate s with the attributes of the next - token. - - The producer must make no assumptions about the attributes after the - method has been returned: the caller may arbitrarily change it. If the - producer needs to preserve the state for subsequent calls, it can use - to create a copy of the current attribute state. - - This method is called for every token of a document, so an efficient - implementation is crucial for good performance. To avoid calls to - and , - references to all s that this stream uses should be - retrieved during instantiation. - - To ensure that filters and consumers know which attributes are available, - the attributes must be added during instantiation. Filters and consumers - are not required to check for availability of attributes in - . - - - false for end of stream; true otherwise - - - This method is called by the consumer after the last token has been - consumed, after returned false - (using the new TokenStream API). Streams implementing the old API - should upgrade to use this feature. -

- This method can be used to perform any end-of-stream operations, such as - setting the final offset of a stream. The final offset of a stream might - differ from the offset of the last token eg in case one or more whitespaces - followed after the last token, but a was used. - -

- IOException -
- - Resets this stream to the beginning. This is an optional operation, so - subclasses may or may not implement this method. is not needed for - the standard indexing process. However, if the tokens of a - TokenStream are intended to be consumed more than once, it is - necessary to implement . Note that if your TokenStream - caches tokens and feeds them back again after a reset, it is imperative - that you clone the tokens when you store them away (on the first pass) as - well as when you return them (on future passes after ). - - - - Releases resources associated with this stream. - - - The source of tokens for this filter. - - - Construct a token stream filtering the given input. - - - Performs end-of-stream operations, if any, and calls then end() on the - input TokenStream.

- NOTE: Be sure to call super.end() first when overriding this method. -

-
- - Reset the filter as well as the input TokenStream. - - - Converts characters above ASCII to their ASCII equivalents. For example, - accents are removed from accented characters. - - The string to fold - - The number of characters in the input string - - - - - * Base utility class for implementing a . - * You subclass this, and then record mappings by calling - * , and then invoke the correct - * method to correct an offset. - - - - Subclasses of CharFilter can be chained to filter CharStream. - They can be used as with additional offset - correction. s will automatically use - if a CharFilter/CharStream subclass is used. - - - $Id$ - - - - - CharStream adds - functionality over . All Tokenizers accept a - CharStream instead of as input, which enables - arbitrary character based filtering before tokenization. - The method fixed offsets to account for - removal or insertion of characters, so that the offsets - reported in the tokens match the character offsets of the - original Reader. - - - - Called by CharFilter(s) and Tokenizer to correct token offset. - - - offset as seen in the output - - corrected offset based on the input - - - - Subclass may want to override to correct the current offset. - current offset - corrected offset - - - Chains the corrected offset through the input - CharFilter. - - - - This class can be used if the token attributes of a TokenStream - are intended to be consumed more than once. It caches - all token attribute states locally in a List. - -

CachingTokenFilter implements the optional method - , which repositions the - stream to the first Token. -

-
- - A simple class that stores Strings as char[]'s in a - hash table. Note that this is not a general purpose - class. For example, it cannot remove items from the - set, nor does it resize its hash table to be smaller, - etc. It is designed to be quick to test if a char[] - is in the set without the necessity of converting it - to a String first. -

- Please note: This class implements but - does not behave like it should in all cases. The generic type is - , because you can add any object to it, - that has a string representation. The add methods will use - and store the result using a - buffer. The same behaviour have the methods. - The method returns an IEnumerable. - For type safety also {@link #stringIterator()} is provided. -

-
- - Create set with enough capacity to hold startSize - terms - - - - Create set from a Collection of char[] or String - - - Create set from entries - - - true if the len chars of text starting at off - are in the set - - - - Returns true if the String is in the set - - - Add this char[] directly to the set. - If ignoreCase is true for this Set, the text array will be directly modified. - The user should never modify this text array after calling this method. - - - - - Returns an unmodifiable . This allows to provide - unmodifiable views of internal sets for "read-only" use - - A Set for which the unmodifiable set it returns. - A new unmodifiable - ArgumentNullException of the given set is null - - - - returns a copy of the given set as a . If the given set - is a the ignoreCase property will be preserved. - - A set to copy - a copy of the given set as a . If the given set - is a the ignoreCase property will be preserved. - - - Adds all of the elements in the specified collection to this collection - - - Wrapper that calls UnionWith - - - - The IEnumerator<String> for this set. Strings are constructed on the fly, - so use nextCharArray for more efficient access - - - - do not modify the returned char[] - - - CharReader is a Reader wrapper. It reads chars from - Reader and outputs , defining an - identify function method that - simply returns the provided offset. - - - - An abstract base class for simple, character-oriented tokenizers. - - - A Tokenizer is a TokenStream whose input is a Reader. -

- This is an abstract class; subclasses must override -

- NOTE: Subclasses overriding must call - before setting attributes. -

-
- - The text source for this Tokenizer. - - - Construct a tokenizer with null input. - - - Construct a token stream processing the given input. - - - Construct a tokenizer with null input using the given AttributeFactory. - - - Construct a token stream processing the given input using the given AttributeFactory. - - - Construct a token stream processing the given input using the given AttributeSource. - - - Construct a token stream processing the given input using the given AttributeSource. - - - Return the corrected offset. If is a subclass - this method calls , else returns currentOff. - - offset as seen in the output - - corrected offset based on the input - - - - - - Expert: Reset the tokenizer to a new reader. Typically, an - analyzer (in its reusableTokenStream method) will use - this to re-use a previously created tokenizer. - - - - Returns true iff a character should be included in a token. This - tokenizer generates as tokens adjacent sequences of characters which - satisfy this predicate. Characters for which this is false are used to - define token boundaries and are not included in tokens. - - - - Called on each token character to normalize it before it is added to the - token. The default implementation does nothing. Subclasses may use this - to, e.g., lowercase tokens. - - - - A filter that replaces accented characters in the ISO Latin 1 character set - (ISO-8859-1) by their unaccented equivalent. The case will not be altered. -

- For instance, 'À' will be replaced by 'a'. -

- -

- If you build a new index, use - which covers a superset of Latin 1. - This class is included for use with existing indexes and will be removed - in a future release (possible Lucene 4.0) - -
- - To replace accented characters in a String by unaccented equivalents. - - - "Tokenizes" the entire stream as a single token. This is useful - for data like zip codes, ids, and some product names. - - - - Emits the entire input as a single token. - - - Removes words that are too long or too short from the stream. - - - Build a filter that removes words that are too long or too - short from the text. - - - - Returns the next input Token whose term() is the right len - - - A LetterTokenizer is a tokenizer that divides text at non-letters. That's - to say, it defines tokens as maximal strings of adjacent letters, as defined - by java.lang.Character.isLetter() predicate. - Note: this does a decent job for most European languages, but does a terrible - job for some Asian languages, where words are not separated by spaces. - - - - Construct a new LetterTokenizer. - - - Construct a new LetterTokenizer using a given . - - - Construct a new LetterTokenizer using a given . - - - Collects only characters which satisfy - . - - - - Normalizes token text to lower case. - - - LowerCaseTokenizer performs the function of LetterTokenizer - and LowerCaseFilter together. It divides text at non-letters and converts - them to lower case. While it is functionally equivalent to the combination - of LetterTokenizer and LowerCaseFilter, there is a performance advantage - to doing the two tasks at once, hence this (redundant) implementation. -

- Note: this does a decent job for most European languages, but does a terrible - job for some Asian languages, where words are not separated by spaces. -

-
- - Construct a new LowerCaseTokenizer. - - - Construct a new LowerCaseTokenizer using a given . - - - Construct a new LowerCaseTokenizer using a given . - - - Converts char to lower case - . - - - - Simplistic that applies the mappings - contained in a to the character - stream, and correcting the resulting changes to the - offsets. - - - - Default constructor that takes a . - - - Easy-use constructor that takes a . - - - Holds a map of String input to String output, to be used - with . - - - - Records a replacement to be applied to the inputs - stream. Whenever singleMatch occurs in - the input, it will be replaced with - replacement. - - - input String to be replaced - - output String - - - - Expert: This class provides a - for indexing numeric values that can be used by - or . - -

Note that for simple usage, is - recommended. disables norms and - term freqs, as they are not usually needed during - searching. If you need to change these settings, you - should use this class. - -

See for capabilities of fields - indexed numerically.

- -

Here's an example usage, for an int field: - - - Field field = new Field(name, new NumericTokenStream(precisionStep).setIntValue(value)); - field.setOmitNorms(true); - field.setOmitTermFreqAndPositions(true); - document.add(field); - - -

For optimal performance, re-use the TokenStream and Field instance - for more than one document: - - - NumericTokenStream stream = new NumericTokenStream(precisionStep); - Field field = new Field(name, stream); - field.setOmitNorms(true); - field.setOmitTermFreqAndPositions(true); - Document document = new Document(); - document.add(field); - - for(all documents) { - stream.setIntValue(value) - writer.addDocument(document); - } - - -

This stream is not intended to be used in analyzers; - it's more for iterating the different precisions during - indexing a specific numeric value.

- -

NOTE: as token streams are only consumed once - the document is added to the index, if you index more - than one numeric field, use a separate NumericTokenStream - instance for each.

- -

See for more details on the - precisionStep - parameter as well as how numeric fields work under the hood.

- -

NOTE: This API is experimental and - might change in incompatible ways in the next release. - Since 2.9 -

-
- - The full precision token gets this token type assigned. - - - The lower precision tokens gets this token type assigned. - - - Creates a token stream for numeric values using the default precisionStep - (4). The stream is not yet initialized, - before using set a value using the various set???Value() methods. - - - - Creates a token stream for numeric values with the specified - precisionStep. The stream is not yet initialized, - before using set a value using the various set???Value() methods. - - - - Expert: Creates a token stream for numeric values with the specified - precisionStep using the given . - The stream is not yet initialized, - before using set a value using the various set???Value() methods. - - - - Expert: Creates a token stream for numeric values with the specified - precisionStep using the given - . - The stream is not yet initialized, - before using set a value using the various set???Value() methods. - - - - Initializes the token stream with the supplied long value. - the value, for which this TokenStream should enumerate tokens. - - this instance, because of this you can use it the following way: - new Field(name, new NumericTokenStream(precisionStep).SetLongValue(value)) - - - - Initializes the token stream with the supplied int value. - the value, for which this TokenStream should enumerate tokens. - - this instance, because of this you can use it the following way: - new Field(name, new NumericTokenStream(precisionStep).SetIntValue(value)) - - - - Initializes the token stream with the supplied double value. - the value, for which this TokenStream should enumerate tokens. - - this instance, because of this you can use it the following way: - new Field(name, new NumericTokenStream(precisionStep).SetDoubleValue(value)) - - - - Initializes the token stream with the supplied float value. - the value, for which this TokenStream should enumerate tokens. - - this instance, because of this you can use it the following way: - new Field(name, new NumericTokenStream(precisionStep).SetFloatValue(value)) - - - - This analyzer is used to facilitate scenarios where different - fields require different analysis techniques. Use - to add a non-default analyzer on a field name basis. - -

Example usage: - - - PerFieldAnalyzerWrapper aWrapper = - new PerFieldAnalyzerWrapper(new StandardAnalyzer()); - aWrapper.addAnalyzer("firstname", new KeywordAnalyzer()); - aWrapper.addAnalyzer("lastname", new KeywordAnalyzer()); - - -

In this example, StandardAnalyzer will be used for all fields except "firstname" - and "lastname", for which KeywordAnalyzer will be used. - -

A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing - and query parsing. -

-
- - Constructs with default analyzer. - - - Any fields not specifically - defined to use a different analyzer will use the one provided here. - - - - Constructs with default analyzer and a map of analyzers to use for - specific fields. - - - Any fields not specifically - defined to use a different analyzer will use the one provided here. - - a Map (String field name to the Analyzer) to be - used for those fields - - - - Defines an analyzer to use for the specified field. - - - field name requiring a non-default analyzer - - non-default analyzer to use for field - - - - Return the positionIncrementGap from the analyzer assigned to fieldName - - - Return the offsetGap from the analyzer assigned to field - - - Transforms the token stream as per the Porter stemming algorithm. - Note: the input to the stemming filter must already be in lower case, - so you will need to use LowerCaseFilter or LowerCaseTokenizer farther - down the Tokenizer chain in order for this to work properly! -

- To use this filter with other analyzers, you'll want to write an - Analyzer class that sets up the TokenStream chain as you want it. - To use this with LowerCaseTokenizer, for example, you'd write an - analyzer like this: -

- - class MyAnalyzer extends Analyzer { - public final TokenStream tokenStream(String fieldName, Reader reader) { - return new PorterStemFilter(new LowerCaseTokenizer(reader)); - } - } - -

-
- - - Stemmer, implementing the Porter Stemming Algorithm - - The Stemmer class transforms a word into its root form. The input - word can be provided a character at time (by calling add()), or at once - by calling one of the various stem(something) methods. - - - - reset() resets the stemmer so it can stem another word. If you invoke - the stemmer by calling add(char) and then stem(), you must call reset() - before starting another word. - - - - Add a character to the word being stemmed. When you are finished - adding characters, you can call stem(void) to process the word. - - - - After a word has been stemmed, it can be retrieved by toString(), - or a reference to the internal buffer can be retrieved by getResultBuffer - and getResultLength (which is generally more efficient.) - - - - Stem a word provided as a String. Returns the result as a String. - - - Stem a word contained in a char[]. Returns true if the stemming process - resulted in a word different from the input. You can retrieve the - result with getResultLength()/getResultBuffer() or toString(). - - - - Stem a word contained in a portion of a char[] array. Returns - true if the stemming process resulted in a word different from - the input. You can retrieve the result with - getResultLength()/getResultBuffer() or toString(). - - - - Stem a word contained in a leading portion of a char[] array. - Returns true if the stemming process resulted in a word different - from the input. You can retrieve the result with - getResultLength()/getResultBuffer() or toString(). - - - - Stem the word placed into the Stemmer buffer through calls to add(). - Returns true if the stemming process resulted in a word different - from the input. You can retrieve the result with - getResultLength()/getResultBuffer() or toString(). - - - - Test program for demonstrating the Stemmer. It reads a file and - stems each word, writing the result to standard out. - Usage: Stemmer file-name - - - - Returns the length of the word resulting from the stemming process. - - - Returns a reference to a character buffer containing the results of - the stemming process. You also need to consult getResultLength() - to determine the length of the result. - - - - An that filters - with - - - - Filters with , - and , using a list of English stop - words. - - -

- You must specify the required compatibility when creating - StandardAnalyzer: - - As of 2.9, StopFilter preserves position increments - As of 2.4, Tokens incorrectly identified as acronyms are corrected (see - LUCENE-1608) - -

-
- - Default maximum allowed token length - - - Specifies whether deprecated acronyms should be replaced with HOST type. - See https://issues.apache.org/jira/browse/LUCENE-1068 - - - - Specifies whether deprecated acronyms should be replaced with HOST type. - See https://issues.apache.org/jira/browse/LUCENE-1068 - - - - An unmodifiable set containing some common English words that are usually not - useful for searching. - - - - Builds an analyzer with the default stop words (). - - Lucene version to match see above - - - Builds an analyzer with the given stop words. - Lucene version to match See above /> - - - stop words - - - - Builds an analyzer with the stop words from the given file. - - - Lucene version to match See above /> - - - File to read stop words from - - - - Builds an analyzer with the stop words from the given reader. - - - Lucene version to match See above /> - - - Reader to read stop words from - - - - Constructs a filtered by a - , a and a . - - - - Set maximum allowed token length. If a token is seen - that exceeds this length then it is discarded. This - setting only takes effect the next time tokenStream or - reusableTokenStream is called. - - - - Normalizes tokens extracted with . - - - Construct filtering in. - - - Returns the next token in the stream, or null at EOS. -

Removes 's from the end of words. -

Removes dots from acronyms. -

-
- - A grammar-based tokenizer constructed with JFlex - -

This should be a good tokenizer for most European-language documents: - - - Splits words at punctuation characters, removing punctuation. However, a - dot that's not followed by whitespace is considered part of a token. - Splits words at hyphens, unless there's a number in the token, in which case - the whole token is interpreted as a product number and is not split. - Recognizes email addresses and internet hostnames as one token. - - -

Many applications have specific tokenizer needs. If this tokenizer does - not suit your application, please consider copying this source code - directory to your project and maintaining your own grammar-based tokenizer. - - -

- You must specify the required compatibility when creating - StandardAnalyzer: - - As of 2.4, Tokens incorrectly identified as acronyms are corrected (see - LUCENE-1608 - -

-
- - this solves a bug where HOSTs that end with '.' are identified - as ACRONYMs. - - - - A private instance of the JFlex-constructed scanner - - - String token types that correspond to token type int constants - - - Creates a new instance of the - . Attaches - the input to the newly created JFlex scanner. - - - - The input reader - - See http://issues.apache.org/jira/browse/LUCENE-1068 - - - - Creates a new StandardTokenizer with a given . - - - Creates a new StandardTokenizer with a given - - - - - - (non-Javadoc) - - - - - - Remove in 3.X and make true the only valid value - See https://issues.apache.org/jira/browse/LUCENE-1068 - - Set to true to replace mischaracterized acronyms as HOST. - - - - Set the max allowed token length. Any token longer - than this is skipped. - - - - This class is a scanner generated by - JFlex 1.4.1 - on 9/4/08 6:49 PM from the specification file - /tango/mike/src/lucene.standarddigit/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex - - - - This character denotes the end of file - - - initial size of the lookahead buffer - - - lexical states - - - Translates characters to character classes - - - Translates characters to character classes - - - Translates DFA states to action switch labels. - - - Translates a state to a row index in the transition table - - - The transition table of the DFA - - - ZZ_ATTRIBUTE[aState] contains the attributes of state aState - - - the input device - - - the current state of the DFA - - - the current lexical state - - - this buffer contains the current text to be matched and is - the source of the yytext() string - - - - the textposition at the last accepting state - - - the textposition at the last state to be included in yytext - - - the current text position in the buffer - - - startRead marks the beginning of the yytext() string in the buffer - - - endRead marks the last character in the buffer, that has been read - from input - - - - number of newlines encountered up to the start of the matched text - - - the number of characters up to the start of the matched text - - - the number of characters from the last newline up to the start of the - matched text - - - - zzAtBOL == true <=> the scanner is currently at the beginning of a line - - - zzAtEOF == true <=> the scanner is at the EOF - - - this solves a bug where HOSTs that end with '.' are identified - as ACRONYMs. - - - - Fills Lucene token with the current token text. - - - Fills TermAttribute with the current token text. - - - Creates a new scanner - There is also a java.io.InputStream version of this constructor. - - - the java.io.Reader to read input from. - - - - Creates a new scanner. - There is also java.io.Reader version of this constructor. - - - the java.io.Inputstream to read input from. - - - - Unpacks the compressed character translation table. - - - the packed character translation table - - the unpacked character translation table - - - - Refills the input buffer. - - false, iff there was new input. - - - if any I/O-Error occurs - - - - Closes the input stream. - - - Resets the scanner to read from a new input stream. - Does not close the old reader. - - All internal variables are reset, the old input stream - cannot be reused (internal buffer is discarded and lost). - Lexical state is set to ZZ_INITIAL. - - - the new input stream - - - - Returns the current lexical state. - - - Enters a new lexical state - - - the new lexical state - - - - Returns the text matched by the current regular expression. - - - Returns the character at position pos from the - matched text. - - It is equivalent to yytext().charAt(pos), but faster - - - the position of the character to fetch. - A value from 0 to yylength()-1. - - - the character at position pos - - - - Returns the length of the matched text region. - - - Reports an error that occured while scanning. - - In a wellformed scanner (no or only correct usage of - yypushback(int) and a match-all fallback rule) this method - will only be called with things that "Can't Possibly Happen". - If this method is called, something is seriously wrong - (e.g. a JFlex bug producing a faulty scanner etc.). - - Usual syntax/scanner level error handling should be done - in error fallback rules. - - - the code of the errormessage to display - - - - Pushes the specified amount of characters back into the input stream. - - They will be read again by then next call of the scanning method - - - the number of characters to be read again. - This number must not be greater than yylength()! - - - - Resumes scanning until the next regular expression is matched, - the end of input is encountered or an I/O-Error occurs. - - - the next token - - if any I/O-Error occurs - - - - Filters with and - . - - -

- You must specify the required compatibility when creating - StopAnalyzer: - - As of 2.9, position increments are preserved - -

-
- - An unmodifiable set containing some common English words that are not usually useful - for searching. - - - - Builds an analyzer which removes words in ENGLISH_STOP_WORDS. - - - Builds an analyzer with the stop words from the given set. - - - Builds an analyzer with the stop words from the given file. - - - - - See above - - File to load stop words from - - - - Builds an analyzer with the stop words from the given reader. - - - See above - - Reader to load stop words from - - - - Filters LowerCaseTokenizer with StopFilter. - - - Filters LowerCaseTokenizer with StopFilter. - - - Removes stop words from a token stream. - - - Construct a token stream filtering the given input. - If stopWords is an instance of (true if - makeStopSet() was used to construct the set) it will be directly used - and ignoreCase will be ignored since CharArraySet - directly controls case sensitivity. -

- If stopWords is not an instance of , - a new CharArraySet will be constructed and ignoreCase will be - used to specify the case sensitivity of that set. -

- true if token positions should record the removed stop words - Input TokenStream - A Set of strings or strings or char[] or any other ToString()-able set representing the stopwords - if true, all words are lower cased first -
- - Constructs a filter which removes words from the input - TokenStream that are named in the Set. - - true if token positions should record the removed stop words - Input stream - A Set of strings or char[] or any other ToString()-able set representing the stopwords - - - - Builds a Set from an array of stop words, - appropriate for passing into the StopFilter constructor. - This permits this stopWords construction to be cached once when - an Analyzer is constructed. - - - passing false to ignoreCase - - - Builds a Set from an array of stop words, - appropriate for passing into the StopFilter constructor. - This permits this stopWords construction to be cached once when - an Analyzer is constructed. - - A list of strings or char[] or any other ToString()-able list representing the stop words - passing false to ignoreCase - - - - An array of stopwords - If true, all words are lower cased first. - a Set containing the words - - - - A List of Strings or char[] or any other toString()-able list representing the stopwords - if true, all words are lower cased first - A Set ()containing the words - - - Returns the next input Token whose term() is not a stop word. - - - Returns version-dependent default for enablePositionIncrements. Analyzers - that embed StopFilter use this method when creating the StopFilter. Prior - to 2.9, this returns false. On 2.9 or later, it returns true. - - - - If true, this StopFilter will preserve - positions of the incoming tokens (ie, accumulate and - set position increments of the removed stop tokens). - Generally, true is best as it does not - lose information (positions of the original tokens) - during indexing. - -

When set, when a token is stopped - (omitted), the position increment of the following - token is incremented. - -

NOTE: be sure to also - set if - you use QueryParser to create queries. -

-
- - This TokenFilter provides the ability to set aside attribute states - that have already been analyzed. This is useful in situations where multiple fields share - many common analysis steps and then go their separate ways. -

- It is also useful for doing things like entity extraction or proper noun analysis as - part of the analysis workflow and saving off those tokens for use in another field. - - - TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(new WhitespaceTokenizer(reader1)); - TeeSinkTokenFilter.SinkTokenStream sink1 = source1.newSinkTokenStream(); - TeeSinkTokenFilter.SinkTokenStream sink2 = source1.newSinkTokenStream(); - TeeSinkTokenFilter source2 = new TeeSinkTokenFilter(new WhitespaceTokenizer(reader2)); - source2.addSinkTokenStream(sink1); - source2.addSinkTokenStream(sink2); - TokenStream final1 = new LowerCaseFilter(source1); - TokenStream final2 = source2; - TokenStream final3 = new EntityDetect(sink1); - TokenStream final4 = new URLDetect(sink2); - d.add(new Field("f1", final1)); - d.add(new Field("f2", final2)); - d.add(new Field("f3", final3)); - d.add(new Field("f4", final4)); - - In this example, sink1 and sink2 will both get tokens from both - reader1 and reader2 after whitespace tokenizer - and now we can further wrap any of these in extra analysis, and more "sources" can be inserted if desired. - It is important, that tees are consumed before sinks (in the above example, the field names must be - less the sink's field names). If you are not sure, which stream is consumed first, you can simply - add another sink and then pass all tokens to the sinks at once using . - This TokenFilter is exhausted after this. In the above example, change - the example above to: - - ... - TokenStream final1 = new LowerCaseFilter(source1.newSinkTokenStream()); - TokenStream final2 = source2.newSinkTokenStream(); - sink1.consumeAllTokens(); - sink2.consumeAllTokens(); - ... - - In this case, the fields can be added in any order, because the sources are not used anymore and all sinks are ready. -

Note, the EntityDetect and URLDetect TokenStreams are for the example and do not currently exist in Lucene. -

-
- - Instantiates a new TeeSinkTokenFilter. - - - Returns a new that receives all tokens consumed by this stream. - - - Returns a new that receives all tokens consumed by this stream - that pass the supplied filter. - - - - - - Adds a created by another TeeSinkTokenFilter - to this one. The supplied stream will also receive all consumed tokens. - This method can be used to pass tokens from two different tees to one sink. - - - - TeeSinkTokenFilter passes all tokens to the added sinks - when itself is consumed. To be sure, that all tokens from the input - stream are passed to the sinks, you can call this methods. - This instance is exhausted after this, but all sinks are instant available. - - - - A filter that decides which states to store in the sink. - - - Returns true, iff the current state of the passed-in shall be stored - in the sink. - - - - Called by . This method does nothing by default - and can optionally be overridden. - - - - A Token is an occurrence of a term from the text of a field. It consists of - a term's text, the start and end offset of the term in the text of the field, - and a type string. -

- The start and end offsets permit applications to re-associate a token with - its source text, e.g., to display highlighted query terms in a document - browser, or to show matching text fragments in a KWIC display, etc. -

- The type is a string, assigned by a lexical analyzer - (a.k.a. tokenizer), naming the lexical or syntactic class that the token - belongs to. For example an end of sentence marker token might be implemented - with type "eos". The default token type is "word". -

- A Token can optionally have metadata (a.k.a. Payload) in the form of a variable - length byte array. Use and - to retrieve the payloads from the index. -

-

-
-

NOTE: As of 2.9, Token implements all interfaces - that are part of core Lucene and can be found in the namespace. - Even though it is not necessary to use Token anymore, with the new TokenStream API it can - be used as convenience class that implements all s, which is especially useful - to easily switch from the old to the new TokenStream API. -

-

Tokenizers and TokenFilters should try to re-use a Token instance when - possible for best performance, by implementing the - API. - Failing that, to create a new Token you should first use - one of the constructors that starts with null text. To load - the token from a char[] use . - To load from a String use or . - Alternatively you can get the Token's termBuffer by calling either , - if you know that your text is shorter than the capacity of the termBuffer - or , if there is any possibility - that you may need to grow the buffer. Fill in the characters of your term into this - buffer, with if loading from a string, - or with , and finally call to - set the length of the term text. See LUCENE-969 - for details.

-

Typical Token reuse patterns: - - Copying text from a string (type is reset to if not - specified):
- - return reusableToken.reinit(string, startOffset, endOffset[, type]); - -
- Copying some text from a string (type is reset to - if not specified):
- - return reusableToken.reinit(string, 0, string.length(), startOffset, endOffset[, type]); - -
- Copying text from char[] buffer (type is reset to - if not specified):
- - return reusableToken.reinit(buffer, 0, buffer.length, startOffset, endOffset[, type]); - -
- Copying some text from a char[] buffer (type is reset to - if not specified):
- - return reusableToken.reinit(buffer, start, end - start, startOffset, endOffset[, type]); - -
- Copying from one one Token to another (type is reset to - if not specified):
- - return reusableToken.reinit(source.termBuffer(), 0, source.termLength(), source.startOffset(), source.endOffset()[, source.type()]); - -
-
- A few things to note: - - clear() initializes all of the fields to default values. This was changed in contrast to Lucene 2.4, but should affect no one. - Because TokenStreams can be chained, one cannot assume that the Token's current type is correct. - The startOffset and endOffset represent the start and offset in the - source text, so be careful in adjusting them. - When caching a reusable token, clone it. When injecting a cached token into a stream that can be reset, clone it again. - -

-

- - -
- - Base class for Attributes that can be added to a - . -

- Attributes are used to add data in a dynamic, yet type-safe way to a source - of usually streamed objects, e. g. a . -

-
- - Base interface for attributes. - - - Clears the values in this AttributeImpl and resets it to its - default value. If this implementation implements more than one Attribute interface - it clears all. - - - - The default implementation of this method accesses all declared - fields of this object and prints the values in the following syntax: - - - public String toString() { - return "start=" + startOffset + ",end=" + endOffset; - } - - - This method may be overridden by subclasses. - - - - Subclasses must implement this method and should compute - a hashCode similar to this: - - public int hashCode() { - int code = startOffset; - code = code * 31 + endOffset; - return code; - } - - - see also - - - - All values used for computation of - should be checked here for equality. - - see also - - - - Copies the values from this Attribute into the passed-in - target attribute. The target implementation must support all the - Attributes this implementation supports. - - - - Shallow clone. Subclasses must override this if they - need to clone any members deeply, - - - - The term text of a Token. - - - Copies the contents of buffer, starting at offset for - length characters, into the termBuffer array. - - the buffer to copy - - the index in the buffer of the first character to copy - - the number of characters to copy - - - - Copies the contents of buffer into the termBuffer array. - the buffer to copy - - - - Copies the contents of buffer, starting at offset and continuing - for length characters, into the termBuffer array. - - the buffer to copy - - the index in the buffer of the first character to copy - - the number of characters to copy - - - - Returns the internal termBuffer character array which - you can then directly alter. If the array is too - small for your token, use - to increase it. After - altering the buffer be sure to call - to record the number of valid - characters that were placed into the termBuffer. - - - - Grows the termBuffer to at least size newSize, preserving the - existing content. Note: If the next operation is to change - the contents of the term buffer use - , - , or - - to optimally combine the resize with the setting of the termBuffer. - - minimum size of the new termBuffer - - newly created termBuffer with length >= newSize - - - - Return number of valid characters (length of the term) - in the termBuffer array. - - - - Set number of valid characters (length of the term) in - the termBuffer array. Use this to truncate the termBuffer - or to synchronize with external manipulation of the termBuffer. - Note: to grow the size of the array, - use first. - - the truncated length - - - - Returns the Token's term text. - - This method has a performance penalty - because the text is stored internally in a char[]. If - possible, use and - directly instead. If you really need a - String, use this method, which is nothing more than - a convenience call to new String(token.termBuffer(), 0, token.termLength()) - - - - A Token's lexical type. The Default value is "word". - - - Gets or sets this Token's lexical type. Defaults to "word". - - - The positionIncrement determines the position of this token - relative to the previous Token in a TokenStream, used in phrase - searching. - -

The default value is one. - -

Some common uses for this are: - - Set it to zero to put multiple terms in the same position. This is - useful if, e.g., a word has multiple stems. Searches for phrases - including either stem will match. In this case, all but the first stem's - increment should be set to zero: the increment of the first instance - should be one. Repeating a token with an increment of zero can also be - used to boost the scores of matches on that token. - - Set it to values greater than one to inhibit exact phrase matches. - If, for example, one does not want phrases to match across removed stop - words, then one could build a stop word filter that removes stop words and - also sets the increment to the number of stop words removed before each - non-stop word. Then exact phrase queries will only match when the terms - occur with no intervening stop words. - - - -

- - -
- - Gets or sets the position increment. The default value is one. - - - the distance from the prior term - - - This attribute can be used to pass different flags down the chain, - eg from one TokenFilter to another one. - - - - EXPERIMENTAL: While we think this is here to stay, we may want to change it to be a long. -

- - Get the bitset for any bits that have been set. This is completely distinct from , although they do share similar purposes. - The flags can be used to encode information about the token for use by other s. - - -

- The bits -
- - The start and end character offset of a Token. - - - Set the starting and ending offset. - See StartOffset() and EndOffset() - - - - Returns this Token's starting offset, the position of the first character - corresponding to this token in the source text. - Note that the difference between endOffset() and startOffset() may not be - equal to termText.length(), as the term text may have been altered by a - stemmer or some other filter. - - - - Returns this Token's ending offset, one greater than the position of the - last character corresponding to this token in the source text. The length - of the token in the source text is (endOffset - startOffset). - - - - The payload of a Token. See also . - - - Returns this Token's payload. - - - Constructs a Token will null text. - - - Constructs a Token with null text and start & end - offsets. - - start offset in the source text - end offset in the source text - - - Constructs a Token with null text and start & end - offsets plus the Token type. - - start offset in the source text - end offset in the source text - the lexical type of this Token - - - Constructs a Token with null text and start & end - offsets plus flags. NOTE: flags is EXPERIMENTAL. - - start offset in the source text - end offset in the source text - The bits to set for this token - - - Constructs a Token with the given term text, and start - & end offsets. The type defaults to "word." - NOTE: for better indexing speed you should - instead use the char[] termBuffer methods to set the - term text. - - term text - start offset - end offset - - - Constructs a Token with the given text, start and end - offsets, & type. NOTE: for better indexing - speed you should instead use the char[] termBuffer - methods to set the term text. - - term text - start offset - end offset - token type - - - Constructs a Token with the given text, start and end - offsets, & type. NOTE: for better indexing - speed you should instead use the char[] termBuffer - methods to set the term text. - - - - - token type bits - - - Constructs a Token with the given term buffer (offset - & length), start and end - offsets - - - - - - - - - Copies the contents of buffer, starting at offset for - length characters, into the termBuffer array. - - the buffer to copy - the index in the buffer of the first character to copy - the number of characters to copy - - - Copies the contents of buffer into the termBuffer array. - the buffer to copy - - - - Copies the contents of buffer, starting at offset and continuing - for length characters, into the termBuffer array. - - the buffer to copy - - the index in the buffer of the first character to copy - - the number of characters to copy - - - - Returns the internal termBuffer character array which - you can then directly alter. If the array is too - small for your token, use - to increase it. After - altering the buffer be sure to call - to record the number of valid - characters that were placed into the termBuffer. - - - - Grows the termBuffer to at least size newSize, preserving the - existing content. Note: If the next operation is to change - the contents of the term buffer use - , - , or - - to optimally combine the resize with the setting of the termBuffer. - - minimum size of the new termBuffer - - newly created termBuffer with length >= newSize - - - - Allocates a buffer char[] of at least newSize, without preserving the existing content. - its always used in places that set the content - - minimum size of the buffer - - - - Return number of valid characters (length of the term) - in the termBuffer array. - - - - Set number of valid characters (length of the term) in - the termBuffer array. Use this to truncate the termBuffer - or to synchronize with external manipulation of the termBuffer. - Note: to grow the size of the array, - use first. - - the truncated length - - - - Set the starting and ending offset. - See StartOffset() and EndOffset() - - - - Resets the term text, payload, flags, and positionIncrement, - startOffset, endOffset and token type to default. - - - - Makes a clone, but replaces the term buffer & - start/end offset in the process. This is more - efficient than doing a full clone (and then calling - setTermBuffer) because it saves a wasted copy of the old - termBuffer. - - - - Shorthand for calling , - , - , - , - - - this Token instance - - - - Shorthand for calling , - , - , - - on Token.DEFAULT_TYPE - - this Token instance - - - - Shorthand for calling , - , - , - - - - this Token instance - - - - Shorthand for calling , - , - , - - - - this Token instance - - - - Shorthand for calling , - , - , - - on Token.DEFAULT_TYPE - - this Token instance - - - - Shorthand for calling , - , - , - - on Token.DEFAULT_TYPE - - this Token instance - - - - Copy the prototype token's fields into this one. Note: Payloads are shared. - - - - - Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. - - - - - - - Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. - - - - - - - - - - - - Convenience factory that returns Token as implementation for the basic - attributes and return the default impl (with "Impl" appended) for all other - attributes. - @since 3.0 - - - - Set the position increment. This determines the position of this token - relative to the previous Token in a , used in phrase - searching. - -

The default value is one. - -

Some common uses for this are: - - Set it to zero to put multiple terms in the same position. This is - useful if, e.g., a word has multiple stems. Searches for phrases - including either stem will match. In this case, all but the first stem's - increment should be set to zero: the increment of the first instance - should be one. Repeating a token with an increment of zero can also be - used to boost the scores of matches on that token. - - Set it to values greater than one to inhibit exact phrase matches. - If, for example, one does not want phrases to match across removed stop - words, then one could build a stop word filter that removes stop words and - also sets the increment to the number of stop words removed before each - non-stop word. Then exact phrase queries will only match when the terms - occur with no intervening stop words. - - -

- the distance from the prior term - - -
- - Returns the Token's term text. - - This method has a performance penalty - because the text is stored internally in a char[]. If - possible, use and - directly instead. If you really need a - String, use this method, which is nothing more than - a convenience call to new String(token.termBuffer(), 0, token.termLength()) - - - - Gets or sets this Token's starting offset, the position of the first character - corresponding to this token in the source text. - Note that the difference between endOffset() and startOffset() may not be - equal to , as the term text may have been altered by a - stemmer or some other filter. - - - - Gets or sets this Token's ending offset, one greater than the position of the - last character corresponding to this token in the source text. The length - of the token in the source text is (endOffset - startOffset). - - - - Returns this Token's lexical type. Defaults to "word". - - - EXPERIMENTAL: While we think this is here to stay, we may want to change it to be a long. -

- - Get the bitset for any bits that have been set. This is completely distinct from , although they do share similar purposes. - The flags can be used to encode information about the token for use by other s. - - -

- The bits -
- - Returns this Token's payload. - - - - Expert: Creates an AttributeFactory returning {@link Token} as instance for the basic attributes - and for all other attributes calls the given delegate factory. - - - - - Expert: Creates an AttributeFactory returning {@link Token} as instance for the basic attributes - and for all other attributes calls the given delegate factory. - - - - This attribute can be used to pass different flags down the tokenizer chain, - eg from one TokenFilter to another one. - - - - EXPERIMENTAL: While we think this is here to stay, we may want to change it to be a long. -

- - Get the bitset for any bits that have been set. This is completely distinct from , although they do share similar purposes. - The flags can be used to encode information about the token for use by other s. - - -

- The bits -
- - The start and end character offset of a Token. - - - Set the starting and ending offset. - See StartOffset() and EndOffset() - - - - Returns this Token's starting offset, the position of the first character - corresponding to this token in the source text. - Note that the difference between endOffset() and startOffset() may not be - equal to termText.length(), as the term text may have been altered by a - stemmer or some other filter. - - - - Returns this Token's ending offset, one greater than the position of the - last character corresponding to this token in the source text. The length - of the token in the source text is (endOffset - startOffset). - - - - The payload of a Token. See also . - - - Initialize this attribute with no payload. - - - Initialize this attribute with the given payload. - - - Returns this Token's payload. - - - The positionIncrement determines the position of this token - relative to the previous Token in a , used in phrase - searching. - -

The default value is one. - -

Some common uses for this are: - - Set it to zero to put multiple terms in the same position. This is - useful if, e.g., a word has multiple stems. Searches for phrases - including either stem will match. In this case, all but the first stem's - increment should be set to zero: the increment of the first instance - should be one. Repeating a token with an increment of zero can also be - used to boost the scores of matches on that token. - - Set it to values greater than one to inhibit exact phrase matches. - If, for example, one does not want phrases to match across removed stop - words, then one could build a stop word filter that removes stop words and - also sets the increment to the number of stop words removed before each - non-stop word. Then exact phrase queries will only match when the terms - occur with no intervening stop words. - - -

-
- - Set the position increment. The default value is one. - - - the distance from the prior term - - - The term text of a Token. - - - Copies the contents of buffer, starting at offset for - length characters, into the termBuffer array. - - the buffer to copy - - the index in the buffer of the first character to copy - - the number of characters to copy - - - - Copies the contents of buffer into the termBuffer array. - the buffer to copy - - - - Copies the contents of buffer, starting at offset and continuing - for length characters, into the termBuffer array. - - the buffer to copy - - the index in the buffer of the first character to copy - - the number of characters to copy - - - - Returns the internal termBuffer character array which - you can then directly alter. If the array is too - small for your token, use - to increase it. After - altering the buffer be sure to call - to record the number of valid - characters that were placed into the termBuffer. - - - - Grows the termBuffer to at least size newSize, preserving the - existing content. Note: If the next operation is to change - the contents of the term buffer use - , - , or - - to optimally combine the resize with the setting of the termBuffer. - - minimum size of the new termBuffer - - newly created termBuffer with length >= newSize - - - - Allocates a buffer char[] of at least newSize, without preserving the existing content. - its always used in places that set the content - - minimum size of the buffer - - - - Return number of valid characters (length of the term) - in the termBuffer array. - - - - Set number of valid characters (length of the term) in - the termBuffer array. Use this to truncate the termBuffer - or to synchronize with external manipulation of the termBuffer. - Note: to grow the size of the array, - use first. - - the truncated length - - - - Returns the Token's term text. - - This method has a performance penalty - because the text is stored internally in a char[]. If - possible, use and - directly instead. If you - really need a String, use this method, which is nothing more than - a convenience call to new String(token.termBuffer(), 0, token.termLength()) - - - - A Token's lexical type. The Default value is "word". - - - Returns this Token's lexical type. Defaults to "word". - - - An Analyzer that uses . - - - A WhitespaceTokenizer is a tokenizer that divides text at whitespace. - Adjacent sequences of non-Whitespace characters form tokens. - - - - Construct a new WhitespaceTokenizer. - - - Construct a new WhitespaceTokenizer using a given . - - - Construct a new WhitespaceTokenizer using a given . - - - Collects only characters which do not satisfy - . - - - - Loader for text files that represent a list of stopwords. - - - Loads a text file and adds every line as an entry to a HashSet (omitting - leading and trailing whitespace). Every line of the file should contain only - one word. The words need to be in lowercase if you make use of an - Analyzer which uses LowerCaseFilter (like StandardAnalyzer). - - File containing the wordlist - A HashSet with the file's words - - - Loads a text file and adds every non-comment line as an entry to a HashSet (omitting - leading and trailing whitespace). Every line of the file should contain only - one word. The words need to be in lowercase if you make use of an - Analyzer which uses LowerCaseFilter (like StandardAnalyzer). - - File containing the wordlist - The comment string to ignore - A HashSet with the file's words - - - Reads lines from a Reader and adds every line as an entry to a HashSet (omitting - leading and trailing whitespace). Every line of the Reader should contain only - one word. The words need to be in lowercase if you make use of an - Analyzer which uses LowerCaseFilter (like StandardAnalyzer). - - Reader containing the wordlist - A HashSet with the reader's words - - - Reads lines from a Reader and adds every non-comment line as an entry to a HashSet (omitting - leading and trailing whitespace). Every line of the Reader should contain only - one word. The words need to be in lowercase if you make use of an - Analyzer which uses LowerCaseFilter (like StandardAnalyzer). - - - Reader containing the wordlist - - The string representing a comment. - - A HashSet with the reader's words - - - - Reads a stem dictionary. Each line contains: - word\tstem - (i.e. two tab seperated words) - - - stem dictionary that overrules the stemming algorithm - - IOException - - - - - - - - - Synonymous with . - -

WARNING: This interface may change within minor versions, despite Lucene's backward compatibility requirements. - This means new methods may be added from version to version. This change only affects the Fieldable API; other backwards - compatibility promises remain intact. For example, Lucene can still - read and write indices created within the same major version. -

- - -

-
- - Return the raw byte[] for the binary field. Note that - you must also call and - to know which range of bytes in this - returned array belong to the field. - - reference to the Field value as byte[]. - - - Return the raw byte[] for the binary field. Note that - you must also call and - to know which range of bytes in this - returned array belong to the field.

- About reuse: if you pass in the result byte[] and it is - used, likely the underlying implementation will hold - onto this byte[] and return it in future calls to - or . - So if you subsequently re-use the same byte[] elsewhere - it will alter this Fieldable's value. -

- User defined buffer that will be used if - possible. If this is null or not large enough, a new - buffer is allocated - - reference to the Field value as byte[]. - -
- - Gets or sets the boost factor for hits for this field. This value will be - multiplied into the score of all hits on this this field of this - document. - -

The boost is multiplied by of the document - containing this field. If a document has multiple fields with the same - name, all such values are multiplied together. This product is then - used to compute the norm factor for the field. By - default, in the - method, the boost value is multiplied - by the - and then rounded by before it is stored in the - index. One should attempt to ensure that this product does not overflow - the range of that encoding. - -

The default value is 1.0. - -

Note: this value is not stored directly with the document in the index. - Documents returned from and - may thus not have the same value present as when - this field was indexed. - -

- - - - - - -
- - Returns the name of the field as an interned string. - For example "date", "title", "body", ... - - - - The value of the field as a String, or null. -

- For indexing, if isStored()==true, the stringValue() will be used as the stored field value - unless isBinary()==true, in which case GetBinaryValue() will be used. - - If isIndexed()==true and isTokenized()==false, this String value will be indexed as a single token. - If isIndexed()==true and isTokenized()==true, then tokenStreamValue() will be used to generate indexed tokens if not null, - else readerValue() will be used to generate indexed tokens if not null, else stringValue() will be used to generate tokens. -

-
- - The value of the field as a Reader, which can be used at index time to generate indexed tokens. - - - - - The TokenStream for this field to be used when indexing, or null. - - - - - True if the value of the field is to be stored in the index for return - with search hits. - - - - True if the value of the field is to be indexed, so that it may be - searched on. - - - - True if the value of the field should be tokenized as text prior to - indexing. Un-tokenized fields are indexed as a single word and may not be - Reader-valued. - - - - True if the term or terms used to index this field are stored as a term - vector, available from . - These methods do not provide access to the original content of the field, - only to terms used to index it. If the original content must be - preserved, use the stored attribute instead. - - - - - - - True if terms are stored as term vector together with their offsets - (start and end positon in source text). - - - - True if terms are stored as term vector together with their token positions. - - - True if the value of the field is stored as binary - - - - True if norms are omitted for this indexed field. - - Expert: - If set, omit normalization factors associated with this indexed field. - This effectively disables indexing boosts and length normalization for this field. - - - - - Indicates whether a Field is Lazy or not. The semantics of Lazy loading are such that if a Field is lazily loaded, retrieving - it's values via or is only valid as long as the that - retrieved the is still open. - - - true if this field can be loaded lazily - - - Returns offset into byte[] segment that is used as value, if Field is not binary - returned value is undefined - - index of the first character in byte[] segment that represents this Field value - - - Returns length of byte[] segment that is used as value, if Field is not binary - returned value is undefined - - length of byte[] segment that represents this Field value - - - Expert: - - If set, omit term freq, positions and payloads from - postings for this field. - - - NOTE: While this option reduces storage space - required in the index, it also means any query - requiring positional information, such as - or - - subclasses will silently fail to find results. - - - - Return the raw byte[] for the binary field. Note that - you must also call and - to know which range of bytes in this - returned array belong to the field. - - reference to the Field value as byte[]. - - - Prints a Field for human consumption. - - - Gets or sets the boost factor for hits for this field. - -

The default value is 1.0. - -

Note: this value is not stored directly with the document in the index. - Documents returned from and - may thus not have the same value present as when - this field was indexed. -

-
- - Returns the name of the field as an interned string. - For example "date", "title", "body", ... - - - - True iff the value of the field is to be stored in the index for return - with search hits. It is an error for this to be true if a field is - Reader-valued. - - - - True iff the value of the field is to be indexed, so that it may be - searched on. - - - - True iff the value of the field should be tokenized as text prior to - indexing. Un-tokenized fields are indexed as a single word and may not be - Reader-valued. - - - - True iff the term or terms used to index this field are stored as a term - vector, available from . - These methods do not provide access to the original content of the field, - only to terms used to index it. If the original content must be - preserved, use the stored attribute instead. - - - - - - - True iff terms are stored as term vector together with their offsets - (start and end position in source text). - - - - True iff terms are stored as term vector together with their token positions. - - - True iff the value of the filed is stored as binary - - - Returns length of byte[] segment that is used as value, if Field is not binary - returned value is undefined - - length of byte[] segment that represents this Field value - - - Returns offset into byte[] segment that is used as value, if Field is not binary - returned value is undefined - - index of the first character in byte[] segment that represents this Field value - - - True if norms are omitted for this indexed field - - - Expert: - - If set, omit term freq, positions and payloads from - postings for this field. - -

NOTE: While this option reduces storage space - required in the index, it also means any query - requiring positional information, such as - or subclasses will - silently fail to find results. -

-
- - Simple utility class providing static methods to - compress and decompress binary data for stored fields. - This class uses java.util.zip.Deflater and Inflater - classes to compress and decompress. - - - - Compresses the specified byte range using the - specified compressionLevel (constants are defined in - java.util.zip.Deflater). - - - - Compresses the specified byte range, with default BEST_COMPRESSION level - - - Compresses all bytes in the array, with default BEST_COMPRESSION level - - - Compresses the String value, with default BEST_COMPRESSION level - - - Compresses the String value using the specified - compressionLevel (constants are defined in - java.util.zip.Deflater). - - - - Decompress the byte array previously returned by - compress - - - - Decompress the byte array previously returned by - compressString back into a String - - - - Provides support for converting dates to strings and vice-versa. - The strings are structured so that lexicographic sorting orders by date, - which makes them suitable for use as field values and search terms. - -

Note that this class saves dates with millisecond granularity, - which is bad for and , as those - queries are expanded to a BooleanQuery with a potentially large number - of terms when searching. Thus you might want to use - instead. - -

- Note: dates before 1970 cannot be used, and therefore cannot be - indexed when using this class. See for an - alternative without such a limitation. - -

- Another approach is , which provides - a sortable binary representation (prefix encoded) of numeric values, which - date/time are. - For indexing a , convert it to unix timestamp as - long and - index this as a numeric value with - and use to query it. - -

- If you build a new index, use or - instead. - This class is included for use with existing - indices and will be removed in a future (possibly Lucene 4.0) - -
- - Converts a Date to a string suitable for indexing. - RuntimeException if the date specified in the - method argument is before 1970 - - - - Converts a millisecond time to a string suitable for indexing. - RuntimeException if the time specified in the - method argument is negative, that is, before 1970 - - - - Converts a string-encoded date into a millisecond time. - - - Converts a string-encoded date into a Date object. - - - Provides support for converting dates to strings and vice-versa. - The strings are structured so that lexicographic sorting orders - them by date, which makes them suitable for use as field values - and search terms. - -

This class also helps you to limit the resolution of your dates. Do not - save dates with a finer resolution than you really need, as then - RangeQuery and PrefixQuery will require more memory and become slower. - -

Compared to the strings generated by the methods - in this class take slightly more space, unless your selected resolution - is set to Resolution.DAY or lower. - -

- Another approach is , which provides - a sortable binary representation (prefix encoded) of numeric values, which - date/time are. - For indexing a , convert it to unix timestamp as - long and - index this as a numeric value with - and use to query it. -

-
- - Converts a Date to a string suitable for indexing. - - - the date to be converted - - the desired resolution, see - - - a string in format yyyyMMddHHmmssSSS or shorter, - depending on resolution; using GMT as timezone - - - - Converts a millisecond time to a string suitable for indexing. - - - the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT - - the desired resolution, see - - - a string in format yyyyMMddHHmmssSSS or shorter, - depending on resolution; using GMT as timezone - - - - Converts a string produced by timeToString or - DateToString back to a time, represented as the - number of milliseconds since January 1, 1970, 00:00:00 GMT. - - - the date string to be converted - - the number of milliseconds since January 1, 1970, 00:00:00 GMT - - ParseException if dateString is not in the - expected format - - - - Converts a string produced by timeToString or - DateToString back to a time, represented as a - Date object. - - - the date string to be converted - - the parsed time as a Date object - - ParseException if dateString is not in the - expected format - - - - Limit a date's resolution. For example, the date 2004-09-21 13:50:11 - will be changed to 2004-09-01 00:00:00 when using - Resolution.MONTH. - - - - The desired resolution of the date to be returned - - the date with all values more precise than resolution - set to 0 or 1 - - - - Limit a date's resolution. For example, the date 1095767411000 - (which represents 2004-09-21 13:50:11) will be changed to - 1093989600000 (2004-09-01 00:00:00) when using - Resolution.MONTH. - - - The time in milliseconds (not ticks). - The desired resolution of the date to be returned - - the date with all values more precise than resolution - set to 0 or 1, expressed as milliseconds since January 1, 1970, 00:00:00 GMT - - - - Specifies the time granularity. - - - Documents are the unit of indexing and search. - - A Document is a set of fields. Each field has a name and a textual value. - A field may be stored with the document, in which - case it is returned with search hits on the document. Thus each document - should typically contain one or more stored fields which uniquely identify - it. - -

Note that fields which are not stored are - not available in documents retrieved from the index, e.g. with , - or . -

-
- - Constructs a new document with no fields. - - -

Adds a field to a document. Several fields may be added with - the same name. In this case, if the fields are indexed, their text is - treated as though appended for the purposes of search.

-

Note that add like the removeField(s) methods only makes sense - prior to adding a document to an index. These methods cannot - be used to change the content of an existing index! In order to achieve this, - a document has to be deleted from an index and a new changed version of that - document has to be added.

-

-
- -

Removes field with the specified name from the document. - If multiple fields exist with this name, this method removes the first field that has been added. - If there is no field with the specified name, the document remains unchanged.

-

Note that the removeField(s) methods like the add method only make sense - prior to adding a document to an index. These methods cannot - be used to change the content of an existing index! In order to achieve this, - a document has to be deleted from an index and a new changed version of that - document has to be added.

-

-
- -

Removes all fields with the given name from the document. - If there is no field with the specified name, the document remains unchanged.

-

Note that the removeField(s) methods like the add method only make sense - prior to adding a document to an index. These methods cannot - be used to change the content of an existing index! In order to achieve this, - a document has to be deleted from an index and a new changed version of that - document has to be added.

-

-
- - Returns a field with the given name if any exist in this document, or - null. If multiple fields exists with this name, this method returns the - first value added. - Do not use this method with lazy loaded fields. - - - - Returns a field with the given name if any exist in this document, or - null. If multiple fields exists with this name, this method returns the - first value added. - - - - Returns the string value of the field with the given name if any exist in - this document, or null. If multiple fields exist with this name, this - method returns the first value added. If only binary fields with this name - exist, returns null. - - - - Returns a List of all the fields in a document. -

Note that fields which are not stored are - not available in documents retrieved from the - index, e.g. or . -

-
- - Returns an array of s with the given name. - Do not use with lazy loaded fields. - This method returns an empty array when there are no - matching fields. It never returns null. - - - the name of the field - - a Field[] array - - - - Returns an array of s with the given name. - This method returns an empty array when there are no - matching fields. It never returns null. - - - the name of the field - - a Fieldable[] array - - - - Returns an array of values of the field specified as the method parameter. - This method returns an empty array when there are no - matching fields. It never returns null. - - the name of the field - - a String[] of field values - - - - Returns an array of byte arrays for of the fields that have the name specified - as the method parameter. This method returns an empty - array when there are no matching fields. It never - returns null. - - - the name of the field - - a byte[][] of binary field values - - - - Returns an array of bytes for the first (or only) field that has the name - specified as the method parameter. This method will return null - if no binary fields with the specified name are available. - There may be non-binary fields with the same name. - - - the name of the field. - - a byte[] containing the binary field value or null - - - - Prints the fields of a document for human consumption. - - - Gets or sets, at indexing time, the boost factor. - - The default is 1.0 - -

Note that once a document is indexed this value is no longer available - from the index. At search time, for retrieved documents, this method always - returns 1. This however does not mean that the boost value set at indexing - time was ignored - it was just combined with other indexing time factors and - stored elsewhere, for better indexing and search performance. (For more - information see the "norm(t,d)" part of the scoring formula in - Similarity.) -

-
- - A field is a section of a Document. Each field has two parts, a name and a - value. Values may be free text, provided as a String or as a Reader, or they - may be atomic keywords, which are not further processed. Such keywords may - be used to represent dates, urls, etc. Fields are optionally stored in the - index, so that they may be returned with hits on the document. - - - -

Expert: change the value of this field. This can - be used during indexing to re-use a single Field - instance to improve indexing speed by avoiding GC cost - of new'ing and reclaiming Field instances. Typically - a single instance is re-used as - well. This helps most on small documents.

- -

Each Field instance should only be used once - within a single instance. See ImproveIndexingSpeed - for details.

-

-
- - Expert: change the value of this field. See setValue(String). - - - Expert: change the value of this field. See setValue(String). - - - Expert: change the value of this field. See setValue(String). - - - Expert: sets the token stream to be used for indexing and causes isIndexed() and isTokenized() to return true. - May be combined with stored values from stringValue() or GetBinaryValue() - - - - Create a field by specifying its name, value and how it will - be saved in the index. Term vectors will not be stored in the index. - - - The name of the field - - The string to process - - Whether value should be stored in the index - - Whether the field should be indexed, and if so, if it should - be tokenized before indexing - - NullPointerException if name or value is null - IllegalArgumentException if the field is neither stored nor indexed - - - Create a field by specifying its name, value and how it will - be saved in the index. - - - The name of the field - - The string to process - - Whether value should be stored in the index - - Whether the field should be indexed, and if so, if it should - be tokenized before indexing - - Whether term vector should be stored - - NullPointerException if name or value is null - IllegalArgumentException in any of the following situations: - - the field is neither stored nor indexed - the field is not indexed but termVector is TermVector.YES - - - - - Create a field by specifying its name, value and how it will - be saved in the index. - - - The name of the field - - Whether to .intern() name or not - - The string to process - - Whether value should be stored in the index - - Whether the field should be indexed, and if so, if it should - be tokenized before indexing - - Whether term vector should be stored - - NullPointerException if name or value is null - IllegalArgumentException in any of the following situations: - - the field is neither stored nor indexed - the field is not indexed but termVector is TermVector.YES - - - - - Create a tokenized and indexed field that is not stored. Term vectors will - not be stored. The Reader is read only when the Document is added to the index, - i.e. you may not close the Reader until - has been called. - - - The name of the field - - The reader with the content - - NullPointerException if name or reader is null - - - Create a tokenized and indexed field that is not stored, optionally with - storing term vectors. The Reader is read only when the Document is added to the index, - i.e. you may not close the Reader until - has been called. - - - The name of the field - - The reader with the content - - Whether term vector should be stored - - NullPointerException if name or reader is null - - - Create a tokenized and indexed field that is not stored. Term vectors will - not be stored. This is useful for pre-analyzed fields. - The TokenStream is read only when the Document is added to the index, - i.e. you may not close the TokenStream until - has been called. - - - The name of the field - - The TokenStream with the content - - NullPointerException if name or tokenStream is null - - - Create a tokenized and indexed field that is not stored, optionally with - storing term vectors. This is useful for pre-analyzed fields. - The TokenStream is read only when the Document is added to the index, - i.e. you may not close the TokenStream until - has been called. - - - The name of the field - - The TokenStream with the content - - Whether term vector should be stored - - NullPointerException if name or tokenStream is null - - - Create a stored field with binary value. Optionally the value may be compressed. - - - The name of the field - - The binary value - - How value should be stored (compressed or not) - - IllegalArgumentException if store is Store.NO - - - Create a stored field with binary value. Optionally the value may be compressed. - - - The name of the field - - The binary value - - Starting offset in value where this Field's bytes are - - Number of bytes to use for this Field, starting at offset - - How value should be stored (compressed or not) - - IllegalArgumentException if store is Store.NO - - - The value of the field as a String, or null. If null, the Reader value or - binary value is used. Exactly one of stringValue(), - readerValue(), and getBinaryValue() must be set. - - - - The value of the field as a Reader, or null. If null, the String value or - binary value is used. Exactly one of stringValue(), - readerValue(), and getBinaryValue() must be set. - - - - The TokesStream for this field to be used when indexing, or null. If null, the Reader value - or String value is analyzed to produce the indexed tokens. - - - - Specifies whether and how a field should be stored. - - - Store the original field value in the index. This is useful for short texts - like a document's title which should be displayed with the results. The - value is stored in its original form, i.e. no analyzer is used before it is - stored. - - - - Do not store the field value in the index. - - - Specifies whether and how a field should be indexed. - - - Do not index the field value. This field can thus not be searched, - but one can still access its contents provided it is - stored. - - - - Index the tokens produced by running the field's - value through an Analyzer. This is useful for - common text. - - - - Index the field's value without using an Analyzer, so it can be searched. - As no analyzer is used the value will be stored as a single term. This is - useful for unique Ids like product numbers. - - - - Expert: Index the field's value without an Analyzer, - and also disable the storing of norms. Note that you - can also separately enable/disable norms by setting - . No norms means that - index-time field and document boosting and field - length normalization are disabled. The benefit is - less memory usage as norms take up one byte of RAM - per indexed field for every document in the index, - during searching. Note that once you index a given - field with norms enabled, disabling norms will - have no effect. In other words, for this to have the - above described effect on a field, all instances of - that field must be indexed with NOT_ANALYZED_NO_NORMS - from the beginning. - - - - Expert: Index the tokens produced by running the - field's value through an Analyzer, and also - separately disable the storing of norms. See - for what norms are - and why you may want to disable them. - - - - Specifies whether and how a field should have term vectors. - - - Do not store term vectors. - - - Store the term vectors of each document. A term vector is a list - of the document's terms and their number of occurrences in that document. - - - - Store the term vector + token position information - - - - - - - Store the term vector + Token offset information - - - - - - - Store the term vector + Token position and offset information - - - - - - - - - - - - Get the best representation of a TermVector given the flags. - - - - Similar to a - java.io.FileFilter, the FieldSelector allows one to make decisions about - what Fields get loaded on a by - - - - - the field to accept or reject - - an instance of - if the named fieldName should be loaded. - - - - Provides information about what should be done with this Field - - - - - - - - Load this every time the is loaded, reading in the data as it is encountered. - and should not return null. -

- should be called by the Reader. -

-
- - Lazily load this . This means the is valid, but it may not actually contain its data until - invoked. SHOULD NOT BE USED. is safe to use and should - return a valid instance of a . -

- should be called by the Reader. -

-
- - Do not load the . and should return null. - is not called. -

- should not be called by the Reader. -

-
- - Load this field as in the case, but immediately return from loading for the . Thus, the - Document may not have its complete set of Fields. and should - both be valid for this -

- should be called by the Reader. -

-
- - Expert: Load the size of this rather than its value. - Size is measured as number of bytes required to store the field == bytes for a binary or any compressed value, and 2*chars for a String value. - The size is stored as a binary value, represented as an int in a byte[], with the higher order byte first in [0] - - - - Expert: Like but immediately break from the field loading loop, i.e., stop loading further fields, after the size is loaded - - - Load the First field and break. -

- See -

-
- - A based on a Map of field names to s - - - Create a a MapFieldSelector - maps from field names (String) to s - - - - Create a a MapFieldSelector - fields to LOAD. List of Strings. All other fields are NO_LOAD. - - - - Create a a MapFieldSelector - fields to LOAD. All other fields are NO_LOAD. - - - - Load field according to its associated value in fieldSelections - a field name - - the fieldSelections value that field maps to or NO_LOAD if none. - - - - Provides support for converting longs to Strings, and back again. The strings - are structured so that lexicographic sorting order is preserved. - -

- That is, if l1 is less than l2 for any two longs l1 and l2, then - NumberTools.longToString(l1) is lexicographically less than - NumberTools.longToString(l2). (Similarly for "greater than" and "equals".) - -

- This class handles all long values (unlike - ). - -

- For new indexes use instead, which - provides a sortable binary representation (prefix encoded) of numeric - values. - To index and efficiently query numeric values use - and . - This class is included for use with existing - indices and will be removed in a future release (possibly Lucene 4.0). - -
- - Equivalent to longToString(Long.MIN_VALUE) - - - Equivalent to longToString(Long.MAX_VALUE) - - - The length of (all) strings returned by - - - Converts a long to a String suitable for indexing. - - - Converts a String that was returned by back to a - long. - - - IllegalArgumentException - if the input is null - - NumberFormatException - if the input does not parse (it was not a String returned by - longToString()). - - - -

This class provides a that enables indexing - of numeric values for efficient range filtering and - sorting. Here's an example usage, adding an int value: - - document.add(new NumericField(name).setIntValue(value)); - - - For optimal performance, re-use the - NumericField and instance for more than - one document: - - - NumericField field = new NumericField(name); - Document document = new Document(); - document.add(field); - - for(all documents) { - ... - field.setIntValue(value) - writer.addDocument(document); - ... - } - - -

The .Net native types int, long, - float and double are - directly supported. However, any value that can be - converted into these native types can also be indexed. - For example, date/time values represented by a - can be translated into a long - value using the java.util.Date.getTime method. If you - don't need millisecond precision, you can quantize the - value, either by dividing the result of - java.util.Date.getTime or using the separate getters - (for year, month, etc.) to construct an int or - long value.

- -

To perform range querying or filtering against a - NumericField, use or - . To sort according to a - NumericField, use the normal numeric sort types, eg - NumericField values - can also be loaded directly from .

- -

By default, a NumericField's value is not stored but - is indexed for range filtering and sorting. You can use - the - constructor if you need to change these defaults.

- -

You may add the same field name as a NumericField to - the same document more than once. Range querying and - filtering will be the logical OR of all values; so a range query - will hit all documents that have at least one value in - the range. However sort behavior is not defined. If you need to sort, - you should separately index a single-valued NumericField.

- -

A NumericField will consume somewhat more disk space - in the index than an ordinary single-valued field. - However, for a typical index that includes substantial - textual content per document, this increase will likely - be in the noise.

- -

Within Lucene, each numeric value is indexed as a - trie structure, where each term is logically - assigned to larger and larger pre-defined brackets (which - are simply lower-precision representations of the value). - The step size between each successive bracket is called the - precisionStep, measured in bits. Smaller - precisionStep values result in larger number - of brackets, which consumes more disk space in the index - but may result in faster range search performance. The - default value, 4, was selected for a reasonable tradeoff - of disk space consumption versus performance. You can - use the expert constructor - if you'd - like to change the value. Note that you must also - specify a congruent value when creating - or . - For low cardinality fields larger precision steps are good. - If the cardinality is < 100, it is fair - to use , which produces one - term per value. - -

For more information on the internals of numeric trie - indexing, including the precisionStep - configuration, see . The format of - indexed values is described in . - -

If you only need to sort by numeric value, and never - run range querying/filtering, you can index using a - precisionStep of . - This will minimize disk space consumed.

- -

More advanced users can instead use - directly, when indexing numbers. This - class is a wrapper around this token stream type for - easier, more intuitive usage.

- -

NOTE: This class is only used during - indexing. When retrieving the stored field value from a - instance after search, you will get a - conventional instance where the numeric - values are returned as s (according to - toString(value) of the used data type). - -

NOTE: This API is - experimental and might change in incompatible ways in the - next release. - -

- 2.9 - -
- - Creates a field for numeric values using the default precisionStep - (4). The instance is not yet initialized with - a numeric value, before indexing a document containing this field, - set a value using the various set???Value() methods. - This constructor creates an indexed, but not stored field. - - the field name - - - - Creates a field for numeric values using the default precisionStep - (4). The instance is not yet initialized with - a numeric value, before indexing a document containing this field, - set a value using the various set???Value() methods. - - the field name - - if the field should be stored in plain text form - (according to toString(value) of the used data type) - - if the field should be indexed using - - - - Creates a field for numeric values with the specified - precisionStep. The instance is not yet initialized with - a numeric value, before indexing a document containing this field, - set a value using the various set???Value() methods. - This constructor creates an indexed, but not stored field. - - the field name - - the used precision step - - - - Creates a field for numeric values with the specified - precisionStep. The instance is not yet initialized with - a numeric value, before indexing a document containing this field, - set a value using the various set???Value() methods. - - the field name - - the used precision step - - if the field should be stored in plain text form - (according to toString(value) of the used data type) - - if the field should be indexed using - - - - Returns always null for numeric fields - - - Initializes the field with the supplied long value. - the numeric value - - this instance, because of this you can use it the following way: - document.add(new NumericField(name, precisionStep).SetLongValue(value)) - - - - Initializes the field with the supplied int value. - the numeric value - - this instance, because of this you can use it the following way: - document.add(new NumericField(name, precisionStep).setIntValue(value)) - - - - Initializes the field with the supplied double value. - the numeric value - - this instance, because of this you can use it the following way: - document.add(new NumericField(name, precisionStep).setDoubleValue(value)) - - - - Initializes the field with the supplied float value. - the numeric value - - this instance, because of this you can use it the following way: - document.add(new NumericField(name, precisionStep).setFloatValue(value)) - - - - Returns a for indexing the numeric value. - - - Returns always null for numeric fields - - - Returns the numeric value as a string (how it is stored, when is chosen). - - - Returns the current numeric value as a subclass of , null if not yet initialized. - - - Declare what fields to load normally and what fields to load lazily - - - - - - Pass in the Set of names to load and the Set of names to load lazily. If both are null, the - Document will not have any on it. - - A Set of field names to load. May be empty, but not null - - A Set of field names to load lazily. May be empty, but not null - - - - Indicate whether to load the field with the given name or not. If the is not in either of the - initializing Sets, then is returned. If a Field name - is in both fieldsToLoad and lazyFieldsToLoad, lazy has precedence. - - - The name to check - - The - - - - - Base class for enumerating all but deleted docs. - -

NOTE: this class is meant only to be used internally - by Lucene; it's only public so it can be shared across - packages. This means the API is freely subject to - change, and, the class could be removed entirely, in any - Lucene release. Use directly at your own risk! */ -

-
- - TermDocs provides an interface for enumerating <document, frequency> - pairs for a term.

The document portion names each document containing - the term. Documents are indicated by number. The frequency portion gives - the number of times the term occurred in each document.

The pairs are - ordered by document number. -

- -
- - Sets this to the data for a term. - The enumeration is reset to the start of the data for this term. - - - - Sets this to the data for the current term in a . - This may be optimized in some implementations. - - - - Moves to the next pair in the enumeration.

Returns true iff there is - such a next pair in the enumeration. -

-
- - Attempts to read multiple entries from the enumeration, up to length of - docs. Document numbers are stored in docs, and term - frequencies are stored in freqs. The freqs array must be as - long as the docs array. - -

Returns the number of entries read. Zero is only returned when the - stream has been exhausted. -

-
- - Skips entries to the first beyond the current whose document number is - greater than or equal to target.

Returns true iff there is such - an entry.

Behaves as if written: - boolean skipTo(int target) { - do { - if (!next()) - return false; - } while (target > doc()); - return true; - } - - Some implementations are considerably more efficient than that. -

-
- - Frees associated resources. - - - Returns the current document number.

This is invalid until - is called for the first time. -

-
- - Returns the frequency of the term within the current document.

This - is invalid until is called for the first time. -

-
- - Holds buffered deletes, by docID, term or query. We - hold two instances of this class: one for the deletes - prior to the last flush, the other for deletes after - the last flush. This is so if we need to abort - (discard all buffered docs) we can also discard the - buffered deletes yet keep the deletes done during - previously flushed segments. - - - - Abstract base class for input from a file in a . A - random-access input stream. Used for all Lucene index input operations. - - - - - - Reads and returns a single byte. - - - - - Reads a specified number of bytes into an array at the specified offset. - the array to read bytes into - - the offset in the array to start storing bytes - - the number of bytes to read - - - - - - Reads a specified number of bytes into an array at the - specified offset with control over whether the read - should be buffered (callers who have their own buffer - should pass in "false" for useBuffer). Currently only - respects this parameter. - - the array to read bytes into - - the offset in the array to start storing bytes - - the number of bytes to read - - set to false if the caller will handle - buffering. - - - - - - Reads four bytes and returns an int. - - - - - Reads an int stored in variable-length format. Reads between one and - five bytes. Smaller values take fewer bytes. Negative numbers are not - supported. - - - - - - Reads eight bytes and returns a long. - - - - - Reads a long stored in variable-length format. Reads between one and - nine bytes. Smaller values take fewer bytes. Negative numbers are not - supported. - - - - Call this if readString should read characters stored - in the old modified UTF8 format (length in java chars - and java's modified UTF8 encoding). This is used for - indices written pre-2.4 See LUCENE-510 for details. - - - - Reads a string. - - - - - Reads Lucene's old "modified UTF-8" encoded - characters into an array. - - the array to read characters into - - the offset in the array to start storing characters - - the number of characters to read - - - - -- please use readString or readBytes - instead, and construct the string - from those utf8 bytes - - - - Expert - - Similar to but does not do any conversion operations on the bytes it is reading in. It still - has to invoke just as does, but it does not need a buffer to store anything - and it does not have to do any of the bitwise operations, since we don't actually care what is in the byte except to determine - how many more bytes to read - - The number of chars to read - - this method operates on old "modified utf8" encoded - strings - - - - Closes the stream to futher operations. - - - Sets current position in this file, where the next read will occur. - - - - - The number of bytes in the file. - - - Returns a clone of this stream. - -

Clones of a stream access the same data, and are positioned at the same - point as the stream they were cloned from. - -

Expert: Subclasses must ensure that clones may be positioned at - different points in the input from each other and from the stream they - were cloned from. -

-
- - Returns the current position in this file, where the next read will - occur. - - - - - - Class to write byte streams into slices of shared - byte[]. This is used by DocumentsWriter to hold the - posting list for many terms in RAM. - - - - Set up the writer to write at address. - - - Write byte into byte slice stream - - - Basic tool and API to check the health of an index and - write a new segments file that removes reference to - problematic segments. - -

As this tool checks every byte in the index, on a large - index it can take quite a long time to run. - -

WARNING: this tool and API is new and - experimental and is subject to suddenly change in the - next release. Please make a complete backup of your - index before using this to fix your index! -

-
- - Create a new CheckIndex on the directory. - - - Set infoStream where messages should go. If null, no - messages are printed - - - - Returns a instance detailing - the state of the index. - -

As this method checks every byte in the index, on a large - index it can take quite a long time to run. - -

WARNING: make sure - you only call this when the index is not opened by any - writer. -

-
- - Returns a instance detailing - the state of the index. - - - list of specific segment names to check - -

As this method checks every byte in the specified - segments, on a large index it can take quite a long - time to run. - -

WARNING: make sure - you only call this when the index is not opened by any - writer. - - - -

Test field norms. -
- - Test the term index. - - - Test stored fields for a segment. - - - Test term vectors for a segment. - - - Repairs the index using previously returned result - from . Note that this does not - remove any of the unreferenced files after it's done; - you must separately open an , which - deletes unreferenced files when it's created. - -

WARNING: this writes a - new segments file into the index, effectively removing - all documents in broken segments from the index. - BE CAREFUL. - -

WARNING: Make sure you only call this when the - index is not opened by any writer. -

-
- - Command-line interface to check and fix an index. -

- Run it like this: - - java -ea:Lucene.Net... Lucene.Net.Index.CheckIndex pathToIndex [-fix] [-segment X] [-segment Y] - - - -fix: actually write a new segments_N file, removing any problematic segments - -segment X: only check the specified - segment(s). This can be specified multiple times, - to check more than one segment, eg -segment _2 - -segment _a. You can't use this with the -fix - option. - -

WARNING: -fix should only be used on an emergency basis as it will cause - documents (perhaps many) to be permanently removed from the index. Always make - a backup copy of your index before running this! Do not run this tool on an index - that is actively being written to. You have been warned! -

Run without -fix, this tool will open the index, report version information - and report any exceptions it hits and what action it would take if -fix were - specified. With -fix, this tool will remove any segments that have issues and - write a new segments_N file. This means all documents contained in the affected - segments will be removed. -

- This tool exits with exit code 1 if the index cannot be opened or has any - corruption, else 0. -

-
- - Returned from detailing the health and status of the index. - -

WARNING: this API is new and experimental and is - subject to suddenly change in the next release. - -

-
- - True if no problems were found with the index. - - - True if we were unable to locate and load the segments_N file. - - - True if we were unable to open the segments_N file. - - - True if we were unable to read the version number from segments_N file. - - - Name of latest segments_N file in the index. - - - Number of segments in the index. - - - String description of the version of the index. - - - Empty unless you passed specific segments list to check as optional 3rd argument. - - CheckIndex.CheckIndex_Renamed_Method(System.Collections.IList) - - - - True if the index was created with a newer version of Lucene than the CheckIndex tool. - - - List of instances, detailing status of each segment. - - - Directory index is in. - - - SegmentInfos instance containing only segments that - had no problems (this is used with the - method to repair the index. - - - - How many documents will be lost to bad segments. - - - How many bad segments were found. - - - True if we checked only specific segments () - was called with non-null - argument). - - - - Holds the userData of the last commit in the index - - - Holds the status of each segment in the index. - See . - -

WARNING: this API is new and experimental and is - subject to suddenly change in the next release. -

-
- - Name of the segment. - - - Document count (does not take deletions into account). - - - True if segment is compound file format. - - - Number of files referenced by this segment. - - - Net size (MB) of the files referenced by this - segment. - - - - Doc store offset, if this segment shares the doc - store files (stored fields and term vectors) with - other segments. This is -1 if it does not share. - - - - String of the shared doc store segment, or null if - this segment does not share the doc store files. - - - - True if the shared doc store files are compound file - format. - - - - True if this segment has pending deletions. - - - Name of the current deletions file name. - - - Number of deleted documents. - - - True if we were able to open a SegmentReader on this - segment. - - - - Number of fields in this segment. - - - True if at least one of the fields in this segment - does not omitTermFreqAndPositions. - - - - - - Map<String, String> that includes certain - debugging details that IndexWriter records into - each segment it creates - - - - Status for testing of field norms (null if field norms could not be tested). - - - Status for testing of indexed terms (null if indexed terms could not be tested). - - - Status for testing of stored fields (null if stored fields could not be tested). - - - Status for testing of term vectors (null if term vectors could not be tested). - - - Status from testing field norms. - - - Number of fields successfully tested - - - Exception thrown during term index test (null on success) - - - Status from testing term index. - - - Total term count - - - Total frequency across all terms. - - - Total number of positions. - - - Exception thrown during term index test (null on success) - - - Status from testing stored fields. - - - Number of documents tested. - - - Total number of stored fields tested. - - - Exception thrown during stored fields test (null on success) - - - Status from testing stored fields. - - - Number of documents tested. - - - Total number of term vectors tested. - - - Exception thrown during term vector test (null on success) - - - Optimized implementation. - - - Overridden by SegmentTermPositions to skip in prox stream. - - - Optimized implementation. - - - Class for accessing a compound stream. - This class implements a directory, but is limited to only read operations. - Directory methods that would normally modify data throw an exception. - - - - A Directory is a flat list of files. Files may be written once, when they - are created. Once a file is created it may only be opened for read, or - deleted. Random access is permitted both when reading and writing. - -

Java's i/o APIs not used directly, but rather all i/o is - through this API. This permits things such as: - implementation of RAM-based indices; - implementation indices stored in a database, via JDBC; - implementation of an index as a single file; - - - Directory locking is implemented by an instance of - , and can be changed for each Directory - instance using . - -

-
- - Holds the LockFactory instance (implements locking for - this Directory instance). - - - - Returns an array of strings, one for each file in the directory. - - - - Returns true iff a file with the given name exists. - - - Returns the time the named file was last modified. - - - Set the modified time of an existing file to now. - - - Removes an existing file in the directory. - - - Returns the length of a file in the directory. - - - Creates a new, empty file in the directory with the given name. - Returns a stream writing this file. - - - - Ensure that any writes to this file are moved to - stable storage. Lucene uses this to properly commit - changes to the index, to prevent a machine/OS crash - from corrupting the index. - - - - Returns a stream reading an existing file. - - - Returns a stream reading an existing file, with the - specified read buffer size. The particular Directory - implementation may ignore the buffer size. Currently - the only Directory implementations that respect this - parameter are and - . - - - - Construct a . - the name of the lock file - - - - Attempt to clear (forcefully unlock and remove) the - specified lock. Only call this at a time when you are - certain this lock is no longer in use. - - name of the lock to be cleared. - - - - Closes the store. - - - Set the LockFactory that this Directory instance should - use for its locking implementation. Each * instance of - LockFactory should only be used for one directory (ie, - do not share a single instance across multiple - Directories). - - - instance of . - - - - Return a string identifier that uniquely differentiates - this Directory instance from other Directory instances. - This ID should be the same if two Directory instances - (even in different JVMs and/or on different machines) - are considered "the same index". This is how locking - "scopes" to the right index. - - - - Copy contents of a directory src to a directory dest. - If a file in src already exists in dest then the - one in dest will be blindly overwritten. - -

NOTE: the source directory cannot change - while this method is running. Otherwise the results - are undefined and you could easily hit a - FileNotFoundException. - -

NOTE: this method only copies files that look - like index files (ie, have extensions matching the - known extensions of index files). - -

- source directory - - destination directory - - if true, call method on source directory - - IOException -
- - AlreadyClosedException if this Directory is closed - - - Get the LockFactory that this Directory instance is - using for its locking implementation. Note that this - may be null for Directory implementations that provide - their own locking implementation. - - - - Returns an array of strings, one for each file in the directory. - - - Returns true iff a file with the given name exists. - - - Returns the time the compound file was last modified. - - - Set the modified time of the compound file to now. - - - Not implemented - UnsupportedOperationException - - - Not implemented - UnsupportedOperationException - - - Returns the length of a file in the directory. - IOException if the file does not exist - - - Not implemented - UnsupportedOperationException - - - Not implemented - UnsupportedOperationException - - - Implementation of an IndexInput that reads from a portion of the - compound file. The visibility is left as "package" *only* because - this helps with testing since JUnit test cases in a different class - can then access package fields of this class. - - - - Base implementation class for buffered . - - - Default buffer size - - - Inits BufferedIndexInput with a specific bufferSize - - - Change the buffer size used by this IndexInput - - - Expert: implements buffer refill. Reads bytes from the current position - in the input. - - the array to read bytes into - - the offset in the array to start storing bytes - - the number of bytes to read - - - - Expert: implements seek. Sets current position in this file, where the - next will occur. - - - - - - - - - - Expert: implements buffer refill. Reads bytes from the current - position in the input. - - the array to read bytes into - - the offset in the array to start storing bytes - - the number of bytes to read - - - - Expert: implements seek. Sets current position in this file, where - the next will occur. - - - - - - Combines multiple files into a single compound file. - The file format:
- - VInt fileCount - {Directory} - fileCount entries with the following structure: - - long dataOffset - String fileName - - {File Data} - fileCount entries with the raw data of the corresponding file - - - The fileCount integer indicates how many files are contained in this compound - file. The {directory} that follows has that many entries. Each directory entry - contains a long pointer to the start of this file's data section, and a String - with that file's name. -
-
- - Create the compound stream in the specified file. The file name is the - entire name (no extensions are added). - - NullPointerException if dir or name is null - - - Add a source stream. file is the string by which the - sub-stream will be known in the compound stream. - - - IllegalStateException if this writer is closed - NullPointerException if file is null - IllegalArgumentException if a file with the same name - has been added already - - - - Merge files with the extensions added up to now. - All files with these extensions are combined sequentially into the - compound stream. After successful merge, the source files - are deleted. - - IllegalStateException if close() had been called before or - if no file has been added to this object - - - - Copy the contents of the file with specified extension into the - provided output stream. Use the provided buffer for moving data - to reduce memory allocation. - - - - Returns the directory of the compound file. - - - Returns the name of the compound file. - - - source file - - - temporary holder for the start of directory entry for this file - - - temporary holder for the start of this file's data section - - - A that runs each merge using a - separate thread, up until a maximum number of threads - () at which when a merge is - needed, the thread(s) that are updating the index will - pause until one or more merges completes. This is a - simple way to use concurrency in the indexing process - without having to create and manage application level - threads. - - - -

Expert: uses an instance - implementing this interface to execute the merges - selected by a . The default - MergeScheduler is .

- -

NOTE: This API is new and still experimental - (subject to change suddenly in the next release)

- -

NOTE: This class typically requires access to - package-private APIs (eg, SegmentInfos) to do its job; - if you implement your own MergePolicy, you'll need to put - it in package Lucene.Net.Index in order to use - these APIs. -

-
- - Run the merges provided by . - - - Close this MergeScheduler. - - - Return the priority that merge threads run at. By - default the priority is 1 plus the priority of (ie, - slightly higher priority than) the first thread that - calls merge. - - - - Set the priority that merge threads run at. - - - Does the actual merge, by calling - - - Create and return a new MergeThread - - - Called when an exception is hit in a background merge - thread - - - - Used for testing - - - Used for testing - - - Used for testing - - - Used for testing - - - Used for testing - - - Gets or sets the max # simultaneous threads that may be - running. If a merge is necessary yet we already have - this many threads running, the incoming thread (that - is calling add/updateDocument) will block until - a merge thread has completed. - - - - - Support class used to handle threads - - - - - This interface should be implemented by any class whose instances are intended - to be executed by a thread. - - - - - This method has to be implemented in order that starting of the thread causes the object's - run method to be called in that separately executing thread. - - - - - The instance of System.Threading.Thread - - - - - Initializes a new instance of the ThreadClass class - - - - - Initializes a new instance of the Thread class. - - The name of the thread - - - - Initializes a new instance of the Thread class. - - A ThreadStart delegate that references the methods to be invoked when this thread begins executing - - - - Initializes a new instance of the Thread class. - - A ThreadStart delegate that references the methods to be invoked when this thread begins executing - The name of the thread - - - - This method has no functionality unless the method is overridden - - - - - Causes the operating system to change the state of the current thread instance to ThreadState.Running - - - - - Interrupts a thread that is in the WaitSleepJoin thread state - - - - - Blocks the calling thread until a thread terminates - - - - - Blocks the calling thread until a thread terminates or the specified time elapses - - Time of wait in milliseconds - - - - Blocks the calling thread until a thread terminates or the specified time elapses - - Time of wait in milliseconds - Time of wait in nanoseconds - - - - Resumes a thread that has been suspended - - - - - Raises a ThreadAbortException in the thread on which it is invoked, - to begin the process of terminating the thread. Calling this method - usually terminates the thread - - - - - Raises a ThreadAbortException in the thread on which it is invoked, - to begin the process of terminating the thread while also providing - exception information about the thread termination. - Calling this method usually terminates the thread. - - An object that contains application-specific information, such as state, which can be used by the thread being aborted - - - - Suspends the thread, if the thread is already suspended it has no effect - - - - - Obtain a String that represents the current object - - A String that represents the current object - - - - Gets the currently running thread - - The currently running thread - - - - Gets the current thread instance - - - - - Gets or sets the name of the thread - - - - - Gets or sets a value indicating the scheduling priority of a thread - - - - - Gets a value indicating the execution status of the current thread - - - - - Gets or sets a value indicating whether or not a thread is a background thread. - - - - This exception is thrown when Lucene detects - an inconsistency in the index. - - - - Implements the skip list reader for the default posting list format - that stores positions and payloads. - - - - - This abstract class reads skip lists with multiple levels. - - See for the information about the encoding - of the multi level skip lists. - - Subclasses must implement the abstract method - which defines the actual format of the skip data. - - - - Returns the id of the doc to which the last call of - has skipped. - - - - Skips entries to the first beyond the current whose document number is - greater than or equal to target. Returns the current doc count. - - - - Seeks the skip entry on the given level - - - initializes the reader - - - Loads the skip levels - - - Subclasses must implement the actual skip data encoding in this method. - - - the level skip data shall be read from - - the skip stream to read from - - - - Copies the values of the last read skip entry on this level - - - used to buffer the top skip levels - - - Returns the freq pointer of the doc to which the last call of - has skipped. - - - - Returns the prox pointer of the doc to which the last call of - has skipped. - - - - Returns the payload length of the payload stored just before - the doc to which the last call of - has skipped. - - - - Implements the skip list writer for the default posting list format - that stores positions and payloads. - - - - - This abstract class writes skip lists with multiple levels. - - Example for skipInterval = 3: - c (skip level 2) - c c c (skip level 1) - x x x x x x x x x x (skip level 0) - d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) - 3 6 9 12 15 18 21 24 27 30 (df) - - d - document - x - skip data - c - skip data with child pointer - - Skip level i contains every skipInterval-th entry from skip level i-1. - Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). - - Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. - This guarantess a logarithmic amount of skips to find the target document. - - While this class takes care of writing the different skip levels, - subclasses must define the actual format of the skip data. - - - - - Subclasses must implement the actual skip data encoding in this method. - - - the level skip data shall be writting for - - the skip buffer to write to - - - - Writes the current skip data to the buffers. The current document frequency determines - the max level is skip data is to be written to. - - - the current document frequency - - IOException - - - Writes the buffered skip lists to the given output. - - - the IndexOutput the skip lists shall be written to - - the pointer the skip list starts - - - - Sets the values for the current skip data. - - - An IndexReader which reads indexes with multiple segments. - - - IndexReader is an abstract class, providing an interface for accessing an - index. Search of an index is done entirely through this abstract interface, - so that any subclass which implements it is searchable. -

Concrete subclasses of IndexReader are usually constructed with a call to - one of the static open() methods, e.g. - . -

For efficiency, in this API documents are often referred to via - document numbers, non-negative integers which each name a unique - document in the index. These document numbers are ephemeral--they may change - as documents are added to and deleted from an index. Clients should thus not - rely on a given document having the same number between sessions. -

An IndexReader can be opened on a directory for which an IndexWriter is - opened already, but it cannot be used to delete documents from the index then. -

- NOTE: for backwards API compatibility, several methods are not listed - as abstract, but have no useful implementations in this base class and - instead always throw UnsupportedOperationException. Subclasses are - strongly encouraged to override these methods, but in many cases may not - need to. -

-

- NOTE: as of 2.4, it's possible to open a read-only - IndexReader using the static open methods that accepts the - boolean readOnly parameter. Such a reader has better - better concurrency as it's not necessary to synchronize on the - isDeleted method. You must explicitly specify false - if you want to make changes with the resulting IndexReader. -

-

NOTE: - instances are completely thread - safe, meaning multiple threads can call any of its methods, - concurrently. If your application requires external - synchronization, you should not synchronize on the - IndexReader instance; use your own - (non-Lucene) objects instead. -

-
- - Expert: increments the refCount of this IndexReader - instance. RefCounts are used to determine when a - reader can be closed safely, i.e. as soon as there are - no more references. Be sure to always call a - corresponding , in a finally clause; - otherwise the reader may never be closed. Note that - simply calls decRef(), which means that - the IndexReader will not really be closed until - has been called for all outstanding - references. - - - - - - - Expert: decreases the refCount of this IndexReader - instance. If the refCount drops to 0, then pending - changes (if any) are committed to the index and this - reader is closed. - - - IOException in case an IOException occurs in commit() or doClose() - - - - - - - AlreadyClosedException if this IndexReader is closed - - - Returns an IndexReader reading the index in the given - Directory. You should pass readOnly=true, since it - gives much better concurrent performance, unless you - intend to do write operations (delete documents or - change norms) with the reader. - - the index directory - true if no changes (deletions, norms) will be made with this IndexReader - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Expert: returns an IndexReader reading the index in the given - . You should pass readOnly=true, since it - gives much better concurrent performance, unless you - intend to do write operations (delete documents or - change norms) with the reader. - - the commit point to open - - true if no changes (deletions, norms) will be made with this IndexReader - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Expert: returns an IndexReader reading the index in - the given Directory, with a custom - . You should pass readOnly=true, - since it gives much better concurrent performance, - unless you intend to do write operations (delete - documents or change norms) with the reader. - - the index directory - - a custom deletion policy (only used - if you use this reader to perform deletes or to set - norms); see for details. - - true if no changes (deletions, norms) will be made with this IndexReader - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Expert: returns an IndexReader reading the index in - the given Directory, with a custom - . You should pass readOnly=true, - since it gives much better concurrent performance, - unless you intend to do write operations (delete - documents or change norms) with the reader. - - the index directory - - a custom deletion policy (only used - if you use this reader to perform deletes or to set - norms); see for details. - - true if no changes (deletions, norms) will be made with this IndexReader - - Subsamples which indexed - terms are loaded into RAM. This has the same effect as - IndexWriter.SetTermIndexInterval - except that setting - must be done at indexing time while this setting can be - set per reader. When set to N, then one in every - N*termIndexInterval terms in the index is loaded into - memory. By setting this to a value > 1 you can reduce - memory usage, at the expense of higher latency when - loading a TermInfo. The default value is 1. Set this - to -1 to skip loading the terms index entirely. - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Expert: returns an IndexReader reading the index in - the given Directory, using a specific commit and with - a custom . You should pass - readOnly=true, since it gives much better concurrent - performance, unless you intend to do write operations - (delete documents or change norms) with the reader. - - the specific to open; - see to list all commits - in a directory - - a custom deletion policy (only used - if you use this reader to perform deletes or to set - norms); see for details. - - true if no changes (deletions, norms) will be made with this IndexReader - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Expert: returns an IndexReader reading the index in - the given Directory, using a specific commit and with - a custom . You should pass - readOnly=true, since it gives much better concurrent - performance, unless you intend to do write operations - (delete documents or change norms) with the reader. - - the specific to open; - see to list all commits - in a directory - - a custom deletion policy (only used - if you use this reader to perform deletes or to set - norms); see for details. - - true if no changes (deletions, norms) will be made with this IndexReader - - Subsambles which indexed - terms are loaded into RAM. This has the same effect as - IndexWriter.SetTermIndexInterval - except that setting - must be done at indexing time while this setting can be - set per reader. When set to N, then one in every - N*termIndexInterval terms in the index is loaded into - memory. By setting this to a value > 1 you can reduce - memory usage, at the expense of higher latency when - loading a TermInfo. The default value is 1. Set this - to -1 to skip loading the terms index entirely. - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Refreshes an IndexReader if the index has changed since this instance - was (re)opened. -

- Opening an IndexReader is an expensive operation. This method can be used - to refresh an existing IndexReader to reduce these costs. This method - tries to only load segments that have changed or were created after the - IndexReader was (re)opened. -

- If the index has not changed since this instance was (re)opened, then this - call is a NOOP and returns this instance. Otherwise, a new instance is - returned. The old instance is not closed and remains usable.
-

- If the reader is reopened, even though they share - resources internally, it's safe to make changes - (deletions, norms) with the new reader. All shared - mutable state obeys "copy on write" semantics to ensure - the changes are not seen by other readers. -

- You can determine whether a reader was actually reopened by comparing the - old instance with the instance returned by this method: - - IndexReader reader = ... - ... - IndexReader newReader = r.reopen(); - if (newReader != reader) { - ... // reader was reopened - reader.close(); - } - reader = newReader; - ... - - - Be sure to synchronize that code so that other threads, - if present, can never use reader after it has been - closed and before it's switched to newReader. - -

NOTE: If this reader is a near real-time - reader (obtained from , - reopen() will simply call writer.getReader() again for - you, though this may change in the future. - -

- CorruptIndexException if the index is corrupt - If there is a low-level IO error -
- - Just like , except you can change the - readOnly of the original reader. If the index is - unchanged but readOnly is different then a new reader - will be returned. - - - - Expert: reopen this reader on a specific commit point. - This always returns a readOnly reader. If the - specified commit point matches what this reader is - already on, and this reader is already readOnly, then - this same instance is returned; if it is not already - readOnly, a readOnly clone is returned. - - - - Efficiently clones the IndexReader (sharing most - internal state). -

- On cloning a reader with pending changes (deletions, - norms), the original reader transfers its write lock to - the cloned reader. This means only the cloned reader - may make further changes to the index, and commit the - changes to the index on close, but the old reader still - reflects all changes made up until it was cloned. -

- Like , it's safe to make changes to - either the original or the cloned reader: all shared - mutable state obeys "copy on write" semantics to ensure - the changes are not seen by other readers. -

-

- CorruptIndexException if the index is corrupt - If there is a low-level IO error -
- - Clones the IndexReader and optionally changes readOnly. A readOnly - reader cannot open a writeable reader. - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Returns the directory associated with this index. The Default - implementation returns the directory specified by subclasses when - delegating to the IndexReader(Directory) constructor, or throws an - UnsupportedOperationException if one was not specified. - - UnsupportedOperationException if no directory - - - Returns the time the index in the named directory was last modified. - Do not use this to check whether the reader is still up-to-date, use - instead. - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Reads version number from segments files. The version number is - initialized with a timestamp and then increased by one for each change of - the index. - - - where the index resides. - - version number. - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - Reads commitUserData, previously passed to - , - from current index segments file. This will return null if - - has never been called for this index. - - where the index resides. - - commit userData. - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - - - - - Check whether any new changes have occurred to the index since this - reader was opened. - -

- If this reader is based on a Directory (ie, was created by calling - - Open(Store.Directory) - , or on a reader based on a Directory), then - this method checks if any further commits (see - have occurred in that directory). -

- -

- If instead this reader is a near real-time reader (ie, obtained by a call - to , or by calling on a near - real-time reader), then this method checks if either a new commmit has - occurred, or any new uncommitted changes have taken place via the writer. - Note that even if the writer has only performed merging, this method will - still return false. -

- -

- In any event, if this returns false, you should call to - get a new reader that sees the changes. -

- -

- CorruptIndexException if the index is corrupt - If there is a low-level IO error - UnsupportedOperationException unless overridden in subclass -
- - Checks is the index is optimized (if it has a single segment and - no deletions). Not implemented in the IndexReader base class. - - &lt;c&gt;true&lt;/c&gt; if the index is optimized; &lt;c&gt;false&lt;/c&gt; otherwise - UnsupportedOperationException unless overridden in subclass - - - Return an array of term frequency vectors for the specified document. - The array contains a vector for each vectorized field in the document. - Each vector contains terms and frequencies for all terms in a given vectorized field. - If no such fields existed, the method returns null. The term vectors that are - returned may either be of type - or of type if - positions or offsets have been stored. - - - document for which term frequency vectors are returned - - array of term frequency vectors. May be null if no term vectors have been - stored for the specified document. - - IOException if index cannot be accessed - - - - - Return a term frequency vector for the specified document and field. The - returned vector contains terms and frequencies for the terms in - the specified field of this document, if the field had the storeTermVector - flag set. If termvectors had been stored with positions or offsets, a - is returned. - - - document for which the term frequency vector is returned - - field for which the term frequency vector is returned. - - term frequency vector May be null if field does not exist in the specified - document or term vector was not stored. - - IOException if index cannot be accessed - - - - - Load the Term Vector into a user-defined data structure instead of relying on the parallel arrays of - the . - - The number of the document to load the vector for - - The name of the field to load - - The to process the vector. Must not be null - - IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. - - - - - Map all the term vectors for all fields in a Document - The number of the document to load the vector for - - The to process the vector. Must not be null - - IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. - - - Returns true if an index exists at the specified directory. - If the directory does not exist or if there is no index in it. - - the directory to check for an index - - true if an index exists; false otherwise - - IOException if there is a problem with accessing the index - - - Returns the number of documents in this index. - - - Returns the stored fields of the nth - Document in this index. -

- NOTE: for performance reasons, this method does not check if the - requested document is deleted, and therefore asking for a deleted document - may yield unspecified results. Usually this is not required, however you - can call with the requested document ID to verify - the document is not deleted. - -

- CorruptIndexException if the index is corrupt - If there is a low-level IO error -
- - Get the at the n - th position. The may be used to determine - what s to load and how they should - be loaded. NOTE: If this Reader (more specifically, the underlying - FieldsReader) is closed before the lazy - is loaded an exception may be - thrown. If you want the value of a lazy - to be available after closing you - must explicitly load it or fetch the Document again with a new loader. -

- NOTE: for performance reasons, this method does not check if the - requested document is deleted, and therefore asking for a deleted document - may yield unspecified results. Usually this is not required, however you - can call with the requested document ID to verify - the document is not deleted. - -

- Get the document at the nth position - - The to use to determine what - Fields should be loaded on the Document. May be null, in which case - all Fields will be loaded. - - The stored fields of the - at the nth position - - CorruptIndexException if the index is corrupt - If there is a low-level IO error - - - - - - - - -
- - Returns true if document n has been deleted - - - Returns true if there are norms stored for this field. - - - - Returns the byte-encoded normalization factor for the named field of - every document. This is used by the search code to score documents. - - - - - - Reads the byte-encoded normalization factor for the named field of every - document. This is used by the search code to score documents. - - - - - Expert: Resets the normalization factor for the named field of the named - document. The norm represents the product of the field's boost - and its length normalization. Thus, to preserve the length normalization - values when resetting this, one should base the new value upon the old. - - NOTE: If this field does not store norms, then - this method call will silently do nothing. - - - - - If the index has changed since this reader was opened - - - If the index is corrupt - - - If another writer has this index open (write.lock could not be obtained) - - - If there is a low-level IO error - - - - Implements setNorm in subclass. - - - - Expert: Resets the normalization factor for the named field of the named document. - - - - - If the index has changed since this reader was opened - - - If the index is corrupt - - - If another writer has this index open (write.lock could not be obtained) - - - If there is a low-level IO error - - - - Returns an enumeration of all the terms in the index. The - enumeration is ordered by Term.compareTo(). Each term is greater - than all that precede it in the enumeration. Note that after - calling terms(), must be called - on the resulting enumeration before calling other methods such as - . - - - If there is a low-level IO error - - - - Returns an enumeration of all terms starting at a given term. If - the given term does not exist, the enumeration is positioned at the - first term greater than the supplied term. The enumeration is - ordered by Term.compareTo(). Each term is greater than all that - precede it in the enumeration. - - - If there is a low-level IO error - - - - Returns the number of documents containing the term t. - If there is a low-level IO error - - - Returns an enumeration of all the documents which contain - term. For each document, the document number, the frequency of - the term in that document is also provided, for use in - search scoring. If term is null, then all non-deleted - docs are returned with freq=1. - Thus, this method implements the mapping: -

- Term    =>    <docNum, freq>* - -

The enumeration is ordered by document number. Each document number - is greater than all that precede it in the enumeration. -

- If there is a low-level IO error -
- - Returns an unpositioned enumerator. - If there is a low-level IO error - - - Returns an enumeration of all the documents which contain - term. For each document, in addition to the document number - and frequency of the term in that document, a list of all of the ordinal - positions of the term in the document is available. Thus, this method - implements the mapping: - -

- Term    =>    <docNum, freq, - <pos1, pos2, ... - posfreq-1> - >* - -

This positional information facilitates phrase and proximity searching. -

The enumeration is ordered by document number. Each document number is - greater than all that precede it in the enumeration. -

- If there is a low-level IO error -
- - Returns an unpositioned enumerator. - If there is a low-level IO error - - - - Deletes the document numbered docNum. Once a document is - deleted it will not appear in TermDocs or TermPostitions enumerations. - Attempts to read its field with the - method will result in an error. The presence of this document may still be - reflected in the statistic, though - this will be corrected eventually as the index is further modified. - - - If the index has changed since this reader was opened - - If the index is corrupt - - If another writer has this index open (write.lock could not be obtained) - - If there is a low-level IO error - - - Implements deletion of the document numbered docNum. - Applications should call or . - - - - - Deletes all documents that have a given term indexed. - This is useful if one uses a document field to hold a unique ID string for - the document. Then to delete such a document, one merely constructs a - term with the appropriate field and the unique ID string as its text and - passes it to this method. - See for information about when this deletion will - become effective. - - The number of documents deleted - - If the index has changed since this reader was opened - - If the index is corrupt - - If another writer has this index open (write.lock could not be obtained) - - If there is a low-level IO error - - - Undeletes all documents currently marked as deleted in this index. - - - - If the index has changed since this reader was opened - - If the index is corrupt - - If another writer has this index open (write.lock could not be obtained) - - If there is a low-level IO error - - - Implements actual undeleteAll() in subclass. - - - - Does nothing by default. Subclasses that require a write lock for - index modifications must implement this method. - - - - - - - - Opaque Map (String -> String) - that's recorded into the segments file in the index, - and retrievable by - - - - - Commit changes resulting from delete, undeleteAll, or - setNorm operations - - If an exception is hit, then either no changes or all - changes will have been committed to the index - (transactional semantics). - - If there is a low-level IO error - - - Commit changes resulting from delete, undeleteAll, or - setNorm operations - - If an exception is hit, then either no changes or all - changes will have been committed to the index - (transactional semantics). - - If there is a low-level IO error - - - Implements commit. - - - Closes files associated with this index. - Also saves any new deletions to disk. - No other methods should be called after this has been called. - - If there is a low-level IO error - - - Implements close. - - - Get a list of unique field names that exist in this index and have the specified - field option information. - - specifies which field option should be available for the returned fields - - Collection of Strings indicating the names of the fields. - - - - - - Prints the filename and size of each file within a given compound file. - Add the -extract flag to extract files to the current working directory. - In order to make the extracted version of the index work, you have to copy - the segments file from the compound index into the directory where the extracted files are stored. - - Usage: Lucene.Net.Index.IndexReader [-extract] <cfsfile> - - - - Returns all commit points that exist in the Directory. - Normally, because the default is - , there would be only - one commit point. But if you're using a custom - then there could be many commits. - Once you have a given commit, you can open a reader on - it by calling - There must be at least one commit in - the Directory, else this method throws . - Note that if a commit is in - progress while this method is running, that commit - may or may not be returned array. - - - - Expert: returns the sequential sub readers that this - reader is logically composed of. For example, - IndexSearcher uses this API to drive searching by one - sub reader at a time. If this reader is not composed - of sequential child readers, it should return null. - If this method returns an empty array, that means this - reader is a null reader (for example a MultiReader - that has no sub readers). -

- NOTE: You should not try using sub-readers returned by - this method to make any changes (setNorm, deleteDocument, - etc.). While this might succeed for one composite reader - (like MultiReader), it will most likely lead to index - corruption for other readers (like DirectoryReader obtained - through . Use the parent reader directly. -

-
- - Expert: returns the current refCount for this reader - - - Version number when this IndexReader was opened. Not implemented in the - IndexReader base class. - -

- If this reader is based on a Directory (ie, was created by calling - , or - on a reader based on a Directory), then - this method returns the version recorded in the commit that the reader - opened. This version is advanced every time is - called. -

- -

- If instead this reader is a near real-time reader (ie, obtained by a call - to , or by calling on a near - real-time reader), then this method returns the version of the last - commit done by the writer. Note that even as further changes are made - with the writer, the version will not changed until a commit is - completed. Thus, you should not rely on this method to determine when a - near real-time reader should be opened. Use instead. -

- -

- UnsupportedOperationException - unless overridden in subclass - -
- - Retrieve the String userData optionally passed to - . - This will return null if - - has never been called for this index. - - - - - - Returns one greater than the largest possible document number. - This may be used to, e.g., determine how big to allocate an array which - will have an element for every document number in an index. - - - - Returns the number of deleted documents. - - - Returns the stored fields of the nth - Document in this index. -

- NOTE: for performance reasons, this method does not check if the - requested document is deleted, and therefore asking for a deleted document - may yield unspecified results. Usually this is not required, however you - can call with the requested document ID to verify - the document is not deleted. - -

- CorruptIndexException if the index is corrupt - If there is a low-level IO error -
- - Returns true if any documents have been deleted - - - Expert: return the IndexCommit that this reader has - opened. This method is only implemented by those - readers that correspond to a Directory with its own - segments_N file. - -

WARNING: this API is new and experimental and - may suddenly change.

-

-
- - Expert - - - Returns the number of unique terms (across all fields) - in this reader. - - This method returns long, even though internally - Lucene cannot handle more than 2^31 unique terms, for - a possible future when this limitation is removed. - - - UnsupportedOperationException if this count - cannot be easily determined (eg Multi*Readers). - Instead, you should call - and ask each sub reader for - its unique term count. - - - - - For IndexReader implementations that use - TermInfosReader to read terms, this returns the - current indexDivisor as specified when the reader was - opened. - - - - Utility class for executing code that needs to do - something with the current segments file. This is - necessary with lock-less commits because from the time - you locate the current segments file name, until you - actually open it, read its contents, or check modified - time, etc., it could have been deleted due to a writer - commit finishing. - - - - A collection of segmentInfo objects with methods for operating on - those segments in relation to the file system. - -

NOTE: This API is new and still experimental - (subject to change suddenly in the next release)

-

-
- - The file format version, a negative number. - - - This format adds details used for lockless commits. It differs - slightly from the previous format in that file names - are never re-used (write once). Instead, each file is - written to the next generation. For example, - segments_1, segments_2, etc. This allows us to not use - a commit lock. See file - formats for details. - - - - This format adds a "hasSingleNormFile" flag into each segment info. - See LUCENE-756 - for details. - - - - This format allows multiple segments to share a single - vectors and stored fields file. - - - - This format adds a checksum at the end of the file to - ensure all bytes were successfully written. - - - - This format adds the deletion count for each segment. - This way IndexWriter can efficiently report numDocs(). - - - - This format adds the boolean hasProx to record if any - fields in the segment store prox information (ie, have - omitTermFreqAndPositions==false) - - - - This format adds optional commit userData (String) storage. - - - This format adds optional per-segment String - dianostics storage, and switches userData to Map - - - - counts how often the index has been changed by adding or deleting docs. - starting with the current time in milliseconds forces to create unique version numbers. - - - - If non-null, information about loading segments_N files - - - - - Get the generation (N) of the current segments_N file - from a list of files. - - - -- array of file names to check - - - - Get the generation (N) of the current segments_N file - in the directory. - - - -- directory to search for the latest segments_N file - - - - Get the filename of the current segments_N file - from a list of files. - - - -- array of file names to check - - - - Get the filename of the current segments_N file - in the directory. - - - -- directory to search for the latest segments_N file - - - - Get the segments_N filename in use by this segment infos. - - - Parse the generation off the segments file name and - return it. - - - - Get the next segments_N filename that will be written. - - - Read a particular segmentFileName. Note that this may - throw an IOException if a commit is in process. - - - -- directory containing the segments file - - -- segment file to load - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - This version of read uses the retry logic (for lock-less - commits) to find the right segments file to load. - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Returns a copy of this instance, also copying each - SegmentInfo. - - - - Current version number from segments file. - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Returns userData from latest segments file - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - If non-null, information about retries when loading - the segments file will be printed to this. - - - - Returns a new SegmentInfos containg the SegmentInfo - instances in the specified range first (inclusive) to - last (exclusive), so total number of segments returned - is last-first. - - - - Call this to start a commit. This writes the new - segments file, but writes an invalid checksum at the - end, so that it is not visible to readers. Once this - is called you must call to complete - the commit or to abort it. - - - - Returns all file names referenced by SegmentInfo - instances matching the provided Directory (ie files - associated with any "external" segments are skipped). - The returned collection is recomputed on each - invocation. - - - - Writes & syncs to the Directory dir, taking care to - remove the segments file on exception - - - - Replaces all segments in this instance, but keeps - generation, version, counter so that future commits - remain write once. - - - - - Simple brute force implementation. - If size is equal, compare items one by one. - - SegmentInfos object to check equality for - true if lists are equal, false otherwise - - - - Calculate hash code of SegmentInfos - - hash code as in java version of ArrayList - - - version number when this SegmentInfos was generated. - - - Advanced: Gets or sets how many times to try loading the - segments.gen file contents to determine current segment - generation. This file is only referenced when the - primary method (listing the directory) fails. - - - - Advanced: set how many times to try incrementing the - gen when loading the segments file. This only runs if - the primary (listing directory) and secondary (opening - segments.gen file) methods fail to find the segments - file. - - - - - - - - Utility class for executing code that needs to do - something with the current segments file. This is - necessary with lock-less commits because from the time - you locate the current segments file name, until you - actually open it, read its contents, or check modified - time, etc., it could have been deleted due to a writer - commit finishing. - - - - Subclass must implement this. The assumption is an - IOException will be thrown if something goes wrong - during the processing that could have been caused by - a writer committing. - - - - Constants describing field properties, for example used for - . - - - - All fields - - - All indexed fields - - - All fields that store payloads - - - All fields that omit tf - - - All fields which are not indexed - - - All fields which are indexed with termvectors enabled - - - All fields which are indexed but don't have termvectors enabled - - - All fields with termvectors enabled. Please note that only standard termvector fields are returned - - - All fields with termvectors with position values enabled - - - All fields with termvectors with offset values enabled - - - All fields with termvectors with offset values and position values enabled - - - Construct reading the named set of readers. - - - This constructor is only used for - - - Checks is the index is optimized (if it has a single segment and no deletions) - &lt;c&gt;true&lt;/c&gt; if the index is optimized; &lt;c&gt;false&lt;/c&gt; otherwise - - - Tries to acquire the WriteLock on this directory. this method is only valid if this IndexReader is directory - owner. - - - StaleReaderException if the index has changed since this reader was opened - CorruptIndexException if the index is corrupt - Lucene.Net.Store.LockObtainFailedException - if another writer has this index open (write.lock could not be - obtained) - - IOException if there is a low-level IO error - - - Commit changes resulting from delete, undeleteAll, or setNorm operations -

- If an exception is hit, then either no changes or all changes will have been committed to the index (transactional - semantics). - -

- IOException if there is a low-level IO error -
- - Returns the directory this index resides in. - - - - - - - Version number when this IndexReader was opened. - - - Expert: return the IndexCommit that this reader has opened. -

-

WARNING: this API is new and experimental and may suddenly change.

-

-
- -

Expert: represents a single commit into an index as seen by the - or .

- -

Changes to the content of an index are made visible - only after the writer who made that change commits by - writing a new segments file - (segments_N). This point in time, when the - action of writing of a new segments file to the directory - is completed, is an index commit.

- -

Each index commit point has a unique segments file - associated with it. The segments file associated with a - later index commit point would have a larger N.

- -

WARNING: This API is a new and experimental and - may suddenly change.

-

-
- - Delete this commit point. This only applies when using - the commit point in the context of IndexWriter's - IndexDeletionPolicy. -

- Upon calling this, the writer is notified that this commit - point should be deleted. -

- Decision that a commit-point should be deleted is taken by the in effect - and therefore this should only be called by its or - methods. -

-
- - Two IndexCommits are equal if both their Directory and versions are equal. - - - Get the segments file (segments_N) associated - with this commit point. - - - - Returns all index files referenced by this commit point. - - - Returns the for the index. - - - Returns true if this commit is an optimized index. - - - Returns the version for this IndexCommit. This is the - same value that would - return if it were opened on this commit. - - - - Returns the generation (the _N in segments_N) for this - IndexCommit - - - - Convenience method that returns the last modified time - of the segments_N file corresponding to this index - commit, equivalent to - getDirectory().fileModified(getSegmentsFileName()). - - - - Returns userData, previously passed to - - for this commit. IDictionary is String -> String. - - - - Abstract class for enumerating terms. -

Term enumerations are always ordered by Term.compareTo(). Each term in - the enumeration is greater than all that precede it. -

-
- - Increments the enumeration to the next element. True if one exists. - - - Returns the docFreq of the current Term in the enumeration. - - - Closes the enumeration to further activity, freeing resources. - - - Closes the enumeration to further activity, freeing resources. - - - Returns the current Term in the enumeration. - - - Optimized implementation. - - - TermPositions provides an interface for enumerating the <document, - frequency, <position>* > tuples for a term.

The document and - frequency are the same as for a TermDocs. The positions portion lists the ordinal - positions of each occurrence of a term in a document. - -

- - -
- - Returns next position in the current document. It is an error to call - this more than times - without calling

This is - invalid until is called for - the first time. -

-
- - Returns the payload data at the current term position. - This is invalid until is called for - the first time. - This method must not be called more than once after each call - of . However, payloads are loaded lazily, - so if the payload data for the current position is not needed, - this method may not be called at all for performance reasons.
- -
- the array into which the data of this payload is to be - stored, if it is big enough; otherwise, a new byte[] array - is allocated for this purpose. - - the offset in the array into which the data of this payload - is to be stored. - - a byte[] array containing the data of this payload - - IOException -
- - Returns the length of the payload at the current term position. - This is invalid until is called for - the first time.
-
- length of the current payload in number of bytes -
- - Checks if a payload can be loaded at this position. -

- Payloads can only be loaded once per call to - . - -

- true if there is a payload available at this position that can be loaded -
- - Process the document. If there is - something for this document to be done in docID order, - you should encapsulate that as a - DocumentsWriter.DocWriter and return it. - DocumentsWriter then calls finish() on this object - when it's its turn. - - - - Called when DocumentsWriter decides to create a new - segment - - - - Called when DocumentsWriter decides to close the doc - stores - - - - Called when an aborting exception is hit - - - Add a new thread - - - Called when DocumentsWriter is using too much RAM. - The consumer should free RAM, if possible, returning - true if any RAM was in fact freed. - - - - Processes all occurrences of a single field - - - This is just a "splitter" class: it lets you wrap two - DocFieldConsumer instances as a single consumer. - - - - Consumer returns this on each doc. This holds any - state that must be flushed synchronized "in docID - order". We gather these and flush them in order. - - - - This class accepts multiple added documents and directly - writes a single segment file. It does this more - efficiently than creating a single segment per document - (with DocumentWriter) and doing standard merges on those - segments. - - Each added document is passed to the , - which in turn processes the document and interacts with - other consumers in the indexing chain. Certain - consumers, like and - , digest a document and - immediately write bytes to the "doc store" files (ie, - they do not consume RAM per document, except while they - are processing the document). - - Other consumers, eg and - , buffer bytes in RAM and flush only - when a new segment is produced. - Once we have used our allowed RAM buffer, or the number - of added docs is large enough (in the case we are - flushing by doc count instead of RAM usage), we create a - real segment and flush it to the Directory. - - Threads: - - Multiple threads are allowed into addDocument at once. - There is an initial synchronized call to getThreadState - which allocates a ThreadState for this thread. The same - thread will get the same ThreadState over time (thread - affinity) so that if there are consistent patterns (for - example each thread is indexing a different content - source) then we make better use of RAM. Then - processDocument is called on that ThreadState without - synchronization (most of the "heavy lifting" is in this - call). Finally the synchronized "finishDocument" is - called to flush changes to the directory. - - When flush is called by IndexWriter we forcefully idle - all threads and flush only once they are all idle. This - means you can call flush with a given thread even while - other threads are actively adding/deleting documents. - - - Exceptions: - - Because this class directly updates in-memory posting - lists, and flushes stored fields and term vectors - directly to files in the directory, there are certain - limited times when an exception can corrupt this state. - For example, a disk full while flushing stored fields - leaves this file in a corrupt state. Or, an OOM - exception while appending to the in-memory posting lists - can corrupt that posting list. We call such exceptions - "aborting exceptions". In these cases we must call - abort() to discard all docs added since the last flush. - - All other exceptions ("non-aborting exceptions") can - still partially update the index structures. These - updates are consistent, but, they represent only a part - of the document seen up until the exception was hit. - When this happens, we immediately mark the document as - deleted so that the document is always atomically ("all - or none") added to the index. - - - - Returns true if any of the fields in the current - buffered docs have omitTermFreqAndPositions==false - - - - If non-null, various details of indexing are printed - here. - - - - Set how much RAM we can use before flushing. - - - Closes the current open doc stores an returns the doc - store segment name. This returns null if there are * - no buffered documents. - - - - Called if we hit an exception at a bad time (when - updating the index files) and must discard all - currently buffered docs. This resets our state, - discarding any docs added since last flush. - - - - Reset after a flush - - - Flush all pending docs to a new segment - - - Build compound file for the segment we just flushed - - - Set flushPending if it is not already set and returns - whether it was set. This is used by IndexWriter to - trigger a single flush even when multiple threads are - trying to do so. - - - - Returns a free (idle) ThreadState that may be used for - indexing this one document. This call also pauses if a - flush is pending. If delTerm is non-null then we - buffer this deleted term after the thread state has - been acquired. - - - - Returns true if the caller (IndexWriter) should now - flush. - - - - Called whenever a merge has completed and the merged segments had deletions - - - Does the synchronized work to finish/flush the - inverted document. - - - - Gets or sets max buffered docs, which means we will flush by - doc count instead of by RAM usage. - - - - Get current segment name we are writing. - - - Returns how many docs are currently buffered in RAM. - - - Returns the current doc store segment we are writing - to. - - - - Returns the doc offset into the shared doc store for - the current buffered docs. - - - - The IndexingChain must define the method - which returns the DocConsumer that the DocumentsWriter calls to process the - documents. - - - - Consumer returns this on each doc. This holds any - state that must be flushed synchronized "in docID - order". We gather these and flush them in order. - - - - Expert: allocate a new buffer. - Subclasses can allocate differently. - - size of allocated buffer. - - allocated buffer. - - - - This is a DocConsumer that gathers all fields under the - same name, and calls per-field consumers to process field - by field. This class doesn't doesn't do any "real" work - of its own: it just forwards the fields to a - DocFieldConsumer. - - - - Holds all per thread, per field state. - - - Gathers all Fieldables for a document under the same - name, updates FieldInfos, and calls per-field consumers - to process field by field. - - Currently, only a single thread visits the fields, - sequentially, for processing. - - - - If there are fields we've seen but did not see again - in the last run, then free them up. - - - - This is a DocFieldConsumer that inverts each field, - separately, from a Document, and accepts a - InvertedTermsConsumer to process those terms. - - - - Holds state for inverting all occurrences of a single - field in the document. This class doesn't do anything - itself; instead, it forwards the tokens produced by - analysis to its own consumer - (InvertedDocConsumerPerField). It also interacts with an - endConsumer (InvertedDocEndConsumerPerField). - - - - This is a DocFieldConsumer that inverts each field, - separately, from a Document, and accepts a - InvertedTermsConsumer to process those terms. - - - - Used by DocumentsWriter to maintain per-thread state. - We keep a separate Posting hash and other state for each - thread and then merge postings hashes from all threads - when writing the segment. - - - - Access to the Fieldable Info file that describes document fields and whether or - not they are indexed. Each segment has a separate Fieldable Info file. Objects - of this class are thread-safe for multiple readers, but only one thread can - be adding documents at a time, with no other reader or writer threads - accessing this object. - - - - Construct a FieldInfos object using the directory and the name of the file - IndexInput - - The directory to open the IndexInput from - - The name of the file to open the IndexInput from in the Directory - - IOException - - - Returns a deep clone of this FieldInfos instance. - - - Adds field info for a Document. - - - Returns true if any fields do not omitTermFreqAndPositions - - - Add fields that are indexed. Whether they have termvectors has to be specified. - - - The names of the fields - - Whether the fields store term vectors or not - - true if positions should be stored. - - true if offsets should be stored - - - - Assumes the fields are not storing term vectors. - - - The names of the fields - - Whether the fields are indexed or not - - - - - - - Calls 5 parameter add with false for all TermVector parameters. - - - The name of the Fieldable - - true if the field is indexed - - - - - - Calls 5 parameter add with false for term vector positions and offsets. - - - The name of the field - - true if the field is indexed - - true if the term vector should be stored - - - - If the field is not yet known, adds it. If it is known, checks to make - sure that the isIndexed flag is the same as was given previously for this - field. If not - marks it as being indexed. Same goes for the TermVector - parameters. - - - The name of the field - - true if the field is indexed - - true if the term vector should be stored - - true if the term vector with positions should be stored - - true if the term vector with offsets should be stored - - - - If the field is not yet known, adds it. If it is known, checks to make - sure that the isIndexed flag is the same as was given previously for this - field. If not - marks it as being indexed. Same goes for the TermVector - parameters. - - - The name of the field - - true if the field is indexed - - true if the term vector should be stored - - true if the term vector with positions should be stored - - true if the term vector with offsets should be stored - - true if the norms for the indexed field should be omitted - - - - If the field is not yet known, adds it. If it is known, checks to make - sure that the isIndexed flag is the same as was given previously for this - field. If not - marks it as being indexed. Same goes for the TermVector - parameters. - - - The name of the field - - true if the field is indexed - - true if the term vector should be stored - - true if the term vector with positions should be stored - - true if the term vector with offsets should be stored - - true if the norms for the indexed field should be omitted - - true if payloads should be stored for this field - - true if term freqs should be omitted for this field - - - - Return the fieldName identified by its number. - - - - - the fieldName or an empty string when the field - with the given number doesn't exist. - - - - Return the fieldinfo object referenced by the fieldNumber. - - - the FieldInfo object or null when the given fieldNumber - doesn't exist. - - - - This class tracks the number and position / offset parameters of terms - being added to the index. The information collected in this class is - also used to calculate the normalization factor for a field. - -

WARNING: This API is new and experimental, and may suddenly - change.

-

-
- - Re-initialize the state, using this boost value. - boost value to use. - - - - Get the last processed term position. - the position - - - Get total number of terms in this field. - the length - - - Get the number of terms with positionIncrement == 0. - the numOverlap - - - Get end offset of the last processed term. - the offset - - - Get boost value. This is the cumulative product of - document boost and field boost for all field instances - sharing the same field name. - - the boost - - - - - - - - - Constructs a new runtime exception with null as its - detail message. The cause is not initialized, and may subsequently be - initialized by a call to . - - - - Constructs a new runtime exception with the specified cause and a - detail message of (cause==null ? null : cause.toString()) - (which typically contains the class and detail message of - cause). -

- This constructor is useful for runtime exceptions - that are little more than wrappers for other throwables. - -

- the cause (which is saved for later retrieval by the - ). (A null value is - permitted, and indicates that the cause is nonexistent or - unknown.) - - 1.4 - -
- - Constructs a new runtime exception with the specified detail message. - The cause is not initialized, and may subsequently be initialized by a - call to . - - - the detail message. The detail message is saved for - later retrieval by the method. - - - - Constructs a new runtime exception with the specified detail message and - cause.

Note that the detail message associated with - cause is not automatically incorporated in - this runtime exception's detail message. - -

- the detail message (which is saved for later retrieval - by the method). - - the cause (which is saved for later retrieval by the - method). (A null value is - permitted, and indicates that the cause is nonexistent or - unknown.) - - 1.4 - -
- - For each Field, store a sorted collection of s -

- This is not thread-safe. -

-
- - The TermVectorMapper can be used to map Term Vectors into your own - structure instead of the parallel array structure used by - . -

- It is up to the implementation to make sure it is thread-safe. - - - -

-
- - - true if this mapper should tell Lucene to ignore positions even if they are stored - - similar to ignoringPositions - - - - Tell the mapper what to expect in regards to field, number of terms, offset and position storage. - This method will be called once before retrieving the vector for a field. - - This method will be called before . - - The field the vector is for - - The number of terms that need to be mapped - - true if the mapper should expect offset information - - true if the mapper should expect positions info - - - - Map the Term Vector information into your own structure - The term to add to the vector - - The frequency of the term in the document - - null if the offset is not specified, otherwise the offset into the field of the term - - null if the position is not specified, otherwise the position in the field of the term - - - - Passes down the index of the document whose term vector is currently being mapped, - once for each top level call to a term vector reader. -

- Default implementation IGNORES the document number. Override if your implementation needs the document number. -

- NOTE: Document numbers are internal to Lucene and subject to change depending on indexing operations. - -

- index of document currently being mapped - -
- - Indicate to Lucene that even if there are positions stored, this mapper is not interested in them and they - can be skipped over. Derived classes should set this to true if they want to ignore positions. The default - is false, meaning positions will be loaded if they are stored. - - false - - - - Same principal as , but applied to offsets. false by default. - - false - - - - A Comparator for sorting s - - - - Get the mapping between fields and terms, sorted by the comparator - - - A map between field names and <see cref="System.Collections.Generic.SortedDictionary{Object,Object}" />s per field. SortedSet entries are <see cref="TermVectorEntry" /> - - - Class responsible for access to stored document fields. -

- It uses <segment>.fdt and <segment>.fdx; files. - -

-
- - Returns a cloned FieldsReader that shares open - IndexInputs with the original one. It is the caller's - job not to close the original FieldsReader until all - clones are called (eg, currently SegmentReader manages - this logic). - - - - AlreadyClosedException if this FieldsReader is closed - - - Closes the underlying streams, including any ones associated with a - lazy implementation of a Field. This means that the Fields values will not be accessible. - - - IOException - - - Returns the length in bytes of each raw document in a - contiguous range of length numDocs starting with - startDocID. Returns the IndexInput (the fieldStream), - already seeked to the starting point for startDocID. - - - - Skip the field. We still have to read some of the information about the field, but can skip past the actual content. - This will have the most payoff on large fields. - - - - A Lazy implementation of Fieldable that differs loading of fields until asked for, instead of when the Document is - loaded. - - - - The value of the field as a Reader, or null. If null, the String value, - binary value, or TokenStream value is used. Exactly one of StringValue(), - ReaderValue(), GetBinaryValue(), and TokenStreamValue() must be set. - - - - The value of the field as a TokenStream, or null. If null, the Reader value, - String value, or binary value is used. Exactly one of StringValue(), - ReaderValue(), GetBinaryValue(), and TokenStreamValue() must be set. - - - - The value of the field as a String, or null. If null, the Reader value, - binary value, or TokenStream value is used. Exactly one of StringValue(), - ReaderValue(), GetBinaryValue(), and TokenStreamValue() must be set. - - - - Bulk write a contiguous series of documents. The - lengths array is the length (in bytes) of each raw - document. The stream IndexInput is the - fieldsStream from which we should bulk-copy all - bytes. - - - - A FilterIndexReader contains another IndexReader, which it - uses as its basic source of data, possibly transforming the data along the - way or providing additional functionality. The class - FilterIndexReader itself simply implements all abstract methods - of IndexReader with versions that pass all requests to the - contained index reader. Subclasses of FilterIndexReader may - further override some of these methods and may also provide additional - methods and fields. - - - -

Construct a FilterIndexReader based on the specified base reader. - Directory locking for delete, undeleteAll, and setNorm operations is - left to the base reader.

-

Note that base reader is closed if this FilterIndexReader is closed.

-

- specified base reader. - -
- - - If the subclass of FilteredIndexReader modifies the - contents of the FieldCache, you must override this - method to provide a different key */ - - - - - If the subclass of FilteredIndexReader modifies the - deleted docs, you must override this method to provide - a different key */ - - - - Base class for filtering implementations. - - - Base class for filtering implementations. - - - Base class for filtering implementations. - - - NOTE: this API is experimental and will likely change - - - Adds a new doc in this term. If this returns null - then we just skip consuming positions/payloads. - - - - Called when we are done adding docs to this term - - - Consumes doc and freq, writing them using the current - index file format - - - - Adds a new doc in this term. If this returns null - then we just skip consuming positions/payloads. - - - - Called when we are done adding docs to this term - - - Abstract API that consumes terms, doc, freq, prox and - payloads postings. Concrete implementations of this - actually do "something" with the postings (write it into - the index in a specific format). - - NOTE: this API is experimental and will likely change - - - - Add a new field - - - Called when we are done adding everything. - - - Add a new field - - - Called when we are done adding everything. - - - Add a new position & payload. If payloadLength > 0 - you must read those bytes from the IndexInput. - - - - Called when we are done adding positions & payloads - - - Add a new position & payload - - - Called when we are done adding positions & payloads - - - NOTE: this API is experimental and will likely change - - - Adds a new term in this field; term ends with U+FFFF - char - - - - Called when we are done adding terms to this field - - - Adds a new term in this field - - - Called when we are done adding terms to this field - - - Used by DocumentsWriter to merge the postings from - multiple ThreadStates when creating a segment - - - - This is the base class for an in-memory posting list, - keyed by a Token. maintains a hash - table holding one instance of this per unique Token. - Consumers of TermsHash () must - subclass this class with its own concrete class. - FreqProxTermsWriter.PostingList is a private inner class used - for the freq/prox postings, and - TermVectorsTermsWriter.PostingList is a private inner class - used to hold TermVectors postings. - - - - Implement this class to plug into the TermsHash - processor, which inverts and stores Tokens into a hash - table and provides an API for writing bytes into - multiple streams for each unique Token. - - - -

Expert: policy for deletion of stale index commits. - -

Implement this interface, and pass it to one - of the or - constructors, to customize when older - point-in-time commits - are deleted from the index directory. The default deletion policy - is , which always - removes old commits as soon as a new commit is done (this - matches the behavior before 2.2).

- -

One expected use case for this (and the reason why it - was first created) is to work around problems with an - index directory accessed via filesystems like NFS because - NFS does not provide the "delete on last close" semantics - that Lucene's "point in time" search normally relies on. - By implementing a custom deletion policy, such as "a - commit is only removed once it has been stale for more - than X minutes", you can give your readers time to - refresh to the new commit before - removes the old commits. Note that doing so will - increase the storage requirements of the index. See LUCENE-710 - for details.

-

-
- -

This is called once when a writer is first - instantiated to give the policy a chance to remove old - commit points.

- -

The writer locates all index commits present in the - index directory and calls this method. The policy may - choose to delete some of the commit points, doing so by - calling method - of .

- -

Note: the last CommitPoint is the most recent one, - i.e. the "front index state". Be careful not to delete it, - unless you know for sure what you are doing, and unless - you can afford to lose the index content while doing that. - -

- List of current - point-in-time commits, - sorted by age (the 0th one is the oldest commit). - -
- - -

This is called each time the writer completed a commit. - This gives the policy a chance to remove old commit points - with each commit.

- -

The policy may now choose to delete old commit points - by calling method - of .

- -

This method is only called when - or is called, or possibly not at - all if the is called.

- -

Note: the last CommitPoint is the most recent one, - i.e. the "front index state". Be careful not to delete it, - unless you know for sure what you are doing, and unless - you can afford to lose the index content while doing that.

-
- - List of , sorted by age (the 0th one is the oldest commit). - -
- - - This class keeps track of each SegmentInfos instance that - is still "live", either because it corresponds to a - segments_N file in the Directory (a "commit", i.e. a - committed SegmentInfos) or because it's an in-memory - SegmentInfos that a writer is actively updating but has - not yet committed. This class uses simple reference - counting to map the live SegmentInfos instances to - individual files in the Directory. - - The same directory file may be referenced by more than - one IndexCommit, i.e. more than one SegmentInfos. - Therefore we count how many commits reference each file. - When all the commits referencing a certain file have been - deleted, the refcount for that file becomes zero, and the - file is deleted. - - A separate deletion policy interface - (IndexDeletionPolicy) is consulted on creation (onInit) - and once per commit (onCommit), to decide when a commit - should be removed. - - It is the business of the IndexDeletionPolicy to choose - when to delete commit points. The actual mechanics of - file deletion, retrying, etc, derived from the deletion - of commit points is the business of the IndexFileDeleter. - - The current default deletion policy is - , which removes all - prior commits when a new commit has completed. This - matches the behavior before 2.2. - - Note that you must hold the write.lock before - instantiating this class. It opens segments_N file(s) - directly with no retry logic. - - - - because they are open and we are running on Windows), - so we will retry them again later: //// - - - Counts how many existing commits reference a file. - Maps String to RefCount (class below) instances: //// - - - This will have just 1 commit if you are using the - default delete policy (KeepOnlyLastCommitDeletionPolicy). - Other policies may leave commit points live for longer - in which case this list would be longer than 1: //// - - - non-commit checkpoint: //// - - - Change to true to see details of reference counts when - infoStream != null - - - - Initialize the deleter: find all previous commits in - the Directory, incref the files they reference, call - the policy to let it delete commits. This will remove - any files not referenced by any of the commits. - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Remove the CommitPoints in the commitsToDelete List by - DecRef'ing all files from each SegmentInfos. - - - - Writer calls this when it has hit an error and had to - roll back, to tell us that there may now be - unreferenced files in the filesystem. So we re-list - the filesystem and delete such files. If segmentName - is non-null, we will only delete files corresponding to - that segment. - - - - For definition of "check point" see IndexWriter comments: - "Clarification: Check Points (and commits)". - - Writer calls this when it has made a "consistent - change" to the index, meaning new files are written to - the index and the in-memory SegmentInfos have been - modified to point to those files. - - This may or may not be a commit (segments_N may or may - not have been written). - - We simply incref the files referenced by the new - SegmentInfos and decref the files we had previously - seen (if any). - - If this is a commit, we also call the policy to give it - a chance to remove other commits. If any commits are - removed, we decref their files as well. - - - - Deletes the specified files, but only if they are new - (have not yet been incref'd). - - - - Tracks the reference count for a single index file: - - - Holds details for each commit point. This class is - also passed to the deletion policy. Note: this class - has a natural ordering that is inconsistent with - equals. - - - - Called only be the deletion policy, to remove this - commit point from the index. - - - - Filename filter that accept filenames and extensions only created by Lucene. - - - Returns true if this is a file that would be contained - in a CFS file. This function should only be called on - files that pass the above "accept" (ie, are already - known to be a Lucene index file). - - - - Useful constants representing filenames and extensions used by lucene - - - Name of the index segment file - - - Name of the generation reference file name - - - Name of the index deletable file (only used in - pre-lockless indices) - - - - Extension of norms file - - - Extension of freq postings file - - - Extension of prox postings file - - - Extension of terms file - - - Extension of terms index file - - - Extension of stored fields index file - - - Extension of stored fields file - - - Extension of vectors fields file - - - Extension of vectors documents file - - - Extension of vectors index file - - - Extension of compound file - - - Extension of compound file for doc store files - - - Extension of deletes - - - Extension of field infos - - - Extension of plain norms - - - Extension of separate norms - - - Extension of gen file - - - This array contains all filename extensions used by - Lucene's index files, with two exceptions, namely the - extension made up from .f + a number and - from .s + a number. Also note that - Lucene's segments_N files do not have any - filename extension. - - - - File extensions that are added to a compound file - (same as above, minus "del", "gen", "cfs"). - - - - File extensions of old-style index files - - - File extensions for term vector support - - - Computes the full file name from base, extension and - generation. If the generation is -1, the file name is - null. If it's 0, the file name is - If it's > 0, the file name is - - - -- main part of the file name - - -- extension of the filename (including .) - - -- generation - - - - Returns true if the provided filename is one of the doc - store files (ends with an extension in - STORE_INDEX_EXTENSIONS). - - - - An IndexWriter creates and maintains an index. -

The create argument to the - constructor determines - whether a new index is created, or whether an existing index is - opened. Note that you can open an index with create=true - even while readers are using the index. The old readers will - continue to search the "point in time" snapshot they had opened, - and won't see the newly created index until they re-open. There are - also constructors - with no create argument which will create a new index - if there is not already an index at the provided path and otherwise - open the existing index.

-

In either case, documents are added with - and removed with or - . A document can be updated with - (which just deletes - and then adds the entire document). When finished adding, deleting - and updating documents, should be called.

- -

These changes are buffered in memory and periodically - flushed to the (during the above method - calls). A flush is triggered when there are enough - buffered deletes (see ) - or enough added documents since the last flush, whichever - is sooner. For the added documents, flushing is triggered - either by RAM usage of the documents (see - ) or the number of added documents. - The default is to flush when RAM usage hits 16 MB. For - best indexing speed you should flush by RAM usage with a - large RAM buffer. Note that flushing just moves the - internal buffered state in IndexWriter into the index, but - these changes are not visible to IndexReader until either - or is called. A flush may - also trigger one or more segment merges which by default - run with a background thread so as not to block the - addDocument calls (see below - for changing the ). -

- If an index will not have more documents added for a while and optimal search - performance is desired, then either the full - method or partial method should be - called before the index is closed. -

- Opening an IndexWriter creates a lock file for the directory in use. Trying to open - another IndexWriter on the same directory will lead to a - . The - is also thrown if an IndexReader on the same directory is used to delete documents - from the index.

-

- -

Expert: IndexWriter allows an optional - implementation to be - specified. You can use this to control when prior commits - are deleted from the index. The default policy is - which removes all prior - commits as soon as a new commit is done (this matches - behavior before 2.2). Creating your own policy can allow - you to explicitly keep previous "point in time" commits - alive in the index for some time, to allow readers to - refresh to the new commit without having the old commit - deleted out from under them. This is necessary on - filesystems like NFS that do not support "delete on last - close" semantics, which Lucene's "point in time" search - normally relies on.

-

Expert: - IndexWriter allows you to separately change - the and the . - The is invoked whenever there are - changes to the segments in the index. Its role is to - select which merges to do, if any, and return a - describing the merges. It - also selects merges to do for optimize(). (The default is - . Then, the - is invoked with the requested merges and - it decides when and how to run the merges. The default is - .

-

NOTE: if you hit an - OutOfMemoryError then IndexWriter will quietly record this - fact and block all future segment commits. This is a - defensive measure in case any internal state (buffered - documents and deletions) were corrupted. Any subsequent - calls to will throw an - IllegalStateException. The only course of action is to - call , which internally will call - , to undo any changes to the index since the - last commit. You can also just call - directly.

-

NOTE: - instances are completely thread - safe, meaning multiple threads can call any of its - methods, concurrently. If your application requires - external synchronization, you should not - synchronize on the IndexWriter instance as - this may cause deadlock; use your own (non-Lucene) objects - instead.

- NOTE: if you call - Thread.Interrupt() on a thread that's within - IndexWriter, IndexWriter will try to catch this (eg, if - it's in a Wait() or Thread.Sleep()), and will then throw - the unchecked exception - and clear the interrupt status on the thread

-

-
- - Name of the write lock in the index. - - - Value to denote a flush trigger is disabled - - - Default value is 16 MB (which means flush when buffered - docs consume 16 MB RAM). Change using . - - - - Default value is 10,000. Change using . - - - Default value is 128. Change using . - - - Default value for the write lock timeout (1,000). - - - - - Disabled by default (because IndexWriter flushes by RAM usage - by default). Change using . - - - - Disabled by default (because IndexWriter flushes by RAM usage - by default). Change using . - - - - Absolute hard maximum length for a term. If a term - arrives from the analyzer longer than this length, it - is skipped and a message is printed to infoStream, if - set (see ). - - - - Expert: returns a readonly reader, covering all committed as well as - un-committed changes to the index. This provides "near real-time" - searching, in that changes made during an IndexWriter session can be - quickly made available for searching without closing the writer nor - calling . - -

- Note that this is functionally equivalent to calling {#commit} and then - using to open a new reader. But the turarnound - time of this method should be faster since it avoids the potentially - costly . -

- - You must close the returned by this method once you are done using it. - -

- It's near real-time because there is no hard - guarantee on how quickly you can get a new reader after - making changes with IndexWriter. You'll have to - experiment in your situation to determine if it's - faster enough. As this is a new and experimental - feature, please report back on your findings so we can - learn, improve and iterate.

- -

The resulting reader suppports - , but that call will simply forward - back to this method (though this may change in the - future).

- -

The very first time this method is called, this - writer instance will make every effort to pool the - readers that it opens for doing merges, applying - deletes, etc. This means additional resources (RAM, - file descriptors, CPU time) will be consumed.

- -

For lower latency on reopening a reader, you should call - to call to - pre-warm a newly merged segment before it's committed - to the index. This is important for minimizing index-to-search - delay after a large merge. - -

If an addIndexes* call is running in another thread, - then this reader will only search those segments from - the foreign index that have been successfully copied - over, so far

. - -

NOTE: Once the writer is closed, any - outstanding readers may continue to be used. However, - if you attempt to reopen any of those readers, you'll - hit an .

- -

NOTE: This API is experimental and might - change in incompatible ways in the next release.

- -

- IndexReader that covers entire index plus all - changes made so far by this IndexWriter instance - - - IOException -
- - Expert: like , except you can - specify which termInfosIndexDivisor should be used for - any newly opened readers. - - Subsambles which indexed - terms are loaded into RAM. This has the same effect as - except that setting - must be done at indexing time while this setting can be - set per reader. When set to N, then one in every - N*termIndexInterval terms in the index is loaded into - memory. By setting this to a value > 1 you can reduce - memory usage, at the expense of higher latency when - loading a TermInfo. The default value is 1. Set this - to -1 to skip loading the terms index entirely. - - - - Obtain the number of deleted docs for a pooled reader. - If the reader isn't being pooled, the segmentInfo's - delCount is returned. - - - - Used internally to throw an - if this IndexWriter has been - closed. - - AlreadyClosedException if this IndexWriter is - - - Prints a message to the infoStream (if non-null), - prefixed with the identifying information for this - writer and the thread that's calling it. - - - - Expert: Set the Similarity implementation used by this IndexWriter. - - - - Constructs an IndexWriter for the index in d. - Text will be analyzed with a. If create - is true, then a new, empty index will be created in - d, replacing the index already there, if any. - - - the index directory - - the analyzer to use - - true to create the index or overwrite - the existing one; false to append to the existing - index - - Maximum field length in number of terms/tokens: LIMITED, UNLIMITED, or user-specified - via the MaxFieldLength constructor. - - CorruptIndexException if the index is corrupt - LockObtainFailedException if another writer - has this index open (write.lock could not - be obtained) - - IOException if the directory cannot be read/written to, or - if it does not exist and create is - false or if there is any other low-level - IO error - - - - Constructs an IndexWriter for the index in - d, first creating it if it does not - already exist. - - - the index directory - - the analyzer to use - - Maximum field length in number of terms/tokens: LIMITED, UNLIMITED, or user-specified - via the MaxFieldLength constructor. - - CorruptIndexException if the index is corrupt - LockObtainFailedException if another writer - has this index open (write.lock could not - be obtained) - - IOException if the directory cannot be - read/written to or if there is any other low-level - IO error - - - - Expert: constructs an IndexWriter with a custom - , for the index in d, - first creating it if it does not already exist. Text - will be analyzed with a. - - - the index directory - - the analyzer to use - - see above - - whether or not to limit field lengths - - CorruptIndexException if the index is corrupt - LockObtainFailedException if another writer - has this index open (write.lock could not - be obtained) - - IOException if the directory cannot be - read/written to or if there is any other low-level - IO error - - - - Expert: constructs an IndexWriter with a custom - , for the index in d. - Text will be analyzed with a. If - create is true, then a new, empty index - will be created in d, replacing the index - already there, if any. - - - the index directory - - the analyzer to use - - true to create the index or overwrite - the existing one; false to append to the existing - index - - see above - - , whether or not to limit field lengths. Value is in number of terms/tokens - - CorruptIndexException if the index is corrupt - LockObtainFailedException if another writer - has this index open (write.lock could not - be obtained) - - IOException if the directory cannot be read/written to, or - if it does not exist and create is - false or if there is any other low-level - IO error - - - - Expert: constructs an IndexWriter with a custom - and , - for the index in d. - Text will be analyzed with a. If - create is true, then a new, empty index - will be created in d, replacing the index - already there, if any. - - - the index directory - - the analyzer to use - - true to create the index or overwrite - the existing one; false to append to the existing - index - - see above - - whether or not to limit field lengths, value is in number of terms/tokens. See . - - the chain to be used to - process documents - - which commit to open - - CorruptIndexException if the index is corrupt - LockObtainFailedException if another writer - has this index open (write.lock could not - be obtained) - - IOException if the directory cannot be read/written to, or - if it does not exist and create is - false or if there is any other low-level - IO error - - - - Expert: constructs an IndexWriter on specific commit - point, with a custom , for - the index in d. Text will be analyzed - with a. - -

This is only meaningful if you've used a - in that past that keeps more than - just the last commit. - -

This operation is similar to , - except that method can only rollback what's been done - with the current instance of IndexWriter since its last - commit, whereas this method can rollback to an - arbitrary commit point from the past, assuming the - has preserved past - commits. - -

- the index directory - - the analyzer to use - - see above - - whether or not to limit field lengths, value is in number of terms/tokens. See . - - which commit to open - - CorruptIndexException if the index is corrupt - LockObtainFailedException if another writer - has this index open (write.lock could not - be obtained) - - IOException if the directory cannot be read/written to, or - if it does not exist and create is - false or if there is any other low-level - IO error - -
- - Expert: set the merge policy used by this writer. - - - Expert: set the merge scheduler used by this writer. - - - The maximum number of terms that will be indexed for a single field in a - document. This limits the amount of memory required for indexing, so that - collections with very large files will not crash the indexing process by - running out of memory. This setting refers to the number of running terms, - not to the number of different terms.

- Note: this silently truncates large documents, excluding from the - index all terms that occur further in the document. If you know your source - documents are large, be sure to set this value high enough to accomodate - the expected size. If you set it to Integer.MAX_VALUE, then the only limit - is your memory, but you should anticipate an OutOfMemoryError.

- By default, no more than terms - will be indexed for a field. -

-
- - Returns the maximum number of terms that will be - indexed for a single field in a document. - - - - - - Determines the minimal number of documents required - before the buffered in-memory documents are flushed as - a new Segment. Large values generally gives faster - indexing. - -

When this is set, the writer will flush every - maxBufferedDocs added documents. Pass in - to prevent triggering a flush due - to number of buffered documents. Note that if flushing - by RAM usage is also enabled, then the flush will be - triggered by whichever comes first.

- -

Disabled by default (writer flushes by RAM usage).

- -

- IllegalArgumentException if maxBufferedDocs is - enabled but smaller than 2, or it disables maxBufferedDocs - when ramBufferSize is already disabled - - - -
- - If we are flushing by doc count (not by RAM usage), and - using LogDocMergePolicy then push maxBufferedDocs down - as its minMergeDocs, to keep backwards compatibility. - - - - Returns the number of buffered added documents that will - trigger a flush if enabled. - - - - - - Determines the amount of RAM that may be used for - buffering added documents and deletions before they are - flushed to the Directory. Generally for faster - indexing performance it's best to flush by RAM usage - instead of document count and use as large a RAM buffer - as you can. - -

When this is set, the writer will flush whenever - buffered documents and deletions use this much RAM. - Pass in to prevent - triggering a flush due to RAM usage. Note that if - flushing by document count is also enabled, then the - flush will be triggered by whichever comes first.

- -

NOTE: the account of RAM usage for pending - deletions is only approximate. Specifically, if you - delete by Query, Lucene currently has no way to measure - the RAM usage if individual Queries so the accounting - will under-estimate and you should compensate by either - calling commit() periodically yourself, or by using - to flush by count - instead of RAM usage (each buffered delete Query counts - as one). - -

- NOTE: because IndexWriter uses ints when managing its - internal storage, the absolute maximum value for this setting is somewhat - less than 2048 MB. The precise limit depends on various factors, such as - how large your documents are, how many fields have norms, etc., so it's - best to set this value comfortably under 2048. -

- -

The default value is .

- -

- IllegalArgumentException if ramBufferSize is - enabled but non-positive, or it disables ramBufferSize - when maxBufferedDocs is already disabled - -
- - Returns the value set by if enabled. - - -

Determines the minimal number of delete terms required before the buffered - in-memory delete terms are applied and flushed. If there are documents - buffered in memory at the time, they are merged and a new segment is - created.

-

Disabled by default (writer flushes by RAM usage).

- -

- IllegalArgumentException if maxBufferedDeleteTerms - is enabled but smaller than 1 - - - -
- - Returns the number of buffered deleted terms that will - trigger a flush if enabled. - - - - - - If non-null, information about merges, deletes and a - message when maxFieldLength is reached will be printed - to this. - - - - Commits all changes to an index and closes all - associated files. Note that this may be a costly - operation, so, try to re-use a single writer instead of - closing and opening a new one. See for - caveats about write caching done by some IO devices. - -

If an Exception is hit during close, eg due to disk - full or some other reason, then both the on-disk index - and the internal state of the IndexWriter instance will - be consistent. However, the close will not be complete - even though part of it (flushing buffered documents) - may have succeeded, so the write lock will still be - held.

- -

If you can correct the underlying cause (eg free up - some disk space) then you can call close() again. - Failing that, if you want to force the write lock to be - released (dangerous, because you may then lose buffered - docs in the IndexWriter instance) then you can do - something like this:

- - - try { - writer.close(); - } finally { - if (IndexWriter.isLocked(directory)) { - IndexWriter.unlock(directory); - } - } - - - after which, you must be certain not to use the writer - instance anymore.

- -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer, again. See above for details.

- -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Commits all changes to an index and closes all - associated files. Note that this may be a costly - operation, so, try to re-use a single writer instead of - closing and opening a new one. See for - caveats about write caching done by some IO devices. - -

If an Exception is hit during close, eg due to disk - full or some other reason, then both the on-disk index - and the internal state of the IndexWriter instance will - be consistent. However, the close will not be complete - even though part of it (flushing buffered documents) - may have succeeded, so the write lock will still be - held.

- -

If you can correct the underlying cause (eg free up - some disk space) then you can call close() again. - Failing that, if you want to force the write lock to be - released (dangerous, because you may then lose buffered - docs in the IndexWriter instance) then you can do - something like this:

- - - try { - writer.close(); - } finally { - if (IndexWriter.isLocked(directory)) { - IndexWriter.unlock(directory); - } - } - - - after which, you must be certain not to use the writer - instance anymore.

- -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer, again. See above for details.

- -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Closes the index with or without waiting for currently - running merges to finish. This is only meaningful when - using a MergeScheduler that runs merges in background - threads. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer, again. See above for details.

- -

NOTE: it is dangerous to always call - close(false), especially when IndexWriter is not open - for very long, because this can result in "merge - starvation" whereby long merges will never have a - chance to finish. This will cause too many segments in - your index over time.

- -

- if true, this call will block - until all merges complete; else, it will ask all - running merges to abort, wait until those merges have - finished (which should be at most a few seconds), and - then return. - -
- - Closes the index with or without waiting for currently - running merges to finish. This is only meaningful when - using a MergeScheduler that runs merges in background - threads. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer, again. See above for details.

- -

NOTE: it is dangerous to always call - close(false), especially when IndexWriter is not open - for very long, because this can result in "merge - starvation" whereby long merges will never have a - chance to finish. This will cause too many segments in - your index over time.

- -

- if true, this call will block - until all merges complete; else, it will ask all - running merges to abort, wait until those merges have - finished (which should be at most a few seconds), and - then return. - -
- - Tells the docWriter to close its currently open shared - doc stores (stored fields & vectors files). - Return value specifices whether new doc store files are compound or not. - - - - Returns total number of docs in this index, including - docs not yet flushed (still in the RAM buffer), - not counting deletions. - - - - - - Returns total number of docs in this index, including - docs not yet flushed (still in the RAM buffer), and - including deletions. NOTE: buffered deletions - are not counted. If you really need these to be - counted you should call first. - - - - - - The maximum number of terms that will be indexed for a single field in a - document. This limits the amount of memory required for indexing, so that - collections with very large files will not crash the indexing process by - running out of memory.

- Note that this effectively truncates large documents, excluding from the - index terms that occur further in the document. If you know your source - documents are large, be sure to set this value high enough to accomodate - the expected size. If you set it to Integer.MAX_VALUE, then the only limit - is your memory, but you should anticipate an OutOfMemoryError.

- By default, no more than 10,000 terms will be indexed for a field. - -

- - -
- - Adds a document to this index. If the document contains more than - terms for a given field, the remainder are - discarded. - -

Note that if an Exception is hit (for example disk full) - then the index will be consistent, but this document - may not have been added. Furthermore, it's possible - the index will have one segment in non-compound format - even when using compound files (when a merge has - partially succeeded).

- -

This method periodically flushes pending documents - to the Directory (see above), and - also periodically triggers segment merges in the index - according to the in use.

- -

Merges temporarily consume space in the - directory. The amount of space required is up to 1X the - size of all segments being merged, when no - readers/searchers are open against the index, and up to - 2X the size of all segments being merged when - readers/searchers are open against the index (see - for details). The sequence of - primitive merge operations performed is governed by the - merge policy. - -

Note that each term in the document can be no longer - than 16383 characters, otherwise an - IllegalArgumentException will be thrown.

- -

Note that it's possible to create an invalid Unicode - string in java if a UTF16 surrogate pair is malformed. - In this case, the invalid characters are silently - replaced with the Unicode replacement character - U+FFFD.

- -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Adds a document to this index, using the provided analyzer instead of the - value of . If the document contains more than - terms for a given field, the remainder are - discarded. - -

See for details on - index and IndexWriter state after an Exception, and - flushing/merging temporary free space requirements.

- -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Deletes the document(s) containing term. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- the term to identify the documents to be deleted - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Deletes the document(s) containing any of the - terms. All deletes are flushed at the same time. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- array of terms to identify the documents - to be deleted - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Deletes the document(s) matching the provided query. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- the query to identify the documents to be deleted - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Deletes the document(s) matching any of the provided queries. - All deletes are flushed at the same time. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- array of queries to identify the documents - to be deleted - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Updates a document by first deleting the document(s) - containing term and then adding the new - document. The delete and then add are atomic as seen - by a reader on the same index (flush may happen only after - the add). - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- the term to identify the document(s) to be - deleted - - the document to be added - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Updates a document by first deleting the document(s) - containing term and then adding the new - document. The delete and then add are atomic as seen - by a reader on the same index (flush may happen only after - the add). - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- the term to identify the document(s) to be - deleted - - the document to be added - - the analyzer to use when analyzing the document - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - If non-null, information about merges will be printed to this. - - - Requests an "optimize" operation on an index, priming the index - for the fastest available search. Traditionally this has meant - merging all segments into a single segment as is done in the - default merge policy, but individaul merge policies may implement - optimize in different ways. - -

It is recommended that this method be called upon completion of indexing. In - environments with frequent updates, optimize is best done during low volume times, if at all. - -

-

See http://www.gossamer-threads.com/lists/lucene/java-dev/47895 for more discussion.

- -

Note that optimize requires 2X the index size free - space in your Directory (3X if you're using compound - file format). For example, if your index - size is 10 MB then you need 20 MB free for optimize to - complete (30 MB if you're using compound fiel format).

- -

If some but not all readers re-open while an - optimize is underway, this will cause > 2X temporary - space to be consumed as those new readers will then - hold open the partially optimized segments at that - time. It is best not to re-open readers while optimize - is running.

- -

The actual temporary usage could be much less than - these figures (it depends on many factors).

- -

In general, once the optimize completes, the total size of the - index will be less than the size of the starting index. - It could be quite a bit smaller (if there were many - pending deletes) or just slightly smaller.

- -

If an Exception is hit during optimize(), for example - due to disk full, the index will not be corrupt and no - documents will have been lost. However, it may have - been partially optimized (some segments were merged but - not all), and it's possible that one of the segments in - the index will be in non-compound format even when - using compound file format. This will occur when the - Exception is hit during conversion of the segment into - compound format.

- -

This call will optimize those segments present in - the index when the call started. If other threads are - still adding documents and flushing segments, those - newly created segments will not be optimized unless you - call optimize again.

- -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - -
- - Optimize the index down to <= maxNumSegments. If - maxNumSegments==1 then this is the same as - . - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- maximum number of segments left - in the index after optimization finishes - -
- - Just like , except you can specify - whether the call should block until the optimize - completes. This is only meaningful with a - that is able to run merges in - background threads. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

-

-
- - Just like , except you can - specify whether the call should block until the - optimize completes. This is only meaningful with a - that is able to run merges in - background threads. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

-

-
- - Returns true if any merges in pendingMerges or - runningMerges are optimization merges. - - - - Just like , except you can - specify whether the call should block until the - operation completes. This is only meaningful with a - that is able to run merges in - background threads. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

-

-
- - Expunges all deletes from the index. When an index - has many document deletions (or updates to existing - documents), it's best to either call optimize or - expungeDeletes to remove all unused data in the index - associated with the deleted documents. To see how - many deletions you have pending in your index, call - - This saves disk space and memory usage while - searching. expungeDeletes should be somewhat faster - than optimize since it does not insist on reducing the - index to a single segment (though, this depends on the - ; see .). Note that - this call does not first commit any buffered - documents, so you must do so yourself if necessary. - See also - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

-

-
- - Expert: asks the mergePolicy whether any merges are - necessary now and if so, runs the requested merges and - then iterate (test again if merges are needed) until no - more merges are returned by the mergePolicy. - - Explicit calls to maybeMerge() are usually not - necessary. The most common case is when merge policy - parameters have changed. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

-

-
- - Expert: the calls this method - to retrieve the next merge requested by the - MergePolicy - - - - Like getNextMerge() except only returns a merge if it's - external. - - - - Close the IndexWriter without committing - any changes that have occurred since the last commit - (or since it was opened, if commit hasn't been called). - This removes any temporary files that had been created, - after which the state of the index will be the same as - it was when commit() was last called or when this - writer was first opened. This also clears a previous - call to . - - IOException if there is a low-level IO error - - - Delete all documents in the index. - -

This method will drop all buffered documents and will - remove all segments from the index. This change will not be - visible until a has been called. This method - can be rolled back using .

- -

NOTE: this method is much faster than using deleteDocuments( new MatchAllDocsQuery() ).

- -

NOTE: this method will forcefully abort all merges - in progress. If other threads are running - or any of the addIndexes methods, they - will receive s. -

-
- - Wait for any currently outstanding merges to finish. - -

It is guaranteed that any merges started prior to calling this method - will have completed once this method completes.

-

-
- - Merges all segments from an array of indexes into this - index. - -

This may be used to parallelize batch indexing. A large document - collection can be broken into sub-collections. Each sub-collection can be - indexed in parallel, on a different thread, process or machine. The - complete index can then be created by merging sub-collection indexes - with this method. - -

NOTE: the index in each Directory must not be - changed (opened by a writer) while this method is - running. This method does not acquire a write lock in - each input Directory, so it is up to the caller to - enforce this. - -

NOTE: while this is running, any attempts to - add or delete documents (with another thread) will be - paused until this method completes. - -

This method is transactional in how Exceptions are - handled: it does not commit a new segments_N file until - all indexes are added. This means if an Exception - occurs (for example disk full), then either no indexes - will have been added or they all will have been.

- -

Note that this requires temporary free space in the - Directory up to 2X the sum of all input indexes - (including the starting index). If readers/searchers - are open against the starting index, then temporary - free space required will be higher by the size of the - starting index (see for details). -

- -

Once this completes, the final size of the index - will be less than the sum of all input index sizes - (including the starting index). It could be quite a - bit smaller (if there were many pending deletes) or - just slightly smaller.

- -

- This requires this index not be among those to be added. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Merges the provided indexes into this index. -

After this completes, the index is optimized.

-

The provided IndexReaders are not closed.

- -

NOTE: while this is running, any attempts to - add or delete documents (with another thread) will be - paused until this method completes. - -

See for - details on transactional semantics, temporary free - space required in the Directory, and non-CFS segments - on an Exception.

- -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - - A hook for extending classes to execute operations after pending added and - deleted documents have been flushed to the Directory but before the change - is committed (new segments_N file written). - - - - - A hook for extending classes to execute operations before pending added and - deleted documents are flushed to the Directory. - - - - Expert: prepare for commit. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- - -
- -

Expert: prepare for commit, specifying - commitUserData Map (String -> String). This does the - first phase of 2-phase commit. This method does all steps - necessary to commit changes since this writer was - opened: flushes pending added and deleted docs, syncs - the index files, writes most of next segments_N file. - After calling this you must call either - to finish the commit, or - to revert the commit and undo all changes - done since the writer was opened.

- - You can also just call directly - without prepareCommit first in which case that method - will internally call prepareCommit. - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- Opaque Map (String->String) - that's recorded into the segments file in the index, - and retrievable by . - Note that when IndexWriter commits itself, during , the - commitUserData is unchanged (just carried over from - the prior commit). If this is null then the previous - commitUserData is kept. Also, the commitUserData will - only "stick" if there are actually changes in the - index to commit. - -
- -

Commits all pending changes (added & deleted - documents, optimizations, segment merges, added - indexes, etc.) to the index, and syncs all referenced - index files, such that a reader will see the changes - and the index updates will survive an OS or machine - crash or power loss. Note that this does not wait for - any running background merges to finish. This may be a - costly operation, so you should test the cost in your - application and do it only when really necessary.

- -

Note that this operation calls Directory.sync on - the index files. That call should not return until the - file contents & metadata are on stable storage. For - FSDirectory, this calls the OS's fsync. But, beware: - some hardware devices may in fact cache writes even - during fsync, and return before the bits are actually - on stable storage, to give the appearance of faster - performance. If you have such a device, and it does - not have a battery backup (for example) then on power - loss it may still lose data. Lucene cannot guarantee - consistency on such devices.

- -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

- -

- - - - -
- - Commits all changes to the index, specifying a - commitUserData Map (String -> String). This just - calls (if you didn't - already call it) and then . - -

NOTE: if this method hits an OutOfMemoryError - you should immediately close the writer. See above for details.

-

-
- - Flush all in-memory buffered udpates (adds and deletes) - to the Directory. - - if true, we may merge segments (if - deletes or docs were flushed) if necessary - - if false we are allowed to keep - doc stores open to share with the next segment - - whether pending deletes should also - be flushed - - - - Expert: Return the total size of all index files currently cached in memory. - Useful for size management with flushRamDocs() - - - - Expert: Return the number of documents currently - buffered in RAM. - - - - Carefully merges deletes for the segments we just - merged. This is tricky because, although merging will - clear all deletes (compacts the documents), new - deletes may have been flushed to the segments since - the merge was started. This method "carries over" - such new deletes onto the newly merged segment, and - saves the resulting deletes file (incrementing the - delete generation for merge.info). If no deletes were - flushed, no new deletes file is saved. - - - - Merges the indicated segments, replacing them in the stack with a - single segment. - - - - Hook that's called when the specified merge is complete. - - - Checks whether this merge involves any segments - already participating in a merge. If not, this merge - is "registered", meaning we record that its segments - are now participating in a merge, and true is - returned. Else (the merge conflicts) false is - returned. - - - - Does initial setup for a merge, which is fast but holds - the synchronized lock on IndexWriter instance. - - - - Does fininishing for a merge, which is fast but holds - the synchronized lock on IndexWriter instance. - - - - Does the actual (time-consuming) work of the merge, - but without holding synchronized lock on IndexWriter - instance - - - - Blocks until all files in syncing are sync'd - - - Walk through all files referenced by the current - segmentInfos and ask the Directory to sync each file, - if it wasn't already. If that succeeds, then we - prepare a new segments_N file but do not fully commit - it. - - - - Returns true iff the index in the named directory is - currently locked. - - the directory to check for a lock - - IOException if there is a low-level IO error - - - Forcibly unlocks the index in the named directory. -

- Caution: this should only be used by failure recovery code, - when it is known that no other process nor thread is in fact - currently accessing this index. -

-
- - Casts current mergePolicy to LogMergePolicy, and throws - an exception if the mergePolicy is not a LogMergePolicy. - - - -

Gets or sets the current setting of whether newly flushed - segments will use the compound file format. Note that - this just returns the value previously set with - setUseCompoundFile(boolean), or the default value - (true). You cannot use this to query the status of - previously flushed segments.

- -

Note that this method is a convenience method: it - just calls mergePolicy.getUseCompoundFile as long as - mergePolicy is an instance of . - Otherwise an IllegalArgumentException is thrown.

- -

-
- - Expert: Return the Similarity implementation used by this IndexWriter. - -

This defaults to the current value of . -

-
- - Expert: Gets or sets the interval between indexed terms. Large values cause less - memory to be used by IndexReader, but slow random-access to terms. Small - values cause more memory to be used by an IndexReader, and speed - random-access to terms. - - This parameter determines the amount of computation required per query - term, regardless of the number of documents that contain that term. In - particular, it is the maximum number of other terms that must be - scanned before a term is located and its frequency and position information - may be processed. In a large index with user-entered query terms, query - processing time is likely to be dominated not by term lookup but rather - by the processing of frequency and positional data. In a small index - or when many uncommon query terms are generated (e.g., by wildcard - queries) term lookup may become a dominant cost. - - In particular, numUniqueTerms/interval terms are read into - memory by an IndexReader, and, on average, interval/2 terms - must be scanned for each random term access. - - - - - - - Expert: returns the current MergePolicy in use by this writer. - - - - - Expert: returns the current MergePolicy in use by this - writer. - - - - - -

Gets or sets the largest segment (measured by document - count) that may be merged with other segments. -

- Small values (e.g., less than 10,000) are best for - interactive indexing, as this limits the length of - pauses while indexing to a few seconds. Larger values - are best for batched indexing and speedier - searches. -

- The default value is . -

- Note that this method is a convenience method: it - just calls mergePolicy.getMaxMergeDocs as long as - mergePolicy is an instance of . - Otherwise an IllegalArgumentException is thrown.

- - The default merge policy () - also allows you to set this - limit by net size (in MB) of the segment, using - .

-

- - -
- - Gets or sets the termsIndexDivisor passed to any readers that - IndexWriter opens, for example when applying deletes - or creating a near-real-time reader in - . Default value is - . - - - Gets or sets the number of segments that are merged at - once and also controls the total number of segments - allowed to accumulate in the index. -

Determines how often segment indices are merged by addDocument(). With - smaller values, less RAM is used while indexing, and searches on - unoptimized indices are faster, but indexing speed is slower. With larger - values, more RAM is used during indexing, and while searches on unoptimized - indices are slower, indexing is faster. Thus larger values (> 10) are best - for batch index creation, and smaller values (< 10) for indices that are - interactively maintained. - -

Note that this method is a convenience method: it - just calls mergePolicy.setMergeFactor as long as - mergePolicy is an instance of . - Otherwise an IllegalArgumentException is thrown.

- -

This must never be less than 2. The default value is 10. -

-
- - Gets or sets the default info stream. - If non-null, this will be the default infoStream used - by a newly instantiated IndexWriter. - - - - - - Returns the current infoStream in use by this writer. - - - - - Returns true if verbosing is enabled (i.e., infoStream != null). - - - Gets or sets allowed timeout when acquiring the write lock. - - - Gets or sets the default (for any instance of IndexWriter) maximum time to wait for a write lock (in - milliseconds). - - - - Returns the Directory used by this index. - - - Returns the analyzer used by this index. - - - Gets or sets the merged segment warmer. See - . - - - - Holds shared SegmentReader instances. IndexWriter uses - SegmentReaders for 1) applying deletes, 2) doing - merges, 3) handing out a real-time reader. This pool - reuses instances of the SegmentReaders in all these - places if it is in "near real-time mode" (getReader() - has been called on this instance). - - - - Forcefully clear changes for the specifed segments, - and remove from the pool. This is called on succesful merge. - - - - Release the segment reader (i.e. decRef it and close if there - are no more references. - - - - IOException - - - Release the segment reader (i.e. decRef it and close if there - are no more references. - - - - - IOException - - - Remove all our references to readers, and commits - any pending changes. - - - - Commit all segment reader in the pool. - IOException - - - Returns a ref to a clone. NOTE: this clone is not - enrolled in the pool, so you should simply close() - it when you're done (ie, do not call release()). - - - - Obtain a SegmentReader from the readerPool. The reader - must be returned by calling - - - - - - - - IOException - - - Obtain a SegmentReader from the readerPool. The reader - must be returned by calling - - - - - - - - - - - - - IOException - - - Specifies maximum field length (in number of tokens/terms) in constructors. - overrides the value set by - the constructor. - - - - Private type-safe-enum-pattern constructor. - - - instance name - - maximum field length - - - - Public constructor to allow users to specify the maximum field size limit. - - - The maximum field length - - - - Sets the maximum field length to . - - - Sets the maximum field length to - - - - - - If has been called (ie, this writer - is in near real-time mode), then after a merge - completes, this class can be invoked to warm the - reader on the newly merged segment, before the merge - commits. This is not required for near real-time - search, but will reduce search latency on opening a - new near real-time reader after a merge completes. - -

NOTE: This API is experimental and might - change in incompatible ways in the next release.

- -

NOTE: warm is called before any deletes have - been carried over to the merged segment. -

-
- - Add a new thread - - - Abort (called after hitting AbortException) - - - Flush a new segment - - - Close doc stores - - - Attempt to free RAM, returning true if any RAM was - freed - - - - This implementation that - keeps only the most recent commit and immediately removes - all prior commits after a new commit is done. This is - the default deletion policy. - - - - Deletes all commits except the most recent one. - - - Deletes all commits except the most recent one. - - - This is a that measures size of a - segment as the total byte size of the segment's files. - - - -

This class implements a that tries - to merge segments into levels of exponentially - increasing size, where each level has fewer segments than - the value of the merge factor. Whenever extra segments - (beyond the merge factor upper bound) are encountered, - all segments within the level are merged. You can get or - set the merge factor using and - respectively.

- -

This class is abstract and requires a subclass to - define the method which specifies how a - segment's size is determined. - is one subclass that measures size by document count in - the segment. is another - subclass that measures size as the total byte size of the - file(s) for the segment.

-

-
- -

Expert: a MergePolicy determines the sequence of - primitive merge operations to be used for overall merge - and optimize operations.

- -

Whenever the segments in an index have been altered by - , either the addition of a newly - flushed segment, addition of many segments from - addIndexes* calls, or a previous merge that may now need - to cascade, invokes - to give the MergePolicy a chance to pick - merges that are now required. This method returns a - instance describing the set of - merges that should be done, or null if no merges are - necessary. When IndexWriter.optimize is called, it calls - and the MergePolicy should - then return the necessary merges.

- -

Note that the policy can return more than one merge at - a time. In this case, if the writer is using - , the merges will be run - sequentially but if it is using - they will be run concurrently.

- -

The default MergePolicy is - .

- -

NOTE: This API is new and still experimental - (subject to change suddenly in the next release)

- -

NOTE: This class typically requires access to - package-private APIs (e.g. SegmentInfos) to do its job; - if you implement your own MergePolicy, you'll need to put - it in package Lucene.Net.Index in order to use - these APIs. -

-
- - Determine what set of merge operations are now necessary on the index. - calls this whenever there is a change to the segments. - This call is always synchronized on the instance so - only one thread at a time will call this method. - - - the total set of segments in the index - - - - Determine what set of merge operations is necessary in order to optimize - the index. calls this when its - method is called. This call is always - synchronized on the instance so only one thread at a - time will call this method. - - - the total set of segments in the index - - requested maximum number of segments in the index (currently this - is always 1) - - contains the specific SegmentInfo instances that must be merged - away. This may be a subset of all SegmentInfos. - - - - Determine what set of merge operations is necessary in order to expunge all - deletes from the index. - - - the total set of segments in the index - - - - Release all resources for the policy. - - - Release all resources for the policy. - - - Returns true if a newly flushed (not from merge) - segment should use the compound file format. - - - - Returns true if the doc store files should use the - compound file format. - - - - OneMerge provides the information necessary to perform - an individual primitive merge operation, resulting in - a single new segment. The merge spec includes the - subset of segments to be merged as well as whether the - new segment should use the compound file format. - - - - Record that an exception occurred while executing - this merge - - - - Retrieve previous exception set by - . - - - - Mark this merge as aborted. If this is called - before the merge is committed then the merge will - not be committed. - - - - Returns true if this merge was aborted. - - - A MergeSpecification instance provides the information - necessary to perform multiple merges. It simply - contains a list of instances. - - - - The subset of segments to be included in the primitive merge. - - - Exception thrown if there are any problems while - executing a merge. - - - - Returns the of the index that hit - the exception. - - - - Defines the allowed range of log(size) for each - level. A level is computed by taking the max segment - log size, minus LEVEL_LOG_SPAN, and finding all - segments falling within that range. - - - - Default merge factor, which is how many segments are - merged at a time - - - - Default maximum segment size. A segment of this size - - - - - Default noCFSRatio. If a merge's size is >= 10% of - the index, then we disable compound file for it. - See - - - - Gets or sets whether compound file format should be used for - newly flushed and newly merged segments. - - - - Sets whether compound file format should be used for - newly flushed and newly merged doc store - segment files (term vectors and stored fields). - - - - Returns true if newly flushed and newly merge doc - store segment files (term vectors and stored fields) - - - - - - Returns true if this single info is optimized (has no - pending norms or deletes, is in the same dir as the - writer, and matches the current compound file setting - - - - Returns the merges necessary to optimize the index. - This merge policy defines "optimized" to mean only one - segment in the index, where that segment has no - deletions pending nor separate norms, and it is in - compound file format if the current useCompoundFile - setting is true. This method returns multiple merges - (mergeFactor at a time) so the - in use may make use of concurrency. - - - - Finds merges necessary to expunge all deletes from the - index. We simply merge adjacent segments that have - deletes, up to mergeFactor at a time. - - - - Checks if any merges are now necessary and returns a - if so. A merge - is necessary when there are more than - segments at a given level. When - multiple levels have too many segments, this method - will return multiple merges, allowing the - to use concurrency. - - - - Gets or sets how often segment indices are merged by - addDocument(). With smaller values, less RAM is used - while indexing, and searches on unoptimized indices are - faster, but indexing speed is slower. With larger - values, more RAM is used during indexing, and while - searches on unoptimized indices are slower, indexing is - faster. Thus larger values (> 10) are best for batch - index creation, and smaller values (< 10) for indices - that are interactively maintained. - - - - Gets or sets whether the segment size should be calibrated by - the number of deletes when choosing segments for merge. - - - - - Gets or sets the largest segment (measured by document - count) that may be merged with other segments. -

Determines the largest segment (measured by - document count) that may be merged with other segments. - Small values (e.g., less than 10,000) are best for - interactive indexing, as this limits the length of - pauses while indexing to a few seconds. Larger values - are best for batched indexing and speedier - searches.

- -

The default value is .

- -

The default merge policy () - also allows you to set this - limit by net size (in MB) of the segment, using - .

-

-
- - - - - - Default maximum segment size. A segment of this size - - - - -

Gets or sets the largest segment (measured by total - byte size of the segment's files, in MB) that may be - merged with other segments. Small values (e.g., less - than 50 MB) are best for interactive indexing, as this - limits the length of pauses while indexing to a few - seconds. Larger values are best for batched indexing - and speedier searches.

- -

Note that is also - used to check whether a segment is too large for - merging (it's either or).

-

-
- - Gets or sets the minimum size for the lowest level segments. - Any segments below this size are considered to be on - the same level (even if they vary drastically in size) - and will be merged whenever there are mergeFactor of - them. This effectively truncates the "long tail" of - small segments that would otherwise be created into a - single level. If you set this too large, it could - greatly increase the merging cost during indexing (if - you flush many small segments). - - - - This is a that measures size of a - segment as the number of documents (not taking deletions - into account). - - - - - - - - Gets or sets the minimum size for the lowest level segments. - Any segments below this size are considered to be on - the same level (even if they vary drastically in size) - and will be merged whenever there are mergeFactor of - them. This effectively truncates the "long tail" of - small segments that would otherwise be created into a - single level. If you set this too large, it could - greatly increase the merging cost during indexing (if - you flush many small segments). - - - - Remaps docIDs after a merge has completed, where the - merged segments had at least one deletion. This is used - to renumber the buffered deletes in IndexWriter when a - merge of segments with deletions commits. - - - - Allows you to iterate over the for multiple s as - a single . - - - - - Creates a new MultipleTermPositions instance. - - - - - - - Not implemented. - UnsupportedOperationException - - - Not implemented. - UnsupportedOperationException - - - Not implemented. - UnsupportedOperationException - - - Not implemented. - UnsupportedOperationException - - - Not implemented. - UnsupportedOperationException - - - - false - - - A PriorityQueue maintains a partial ordering of its elements such that the - least element can always be found in constant time. Put()'s and pop()'s - require log(size) time. - -

NOTE: This class pre-allocates a full array of - length maxSize+1, in . - -

-
- - Determines the ordering of objects in this priority queue. Subclasses - must define this one method. - - - - Subclass constructors must call this. - - - - Adds an Object to a PriorityQueue in log(size) time. If one tries to add - more objects than maxSize from initialize an - is thrown. - - the new 'top' element in the queue. - - - - Adds an Object to a PriorityQueue in log(size) time. - It returns the object (if any) that was - dropped off the heap because it was full. This can be - the given parameter (in case it is smaller than the - full heap's minimum, and couldn't be added), or another - object that was previously the smallest value in the - heap and now has been replaced by a larger one, or null - if the queue wasn't yet full with maxSize elements. - - - - Returns the least element of the PriorityQueue in constant time. - - - - Removes and returns the least element of the - PriorityQueue in log(size) time. - - - - Should be called when the Object at top changes values. - Still log(n) worst case, but it's at least twice as fast to - - pq.top().change(); - pq.updateTop(); - - instead of - - o = pq.pop(); - o.change(); - pq.push(o); - - - the new 'top' element. - - - Returns the number of elements currently stored in the PriorityQueue. - - - Removes all entries from the PriorityQueue. - - - This method can be overridden by extending classes to return a sentinel - object which will be used by to fill the queue, so - that the code which uses that queue can always assume it's full and only - change the top without attempting to insert any new object.
- - Those sentinel values should always compare worse than any non-sentinel - value (i.e., should always favor the - non-sentinel values).
- - By default, this method returns false, which means the queue will not be - filled with sentinel values. Otherwise, the value returned will be used to - pre-populate the queue. Adds sentinel values to the queue.
- - If this method is extended to return a non-null value, then the following - usage pattern is recommended: - - - // extends getSentinelObject() to return a non-null value. - PriorityQueue<MyObject> pq = new MyQueue<MyObject>(numHits); - // save the 'top' element, which is guaranteed to not be null. - MyObject pqTop = pq.top(); - <...> - // now in order to add a new element, which is 'better' than top (after - // you've verified it is better), it is as simple as: - pqTop.change(). - pqTop = pq.updateTop(); - - - NOTE: if this method returns a non-null value, it will be called by - times, relying on a new object to - be returned and will not check if it's null again. Therefore you should - ensure any call to this method creates a new instance and behaves - consistently, e.g., it cannot return null if it previously returned - non-null. - -
- the sentinel object to use to pre-populate the queue, or null if sentinel objects are not supported. -
- - An IndexReader which reads multiple indexes, appending - their content. - - - -

Construct a MultiReader aggregating the named set of (sub)readers. - Directory locking for delete, undeleteAll, and setNorm operations is - left to the subreaders.

-

Note that all subreaders are closed if this Multireader is closed.

-

- set of (sub)readers - - IOException -
- -

Construct a MultiReader aggregating the named set of (sub)readers. - Directory locking for delete, undeleteAll, and setNorm operations is - left to the subreaders.

-

- indicates whether the subreaders should be closed - when this MultiReader is closed - - set of (sub)readers - - IOException -
- - Tries to reopen the subreaders. -
- If one or more subreaders could be re-opened (i. e. subReader.reopen() - returned a new instance != subReader), then a new MultiReader instance - is returned, otherwise this instance is returned. -

- A re-opened instance might share one or more subreaders with the old - instance. Index modification operations result in undefined behavior - when performed before the old instance is closed. - (see ). -

- If subreaders are shared, then the reference count of those - readers is increased to ensure that the subreaders remain open - until the last referring reader is closed. - -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Clones the subreaders. - (see ). -
-

- If subreaders are shared, then the reference count of those - readers is increased to ensure that the subreaders remain open - until the last referring reader is closed. -

-
- - If clone is true then we clone each of the subreaders - - - New IndexReader, or same one (this) if - reopen/clone is not necessary - - CorruptIndexException - IOException - - - Checks recursively if all subreaders are up to date. - - - Not implemented. - UnsupportedOperationException - - - Writes norms. Each thread X field accumulates the norms - for the doc/fields it saw, then the flush method below - merges all of these together into a single _X.nrm file. - - - - Produce _X.nrm if any document had a field with norms - not disabled - - - - Taps into DocInverter, as an InvertedDocEndConsumer, - which is called at the end of inverting each field. We - just look at the length for the field (docState.length) - and record the norm. - - - - An IndexReader which reads multiple, parallel indexes. Each index added - must have the same number of documents, but typically each contains - different fields. Each document contains the union of the fields of all - documents with the same document number. When searching, matches for a - query term are from the first index added that has the field. - -

This is useful, e.g., with collections that have large fields which - change rarely and small fields that change more frequently. The smaller - fields may be re-indexed in a new index and both indexes may be searched - together. - -

Warning: It is up to you to make sure all indexes - are created and modified the same way. For example, if you add - documents to one index, you need to add the same documents in the - same order to the other indexes. Failure to do so will result in - undefined behavior. -

-
- - Construct a ParallelReader. -

Note that all subreaders are closed if this ParallelReader is closed.

-

-
- - Construct a ParallelReader. - indicates whether the subreaders should be closed - when this ParallelReader is closed - - - - Add an IndexReader. - IOException if there is a low-level IO error - - - Add an IndexReader whose stored fields will not be returned. This can - accellerate search when stored fields are only needed from a subset of - the IndexReaders. - - - IllegalArgumentException if not all indexes contain the same number - of documents - - IllegalArgumentException if not all indexes have the same value - of - - IOException if there is a low-level IO error - - - Tries to reopen the subreaders. -
- If one or more subreaders could be re-opened (i. e. subReader.reopen() - returned a new instance != subReader), then a new ParallelReader instance - is returned, otherwise this instance is returned. -

- A re-opened instance might share one or more subreaders with the old - instance. Index modification operations result in undefined behavior - when performed before the old instance is closed. - (see ). -

- If subreaders are shared, then the reference count of those - readers is increased to ensure that the subreaders remain open - until the last referring reader is closed. - -

- CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error -
- - Checks recursively if all subreaders are up to date. - - - Checks recursively if all subindexes are optimized - - - Not implemented. - UnsupportedOperationException - - - A Payload is metadata that can be stored together with each occurrence - of a term. This metadata is stored inline in the posting list of the - specific term. -

- To store payloads in the index a has to be used that - produces payload data. -

- Use and - to retrieve the payloads from the index.
- -

-
- - the byte array containing the payload data - - - the offset within the byte array - - - the length of the payload data - - - Creates an empty payload and does not allocate a byte array. - - - Creates a new payload with the the given array as data. - A reference to the passed-in array is held, i. e. no - copy is made. - - - the data of this payload - - - - Creates a new payload with the the given array as data. - A reference to the passed-in array is held, i. e. no - copy is made. - - - the data of this payload - - the offset in the data byte array - - the length of the data - - - - Sets this payloads data. - A reference to the passed-in array is held, i. e. no - copy is made. - - - - Gets or sets a reference to the underlying byte array - that holds this payloads data. Data is not copied. - - - - Gets or sets a reference to the underlying byte array - that holds this payloads data. Data is not copied. - - - - Returns the byte at the given index. - - - Allocates a new byte array, copies the payload data into it and returns it. - - - Copies the payload data to a byte array. - - - the target byte array - - the offset in the target byte array - - - - Clones this payload by creating a copy of the underlying - byte array. - - - - Returns the offset in the underlying byte array - - - Returns the length of the payload data. - - - For each Field, store position by position information. It ignores frequency information -

- This is not thread-safe. -

-
- - A Map of Integer and TVPositionInfo - - - Callback for the TermVectorReader. - - - - - - - - - - - Callback mechanism used by the TermVectorReader - The field being read - - The number of terms in the vector - - Whether offsets are available - - Whether positions are available - - - - Never ignores positions. This mapper doesn't make much sense unless there are positions - false - - - Get the mapping between fields and terms, sorted by the comparator - - - A map between field names and a Map. The sub-Map key is the position as the integer, the value is <see cref="Lucene.Net.Index.PositionBasedTermVectorMapper.TVPositionInfo" />. - - - Container for a term at a position - - - - The position of the term - - - - Note, there may be multiple terms at the same position - A List of Strings - - - - Parallel list (to ) of TermVectorOffsetInfo objects. - There may be multiple entries since there may be multiple terms at a position - A List of TermVectorOffsetInfo objects, if offsets are store. - - - - $Id - -

NOTE: This API is new and still experimental - (subject to change suddenly in the next release)

-

-
- - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Clones the norm bytes. May be overridden by subclasses. New and experimental. - Byte array to clone - - New BitVector - - - - Clones the deleteDocs BitVector. May be overridden by subclasses. New and experimental. - BitVector to clone - - New BitVector - - - - - - - - Read norms into a pre-allocated array. - - - Create a clone from the initial TermVectorsReader and store it in the ThreadLocal. - TermVectorsReader - - - - Return a term frequency vector for the specified document and field. The - vector returned contains term numbers and frequencies for all terms in - the specified field of this document, if the field had storeTermVector - flag set. If the flag was not set, the method returns null. - - IOException - - - Return an array of term frequency vectors for the specified document. - The array contains a vector for each vectorized field in the document. - Each vector vector contains term numbers and frequencies for all terms - in a given vectorized field. - If no such fields existed, the method returns null. - - IOException - - - Returns the directory this index resides in. - - - Lotsa tests did hacks like:
- SegmentReader reader = (SegmentReader) IndexReader.open(dir);
- They broke. This method serves as a hack to keep hacks working - We do it with R/W access for the tests (BW compatibility) -
-
- - Return the name of the segment this reader is reading. - - - Return the SegmentInfo of the segment this reader is reading. - - - Sets the initial value - - - Java's builtin ThreadLocal has a serious flaw: - it can take an arbitrarily long amount of time to - dereference the things you had stored in it, even once the - ThreadLocal instance itself is no longer referenced. - This is because there is single, master map stored for - each thread, which all ThreadLocals share, and that - master map only periodically purges "stale" entries. - - While not technically a memory leak, because eventually - the memory will be reclaimed, it can take a long time - and you can easily hit OutOfMemoryError because from the - GC's standpoint the stale entries are not reclaimaible. - - This class works around that, by only enrolling - WeakReference values into the ThreadLocal, and - separately holding a hard reference to each stored - value. When you call , these hard - references are cleared and then GC is freely able to - reclaim space by objects stored in it. - - - - - Byte[] referencing is used because a new norm object needs - to be created for each clone, and the byte array is all - that is needed for sharing between cloned readers. The - current norm referencing is for sharing between readers - whereas the byte[] referencing is for copy on write which - is independent of reader references (i.e. incRef, decRef). - - - - Used by DocumentsWriter to implemented a StringReader - that can be reset to a new string; we use this when - tokenizing the string value from a Field. - - - - Information about a segment such as it's name, directory, and files related - to the segment. - - *

NOTE: This API is new and still experimental - (subject to change suddenly in the next release)

-

-
- - Copy everything from src SegmentInfo into our instance. - - - Construct a new SegmentInfo instance by reading a - previously saved SegmentInfo from input. - - - directory to load from - - format of the segments info file - - input handle to read segment info from - - - - Returns total size in bytes of all of files used by - this segment. - - - - Returns true if this field for this segment has saved a separate norms file (_<segment>_N.sX). - - - the field index to check - - - - Returns true if any fields in this segment have separate norms. - - - Increment the generation count for the norms file for - this field. - - - field whose norm file will be rewritten - - - - Get the file name for the norms file for this field. - - - field index - - - - Returns true if this segment is stored as a compound - file; else, false. - - - - Returns true if this segment is stored as a compound - file; else, false. - - - - Save this segment's info. - - - Used for debugging - - - We consider another SegmentInfo instance equal if it - has the same dir and same name. - - - - The SegmentMerger class combines two or more Segments, represented by an IndexReader (, - into a single Segment. After adding the appropriate readers, call the merge method to combine the - segments. -

- If the compoundFile flag is set, then the segments will be merged into a compound file. - - -

- - - - -
- - Maximum number of contiguous documents to bulk-copy - when merging stored fields - - - - norms header placeholder - - - This ctor used only by test code. - - - The Directory to merge the other segments into - - The name of the new segment - - - - Add an IndexReader to the collection of readers that are to be merged - - - - - - The index of the reader to return - - The ith reader to be merged - - - - Merges the readers specified by the method into the directory passed to the constructor - The number of documents that were merged - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Merges the readers specified by the method - into the directory passed to the constructor. - - if false, we will not merge the - stored fields nor vectors files - - The number of documents that were merged - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - close all IndexReaders that have been added. - Should not be called before merge(). - - IOException - - - - The number of documents in all of the readers - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Merge the TermVectors from each of the segments into the new one. - IOException - - - Process postings from multiple segments all positioned on the - same term. Writes out merged entries into freqOutput and - the proxOutput streams. - - - array of segments - - number of cells in the array actually occupied - - number of documents across all segments where this term was found - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Records the fact that roughly units amount of work - have been done since this method was last called. - When adding time-consuming code into SegmentMerger, - you should test different values for units to ensure - that the time in between calls to merge.checkAborted - is up to ~ 1 second. - - - - Increments the enumeration to the next element. True if one exists. - - - Optimized scan, without allocating new terms. - Return number of invocations to next(). - - - - Returns the previous Term enumerated. Initially null. - - - Returns the current TermInfo in the enumeration. - Initially invalid, valid after next() called for the first time. - - - - Sets the argument to the current TermInfo in the enumeration. - Initially invalid, valid after next() called for the first time. - - - - Returns the docFreq from the current TermInfo in the enumeration. - Initially invalid, valid after next() called for the first time. - - - - Closes the enumeration to further activity, freeing resources. - - - Returns the current Term in the enumeration. - Initially invalid, valid after next() called for the first time. - - - - Called by super.skipTo(). - - - Provides access to stored term vector of - a document field. The vector consists of the name of the field, an array of the terms tha occur in the field of the - and a parallel array of frequencies. Thus, getTermFrequencies()[5] corresponds with the - frequency of getTerms()[5], assuming there are at least 5 terms in the Document. - - - - An Array of term texts in ascending order. - - - - Array of term frequencies. Locations of the array correspond one to one - to the terms in the array obtained from getTerms - method. Each location in the array contains the number of times this - term occurs in the document or the document field. - - - - Return an index in the term numbers array returned from - getTerms at which the term with the specified - term appears. If this term does not appear in the array, - return -1. - - - - Just like indexOf(int) but searches for a number of terms - at the same time. Returns an array that has the same size as the number - of terms searched for, each slot containing the result of searching for - that term number. - - - array containing terms to look for - - index in the array where the list of terms starts - - the number of terms in the list - - - - The name. - The name of the field this vector is associated with. - - - The number of terms in the term vector. - - - - The number of the field this vector is associated with - - - Extends TermFreqVector to provide additional information about - positions in which each of the terms is found. A TermPositionVector not necessarily - contains both positions and offsets, but at least one of these arrays exists. - - - - Returns an array of positions in which the term is found. - Terms are identified by the index at which its number appears in the - term String array obtained from the indexOf method. - May return null if positions have not been stored. - - - - Returns an array of TermVectorOffsetInfo in which the term is found. - May return null if offsets have not been stored. - - - - - - The position in the array to get the offsets from - - An array of TermVectorOffsetInfo objects or the empty list - - - - Returns an array of TermVectorOffsetInfo in which the term is found. - - - The position in the array to get the offsets from - - An array of TermVectorOffsetInfo objects or the empty list - - - - - - Returns an array of positions in which the term is found. - Terms are identified by the index at which its number appears in the - term String array obtained from the indexOf method. - - - - A that simply does each merge - sequentially, using the current thread. - - - - Just do the merges in sequence. We do this - "synchronized" so that even if the application is using - multiple threads, only one merge may run at a time. - - - - A that wraps around any other - and adds the ability to hold and - later release a single "snapshot" of an index. While - the snapshot is held, the will not - remove any files associated with it even if the index is - otherwise being actively, arbitrarily changed. Because - we wrap another arbitrary , this - gives you the freedom to continue using whatever - you would normally want to use with your - index. Note that you can re-use a single instance of - SnapshotDeletionPolicy across multiple writers as long - as they are against the same index Directory. Any - snapshot held when a writer is closed will "survive" - when the next writer is opened. - -

WARNING: This API is a new and experimental and - may suddenly change.

-

-
- - Take a snapshot of the most recent commit to the - index. You must call release() to free this snapshot. - Note that while the snapshot is held, the files it - references will not be deleted, which will consume - additional disk space in your index. If you take a - snapshot at a particularly bad time (say just before - you call optimize()) then in the worst case this could - consume an extra 1X of your total index size, until - you release the snapshot. - - - - Release the currently held snapshot. - - - Store a sorted collection of s. Collects all term information - into a single, SortedSet. -
- NOTE: This Mapper ignores all Field information for the Document. This means that if you are using offset/positions you will not - know what Fields they correlate with. -
- This is not thread-safe -
-
- - Stand-in name for the field in . - - - - A Comparator for sorting s - - - - - The term to map - - The frequency of the term - - Offset information, may be null - - Position information, may be null - - - - The TermVectorEntrySet. A SortedSet of objects. Sort is by the comparator passed into the constructor. -
- This set will be empty until after the mapping process takes place. - -
- The SortedSet of <see cref="TermVectorEntry" />. -
- - This exception is thrown when an - tries to make changes to the index (via - , - or ) - but changes have already been committed to the index - since this reader was instantiated. When this happens - you must open a new reader on the current index to make - the changes. - - - - This is a DocFieldConsumer that writes stored fields. - - - Fills in any hole in the docIDs - - - A Term represents a word from text. This is the unit of search. It is - composed of two elements, the text of the word, as a string, and the name of - the field that the text occured in, an interned string. - Note that terms may represent more than words from text fields, but also - things like dates, email addresses, urls, etc. - - - - Constructs a Term with the given field and text. -

Note that a null field or null text value results in undefined - behavior for most Lucene APIs that accept a Term parameter. -

-
- - Constructs a Term with the given field and empty text. - This serves two purposes: 1) reuse of a Term with the same field. - 2) pattern for a query. - - - - - - - Optimized construction of new Terms by reusing same field as this Term - - avoids field.intern() overhead - - The text of the new term (field is implicitly same as this Term instance) - - A new Term - - - - Compares two terms, returning a negative integer if this - term belongs before the argument, zero if this term is equal to the - argument, and a positive integer if this term belongs after the argument. - The ordering of terms is first by field, then by text. - - - - Returns the field of this term, an interned string. The field indicates - the part of a document which this term came from. - - - - Returns the text of this term. In the case of words, this is simply the - text of the word. In the case of dates and other types, this is an - encoding of the object as a string. - - - - Call this if the IndexInput passed to - stores terms in the "modified UTF8" (pre LUCENE-510) - format. - - - - A TermInfo is the record of information stored for a term. - - - The number of documents which contain the term. - - - This stores a monotonically increasing set of <Term, TermInfo> pairs in a - Directory. Pairs are accessed either by Term or by ordinal position the - set. - - - - Returns the number of term/value pairs in the set. - - - Returns the offset of the greatest index entry which is less than or equal to term. - - - Returns the TermInfo for a Term in the set, or null. - - - Returns the TermInfo for a Term in the set, or null. - - - Returns the position of a Term in the set or -1. - - - Returns an enumeration of all the Terms and TermInfos in the set. - - - Returns an enumeration of terms starting at or after the named term. - - - Per-thread resources managed by ThreadLocal - - - This stores a monotonically increasing set of <Term, TermInfo> pairs in a - Directory. A TermInfos can be written once, in order. - - - - The file format version, a negative number. - - - Expert: The fraction of terms in the "dictionary" which should be stored - in RAM. Smaller values use more memory, but make searching slightly - faster, while larger values use less memory and make searching slightly - slower. Searching is typically not dominated by dictionary lookup, so - tweaking this is rarely useful. - - - - Expert: The fraction of entries stored in skip tables, - used to accellerate . Larger values result in - smaller indexes, greater acceleration, but fewer accelerable cases, while - smaller values result in bigger indexes, less acceleration and more - accelerable cases. More detailed experiments would be useful here. - - - - Expert: The maximum number of skip levels. Smaller values result in - slightly smaller indexes, but slower skipping in big posting lists. - - - - Adds a new <fieldNumber, termBytes>, TermInfo> pair to the set. - Term must be lexicographically greater than all previous Terms added. - TermInfo pointers must be positive and greater than all previous. - - - - Called to complete TermInfos creation. - - - This class implements , which - is passed each token produced by the analyzer on each - field. It stores these tokens in a hash table, and - allocates separate byte streams per token. Consumers of - this class, eg and - , write their own byte streams - under each term. - - - - Collapse the hash table & sort in-place. - - - Compares term text for two Posting instance and - returns -1 if p1 < p2; 1 if p1 > p2; else 0. - - - - Test whether the text for current RawPostingList p equals - current tokenText. - - - - Called when postings hash is too small (> 50% - occupied) or too large (< 20% occupied). - - - - Convenience class for holding TermVector information. - - - Compares s first by frequency and then by - the term (case-sensitive) - - - - - - The TermVectorOffsetInfo class holds information pertaining to a Term in a 's - offset information. This offset information is the character offset as set during the Analysis phase (and thus may not be the actual offset in the - original content). - - - - Convenience declaration when creating a that stores only position information. - - - The accessor for the ending offset for the term - The offset - - - The accessor for the starting offset of the term. - - - The offset - - - Retrieve the length (in bytes) of the tvd and tvf - entries for the next numDocs starting with - startDocID. This is used for bulk copying when - merging segments, if the field numbers are - congruent. Once this returns, the tvf & tvd streams - are seeked to the startDocID. - - - - - The number of documents in the reader - - - - Retrieve the term vector for the given document and field - The document number to retrieve the vector for - - The field within the document to retrieve - - The TermFreqVector for the document and field or null if there is no termVector for this field. - - IOException if there is an error reading the term vector files - - - Return all term vectors stored for this document or null if the could not be read in. - - - The document number to retrieve the vector for - - All term frequency vectors - - IOException if there is an error reading the term vector files - - - - The field to read in - - The pointer within the tvf file where we should start reading - - The mapper used to map the TermVector - - IOException - - - Models the existing parallel array structure - - - Construct the vector - The based on the mappings. - - - - Fills in no-term-vectors for all docs we haven't seen - since the last doc that had term vectors. - - - - Called once per field per document if term vectors - are enabled, to write the vectors to - RAMOutputStream, which is then quickly flushed to - the real term vectors files in the Directory. - - - - Add a complete document specified by all its term vectors. If document has no - term vectors, add value for tvx. - - - - - IOException - - - Do a bulk copy of numDocs documents from reader to our - streams. This is used to expedite merging, if the - field numbers are congruent. - - - - Close all streams. - - - Lucene's package information, including version. * - - - Message Interface for a lazy loading. - For Native Language Support (NLS), system of software internationalization. - - - - Default implementation of Message interface. - For Native Language Support (NLS), system of software internationalization. - - - - MessageBundles classes extend this class, to implement a bundle. - - For Native Language Support (NLS), system of software internationalization. - - This interface is similar to the NLS class in eclipse.osgi.util.NLS class - - initializeMessages() method resets the values of all static strings, should - only be called by classes that extend from NLS (see TestMessages.java for - reference) - performs validation of all message in a bundle, at class load - time - performs per message validation at runtime - see NLSTest.java for - usage reference - - MessageBundle classes may subclass this type. - - - - Initialize a given class with the message bundle Keys Should be called from - a class that extends NLS in a static block at class load time. - - - Property file with that contains the message bundle - - where constants will reside - - - - - - - - - Message Key - - - - - Performs the priviliged action. - - A value that may represent the result of the action. - - - Interface that exceptions should implement to support lazy loading of messages. - - For Native Language Support (NLS), system of software internationalization. - - This Interface should be implemented by all exceptions that require - translation - - - - - a instance of a class that implements the Message interface - - - This interface describes a character stream that maintains line and - column number positions of the characters. It also has the capability - to backup the stream to some extent. An implementation of this - interface is used in the TokenManager implementation generated by - JavaCCParser. - - All the methods except backup can be implemented in any fashion. backup - needs to be implemented correctly for the correct operation of the lexer. - Rest of the methods are all used to get information like line number, - column number and the String that constitutes a token and are not used - by the lexer. Hence their implementation won't affect the generated lexer's - operation. - - - - Returns the next character from the selected input. The method - of selecting the input is the responsibility of the class - implementing this interface. Can throw any java.io.IOException. - - - - Backs up the input stream by amount steps. Lexer calls this method if it - had already read some characters, but could not use them to match a - (longer) token. So, they will be used again as the prefix of the next - token and it is the implemetation's responsibility to do this right. - - - - Returns the next character that marks the beginning of the next token. - All characters must remain in the buffer between two successive calls - to this method to implement backup correctly. - - - - Returns an array of characters that make up the suffix of length 'len' for - the currently matched token. This is used to build up the matched string - for use in actions in the case of MORE. A simple and inefficient - implementation of this is as follows : - - { - String t = GetImage(); - return t.substring(t.length() - len, t.length()).toCharArray(); - } - - - - The lexer calls this function to indicate that it is done with the stream - and hence implementations can free any resources held by this class. - Again, the body of this function can be just empty and it will not - affect the lexer's operation. - - - - Returns the column position of the character last read. - - - - - - - Returns the line number of the character last read. - - - - - - - Returns the column number of the last character for current token (being - matched after the last call to BeginTOken). - - - - Returns the line number of the last character for current token (being - matched after the last call to BeginTOken). - - - - Returns the column number of the first character for current token (being - matched after the last call to BeginTOken). - - - - Returns the line number of the first character for current token (being - matched after the last call to BeginTOken). - - - - Returns a string made up of characters from the marked token beginning - to the current buffer position. Implementations have the choice of returning - anything that they want to. For example, for efficiency, one might decide - to just return null, which is a valid implementation. - - - - An efficient implementation of JavaCC's CharStream interface.

Note that - this does not do line-number counting, but instead keeps track of the - character position of the token in the input, as required by Lucene's - API. - -

-
- - Constructs from a Reader. - - - A QueryParser which constructs queries to search multiple fields. - - - $Revision: 829231 $ - - - - This class is generated by JavaCC. The most important method is - . - - The syntax for query strings is as follows: - A Query is a series of clauses. - A clause may be prefixed by: - - a plus (+) or a minus (-) sign, indicating - that the clause is required or prohibited respectively; or - a term followed by a colon, indicating the field to be searched. - This enables one to construct queries which search multiple fields. - - - A clause may be either: - - a term, indicating all the documents that contain this term; or - a nested query, enclosed in parentheses. Note that this may be used - with a +/- prefix to require any of a set of - terms. - - - Thus, in BNF, the query grammar is: - - Query ::= ( Clause )* - Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" ) - - -

- Examples of appropriately formatted queries can be found in the query syntax - documentation. -

- -

- In s, QueryParser tries to detect date values, e.g. - date:[6/1/2005 TO 6/4/2005] produces a range query that searches - for "date" fields between 2005-06-01 and 2005-06-04. Note that the format - of the accepted input depends on the . - By default a date is converted into a search term using the deprecated - for compatibility reasons. - To use the new to convert dates, a - has to be set. -

-

- The date resolution that shall be used for RangeQueries can be set - using - or . The former - sets the default date resolution for all fields, whereas the latter can - be used to set field specific date resolutions. Field specific date - resolutions take, if set, precedence over the default date resolution. -

-

- If you use neither nor in your - index, you can create your own - query parser that inherits QueryParser and overwrites - to - use a different method for date conversion. -

- -

Note that QueryParser is not thread-safe.

- -

NOTE: there is a new QueryParser in contrib, which matches - the same syntax as this class, but is more modular, - enabling substantial customization to how a query is created. - -

NOTE: there is a new QueryParser in contrib, which matches - the same syntax as this class, but is more modular, - enabling substantial customization to how a query is created. - NOTE: You must specify the required compatibility when - creating QueryParser: - - As of 2.9, is true by default. - -

-
- - Token literal values and constants. - Generated by org.javacc.parser.OtherFilesGen#start() - - - - End of File. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - RegularExpression Id. - - - Lexical state. - - - Lexical state. - - - Lexical state. - - - Lexical state. - - - Literal token values. - - - Alternative form of QueryParser.Operator.AND - - - Alternative form of QueryParser.Operator.OR - - - The actual operator that parser uses to combine query terms - - - Parses a query string, returning a {@link Lucene.Net.Search.Query}. - the query string to be parsed. - - ParseException if the parsing fails - - - Sets the default date resolution used by RangeQueries for fields for which no - specific date resolutions has been set. Field specific resolutions can be set - with {@link #SetDateResolution(String, DateTools.Resolution)}. - - - the default date resolution to set - - - - Sets the date resolution used by RangeQueries for a specific field. - - - field for which the date resolution is to be set - - date resolution to set - - - - Returns the date resolution that is used by RangeQueries for the given field. - Returns null, if no default or field specific date resolution has been set - for the given field. - - - - throw in overridden method to disallow - - - - Base implementation delegates to {@link #GetFieldQuery(String,String)}. - This method may be overridden, for example, to return - a SpanNearQuery instead of a PhraseQuery. - - - throw in overridden method to disallow - - - - throw in overridden method to disallow - - - - Builds a new BooleanQuery instance - disable coord - - new BooleanQuery instance - - - - Builds a new BooleanClause instance - sub query - - how this clause should occur when matching documents - - new BooleanClause instance - - - - Builds a new TermQuery instance - term - - new TermQuery instance - - - - Builds a new PhraseQuery instance - new PhraseQuery instance - - - - Builds a new MultiPhraseQuery instance - new MultiPhraseQuery instance - - - - Builds a new PrefixQuery instance - Prefix term - - new PrefixQuery instance - - - - Builds a new FuzzyQuery instance - Term - - minimum similarity - - prefix length - - new FuzzyQuery Instance - - - - Builds a new TermRangeQuery instance - Field - - min - - max - - true if range is inclusive - - new TermRangeQuery instance - - - - Builds a new MatchAllDocsQuery instance - new MatchAllDocsQuery instance - - - - Builds a new WildcardQuery instance - wildcard term - - new WildcardQuery instance - - - - Factory method for generating query, given a set of clauses. - By default creates a boolean query composed of clauses passed in. - - Can be overridden by extending classes, to modify query being - returned. - - - List that contains {@link BooleanClause} instances - to join. - - - Resulting {@link Query} object. - - throw in overridden method to disallow - - - - Factory method for generating query, given a set of clauses. - By default creates a boolean query composed of clauses passed in. - - Can be overridden by extending classes, to modify query being - returned. - - - List that contains {@link BooleanClause} instances - to join. - - true if coord scoring should be disabled. - - - Resulting {@link Query} object. - - throw in overridden method to disallow - - - - Factory method for generating a query. Called when parser - parses an input term token that contains one or more wildcard - characters (? and *), but is not a prefix term token (one - that has just a single * character at the end) -

- Depending on settings, prefix term may be lower-cased - automatically. It will not go through the default Analyzer, - however, since normal Analyzers are unlikely to work properly - with wildcard templates. -

- Can be overridden by extending classes, to provide custom handling for - wildcard queries, which may be necessary due to missing analyzer calls. - -

- Name of the field query will use. - - Term token that contains one or more wild card - characters (? or *), but is not simple prefix term - - - Resulting {@link Query} built for the term - - throw in overridden method to disallow - -
- - Factory method for generating a query (similar to - {@link #getWildcardQuery}). Called when parser parses an input term - token that uses prefix notation; that is, contains a single '*' wildcard - character as its last character. Since this is a special case - of generic wildcard term, and such a query can be optimized easily, - this usually results in a different query object. -

- Depending on settings, a prefix term may be lower-cased - automatically. It will not go through the default Analyzer, - however, since normal Analyzers are unlikely to work properly - with wildcard templates. -

- Can be overridden by extending classes, to provide custom handling for - wild card queries, which may be necessary due to missing analyzer calls. - -

- Name of the field query will use. - - Term token to use for building term for the query - (without trailing '*' character!) - - - Resulting {@link Query} built for the term - - throw in overridden method to disallow - -
- - Factory method for generating a query (similar to - {@link #getWildcardQuery}). Called when parser parses - an input term token that has the fuzzy suffix (~) appended. - - - Name of the field query will use. - - Term token to use for building term for the query - - - Resulting {@link Query} built for the term - - throw in overridden method to disallow - - - - Returns a String where the escape char has been - removed, or kept only once if there was a double escape. - - Supports escaped unicode characters, e. g. translates - \\u0041 to A. - - - - - Returns the numeric value of the hexadecimal character - - - Returns a String where those characters that QueryParser - expects to be escaped are escaped by a preceding \. - - - - Command line tool to test QueryParser, using {@link Lucene.Net.Analysis.SimpleAnalyzer}. - Usage:
- java Lucene.Net.QueryParsers.QueryParser <input> -
-
- - Constructor with user supplied CharStream. - - - Reinitialise. - - - Constructor with generated Token Manager. - - - Reinitialise. - - - Get the next Token. - - - Get the specific Token. - - - Generate ParseException. - - - Enable tracing. - - - Disable tracing. - - - Returns the analyzer. - - - Returns the field. - - - - Gets or sets the minimal similarity for fuzzy queries. - Default is 0.5f. - - - - Gets or sets the prefix length for fuzzy queries. - Returns the fuzzyPrefixLength. - - - Gets or sets the default slop for phrases. If zero, then exact phrase matches - are required. Default value is zero. - - - - Set to true to allow leading wildcard characters. -

- When set, * or ? are allowed as - the first character of a PrefixQuery and WildcardQuery. - Note that this can produce very slow - queries on big indexes. -

- Default: false. -

-
- - Set to true to enable position increments in result query. -

- When set, result phrase and multi-phrase queries will - be aware of position increments. - Useful when e.g. a StopFilter increases the position increment of - the token that follows an omitted token. -

- Default: false. -

-
- - Gets or sets the boolean operator of the QueryParser. - In default mode (OR_OPERATOR) terms without any modifiers - are considered optional: for example capital of Hungary is equal to - capital OR of OR Hungary.
- In AND_OPERATOR mode terms are considered to be in conjunction: the - above mentioned query is parsed as capital AND of AND Hungary -
-
- - Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically - lower-cased or not. Default is true. - - - - By default QueryParser uses - when creating a PrefixQuery, WildcardQuery or RangeQuery. This implementation is generally preferable because it - a) Runs faster b) Does not have the scarcity of terms unduly influence score - c) avoids any "TooManyBooleanClauses" exception. - However, if your application really needs to use the - old-fashioned BooleanQuery expansion rewriting and the above - points are not relevant then use this to change - the rewrite method. - - - - Gets or sets locale used by date range parsing. - - - Gets or sets the collator used to determine index term inclusion in ranges - for RangeQuerys. -

- WARNING: Setting the rangeCollator to a non-null - collator using this method will cause every single index Term in the - Field referenced by lowerTerm and/or upperTerm to be examined. - Depending on the number of index Terms in this Field, the operation could - be very slow. - -

- the collator to use when constructing RangeQuerys -
- - Creates a MultiFieldQueryParser. Allows passing of a map with term to - Boost, and the boost to apply to each term. - -

- It will, when parse(String query) is called, construct a query like this - (assuming the query consists of two terms and you specify the two fields - title and body): -

- - - (title:term1 body:term1) (title:term2 body:term2) - - -

- When setDefaultOperator(AND_OPERATOR) is set, the result will be: -

- - - +(title:term1 body:term1) +(title:term2 body:term2) - - -

- When you pass a boost (title=>5 body=>10) you can get -

- - - +(title:term1^5.0 body:term1^10.0) +(title:term2^5.0 body:term2^10.0) - - -

- In other words, all the query's terms must appear, but it doesn't matter - in what fields they appear. -

-

-
- - Creates a MultiFieldQueryParser. - -

- It will, when parse(String query) is called, construct a query like this - (assuming the query consists of two terms and you specify the two fields - title and body): -

- - - (title:term1 body:term1) (title:term2 body:term2) - - -

- When setDefaultOperator(AND_OPERATOR) is set, the result will be: -

- - - +(title:term1 body:term1) +(title:term2 body:term2) - - -

- In other words, all the query's terms must appear, but it doesn't matter - in what fields they appear. -

-

-
- - Parses a query which searches on the fields specified. -

- If x fields are specified, this effectively constructs: - - - (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx) - - -

- Lucene version to match; this is passed through to - QueryParser. - - Queries strings to parse - - Fields to search on - - Analyzer to use - - ParseException - if query parsing fails - - IllegalArgumentException - if the length of the queries array differs from the length of - the fields array - -
- - Parses a query, searching on the fields specified. Use this if you need - to specify certain fields as required, and others as prohibited. -

- Uasge: - - String[] fields = {"filename", "contents", "description"}; - BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD, - BooleanClause.Occur.MUST, - BooleanClause.Occur.MUST_NOT}; - MultiFieldQueryParser.parse("query", fields, flags, analyzer); - -

- The code above would construct a query: - - - (filename:query) +(contents:query) -(description:query) - - -

- Lucene version to match; this is passed through to - QueryParser. - - Query string to parse - - Fields to search on - - Flags describing the fields - - Analyzer to use - - ParseException - if query parsing fails - - IllegalArgumentException - if the length of the fields array differs from the length of - the flags array - -
- - Parses a query, searching on the fields specified. Use this if you need - to specify certain fields as required, and others as prohibited. -

- Usage: - - String[] query = {"query1", "query2", "query3"}; - String[] fields = {"filename", "contents", "description"}; - BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD, - BooleanClause.Occur.MUST, - BooleanClause.Occur.MUST_NOT}; - MultiFieldQueryParser.parse(query, fields, flags, analyzer); - -

- The code above would construct a query: - - - (filename:query1) +(contents:query2) -(description:query3) - - -

- Lucene version to match; this is passed through to - QueryParser. - - Queries string to parse - - Fields to search on - - Flags describing the fields - - Analyzer to use - - ParseException - if query parsing fails - - IllegalArgumentException - if the length of the queries, fields, and flags array differ - -
- - This exception is thrown when parse errors are encountered. - You can explicitly create objects of this exception type by - calling the method generateParseException in the generated - parser. - - You can modify this class to customize your error reporting - mechanisms so long as you retain the public fields. - - - - This constructor is used by the method "generateParseException" - in the generated parser. Calling this constructor generates - a new object of this type with the fields "currentToken", - "expectedTokenSequences", and "tokenImage" set. The boolean - flag "specialConstructor" is also set to true to indicate that - this constructor was used to create this object. - This constructor calls its super class with the empty string - to force the "toString" method of parent class "Throwable" to - print the error message in the form: - ParseException: <result of getMessage> - - - - The following constructors are for use by you for whatever - purpose you can think of. Constructing the exception in this - manner makes the exception behave in the normal way - i.e., as - documented in the class "Throwable". The fields "errorToken", - "expectedTokenSequences", and "tokenImage" do not contain - relevant information. The JavaCC generated code does not use - these constructors. - - - - Constructor with message. - - - Constructor with message. - - - This variable determines which constructor was used to create - this object and thereby affects the semantics of the - "getMessage" method (see below). - - - - This is the last token that has been consumed successfully. If - this object has been created due to a parse error, the token - followng this token will (therefore) be the first error token. - - - - Each entry in this array is an array of integers. Each array - of integers represents a sequence of tokens (by their ordinal - values) that is expected at this point of the parse. - - - - This is a reference to the "tokenImage" array of the generated - parser within which the parse error occurred. This array is - defined in the generated ...Constants interface. - - - - The end of line string for this machine. - - - Used to convert raw characters to their escaped version - when these raw version cannot be used as part of an ASCII - string literal. - - - - This method has the standard behavior when this object has been - created using the standard constructors. Otherwise, it uses - "currentToken" and "expectedTokenSequences" to generate a parse - error message and returns it. If this object has been created - due to a parse error, and you do not catch it (it gets thrown - from the parser), then this method is called during the printing - of the final stack trace, and hence the correct error message - gets displayed. - - - - Token Manager. - - - Debug output. - - - Set debug output. - - - Token literal values. - - - Lexer state names. - - - Lex State array. - - - Constructor. - - - Constructor. - - - Reinitialise parser. - - - Reinitialise parser. - - - Switch to specified lex state. - - - Get the next Token. - - - Describes the input token stream. - - - An integer that describes the kind of this token. This numbering - system is determined by JavaCCParser, and a table of these numbers is - stored in the file ...Constants.java. - - - - The line number of the first character of this Token. - - - The column number of the first character of this Token. - - - The line number of the last character of this Token. - - - The column number of the last character of this Token. - - - The string image of the token. - - - A reference to the next regular (non-special) token from the input - stream. If this is the last token from the input stream, or if the - token manager has not read tokens beyond this one, this field is - set to null. This is true only if this token is also a regular - token. Otherwise, see below for a description of the contents of - this field. - - - - This field is used to access special tokens that occur prior to this - token, but after the immediately preceding regular (non-special) token. - If there are no such special tokens, this field is set to null. - When there are more than one such special token, this field refers - to the last of these special tokens, which in turn refers to the next - previous special token through its specialToken field, and so on - until the first special token (whose specialToken field is null). - The next fields of special tokens refer to other special tokens that - immediately follow it (without an intervening regular token). If there - is no such token, this field is null. - - - - No-argument constructor - - - Constructs a new token for the specified Image. - - - Constructs a new token for the specified Image and Kind. - - - Returns the image. - - - Returns a new Token object, by default. However, if you want, you - can create and return subclass objects based on the value of ofKind. - Simply add the cases to the switch for all those special cases. - For example, if you have a subclass of Token called IDToken that - you want to create if ofKind is ID, simply add something like : - - case MyParserConstants.ID : return new IDToken(ofKind, image); - - to the following switch statement. Then you can cast matchedToken - variable to the appropriate type and use sit in your lexical actions. - - - - An optional attribute value of the Token. - Tokens which are not used as syntactic sugar will often contain - meaningful values that will be used later on by the compiler or - interpreter. This attribute value is often different from the image. - Any subclass of Token that actually wants to return a non-null value can - override this method as appropriate. - - - - Token Manager Error. - - - Lexical error occurred. - - - An attempt was made to create a second instance of a static token manager. - - - Tried to change to an invalid lexical state. - - - Detected (and bailed out of) an infinite loop in the token manager. - - - Indicates the reason why the exception is thrown. It will have - one of the above 4 values. - - - - Replaces unprintable characters by their escaped (or unicode escaped) - equivalents in the given string - - - - Returns a detailed message for the Error when it is thrown by the - token manager to indicate a lexical error. - Parameters : - EOFSeen : indicates if EOF caused the lexical error - curLexState : lexical state in which this error occurred - errorLine : line number when the error occurred - errorColumn : column number when the error occurred - errorAfter : prefix that was seen before this error occurred - curchar : the offending character - Note: You can customize the lexical error message by modifying this method. - - - - No arg constructor. - - - Constructor with message and reason. - - - Full Constructor. - - - You can also modify the body of this method to customize your error messages. - For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not - of end-users concern, so you can return something like : - - "Internal Error : Please file a bug report .... " - - from this method for such cases in the release version of your parser. - - - - A clause in a BooleanQuery. - - - Constructs a BooleanClause. - - - Returns true if o is equal to this. - - - Returns a hash code value for this object. - - - The query whose matching documents are combined by the boolean query. - - - A Query that matches documents matching boolean combinations of other - queries, e.g. s, s or other - BooleanQuerys. - - - - The abstract base class for queries. -

Instantiable subclasses are: - - - - - - - - - - - - - -

A parser for queries is contained in: - - QueryParser - -

-
- - Prints a query to a string, with field assumed to be the - default field and omitted. -

The representation used is one that is supposed to be readable - by QueryParser. However, - there are the following limitations: - - If the query was created by the parser, the printed - representation may not be exactly what was parsed. For example, - characters that need to be escaped will be represented without - the required backslash. - Some of the more complicated queries (e.g. span queries) - don't have a representation that can be parsed by QueryParser. - -

-
- - Prints a query to a string. - - - Expert: Constructs an appropriate Weight implementation for this query. - -

- Only implemented by primitive queries, which re-write to themselves. -

-
- - Expert: Constructs and initializes a Weight for a top-level query. - - - Expert: called to re-write queries into primitive queries. For example, - a PrefixQuery will be rewritten into a BooleanQuery that consists - of TermQuerys. - - - - Expert: called when re-writing queries under MultiSearcher. - - Create a single query suitable for use by all subsearchers (in 1-1 - correspondence with queries). This is an optimization of the OR of - all queries. We handle the common optimization cases of equal - queries and overlapping clauses of boolean OR queries (as generated - by MultiTermQuery.rewrite()). - Be careful overriding this method as queries[0] determines which - method will be called and is not necessarily of the same type as - the other queries. - - - - Expert: adds all terms occuring in this query to the terms set. Only - works if this query is in its rewritten form. - - - UnsupportedOperationException if this query is not yet rewritten - - - Expert: merges the clauses of a set of BooleanQuery's into a single - BooleanQuery. - -

A utility for use by implementations. -

-
- - Expert: Returns the Similarity implementation to be used for this query. - Subclasses may override this method to specify their own Similarity - implementation, perhaps one that delegates through that of the Searcher. - By default the Searcher's Similarity implementation is returned. - - - - Returns a clone of this query. - - - Gets or sets the boost for this query clause to b. Documents - matching this clause will (in addition to the normal weightings) have - their score multiplied by b. The boost is 1.0 by default. - - - - Constructs an empty boolean query. - - - Constructs an empty boolean query. - - may be disabled in scoring, as - appropriate. For example, this score factor does not make sense for most - automatically generated queries, like and - . - - - disables in scoring. - - - - Returns true iff is disabled in - scoring for this query instance. - - - - - - Adds a clause to a boolean query. - - - TooManyClauses if the new number of clauses exceeds the maximum clause number - - - - - Adds a clause to a boolean query. - TooManyClauses if the new number of clauses exceeds the maximum clause number - - - - - Returns the set of clauses in this query. - - - - Returns an iterator on the clauses in this query. - - - - - Prints a user-readable version of this query. - - - Returns true iff o is equal to this. - - - Returns a hash code value for this object. - - - Gets or sets the maximum number of clauses permitted, 1024 by default. - Attempts to add more than the permitted number of clauses cause - to be thrown. - - - - - Specifies a minimum number of the optional BooleanClauses - which must be satisfied. - - By default no optional clauses are necessary for a match - (unless there are no required clauses). If this method is used, - then the specified number of clauses is required. - - - Use of this method is totally independent of specifying that - any specific clauses are required (or prohibited). This number will - only be compared against the number of matching optional clauses. - - - - - Returns the list of clauses in this query. - - - Expert: Delegating scoring implementation. Useful in - implementations, to override only certain - methods of a Searcher's Similiarty implementation.. - - - - Expert: Scoring API. -

Subclasses implement search scoring. - -

The score of query q for document d correlates to the - cosine-distance or dot-product between document and query vectors in a - - Vector Space Model (VSM) of Information Retrieval. - A document whose vector is closer to the query vector in that model is scored higher. - - The score is computed as follows: - -

- - -
- - - - - - - - - - - -
- score(q,d)   =   - coord(q,d)  ·  - queryNorm(q)  ·  - - - - ( - tf(t in d)  ·  - idf(t)2  ·  - t.Boost ·  - norm(t,d) - ) -
t in q
-
- -

where - - - - tf(t in d) - correlates to the term's frequency, - defined as the number of times term t appears in the currently scored document d. - Documents that have more occurrences of a given term receive a higher score. - The default computation for tf(t in d) in - DefaultSimilarity is: - -
 
- - - - - -
- tf(t in d)   =   - - frequency½ -
-
 
-
- - - - idf(t) stands for Inverse Document Frequency. This value - correlates to the inverse of docFreq - (the number of documents in which the term t appears). - This means rarer terms give higher contribution to the total score. - The default computation for idf(t) in - DefaultSimilarity is: - -
 
- - - - - - - -
- idf(t)  =   - - 1 + log ( - - - - - -
numDocs
–––––––––
docFreq+1
-
- ) -
-
 
-
- - - - coord(q,d) - is a score factor based on how many of the query terms are found in the specified document. - Typically, a document that contains more of the query's terms will receive a higher score - than another document with fewer query terms. - This is a search time factor computed in - coord(q,d) - by the Similarity in effect at search time. -
 
-
- - - - queryNorm(q) - - is a normalizing factor used to make scores between queries comparable. - This factor does not affect document ranking (since all ranked documents are multiplied by the same factor), - but rather just attempts to make scores from different queries (or even different indexes) comparable. - This is a search time factor computed by the Similarity in effect at search time. - - The default computation in - DefaultSimilarity - is: -
 
- - - - - -
- queryNorm(q)   =   - queryNorm(sumOfSquaredWeights) -   =   - - - - - -
1
- –––––––––––––– -
sumOfSquaredWeights½
-
-
 
- - The sum of squared weights (of the query terms) is - computed by the query object. - For example, a boolean query - computes this value as: - -
 
- - - - - - - - - - - -
- GetSumOfSquaredWeights   =   - q.Boost 2 -  ·  - - - - ( - idf(t)  ·  - t.Boost - ) 2 -
t in q
-
 
- -
- - - - t.Boost - is a search time boost of term t in the query q as - specified in the query text - (see query syntax), - or as set by application calls to - . - Notice that there is really no direct API for accessing a boost of one term in a multi term query, - but rather multi terms are represented in a query as multi - TermQuery objects, - and so the boost of a term in the query is accessible by calling the sub-query - . -
 
-
- - - - norm(t,d) encapsulates a few (indexing time) boost and length factors: - - - Document boost - set by calling - doc.Boost - before adding the document to the index. - - Field boost - set by calling - field.Boost - before adding the field to a document. - - LengthNorm(field) - computed - when the document is added to the index in accordance with the number of tokens - of this field in the document, so that shorter fields contribute more to the score. - LengthNorm is computed by the Similarity class in effect at indexing. - - - -

- When a document is added to the index, all the above factors are multiplied. - If the document has multiple fields with the same name, all their boosts are multiplied together: - -
 
- - - - - - - - - - - -
- norm(t,d)   =   - doc.Boost -  ·  - LengthNorm(field) -  ·  - - - - field.Boost -
field f in d named as t
-
 
- However the resulted norm value is encoded as a single byte - before being stored. - At search time, the norm byte value is read from the index - directory and - decoded back to a float norm value. - This encoding/decoding, while reducing index size, comes with the price of - precision loss - it is not guaranteed that decode(encode(x)) = x. - For instance, decode(encode(0.89)) = 0.75. - Also notice that search time is too late to modify this norm part of scoring, e.g. by - using a different for search. -
 
- - - -

- - - - - - -
- - The Similarity implementation used by default. - - - Cache of decoded bytes. - - - Decodes a normalization factor stored in an index. - - - - - Returns a table for decoding normalization bytes. - - - - - Compute the normalization value for a field, given the accumulated - state of term processing for this field (see ). - -

Implementations should calculate a float value based on the field - state and then return that value. - -

For backward compatibility this method by default calls - passing - as the second argument, and - then multiplies this value by .

- -

WARNING: This API is new and experimental and may - suddenly change.

- -

- field name - - current processing state for this field - - the calculated float norm - -
- - Computes the normalization value for a field given the total number of - terms contained in a field. These values, together with field boosts, are - stored in an index and multipled into scores for hits on each field by the - search code. - -

Matches in longer fields are less precise, so implementations of this - method usually return smaller values when numTokens is large, - and larger values when numTokens is small. - -

Note that the return values are computed under - - and then stored using - . - Thus they have limited precision, and documents - must be re-indexed if this method is altered. - -

- the name of the field - - the total number of tokens contained in fields named - fieldName of doc. - - a normalization factor for hits on this field of this document - - - -
- - Computes the normalization value for a query given the sum of the squared - weights of each of the query terms. This value is then multipled into the - weight of each query term. - -

This does not affect ranking, but rather just attempts to make scores - from different queries comparable. - -

- the sum of the squares of query term weights - - a normalization factor for query weights - -
- - Encodes a normalization factor for storage in an index. - -

The encoding uses a three-bit mantissa, a five-bit exponent, and - the zero-exponent point at 15, thus - representing values from around 7x10^9 to 2x10^-9 with about one - significant decimal digit of accuracy. Zero is also represented. - Negative numbers are rounded up to zero. Values too large to represent - are rounded down to the largest representable value. Positive values too - small to represent are rounded up to the smallest positive representable - value. - -

- - -
- - Computes a score factor based on a term or phrase's frequency in a - document. This value is multiplied by the - factor for each term in the query and these products are then summed to - form the initial score for a document. - -

Terms and phrases repeated in a document indicate the topic of the - document, so implementations of this method usually return larger values - when freq is large, and smaller values when freq - is small. - -

The default implementation calls . - -

- the frequency of a term within a document - - a score factor based on a term's within-document frequency - -
- - Computes the amount of a sloppy phrase match, based on an edit distance. - This value is summed for each sloppy phrase match in a document to form - the frequency that is passed to . - -

A phrase match with a small edit distance to a document passage more - closely matches the document, so implementations of this method usually - return larger values when the edit distance is small and smaller values - when it is large. - -

- - the edit distance of this sloppy phrase match - the frequency increment for this match -
- - Computes a score factor based on a term or phrase's frequency in a - document. This value is multiplied by the - factor for each term in the query and these products are then summed to - form the initial score for a document. - -

Terms and phrases repeated in a document indicate the topic of the - document, so implementations of this method usually return larger values - when freq is large, and smaller values when freq - is small. - -

- the frequency of a term within a document - - a score factor based on a term's within-document frequency - -
- - Computes a score factor for a simple term and returns an explanation - for that score factor. - -

- The default implementation uses: - - - idf(searcher.docFreq(term), searcher.MaxDoc); - - - Note that is used instead of - because it is - proportional to , i.e., when one is - inaccurate, so is the other, and in the same direction. - -

- the term in question - - the document collection being searched - - an IDFExplain object that includes both an idf score factor - and an explanation for the term. - - IOException -
- - Computes a score factor for a phrase. - -

- The default implementation sums the idf factor for - each term in the phrase. - -

- the terms in the phrase - - the document collection being searched - - an IDFExplain object that includes both an idf - score factor for the phrase and an explanation - for each term. - - IOException -
- - Computes a score factor based on a term's document frequency (the number - of documents which contain the term). This value is multiplied by the - factor for each term in the query and these products are - then summed to form the initial score for a document. - -

Terms that occur in fewer documents are better indicators of topic, so - implementations of this method usually return larger values for rare terms, - and smaller values for common terms. - -

- the number of documents which contain the term - - the total number of documents in the collection - - a score factor based on the term's document frequency - -
- - Computes a score factor based on the fraction of all query terms that a - document contains. This value is multiplied into scores. - -

The presence of a large portion of the query terms indicates a better - match with the query, so implementations of this method usually return - larger values when the ratio between these parameters is large and smaller - values when the ratio between them is small. - -

- the number of query terms matched in the document - - the total number of terms in the query - - a score factor based on term overlap with the query - -
- - Calculate a scoring factor based on the data in the payload. Overriding implementations - are responsible for interpreting what is in the payload. Lucene makes no assumptions about - what is in the byte array. -

- The default implementation returns 1. - -

- The docId currently being scored. If this value is , then it should be assumed that the PayloadQuery implementation does not provide document information - - The fieldName of the term this payload belongs to - - The start position of the payload - - The end position of the payload - - The payload byte array to be scored - - The offset into the payload array - - The length in the array - - An implementation dependent float to be used as a scoring factor - - -
- - Gets or sets the default Similarity implementation - used by indexing and search code. -

This is initially an instance of . -

- - - - -
- - Small Util class used to pass both an idf factor as well as an - explanation for that factor. - - This class will likely be held on a , so be aware - before storing any large or un-serializable fields. - - - - - Expert: Describes the score computation for document and query. - - - The sub-nodes of this explanation node. - - - Adds a sub-node to this explanation node. - - - Render an explanation as text. - - - Render an explanation as HTML. - - - Indicates whether or not this Explanation models a good match. - -

- By default, an Explanation represents a "match" if the value is positive. -

-

- - -
- - The value assigned to this explanation node. - - - A description of this explanation node. - - - A short one line summary which should contain all high level - information about this Explanation, without the "Details" - - - - Small Util class used to pass both an idf factor as well as an - explanation for that factor. - - This class will likely be held on a , so be aware - before storing any large or un-serializable fields. - - - - - This should be calculated lazily if possible. - - - the explanation for the idf factor. - - - - the idf factor - - - Construct a that delegates all methods to another. - the Similarity implementation to delegate to - - - Thrown when an attempt is made to add more than - clauses. This typically happens if - a PrefixQuery, FuzzyQuery, WildcardQuery, or TermRangeQuery - is expanded to many terms during search. - - - - Expert: the Weight for BooleanQuery, used to - normalize, score and explain these queries. - -

NOTE: this API and implementation is subject to - change suddenly in the next release.

-

-
- - Expert: Calculate query weights and build query scorers. -

- The purpose of is to ensure searching does not - modify a , so that a instance can be reused.
- dependent state of the query should reside in the - .
- dependent state should reside in the . -

- A Weight is used in the following way: - - A Weight is constructed by a top-level query, given a - Searcher (). - The method is called on the - Weight to compute the query normalization factor - of the query clauses contained in the - query. - The query normalization factor is passed to . At - this point the weighting is complete. - A Scorer is constructed by . - - -

- 2.9 - -
- - An explanation of the score computation for the named document. - - - sub-reader containing the give doc - - - - an Explanation for the score - - IOException - - - Assigns the query normalization factor to this. - - - Returns a which scores documents in/out-of order according - to scoreDocsInOrder. -

- NOTE: even if scoreDocsInOrder is false, it is - recommended to check whether the returned Scorer indeed scores - documents out of order (i.e., call ), as - some Scorer implementations will always return documents - in-order.
- NOTE: null can be returned if no documents will be scored by this - query. - -

- - the for which to return the . - - specifies whether in-order scoring of documents is required. Note - that if set to false (i.e., out-of-order scoring is required), - this method can return whatever scoring mode it supports, as every - in-order scorer is also an out-of-order one. However, an - out-of-order scorer may not support - and/or , therefore it is recommended to - request an in-order scorer if use of these methods is required. - - - if true, will be called; if false, - and/or will - be called. - - a which scores documents in/out-of order. - - IOException -
- - The sum of squared weights of contained query clauses. - - - Returns true iff this implementation scores docs only out of order. This - method is used in conjunction with 's - AcceptsDocsOutOfOrder and - to - create a matching instance for a given , or - vice versa. -

- NOTE: the default implementation returns false, i.e. - the Scorer scores documents in-order. -

-
- - The query that this concerns. - - - The weight for this query. - - - The Similarity implementation. - - - Expert: Common scoring functionality for different types of queries. - -

- A Scorer iterates over documents matching a - query in increasing order of doc Id. -

-

- Document scores are computed using a given Similarity - implementation. -

- -

NOTE: The values Float.Nan, - Float.NEGATIVE_INFINITY and Float.POSITIVE_INFINITY are - not valid scores. Certain collectors (eg - ) will not properly collect hits - with these scores. -

-
- - This abstract class defines methods to iterate over a set of non-decreasing - doc ids. Note that this class assumes it iterates on doc Ids, and therefore - is set to Int32.MaxValue in order to be used as - a sentinel object. Implementations of this class are expected to consider - as an invalid value. - - - - When returned by , and - it means there are no more docs in the iterator. - - - - Returns the following: - - -1 or if or - were not called yet. - if the iterator has exhausted. - Otherwise it should return the doc ID it is currently on. - -

-

-
- - Advances to the next document in the set and returns the doc it is - currently on, or if there are no more docs in the - set.
- - NOTE: after the iterator has exhausted you should not call this - method, as it may result in unpredicted behavior. - -
-
- - Advances to the first beyond the current whose document number is greater - than or equal to target. Returns the current document number or - if there are no more docs in the set. -

- Behaves as if written: - - - int advance(int target) { - int doc; - while ((doc = nextDoc()) < target) { - } - return doc; - } - - - Some implementations are considerably more efficient than that. -

- NOTE: certain implemenations may return a different value (each - time) if called several times in a row with the same target. -

- NOTE: this method may be called with for - efficiency by some Scorers. If your implementation cannot efficiently - determine that it should exhaust, it is recommended that you check for that - value in each call to this method. -

- NOTE: after the iterator has exhausted you should not call this - method, as it may result in unpredicted behavior. -

- -

- 2.9 -
- - Constructs a Scorer. - The Similarity implementation used by this scorer. - - - - Scores and collects all matching documents. - The collector to which all matching documents are passed. - - - - Expert: Collects matching documents in a range. Hook for optimization. - Note, is added to ensure that - was called before this method. - - - The collector to which all matching documents are passed. - - Do not score documents past this. - - - The first document ID (ensures is called before - this method. - - true if more matching documents may remain. - - - - Returns the score of the current document matching the query. - Initially invalid, until or - is called the first time, or when called from within - . - - - - Returns the Similarity implementation used by this scorer. - - -

Expert: Collectors are primarily meant to be used to - gather raw results from a search, and implement sorting - or custom result filtering, collation, etc.

- -

Lucene's core collectors are derived from Collector. - Likely your application can use one of these classes, or - subclass , instead of - implementing Collector directly: - - - - is an abstract base class - that assumes you will retrieve the top N docs, - according to some criteria, after collection is - done. - - is a concrete subclass - and sorts according to score + - docID. This is used internally by the - search methods that do not take an - explicit . It is likely the most frequently - used collector. - - subclasses - and sorts according to a specified - object (sort by field). This is used - internally by the search methods - that take an explicit . - - , which wraps any other - Collector and aborts the search if it's taken too much - time. - - wraps any other - Collector and prevents collection of hits whose score - is <= 0.0 - - - -

Collector decouples the score from the collected doc: - the score computation is skipped entirely if it's not - needed. Collectors that do need the score should - implement the method, to hold onto the - passed instance, and call - within the collect method to compute the - current hit's score. If your collector may request the - score for a single hit multiple times, you should use - .

- -

NOTE: The doc that is passed to the collect - method is relative to the current reader. If your - collector needs to resolve this to the docID space of the - Multi*Reader, you must re-base it by recording the - docBase from the most recent setNextReader call. Here's - a simple example showing how to collect docIDs into a - BitSet:

- - - Searcher searcher = new IndexSearcher(indexReader); - final BitSet bits = new BitSet(indexReader.MaxDoc); - searcher.search(query, new Collector() { - private int docBase; - - // ignore scorer - public void setScorer(Scorer scorer) { - } - - // accept docs out of order (for a BitSet it doesn't matter) - public boolean acceptsDocsOutOfOrder() { - return true; - } - - public void collect(int doc) { - bits.set(doc + docBase); - } - - public void setNextReader(IndexReader reader, int docBase) { - this.docBase = docBase; - } - }); - - -

Not all collectors will need to rebase the docID. For - example, a collector that simply counts the total number - of hits would skip it.

- -

NOTE: Prior to 2.9, Lucene silently filtered - out hits with score <= 0. As of 2.9, the core Collectors - no longer do that. It's very unusual to have such hits - (a negative query boost, or function query returning - negative custom scores, could cause it to happen). If - you need that behavior, use - .

- -

NOTE: This API is experimental and might change - in incompatible ways in the next release.

- -

- 2.9 - -
- - Called before successive calls to . Implementations - that need the score of the current document (passed-in to - ), should save the passed-in Scorer and call - scorer.score() when needed. - - - - Called once for every document matching a query, with the unbased document - number. - -

- Note: This is called in an inner search loop. For good search performance, - implementations of this method should not call or - on every hit. - Doing so can slow searches by an order of magnitude or more. -

-
- - Called before collecting from each IndexReader. All doc ids in - will correspond to reader. - - Add docBase to the current IndexReaders internal document id to re-base ids - in . - - - next IndexReader - - - - - - - Return true if this collector does not - require the matching docIDs to be delivered in int sort - order (smallest to largest) to . -

Most Lucene Query implementations will visit - matching docIDs in order. However, some queries - (currently limited to certain cases of ) - can achieve faster searching if the - Collector allows them to deliver the - docIDs out of order. -

Many collectors don't mind getting docIDs out of - order, so it's important to return true - here. -

- -
- - A simple hash table of document scores within a range. - - - An alternative to BooleanScorer that also allows a minimum number - of optional scorers that should match. -
Implements skipTo(), and has no limitations on the numbers of added scorers. -
Uses ConjunctionScorer, DisjunctionScorer, ReqOptScorer and ReqExclScorer. -
-
- - The scorer to which all scoring will be delegated, - except for computing and using the coordination factor. - - - - The number of optionalScorers that need to match (if there are any) - - - Creates a with the given similarity and lists of required, - prohibited and optional scorers. In no required scorers are added, at least - one of the optional scorers will have to match during the search. - - - The similarity to be used. - - The minimum number of optional added scorers that should match - during the search. In case no required scorers are added, at least - one of the optional scorers will have to match during the search. - - the list of required scorers. - - the list of prohibited scorers. - - the list of optional scorers. - - - - Returns the scorer to be used for match counting and score summing. - Uses requiredScorers, optionalScorers and prohibitedScorers. - - - - Returns the scorer to be used for match counting and score summing. - Uses the given required scorer and the prohibitedScorers. - - A required scorer already built. - - - - Scores and collects all matching documents. - The collector to which all matching documents are passed through. - - - - A Scorer for OR like queries, counterpart of ConjunctionScorer. - This Scorer implements and uses skipTo() on the given Scorers. - - - - The number of subscorers. - - - The subscorers. - - - The minimum number of scorers that should match. - - - The scorerDocQueue contains all subscorers ordered by their current doc(), - with the minimum at the top. -
The scorerDocQueue is initialized the first time next() or skipTo() is called. -
An exhausted scorer is immediately removed from the scorerDocQueue. -
If less than the minimumNrMatchers scorers - remain in the scorerDocQueue next() and skipTo() return false. -

- After each to call to next() or skipTo() - currentSumScore is the total score of the current matching doc, - nrMatchers is the number of matching scorers, - and all scorers are after the matching doc, or are exhausted. -

-
- - The document number of the current match. - - - The number of subscorers that provide the current match. - - - Construct a DisjunctionScorer. - A collection of at least two subscorers. - - The positive minimum number of subscorers that should - match to match this query. -
When minimumNrMatchers is bigger than - the number of subScorers, - no matches will be produced. -
When minimumNrMatchers equals the number of subScorers, - it more efficient to use ConjunctionScorer. - -
- - Construct a DisjunctionScorer, using one as the minimum number - of matching subscorers. - - - - Called the first time next() or skipTo() is called to - initialize scorerDocQueue. - - - - Scores and collects all matching documents. - The collector to which all matching documents are passed through. - - - Expert: Collects matching documents in a range. Hook for optimization. - Note that must be called once before this method is called - for the first time. - - The collector to which all matching documents are passed through. - - Do not score documents past this. - - - true if more matching documents may remain. - - - - Advance all subscorers after the current document determined by the - top of the scorerDocQueue. - Repeat until at least the minimum number of subscorers match on the same - document and all subscorers are after that document or are exhausted. -
On entry the scorerDocQueue has at least minimumNrMatchers - available. At least the scorer with the minimum document number will be advanced. -
- true iff there is a match. -
In case there is a match, currentDoc, currentSumScore, - and nrMatchers describe the match. - - TODO: Investigate whether it is possible to use skipTo() when - the minimum number of matchers is bigger than one, ie. try and use the - character of ConjunctionScorer for the minimum number of matchers. - Also delay calling score() on the sub scorers until the minimum number of - matchers is reached. -
For this, a Scorer array with minimumNrMatchers elements might - hold Scorers at currentDoc that are temporarily popped from scorerQueue. -
-
- - Returns the score of the current document matching the query. - Initially invalid, until is called the first time. - - - - Returns the number of subscorers matching the current document. - Initially invalid, until is called the first time. - - - - Advances to the first match beyond the current whose document number is - greater than or equal to a given target.
- The implementation uses the skipTo() method on the subscorers. - -
- The target document number. - - the document whose number is greater than or equal to the given - target, or -1 if none exist. - -
- - Scorer for conjunctions, sets of queries, all of which are required. - - - Count a scorer as a single match. - - - Wraps another SpanFilter's result and caches it. The purpose is to allow - filters to simply filter, and then wrap with this class to add caching. - - - - Abstract base class providing a mechanism to restrict searches to a subset - of an index and also maintains and returns position information. - This is useful if you want to compare the positions from a SpanQuery with the positions of items in - a filter. For instance, if you had a SpanFilter that marked all the occurrences of the word "foo" in documents, - and then you entered a new SpanQuery containing bar, you could not only filter by the word foo, but you could - then compare position information for post processing. - - - - Abstract base class for restricting which documents may be returned during searching. - - - - Creates a enumerating the documents that should be - permitted in search results. NOTE: null can be - returned if no documents are accepted by this Filter. -

- Note: This method will be called once per segment in - the index during searching. The returned - must refer to document IDs for that segment, not for - the top-level reader. -

- a DocIdSet that provides the documents which should be permitted or - prohibited in search results. NOTE: null can be returned if - no documents will be accepted by this Filter. - - - A instance opened on the index currently - searched on. Note, it is likely that the provided reader does not - represent the whole underlying index i.e. if the index has more than - one segment the given reader only represents a single segment. - - - -
- - Returns a SpanFilterResult with true for documents which should be permitted in - search results, and false for those that should not and Spans for where the true docs match. - - The to load position and DocIdSet information from - - A - - java.io.IOException if there was an issue accessing the necessary information - - - - - A transient Filter cache (internal because of test) - - - - New deletions always result in a cache miss, by default - (. - Filter to cache results of - - - - - New deletions always result in a cache miss, specify the - Filter to cache results of - See - - - Wraps another filter's result and caches it. The purpose is to allow - filters to simply filter, and then wrap with this class to add caching. - - - - - New deletes are ignored by default, which gives higher - cache hit rate on reopened readers. Most of the time - this is safe, because the filter will be AND'd with a - Query that fully enforces deletions. If instead you - need this filter to always enforce deletions, pass - either or - . - - Filter to cache results of - - - - - Expert: by default, the cached filter will be shared - across reopened segments that only had changes to their - deletions. - - Filter to cache results of - See - - - - Provide the DocIdSet to be cached, using the DocIdSet provided - by the wrapped Filter. - This implementation returns the given DocIdSet. - - - - - Expert: Specifies how new deletions against a reopened - reader should be handled. - - The default is IGNORE, which means the cache entry - will be re-used for a given segment, even when that - segment has been reopened due to changes in deletions. - This is a big performance gain, especially with - near-real-timer readers, since you don't hit a cache - miss on every reopened reader for prior segments. - - However, in some cases this can cause invalid query - results, allowing deleted documents to be returned. - This only happens if the main query does not rule out - deleted documents on its own, such as a toplevel - ConstantScoreQuery. To fix this, use RECACHE to - re-create the cached filter (at a higher per-reopen - cost, but at faster subsequent search performance), or - use DYNAMIC to dynamically intersect deleted docs (fast - reopen time but some hit to search performance). - - - - Abstract decorator class for a DocIdSet implementation - that provides on-demand filtering/validation - mechanism on a given DocIdSet. - -

- - Technically, this same functionality could be achieved - with ChainedFilter (under contrib/misc), however the - benefit of this class is it never materializes the full - bitset for the filter. Instead, the - method is invoked on-demand, per docID visited during - searching. If you know few docIDs will be visited, and - the logic behind is relatively costly, - this may be a better way to filter than ChainedFilter. - -

- - -
- - A DocIdSet contains a set of doc ids. Implementing classes must - only implement to provide access to the set. - - - - An empty instance for easy use, e.g. in Filters that hit no documents. - - - Provides a to access the set. - This implementation can return null or - EMPTY_DOCIDSET.Iterator() if there - are no docs that match. - - - - This method is a hint for , if this DocIdSet - should be cached without copying it into a BitSet. The default is to return - false. If you have an own DocIdSet implementation - that does its iteration very effective and fast without doing disk I/O, - override this method and return true. - - - - Constructor. - Underlying DocIdSet - - - - Validation method to determine whether a docid should be in the result set. - docid to be tested - - true if input docid should be in the result set, false otherwise. - - - - Implementation of the contract to build a DocIdSetIterator. - - - - - - - This DocIdSet implementation is cacheable if the inner set is cacheable. - - - Abstract decorator class of a DocIdSetIterator - implementation that provides on-demand filter/validation - mechanism on an underlying DocIdSetIterator. See - . - - - - Constructor. - Underlying DocIdSetIterator. - - - - Validation method to determine whether a docid should be in the result set. - docid to be tested - - true if input docid should be in the result set, false otherwise. - - - - - - Expert: Describes the score computation for document and query, and - can distinguish a match independent of a positive value. - - - - The match status of this explanation node. - May be null if match status is unknown - - - - Indicates whether or not this Explanation models a good match. - -

- If the match status is explicitly set (i.e.: not null) this method - uses it; otherwise it defers to the superclass. -

-

-
- - A query that wraps a filter and simply returns a constant score equal to the - query boost for every document in the filter. - - - - Prints a user-readable version of this query. - - - Returns true if o is equal to this. - - - Returns a hash code value for this object. - - - Returns the encapsulated filter - - - Expert: Default scoring implementation. - - - Implemented as - state.getBoost()*lengthNorm(numTerms), where - numTerms is if - is false, else it's - - - . - -

WARNING: This API is new and experimental, and may suddenly - change.

-

-
- - Implemented as 1/sqrt(numTerms). - - - Implemented as 1/sqrt(sumOfSquaredWeights). - - - Implemented as sqrt(freq). - - - Implemented as 1 / (distance + 1). - - - Implemented as log(numDocs/(docFreq+1)) + 1. - - - Implemented as overlap / maxOverlap. - - - - - - - Determines whether overlap tokens (Tokens with - 0 position increment) are ignored when computing - norm. By default this is false, meaning overlap - tokens are counted just like non-overlap tokens. - -

WARNING: This API is new and experimental, and may suddenly - change.

- -

- - -
- - A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum - score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. - This is useful when searching for a word in multiple fields with different boost factors (so that the fields cannot be - combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, - not the sum of the field scores (as BooleanQuery would give). - If the query is "albino elephant" this ensures that "albino" matching one field and "elephant" matching - another gets a higher score than "albino" matching both fields. - To get this result, use both BooleanQuery and DisjunctionMaxQuery: for each term a DisjunctionMaxQuery searches for it in - each field, while the set of these DisjunctionMaxQuery's is combined into a BooleanQuery. - The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that - include this term in only the best of those multiple fields, without confusing this with the better case of two different terms - in the multiple fields. - - - - Creates a new empty DisjunctionMaxQuery. Use add() to add the subqueries. - the score of each non-maximum disjunct for a document is multiplied by this weight - and added into the final score. If non-zero, the value should be small, on the order of 0.1, which says that - 10 occurrences of word in a lower-scored field that is also in a higher scored field is just as good as a unique - word in the lower scored field (i.e., one that is not in any higher scored field. - - - - Creates a new DisjunctionMaxQuery - a Collection<Query> of all the disjuncts to add - - the weight to give to each matching non-maximum disjunct - - - - Add a subquery to this disjunction - the disjunct added - - - - Add a collection of disjuncts to this disjunction - via Iterable - - - - An Iterator<Query> over the disjuncts - - - Optimize our representation and our subqueries representations - the IndexReader we query - - an optimized copy of us (which may not be a copy if there is nothing to optimize) - - - - Create a shallow copy of us -- used in rewriting if necessary - a copy of us (but reuse, don't copy, our subqueries) - - - - Prettyprint us. - the field to which we are applied - - a string that shows what we do, of the form "(disjunct1 | disjunct2 | ... | disjunctn)^boost" - - - - Return true iff we represent the same query as o - another object - - true iff o is a DisjunctionMaxQuery with the same boost and the same subqueries, in the same order, as us - - - - Compute a hash code for hashing us - the hash code - - - - Expert: the Weight for DisjunctionMaxQuery, used to - normalize, score and explain these queries. - -

NOTE: this API and implementation is subject to - change suddenly in the next release.

-

-
- - The Similarity implementation. - - - The Weights for our subqueries, in 1-1 correspondence with disjuncts - - - The Scorer for DisjunctionMaxQuery's. The union of all documents generated by the the subquery scorers - is generated in document number order. The score for each document is the maximum of the scores computed - by the subquery scorers that generate that document, plus tieBreakerMultiplier times the sum of the scores - for the other subqueries that generate the document. - - - - Creates a new instance of DisjunctionMaxScorer - - - Multiplier applied to non-maximum-scoring subqueries for a - document as they are summed into the result. - - -- not used since our definition involves neither coord nor terms - directly - - The sub scorers this Scorer should iterate on - - The actual number of scorers to iterate on. Note that the array's - length may be larger than the actual number of scorers. - - - - Determine the current document score. Initially invalid, until is called the first time. - the score of the current generated document - - - - Expert: Scoring functionality for phrase queries. -
A document is considered matching if it contains the phrase-query terms - at "valid" positons. What "valid positions" are - depends on the type of the phrase query: for an exact phrase query terms are required - to appear in adjacent locations, while for a sloppy phrase query some distance between - the terms is allowed. The abstract method of extending classes - is invoked for each document containing all the phrase query terms, in order to - compute the frequency of the phrase query in that document. A non zero frequency - means a match. -
-
- - - Phrase frequency in current doc as computed by PhraseFreq() - - - - - For a document containing all the phrase query terms, compute the - frequency of the phrase in that document. - A non zero frequency means a match. -
Note, that containing all phrase terms does not guarantee a match - they have to be found in matching locations. -
- frequency of the phrase in current doc, 0 if not found. - -
- - Expert: Maintains caches of term values. - -

Created: May 19, 2004 11:13:14 AM - -

- lucene 1.4 - - $Id: FieldCache.java 807841 2009-08-25 22:27:31Z markrmiller $ - - - -
- - Expert: Stores term text values and document ordering data. - - - All the term values, in natural order. - - - For each document, an index into the lookup array. - - - Creates one of these objects - - - EXPERT: A unique Identifier/Description for each item in the FieldCache. - Can be useful for logging/debugging. -

- EXPERIMENTAL API: This API is considered extremely advanced - and experimental. It may be removed or altered w/o warning in future - releases - of Lucene. -

-

-
- - - - - - Computes (and stores) the estimated size of the cache Value - - - - - The most recently estimated size of the value, null unless - estimateSize has been called. - - - - Indicator for StringIndex values in the cache. - - - Expert: The cache used internally by sorting and range query classes. - - - The default parser for byte values, which are encoded by - - - The default parser for short values, which are encoded by - - - The default parser for int values, which are encoded by - - - The default parser for float values, which are encoded by - - - The default parser for long values, which are encoded by - - - The default parser for double values, which are encoded by - - - A parser instance for int values encoded by , e.g. when indexed - via /. - - - - A parser instance for float values encoded with , e.g. when indexed - via /. - - - - A parser instance for long values encoded by , e.g. when indexed - via /. - - - - A parser instance for double values encoded with , e.g. when indexed - via /. - - - - Interface to parse bytes from document fields. - - - - - Marker interface as super-interface to all parsers. It - is used to specify a custom parser to . - - - - Return a single Byte representation of this field's value. - - - Interface to parse shorts from document fields. - - - - - Return a short representation of this field's value. - - - Interface to parse ints from document fields. - - - - - Return an integer representation of this field's value. - - - Interface to parse floats from document fields. - - - - - Return an float representation of this field's value. - - - Interface to parse long from document fields. - - - Use , this will be removed in Lucene 3.0 - - - - Return an long representation of this field's value. - - - Interface to parse doubles from document fields. - - - Use , this will be removed in Lucene 3.0 - - - - Return an long representation of this field's value. - - - Checks the internal cache for an appropriate entry, and if none is - found, reads the terms in field as a single byte and returns an array - of size reader.MaxDoc of the value each document - has in the given field. - - Used to get field values. - - Which field contains the single byte values. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is found, - reads the terms in field as bytes and returns an array of - size reader.MaxDoc of the value each document has in the - given field. - - Used to get field values. - - Which field contains the bytes. - - Computes byte for string values. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is - found, reads the terms in field as shorts and returns an array - of size reader.MaxDoc of the value each document - has in the given field. - - Used to get field values. - - Which field contains the shorts. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is found, - reads the terms in field as shorts and returns an array of - size reader.MaxDoc of the value each document has in the - given field. - - Used to get field values. - - Which field contains the shorts. - - Computes short for string values. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is - found, reads the terms in field as integers and returns an array - of size reader.MaxDoc of the value each document - has in the given field. - - Used to get field values. - - Which field contains the integers. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is found, - reads the terms in field as integers and returns an array of - size reader.MaxDoc of the value each document has in the - given field. - - Used to get field values. - - Which field contains the integers. - - Computes integer for string values. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if - none is found, reads the terms in field as floats and returns an array - of size reader.MaxDoc of the value each document - has in the given field. - - Used to get field values. - - Which field contains the floats. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if - none is found, reads the terms in field as floats and returns an array - of size reader.MaxDoc of the value each document - has in the given field. - - Used to get field values. - - Which field contains the floats. - - Computes float for string values. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is - found, reads the terms in field as longs and returns an array - of size reader.MaxDoc of the value each document - has in the given field. - - - Used to get field values. - - Which field contains the longs. - - The values in the given field for each document. - - java.io.IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is found, - reads the terms in field as longs and returns an array of - size reader.MaxDoc of the value each document has in the - given field. - - - Used to get field values. - - Which field contains the longs. - - Computes integer for string values. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is - found, reads the terms in field as integers and returns an array - of size reader.MaxDoc of the value each document - has in the given field. - - - Used to get field values. - - Which field contains the doubles. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none is found, - reads the terms in field as doubles and returns an array of - size reader.MaxDoc of the value each document has in the - given field. - - - Used to get field values. - - Which field contains the doubles. - - Computes integer for string values. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none - is found, reads the term values in field and returns an array - of size reader.MaxDoc containing the value each document - has in the given field. - - Used to get field values. - - Which field contains the strings. - - The values in the given field for each document. - - IOException If any error occurs. - - - Checks the internal cache for an appropriate entry, and if none - is found reads the term values in field and returns - an array of them in natural order, along with an array telling - which element in the term array each document uses. - - Used to get field values. - - Which field contains the strings. - - Array of terms and index into the array for each document. - - IOException If any error occurs. - - - EXPERT: Generates an array of CacheEntry objects representing all items - currently in the FieldCache. -

- NOTE: These CacheEntry objects maintain a strong refrence to the - Cached Values. Maintaining refrences to a CacheEntry the IndexReader - associated with it has garbage collected will prevent the Value itself - from being garbage collected when the Cache drops the WeakRefrence. -

-

- EXPERIMENTAL API: This API is considered extremely advanced - and experimental. It may be removed or altered w/o warning in future - releases - of Lucene. -

-

-
- -

- EXPERT: Instructs the FieldCache to forcibly expunge all entries - from the underlying caches. This is intended only to be used for - test methods as a way to ensure a known base state of the Cache - (with out needing to rely on GC to free WeakReferences). - It should not be relied on for "Cache maintenance" in general - application code. -

-

- EXPERIMENTAL API: This API is considered extremely advanced - and experimental. It may be removed or altered w/o warning in future - releases - of Lucene. -

-

-
- - - Expert: drops all cache entries associated with this - reader. NOTE: this reader must precisely match the - reader that the cache entry is keyed on. If you pass a - top-level reader, it usually will have no effect as - Lucene now caches at the segment reader level. - - - - Gets or sets the InfoStream for this FieldCache. - If non-null, FieldCacheImpl will warn whenever - entries are created that are not sane according to - . - - - - - Expert: The default cache implementation, storing all values in memory. - A WeakDictionary is used for storage. - -

Created: May 19, 2004 4:40:36 PM - -

- lucene 1.4 - -
- - Hack: When thrown from a Parser (NUMERIC_UTILS_* ones), this stops - processing terms and returns the current FieldCache - array. - - - - Expert: Internal cache. - - - Expert: Every composite-key in the internal cache is of this type. - - - Creates one of these objects for a custom comparator/parser. - - - Two of these are equal iff they reference the same field and type. - - - Composes a hashcode based on the field and type. - - - A range filter built on top of a cached single term field (in ). - -

builds a single cache for the field the first time it is used. - Each subsequent on the same field then reuses this cache, - even if the range itself changes. - -

This means that is much faster (sometimes more than 100x as fast) - as building a if using a . However, if the range never changes it - is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single . - - For numeric data types, this filter may be significantly faster than . - Furthermore, it does not need the numeric values encoded by . But - it has the problem that it only works with exact one value/document (see below). - -

As with all based functionality, is only valid for - fields which exact one term for each document (except for - where 0 terms are also allowed). Due to a restriction of , for numeric ranges - all terms that do not have a numeric value, 0 is assumed. - -

Thus it works on dates, prices and other single value fields but will not work on - regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that - there is only a single term. - -

This class does not have an constructor, use one of the static factory methods available, - that create a correct instance for different data types supported by . -

-
- - Creates a string range filter using . This works with all - fields containing zero or one term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range filter using . This works with all - byte fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range filter using . This works with all - byte fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - short fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - short fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - int fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - int fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - long fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - long fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - float fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - float fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - double fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - Creates a numeric range query using . This works with all - double fields containing exactly one numeric term in the field. The range can be half-open by setting one - of the values to null. - - - - This method is implemented for each data type - - - - Returns the field name for this filter - - - - - Returns true if the lower endpoint is inclusive - - - - - Returns true if the upper endpoint is inclusive - - - - - Returns the lower value of the range filter - - - - - Returns the upper value of this range filter - - - - this method checks, if a doc is a hit, should throw AIOBE, when position invalid - - - this DocIdSet is cacheable, if it works solely with FieldCache and no TermDocs - - - A that only accepts documents whose single - term value in the specified field is contained in the - provided set of allowed terms. - -

- - This is the same functionality as TermsFilter (from - contrib/queries), except this filter requires that the - field contains only a single term for all documents. - Because of drastically different implementations, they - also have different performance characteristics, as - described below. - -

- - The first invocation of this filter on a given field will - be slower, since a must be - created. Subsequent invocations using the same field - will re-use this cache. However, as with all - functionality based on , persistent RAM - is consumed to hold the cache, and is not freed until the - is closed. In contrast, TermsFilter - has no persistent RAM consumption. - - -

- - With each search, this filter translates the specified - set of Terms into a private keyed by - term number per unique (normally one - reader per segment). Then, during matching, the term - number for each docID is retrieved from the cache and - then checked for inclusion using the . - Since all testing is done using RAM resident data - structures, performance should be very fast, most likely - fast enough to not require further caching of the - DocIdSet for each possible combination of terms. - However, because docIDs are simply scanned linearly, an - index with a great many small documents may find this - linear scan too costly. - -

- - In contrast, TermsFilter builds up an , - keyed by docID, every time it's created, by enumerating - through all matching docs using to seek - and scan through each term's docID list. While there is - no linear scan of all docIDs, besides the allocation of - the underlying array in the , this - approach requires a number of "disk seeks" in proportion - to the number of terms, which can be exceptionally costly - when there are cache misses in the OS's IO cache. - -

- - Generally, this filter will be slower on the first - invocation for a given field, but subsequent invocations, - even if you change the allowed set of Terms, should be - faster than TermsFilter, especially as the number of - Terms being matched increases. If you are matching only - a very small number of terms, and those terms in turn - match a very small number of documents, TermsFilter may - perform faster. - -

- - Which filter is best is very application dependent. -

-
- - This DocIdSet implementation is cacheable. - - - Expert: a FieldComparator compares hits so as to determine their - sort order when collecting the top results with - . The concrete public FieldComparator - classes here correspond to the SortField types. - -

This API is designed to achieve high performance - sorting, by exposing a tight interaction with - as it visits hits. Whenever a hit is - competitive, it's enrolled into a virtual slot, which is - an int ranging from 0 to numHits-1. The - is made aware of segment transitions - during searching in case any internal state it's tracking - needs to be recomputed during these transitions.

- -

A comparator must define these functions:

- - - - Compare a hit at 'slot a' - with hit 'slot b'. - - This method is called by - to notify the - FieldComparator of the current weakest ("bottom") - slot. Note that this slot may not hold the weakest - value according to your comparator, in cases where - your comparator is not the primary one (ie, is only - used to break ties from the comparators before it). - - Compare a new hit (docID) - against the "weakest" (bottom) entry in the queue. - - Installs a new hit into the - priority queue. The - calls this method when a new hit is competitive. - - Invoked - when the search is switching to the next segment. - You may need to update internal state of the - comparator, for example retrieving new values from - the . - - Return the sort value stored in - the specified slot. This is only called at the end - of the search, in order to populate - when returning the top results. - - - NOTE: This API is experimental and might change in - incompatible ways in the next release. -

-
- - Compare hit at slot1 with hit at slot2. - - - first slot to compare - - second slot to compare - - any N < 0 if slot2's value is sorted after - slot1, any N > 0 if the slot2's value is sorted before - slot1 and 0 if they are equal - - - - Set the bottom slot, ie the "weakest" (sorted last) - entry in the queue. When is - called, you should compare against this slot. This - will always be called before . - - - the currently weakest (sorted last) slot in the queue - - - - Compare the bottom of the queue with doc. This will - only invoked after setBottom has been called. This - should return the same result as - } as if bottom were slot1 and the new - document were slot 2. - -

For a search that hits many results, this method - will be the hotspot (invoked by far the most - frequently).

- -

- that was hit - - any N < 0 if the doc's value is sorted after - the bottom entry (not competitive), any N > 0 if the - doc's value is sorted before the bottom entry and 0 if - they are equal. - -
- - This method is called when a new hit is competitive. - You should copy any state associated with this document - that will be required for future comparisons, into the - specified slot. - - - which slot to copy the hit to - - docID relative to current reader - - - - Set a new Reader. All doc correspond to the current Reader. - - - current reader - - docBase of this reader - - IOException - IOException - - - Sets the Scorer to use in case a document's score is - needed. - - - Scorer instance that you should use to - obtain the current hit's score, if necessary. - - - - Return the actual value in the slot. - - - the value - - value in this slot upgraded to Comparable - - - - Parses field's values as byte (using - and sorts by ascending value - - - - Sorts by ascending docID - - - Parses field's values as double (using - and sorts by ascending value - - - - Parses field's values as float (using - and sorts by ascending value - - - - Parses field's values as int (using - and sorts by ascending value - - - - Parses field's values as long (using - and sorts by ascending value - - - - Sorts by descending relevance. NOTE: if you are - sorting only by descending relevance and then - secondarily by ascending docID, peformance is faster - using directly (which - uses when no is - specified). - - - - Parses field's values as short (using ) - and sorts by ascending value - - - - Sorts by a field's value using the Collator for a - given Locale. - - - - Sorts by field's natural String sort order, using - ordinals. This is functionally equivalent to - , but it first resolves the string - to their relative ordinal positions (using the index - returned by ), and - does most comparisons using the ordinals. For medium - to large results, this comparator will be much faster - than . For very small - result sets it may be slower. - - - - Sorts by field's natural String sort order. All - comparisons are done using String.compareTo, which is - slow for medium to large result sets but possibly - very fast for very small results sets. - - - - Provides a for custom field sorting. - - NOTE: This API is experimental and might change in - incompatible ways in the next release. - - - - - Creates a comparator for the field in the given index. - - - Name of the field to create comparator for. - - FieldComparator. - - IOException - If an error occurs reading the index. - - - - Expert: A ScoreDoc which also contains information about - how to sort the referenced document. In addition to the - document number and score, this object contains an array - of values for the document from the field(s) used to sort. - For example, if the sort criteria was to sort by fields - "a", "b" then "c", the fields object array - will have three elements, corresponding respectively to - the term values for the document in fields "a", "b" and "c". - The class of each element in the array will be either - Integer, Float or String depending on the type of values - in the terms of each field. - -

Created: Feb 11, 2004 1:23:38 PM - -

- - -
- - Expert: Returned by low-level search implementations. - - - - - Expert: Constructs a ScoreDoc. - - - Expert: The score of this document for the query. - - - Expert: A hit document's number. - - - - - Expert: The values which are used to sort the referenced document. - The order of these will match the original sort criteria given by a - Sort object. Each Object will be either an Integer, Float or String, - depending on the type of values in the terms of the original field. - - - - - - - - Expert: Creates one of these objects with empty sort information. - - - Expert: Creates one of these objects with the given sort information. - - - Expert: Collects sorted results from Searchable's and collates them. - The elements put into this queue must be of type FieldDoc. - -

Created: Feb 11, 2004 2:04:21 PM - -

- lucene 1.4 - -
- - Creates a hit queue sorted by the given list of fields. - The number of hits to retain. Must be greater than zero. - - - Allows redefinition of sort fields if they are null. - This is to handle the case using ParallelMultiSearcher where the - original list contains AUTO and we don't know the actual sort - type until the values come back. The fields can only be set once. - This method is thread safe. - - - - - Returns the fields being used to sort. - - - Returns an array of collators, possibly null. The collators - correspond to any SortFields which were given a specific locale. - - Array of sort fields. - Array, possibly null. - - - Returns whether a is less relevant than b. - ScoreDoc - ScoreDoc - true if document a should be sorted after document b. - - - Expert: A hit queue for sorting by hits by terms in more than one field. - Uses FieldCache.DEFAULT for maintaining - internal term lookup tables. - - NOTE: This API is experimental and might change in - incompatible ways in the next release. - - - - - - - Creates a hit queue sorted by the given list of fields. - -

NOTE: The instances returned by this method - pre-allocate a full array of length numHits. - -

- SortField array we are sorting by in priority order (highest - priority first); cannot be null or empty - - The number of hits to retain. Must be greater than zero. - - IOException -
- - Stores the sort criteria being used. - - - Given a queue Entry, creates a corresponding FieldDoc - that contains the values used to sort the given document. - These values are not the raw values out of the index, but the internal - representation of them. This is so the given search hit can be collated by - a MultiSearcher with other search hits. - - - The Entry used to create a FieldDoc - - The newly created FieldDoc - - - - - - Returns the SortFields being used by this hit queue. - - - An implementation of which is optimized in case - there is just one comparator. - - - - Returns whether a is less relevant than b. - ScoreDoc - ScoreDoc - true if document a should be sorted after document b. - - - An implementation of which is optimized in case - there is more than one comparator. - - - - A query that applies a filter to the results of another query. - -

Note: the bits are retrieved from the filter each time this - query is used in a search - use a CachingWrapperFilter to avoid - regenerating the bits every time. - -

Created: Apr 20, 2004 8:58:29 AM - -

- 1.4 - -
- - Constructs a new query which applies a filter to the results of the original query. - Filter.getDocIdSet() will be called every time this query is used in a search. - - Query to be filtered, cannot be null. - - Filter to apply to query results, cannot be null. - - - - Returns a Weight that applies the filter to the enclosed query's Weight. - This is accomplished by overriding the Scorer returned by the Weight. - - - - Rewrites the wrapped query. - - - Prints a user-readable version of this query. - - - Returns true iff o is equal to this. - - - Returns a hash code value for this object. - - - Abstract class for enumerating a subset of all terms. -

Term enumerations are always ordered by Term.compareTo(). Each term in - the enumeration is greater than all that precede it. -

-
- - the current term - - - the delegate enum - to set this member use - - - Equality compare on the term - - - Equality measure on the term - - - Indicates the end of the enumeration has been reached - - - use this method to set the actual TermEnum (e.g. in ctor), - it will be automatically positioned on the first matching term. - - - - Returns the docFreq of the current Term in the enumeration. - Returns -1 if no Term matches or all terms have been enumerated. - - - - Increments the enumeration to the next element. True if one exists. - - - Returns the current Term in the enumeration. - Returns null if no Term matches or all terms have been enumerated. - - - - Filter caching singleton. It can be used - to save filters locally for reuse. - This class makes it possble to cache Filters even when using RMI, as it - keeps the cache on the seaercher side of the RMI connection. - - Also could be used as a persistent storage for any filter as long as the - filter provides a proper hashCode(), as that is used as the key in the cache. - - The cache is periodically cleaned up from a separate thread to ensure the - cache doesn't exceed the maximum size. - - - - The default maximum number of Filters in the cache - - - The default frequency of cache clenup - - - The cache itself - - - Maximum allowed cache size - - - Cache cleaning frequency - - - Cache cleaner that runs in a separate thread - - - Sets up the FilterManager singleton. - - - Sets the max size that cache should reach before it is cleaned up - maximum allowed cache size - - - Sets the cache cleaning frequency in milliseconds. - cleaning frequency in millioseconds - - - Returns the cached version of the filter. Allows the caller to pass up - a small filter but this will keep a persistent version around and allow - the caching filter to do its job. - - - The input filter - - The cached version of the filter - - - - Holds the filter and the last time the filter was used, to make LRU-based - cache cleaning possible. - TODO: Clean this up when we switch to Java 1.5 - - - - Keeps the cache from getting too big. - If we were using Java 1.5, we could use LinkedHashMap and we would not need this thread - to clean out the cache. - - The SortedSet sortedFilterItems is used only to sort the items from the cache, - so when it's time to clean up we have the TreeSet sort the FilterItems by - timestamp. - - Removes 1.5 * the numbers of items to make the cache smaller. - For example: - If cache clean size is 10, and the cache is at 15, we would remove (15 - 10) * 1.5 = 7.5 round up to 8. - This way we clean the cache a bit more, and avoid having the cache cleaner having to do it frequently. - - - - Expert: obtains single byte field values from the - FieldCache - using getBytes() and makes those values - available as other numeric types, casting as needed. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

- for requirements" - on the field. - -

NOTE: with the switch in 2.9 to segment-based - searching, if is invoked with a - composite (multi-segment) reader, this can easily cause - double RAM usage for the values in the FieldCache. It's - best to switch your application to pass only atomic - (single segment) readers to this API.

- - - -

Expert: A base class for ValueSource implementations that retrieve values for - a single field from the FieldCache. -

- Fields used herein nust be indexed (doesn't matter if these fields are stored or not). -

- It is assumed that each such indexed field is untokenized, or at least has a single token in a document. - For documents with multiple tokens of the same field, behavior is undefined (It is likely that current - code would use the value of one of these tokens, but this is not guaranteed). -

- Document with no tokens in this field are assigned the Zero value. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

NOTE: with the switch in 2.9 to segment-based - searching, if is invoked with a - composite (multi-segment) reader, this can easily cause - double RAM usage for the values in the FieldCache. It's - best to switch your application to pass only atomic - (single segment) readers to this API.

-

-
- - Expert: source of values for basic function queries. -

At its default/simplest form, values - one per doc - are used as the score of that doc. -

Values are instantiated as - DocValues for a particular reader. -

ValueSource implementations differ in RAM requirements: it would always be a factor - of the number of documents, but for each document the number of bytes can be 1, 2, 4, or 8. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - - -

-
- - Return the DocValues used by the function query. - the IndexReader used to read these values. - If any caching is involved, that caching would also be IndexReader based. - - IOException for any error. - - - description of field, used in explain() - - - Needed for possible caching of query results - used by . - - - - - Needed for possible caching of query results - used by . - - - - - Create a cached field source for the input field. - - - Return cached DocValues for input field and reader. - FieldCache so that values of a field are loaded once per reader (RAM allowing) - - Field for which values are required. - - - - - - Check if equals to another , already knowing that cache and field are equal. - - - - - Return a hash code of a , without the hash-codes of the field - and the cache (those are taken care of elsewhere). - - - - - - Create a cached byte field source with default string-to-byte parser. - - - Create a cached byte field source with a specific string-to-byte parser. - - - Expert: represents field values as different types. - Normally created via a - ValueSuorce - for a particular field and reader. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - - -

-
- - Return doc value as a float. -

Mandatory: every DocValues implementation must implement at least this method. -

- document whose float value is requested. - -
- - Return doc value as an int. -

Optional: DocValues implementation can (but don't have to) override this method. -

- document whose int value is requested. - -
- - Return doc value as a long. -

Optional: DocValues implementation can (but don't have to) override this method. -

- document whose long value is requested. - -
- - Return doc value as a double. -

Optional: DocValues implementation can (but don't have to) override this method. -

- document whose double value is requested. - -
- - Return doc value as a string. -

Optional: DocValues implementation can (but don't have to) override this method. -

- document whose string value is requested. - -
- - Return a string representation of a doc value, as reuired for Explanations. - - - Explain the scoring value for the input doc. - - - Returns the minimum of all values or Float.NaN if this - DocValues instance does not contain any value. -

- This operation is optional -

- -

- the minimum of all values or Float.NaN if this - DocValues instance does not contain any value. - -
- - Returns the maximum of all values or Float.NaN if this - DocValues instance does not contain any value. -

- This operation is optional -

- -

- the maximum of all values or Float.NaN if this - DocValues instance does not contain any value. - -
- - Returns the average of all values or Float.NaN if this - DocValues instance does not contain any value. * -

- This operation is optional -

- -

- the average of all values or Float.NaN if this - DocValues instance does not contain any value - -
- - Expert: for test purposes only, return the inner array of values, or null if not applicable. -

- Allows tests to verify that loaded values are: - - indeed cached/reused. - stored in the expected size/type (byte/short/int/float). - - Note: implementations of DocValues must override this method for - these test elements to be tested, Otherwise the test would not fail, just - print a warning. -

-
- - - An instance of this subclass should be returned by - , if you want - to modify the custom score calculation of a . - Since Lucene 2.9, queries operate on each segment of an Index separately, - so overriding the similar (now deprecated) methods in - is no longer suitable, as the supplied doc ID is per-segment - and without knowledge of the IndexReader you cannot access the - document or . - - @lucene.experimental - @since 2.9.2 - - - - - Creates a new instance of the provider class for the given IndexReader. - - - - - * Compute a custom score by the subQuery score and a number of - ValueSourceQuery scores. -

- Subclasses can override this method to modify the custom score. -

- If your custom scoring is different than the default herein you - should override at least one of the two customScore() methods. - If the number of ValueSourceQueries is always < 2 it is - sufficient to override the other - CustomScore() - method, which is simpler. -

- The default computation herein is a multiplication of given scores: -

-                ModifiedScore = valSrcScore * valSrcScores[0] * valSrcScores[1] * ...
-            
-
- id of scored doc - score of that doc by the subQuery - scores of that doc by the ValueSourceQuery - custom score -
- - - Compute a custom score by the subQuery score and the ValueSourceQuery score. -

- Subclasses can override this method to modify the custom score. -

- If your custom scoring is different than the default herein you - should override at least one of the two customScore() methods. - If the number of ValueSourceQueries is always < 2 it is - sufficient to override this customScore() method, which is simpler. -

- The default computation herein is a multiplication of the two scores: -

-                ModifiedScore = subQueryScore * valSrcScore
-            
-
- id of scored doc - score of that doc by the subQuery - score of that doc by the ValueSourceQuery - custom score -
- - - Explain the custom score. - Whenever overriding , - this method should also be overridden to provide the correct explanation - for the part of the custom scoring. - - doc being explained - explanation for the sub-query part - explanation for the value source part - an explanation for the custom score - - - - Explain the custom score. - Whenever overriding , - this method should also be overridden to provide the correct explanation - for the part of the custom scoring. - - - doc being explained - explanation for the sub-query part - explanation for the value source part - an explanation for the custom score - - - Query that sets document score as a programmatic function of several (sub) scores: - - the score of its subQuery (any query) - (optional) the score of its ValueSourceQuery (or queries). - For most simple/convenient use cases this query is likely to be a - FieldScoreQuery - - Subclasses can modify the computation by overriding . - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. -

-
- - Create a CustomScoreQuery over input subQuery. - the sub query whose scored is being customed. Must not be null. - - - - Create a CustomScoreQuery over input subQuery and a . - the sub query whose score is being customed. Must not be null. - - a value source query whose scores are used in the custom score - computation. For most simple/convineient use case this would be a - FieldScoreQuery. - This parameter is optional - it can be null or even an empty array. - - - - Create a CustomScoreQuery over input subQuery and a . - the sub query whose score is being customized. Must not be null. - - value source queries whose scores are used in the custom score - computation. For most simple/convenient use case these would be - FieldScoreQueries. - This parameter is optional - it can be null or even an empty array. - - - - Returns true if o is equal to this. - - - Returns a hash code value for this object. - - - - Returns a that calculates the custom scores - for the given . The default implementation returns a default - implementation as specified in the docs of . - - - - - Compute a custom score by the subQuery score and a number of - ValueSourceQuery scores. - - The doc is relative to the current reader, which is - unknown to CustomScoreQuery when using per-segment search (since Lucene 2.9). - Please override and return a subclass - of for the given . - see CustomScoreProvider#customScore(int,float,float[]) - - - - Compute a custom score by the subQuery score and the ValueSourceQuery score. - - The doc is relative to the current reader, which is - unknown to CustomScoreQuery when using per-segment search (since Lucene 2.9). - Please override and return a subclass - of for the given . - - - - - Explain the custom score. - - The doc is relative to the current reader, which is - unknown to CustomScoreQuery when using per-segment search (since Lucene 2.9). - Please override and return a subclass - of for the given . - - - - Explain the custom score. - The doc is relative to the current reader, which is - unknown to CustomScoreQuery when using per-segment search (since Lucene 2.9). - Please override and return a subclass - of for the given . - - - - Checks if this is strict custom scoring. - In strict custom scoring, the ValueSource part does not participate in weight normalization. - This may be useful when one wants full control over how scores are modified, and does - not care about normalizing by the ValueSource part. - One particular case where this is useful if for testing this query. -

- Note: only has effect when the ValueSource part is not null. -

-
- - Set the strict mode of this query. - The strict mode to set. - - - - - - A short name of this query, used in . - - - A scorer that applies a (callback) function on scores of the subQuery. - - - A query that scores each document as the value of the numeric input field. -

- The query matches all documents, and scores each document according to the numeric - value of that field. -

- It is assumed, and expected, that: - - The field used here is indexed, and has exactly - one token in every scored document. - Best if this field is un_tokenized. - That token is parsable to the selected type. - -

- Combining this query in a FunctionQuery allows much freedom in affecting document scores. - Note, that with this freedom comes responsibility: it is more than likely that the - default Lucene scoring is superior in quality to scoring modified as explained here. - However, in some cases, and certainly for research experiments, this capability may turn useful. -

- When contructing this query, select the appropriate type. That type should match the data stored in the - field. So in fact the "right" type should be selected before indexing. Type selection - has effect on the RAM usage: - - consumes 1 * maxDocs bytes. - consumes 2 * maxDocs bytes. - consumes 4 * maxDocs bytes. - consumes 8 * maxDocs bytes. - -

- Caching: - Values for the numeric field are loaded once and cached in memory for further use with the same IndexReader. - To take advantage of this, it is extremely important to reuse index-readers or index-searchers, - otherwise, for instance if for each query a new index reader is opened, large penalties would be - paid for loading the field values into memory over and over again! - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. -

-
- - Expert: A Query that sets the scores of document to the - values obtained from a ValueSource. -

- This query provides a score for each and every undeleted document in the index. -

- The value source can be based on a (cached) value of an indexed field, but it - can also be based on an external source, e.g. values read from an external database. -

- Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc). - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. -

-
- - Create a value source query - provides the values defines the function to be used for scoring - - - - Returns true if o is equal to this. - - - Returns a hash code value for this object. - - - A scorer that (simply) matches all documents, and scores each document with - the value of the value soure in effect. As an example, if the value source - is a (cached) field source, then value of that field in that document will - be used. (assuming field is indexed for this doc, with a single token.) - - - - Create a FieldScoreQuery - a query that scores each document as the value of the numeric input field. -

- The type param tells how to parse the field string values into a numeric score value. -

- the numeric field to be used. - - the type of the field: either - , , , or . - -
- - Type of score field, indicating how field values are interpreted/parsed. -

- The type selected at search search time should match the data stored in the field. - Different types have different RAM requirements: - - consumes 1 * maxDocs bytes. - consumes 2 * maxDocs bytes. - consumes 4 * maxDocs bytes. - consumes 8 * maxDocs bytes. - -

-
- - field values are interpreted as numeric byte values. - - - field values are interpreted as numeric short values. - - - field values are interpreted as numeric int values. - - - field values are interpreted as numeric float values. - - - Expert: obtains float field values from the - FieldCache - using getFloats() and makes those values - available as other numeric types, casting as needed. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

- for requirements" - on the field. - -

NOTE: with the switch in 2.9 to segment-based - searching, if is invoked with a - composite (multi-segment) reader, this can easily cause - double RAM usage for the values in the FieldCache. It's - best to switch your application to pass only atomic - (single segment) readers to this API.

- - - -

Create a cached float field source with default string-to-float parser. -
- - Create a cached float field source with a specific string-to-float parser. - - - Expert: obtains int field values from the - FieldCache - using getInts() and makes those values - available as other numeric types, casting as needed. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

- for requirements - on the field. - -

NOTE: with the switch in 2.9 to segment-based - searching, if is invoked with a - composite (multi-segment) reader, this can easily cause - double RAM usage for the values in the FieldCache. It's - best to switch your application to pass only atomic - (single segment) readers to this API.

- - - -

Create a cached int field source with default string-to-int parser. -
- - Create a cached int field source with a specific string-to-int parser. - - - Expert: obtains the ordinal of the field value from the default Lucene - Fieldcache using getStringIndex(). -

- The native lucene index order is used to assign an ordinal value for each field value. -

- Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. -

- Example: -
If there were only three field values: "apple","banana","pear" -
then ord("apple")=1, ord("banana")=2, ord("pear")=3 -

- WARNING: - ord() depends on the position in an index and can thus change - when other documents are inserted or deleted, - or if a MultiSearcher is used. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

NOTE: with the switch in 2.9 to segment-based - searching, if is invoked with a - composite (multi-segment) reader, this can easily cause - double RAM usage for the values in the FieldCache. It's - best to switch your application to pass only atomic - (single segment) readers to this API.

-

-
- - Constructor for a certain field. - field whose values order is used. - - - - Expert: obtains the ordinal of the field value from the default Lucene - FieldCache using getStringIndex() - and reverses the order. -

- The native lucene index order is used to assign an ordinal value for each field value. -

- Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. -
- Example of reverse ordinal (rord): -
If there were only three field values: "apple","banana","pear" -
then rord("apple")=3, rord("banana")=2, ord("pear")=1 -

- WARNING: - rord() depends on the position in an index and can thus change - when other documents are inserted or deleted, - or if a MultiSearcher is used. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

NOTE: with the switch in 2.9 to segment-based - searching, if is invoked with a - composite (multi-segment) reader, this can easily cause - double RAM usage for the values in the FieldCache. It's - best to switch your application to pass only atomic - (single segment) readers to this API.

-

-
- - Contructor for a certain field. - field whose values reverse order is used. - - - - Expert: obtains short field values from the - FieldCache - using getShorts() and makes those values - available as other numeric types, casting as needed. - -

- WARNING: The status of the Search.Function package is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

- for requirements - on the field. - -

NOTE: with the switch in 2.9 to segment-based - searching, if is invoked with a - composite (multi-segment) reader, this can easily cause - double RAM usage for the values in the FieldCache. It's - best to switch your application to pass only atomic - (single segment) readers to this API.

- - - -

Create a cached short field source with default string-to-short parser. -
- - Create a cached short field source with a specific string-to-short parser. - - - Implements the fuzzy search query. The similarity measurement - is based on the Levenshtein (edit distance) algorithm. - - Warning: this query is not very scalable with its default prefix - length of 0 - in this case, *every* term will be enumerated and - cause an edit score calculation. - - - - - An abstract that matches documents - containing a subset of terms provided by a - enumeration. - -

This query cannot be used directly; you must subclass - it and define to provide a - that iterates through the terms to be - matched. - -

NOTE: if is either - or - , you may encounter a - exception during - searching, which happens when the number of terms to be - searched exceeds - . Setting - to - prevents this. - -

The recommended rewrite method is - : it doesn't spend CPU - computing unhelpful scores, and it tries to pick the most - performant rewrite method given the query. - - Note that produces - MultiTermQueries using - by default. -

-
- - A rewrite method that first creates a private Filter, - by visiting each term in sequence and marking all docs - for that term. Matching documents are assigned a - constant score equal to the query's boost. - -

This method is faster than the BooleanQuery - rewrite methods when the number of matched terms or - matched documents is non-trivial. Also, it will never - hit an errant - exception. - -

- - -
- - A rewrite method that first translates each term into - clause in a - BooleanQuery, and keeps the scores as computed by the - query. Note that typically such scores are - meaningless to the user, and require non-trivial CPU - to compute, so it's almost always better to use - instead. - -

NOTE: This rewrite method will hit - if the number of terms - exceeds . - -

- - -
- - Like except - scores are not computed. Instead, each matching - document receives a constant score equal to the - query's boost. - -

NOTE: This rewrite method will hit - if the number of terms - exceeds . - -

- - -
- - Read-only default instance of - , with - set to - - - and - set to - - . - Note that you cannot alter the configuration of this - instance; you'll need to create a private instance - instead. - - - - Constructs a query matching terms that cannot be represented with a single - Term. - - - - Construct the enumeration to be used, expanding the pattern term. - - - Expert: Resets the counting of unique terms. - Do this before executing the query/filter. - - - - - - Expert: Return the number of unique terms visited during execution of the query. - If there are many of them, you may consider using another query type - or optimize your total term count in index. -

This method is not thread safe, be sure to only call it when no query is running! - If you re-use the same query instance for another - search, be sure to first reset the term counter - with . -

On optimized indexes / no MultiReaders, you get the correct number of - unique terms for the whole index. Use this number to compare different queries. - For non-optimized indexes this number can also be achived in - non-constant-score mode. In constant-score mode you get the total number of - terms seeked for all segments / sub-readers. -

- - -
- - Sets the rewrite method to be used when executing the - query. You can use one of the four core methods, or - implement your own subclass of . - - - - A rewrite method that tries to pick the best - constant-score rewrite method based on term and - document counts from the query. If both the number of - terms and documents is small enough, then - is used. - Otherwise, is - used. - - - - Abstract class that defines how the query is rewritten. - - - If the number of terms in this query is equal to or - larger than this setting then - is used. - - - - If the number of documents to be visited in the - postings exceeds this specified percentage of the - MaxDoc for the index, then - is used. - - 0.0 to 100.0 - - - Create a new FuzzyQuery that will match terms with a similarity - of at least minimumSimilarity to term. - If a prefixLength > 0 is specified, a common prefix - of that length is also required. - - - the term to search for - - a value between 0 and 1 to set the required similarity - between the query term and the matching terms. For example, for a - minimumSimilarity of 0.5 a term of the same length - as the query term is considered similar to the query term if the edit distance - between both terms is less than length(term)*0.5 - - length of common (non-fuzzy) prefix - - IllegalArgumentException if minimumSimilarity is >= 1 or < 0 - or if prefixLength < 0 - - - - Calls FuzzyQuery(term, minimumSimilarity, 0). - - - Calls FuzzyQuery(term, 0.5f, 0). - - - Returns the pattern term. - - - Returns the minimum similarity that is required for this query to match. - float value between 0.0 and 1.0 - - - Returns the non-fuzzy prefix length. This is the number of characters at the start - of a term that must be identical (not fuzzy) to the query term if the query - is to match that term. - - - - Subclass of FilteredTermEnum for enumerating all terms that are similiar - to the specified filter term. - -

Term enumerations are always ordered by Term.compareTo(). Each term in - the enumeration is greater than all that precede it. -

-
- - Creates a FuzzyTermEnum with an empty prefix and a minSimilarity of 0.5f. -

- After calling the constructor the enumeration is already pointing to the first - valid term if such a term exists. - -

- - - - - IOException - - -
- - Creates a FuzzyTermEnum with an empty prefix. -

- After calling the constructor the enumeration is already pointing to the first - valid term if such a term exists. - -

- - - - - - - IOException - - -
- - Constructor for enumeration of all terms from specified reader which share a prefix of - length prefixLength with term and which have a fuzzy similarity > - minSimilarity. -

- After calling the constructor the enumeration is already pointing to the first - valid term if such a term exists. - -

- Delivers terms. - - Pattern term. - - Minimum required similarity for terms from the reader. Default value is 0.5f. - - Length of required common prefix. Default value is 0. - - IOException -
- - The termCompare method in FuzzyTermEnum uses Levenshtein distance to - calculate the distance between the given term and the comparing term. - - - -

Similarity returns a number that is 1.0f or less (including negative numbers) - based on how similar the Term is compared to a target term. It returns - exactly 0.0f when - - editDistance > maximumEditDistance - Otherwise it returns: - - 1 - (editDistance / length) - where length is the length of the shortest term (text or target) including a - prefix that are identical and editDistance is the Levenshtein distance for - the two words.

- -

Embedded within this algorithm is a fail-fast Levenshtein distance - algorithm. The fail-fast algorithm differs from the standard Levenshtein - distance algorithm in that it is aborted if it is discovered that the - mimimum distance between the words is greater than some threshold. - -

To calculate the maximum distance threshold we use the following formula: - - (1 - minimumSimilarity) * length - where length is the shortest term including any prefix that is not part of the - similarity comparision. This formula was derived by solving for what maximum value - of distance returns false for the following statements: - - similarity = 1 - ((float)distance / (float) (prefixLength + Math.min(textlen, targetlen))); - return (similarity > minimumSimilarity); - where distance is the Levenshtein distance for the two words. -

-

Levenshtein distance (also known as edit distance) is a measure of similiarity - between two strings where the distance is measured as the number of character - deletions, insertions or substitutions required to transform one string to - the other string. -

- the target word or phrase - - the similarity, 0.0 or less indicates that it matches less than the required - threshold and 1.0 indicates that the text and target are identical - -
- - The max Distance is the maximum Levenshtein distance for the text - compared to some other value that results in score that is - better than the minimum similarity. - - the length of the "other value" - - the maximum levenshtein distance that we care about - - - - Creates a new instance with size elements. If - prePopulate is set to true, the queue will pre-populate itself - with sentinel objects and set its to size. In - that case, you should not rely on to get the number of - actual elements that were added to the queue, but keep track yourself.
- NOTE: in case prePopulate is true, you should pop - elements from the queue using the following code example: - - - PriorityQueue pq = new HitQueue(10, true); // pre-populate. - ScoreDoc top = pq.top(); - - // Add/Update one element. - top.score = 1.0f; - top.doc = 0; - top = (ScoreDoc) pq.updateTop(); - int totalHits = 1; - - // Now pop only the elements that were *truly* inserted. - // First, pop all the sentinel elements (there are pq.size() - totalHits). - for (int i = pq.size() - totalHits; i > 0; i--) pq.pop(); - - // Now pop the truly added elements. - ScoreDoc[] results = new ScoreDoc[totalHits]; - for (int i = totalHits - 1; i >= 0; i--) { - results[i] = (ScoreDoc) pq.pop(); - } - - -

NOTE: This class pre-allocate a full array of - length size. - -

- the requested size of this queue. - - specifies whether to pre-populate the queue with sentinel values. - - - -
- - Implements search over a single IndexReader. - -

Applications usually need only call the inherited - or methods. For performance reasons it is - recommended to open only one IndexSearcher and use it for all of your searches. - -

NOTE: - instances are completely - thread safe, meaning multiple threads can call any of its - methods, concurrently. If your application requires - external synchronization, you should not - synchronize on the IndexSearcher instance; - use your own (non-Lucene) objects instead.

-

-
- - An abstract base class for search implementations. Implements the main search - methods. - -

- Note that you can only access hits from a Searcher as long as it is not yet - closed, otherwise an IOException will be thrown. -

-
- - The interface for search implementations. - -

- Searchable is the abstract network protocol for searching. Implementations - provide search over a single index, over multiple indices, and over indices - on remote servers. - -

- Queries, filters and sort criteria are designed to be compact so that they - may be efficiently passed to a remote index, with only the top-scoring hits - being returned, rather than every matching hit. - - NOTE: this interface is kept public for convenience. Since it is not - expected to be implemented directly, it may be changed unexpectedly between - releases. -

-
- - Lower-level search API. - -

- is called for every document.
- Collector-based access to remote indexes is discouraged. - -

- Applications should only use this if they need all of the matching - documents. The high-level search API () is - usually more efficient, as it skips non-high-scoring hits. - -

- to match documents - - if non-null, used to permit documents to be collected. - - to receive hits - - BooleanQuery.TooManyClauses -
- - Frees resources associated with this Searcher. - Be careful not to call this method while you are still using objects - that reference this searchable - - - - Expert: Returns the number of documents containing term. - Called by search code to compute term weights. - - - - - - Expert: For each term in the terms array, calculates the number of - documents containing term. Returns an array with these - document frequencies. Used to minimize number of remote calls. - - - - - Expert: Low-level search implementation. Finds the top n - hits for query, applying filter if non-null. - -

Applications should usually call or - instead. -

- BooleanQuery.TooManyClauses -
- - Expert: Returns the stored fields of document i. - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Get the at the nth position. The - may be used to determine what s to load and how they should be loaded. - - NOTE: If the underlying Reader (more specifically, the underlying FieldsReader) is closed before the lazy is - loaded an exception may be thrown. If you want the value of a lazy to be available after closing you must - explicitly load it or fetch the Document again with a new loader. - - - - Get the document at the nth position - - The to use to determine what Fields should be loaded on the Document. May be null, in which case all Fields will be loaded. - - The stored fields of the at the nth position - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - - - - - - - - - - - - - Expert: called to re-write queries into primitive queries. - BooleanQuery.TooManyClauses - - - Expert: low-level implementation method - Returns an Explanation that describes how doc scored against - weight. - -

This is intended to be used in developing Similarity implementations, - and, for good performance, should not be displayed with every hit. - Computing an explanation is as expensive as executing the query over the - entire index. -

Applications should call . -

- BooleanQuery.TooManyClauses -
- - Expert: Low-level search implementation with arbitrary sorting. Finds - the top n hits for query, applying - filter if non-null, and sorting the hits by the criteria in - sort. - -

Applications should usually call - instead. - -

- BooleanQuery.TooManyClauses -
- - Expert: Returns one greater than the largest possible document number. - Called by search code to compute term weights. - - - - - - Search implementation with arbitrary sorting. Finds - the top n hits for query, applying - filter if non-null, and sorting the hits by the criteria in - sort. - -

NOTE: this does not compute scores by default; use - to enable scoring. - -

- BooleanQuery.TooManyClauses -
- - Lower-level search API. - -

is called for every matching document. - -

Applications should only use this if they need all of the matching - documents. The high-level search API ( - ) is usually more efficient, as it skips non-high-scoring hits. -

Note: The score passed to this method is a raw score. - In other words, the score will not necessarily be a float whose value is - between 0 and 1. -

- BooleanQuery.TooManyClauses -
- - Lower-level search API. - -

is called for every matching - document. -
Collector-based access to remote indexes is discouraged. - -

Applications should only use this if they need all of the - matching documents. The high-level search API () - is usually more efficient, as it skips - non-high-scoring hits. - -

- to match documents - - if non-null, used to permit documents to be collected. - - to receive hits - - BooleanQuery.TooManyClauses -
- - Finds the top n - hits for query, applying filter if non-null. - - - BooleanQuery.TooManyClauses - - - Finds the top n - hits for query. - - - BooleanQuery.TooManyClauses - - - Returns an Explanation that describes how doc scored against - query. - -

This is intended to be used in developing Similarity implementations, - and, for good performance, should not be displayed with every hit. - Computing an explanation is as expensive as executing the query over the - entire index. -

-
- - The Similarity implementation used by this searcher. - - - creates a weight for query - new weight - - - - Expert: Gets or Sets the Similarity implementation used by this Searcher. - - - - - - - Creates a searcher searching the index in the named - directory, with readOnly=true - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - - - Creates a searcher searching the index in the named - directory. You should pass readOnly=true, since it - gives much better concurrent performance, unless you - intend to do write operations (delete documents or - change norms) with the underlying IndexReader. - - CorruptIndexException if the index is corrupt - IOException if there is a low-level IO error - directory where IndexReader will be opened - - if true, the underlying IndexReader - will be opened readOnly - - - - Creates a searcher searching the provided index - - Note that the underlying IndexReader is not closed, if - IndexSearcher was constructed with IndexSearcher(IndexReader r). - If the IndexReader was supplied implicitly by specifying a directory, then - the IndexReader gets closed. - - - - - - Expert: directly specify the reader, subReaders and their - DocID starts -

- NOTE: This API is experimental and - might change in incompatible ways in the next - release

-

-
- - Just like , but you choose - whether or not the fields in the returned instances - should be set by specifying fillFields. -

- NOTE: this does not compute scores by default. If you need scores, create - a instance by calling - and then pass that to - . -

-

-
- - By default, no scores are computed when sorting by field (using - ). You can change that, per - IndexSearcher instance, by calling this method. Note that this will incur - a CPU cost. - - - If true, then scores are returned for every matching document - in . - - - If true, then the max score for all matching docs is computed. - - - - Return the this searches. - - - A query that matches all documents. - - - - - Field used for normalization factor (document boost). Null if nothing. - - - - MultiPhraseQuery is a generalized version of PhraseQuery, with an added - method . - To use this class, to search for the phrase "Microsoft app*" first use - add(Term) on the term "Microsoft", then find all terms that have "app" as - prefix using IndexReader.terms(Term), and use MultiPhraseQuery.add(Term[] - terms) to add them to the query. - - - 1.0 - - - - Add a single term at the next position in the phrase. - - - - - Add multiple terms at the next position in the phrase. Any of the terms - may match. - - - - - - - Allows to specify the relative position of terms within the phrase. - - - - - - - - - - - Returns a List<Term[]> of the terms in the multiphrase. - Do not modify the List or its contents. - - - - Returns the relative positions of terms in this phrase. - - - Prints a user-readable version of this query. - - - Returns true if o is equal to this. - - - Returns a hash code value for this object. - - - Gets or sets the phrase slop for this query. - - - - - Implements search over a set of Searchables. - -

Applications usually need only call the inherited - or methods. -

-
- - Creates a searcher which searches searchers. - - - Return the array of s this searches. - - - Returns index of the searcher for document n in the array - used to construct this searcher. - - - - Returns the document number of document n within its - sub-index. - - - - - - - Create weight in multiple index scenario. - - Distributed query processing is done in the following steps: - 1. rewrite query - 2. extract necessary terms - 3. collect dfs for these terms from the Searchables - 4. create query weight using aggregate dfs. - 5. distribute that weight to Searchables - 6. merge results - - Steps 1-4 are done here, 5+6 in the search() methods - - - rewritten queries - - - - Document Frequency cache acting as a Dummy-Searcher. This class is no - full-fledged Searcher, but only supports the methods necessary to - initialize Weights. - - - - A wrapper for , that exposes its - functionality as a . -

- MultiTermQueryWrapperFilter is not designed to - be used by itself. Normally you subclass it to provide a Filter - counterpart for a subclass. -

- For example, and extend - MultiTermQueryWrapperFilter. - This class also provides the functionality behind - ; - this is why it is not abstract. -

-
- - Wrap a as a Filter. - - - Expert: Resets the counting of unique terms. - Do this before executing the filter. - - - - - - Expert: Return the number of unique terms visited during execution of the filter. - If there are many of them, you may consider using another filter type - or optimize your total term count in index. -

This method is not thread safe, be sure to only call it when no filter is running! - If you re-use the same filter instance for another - search, be sure to first reset the term counter - with . -

- - -
- - A that only accepts numeric values within - a specified range. To use this, you must first index the - numeric values using (expert: - ). - -

You create a new NumericRangeFilter with the static - factory methods, eg: - - - Filter f = NumericRangeFilter.newFloatRange("weight", - new Float(0.3f), new Float(0.10f), - true, true); - - - accepts all documents whose float valued "weight" field - ranges from 0.3 to 0.10, inclusive. - See for details on how Lucene - indexes and searches numeric valued fields. - -

NOTE: This API is experimental and - might change in incompatible ways in the next - release. - -

- 2.9 - - -
- - Returns the field name for this filter - - - Returns true if the lower endpoint is inclusive - - - Returns true if the upper endpoint is inclusive - - - Returns the lower value of this range filter - - - Returns the upper value of this range filter - - - Factory that creates a NumericRangeFilter, that filters a long - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeFilter, that queries a long - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeFilter, that filters a int - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeFilter, that queries a int - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeFilter, that filters a double - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeFilter, that queries a double - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeFilter, that filters a float - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeFilter, that queries a float - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - -

A that matches numeric values within a - specified range. To use this, you must first index the - numeric values using (expert: - ). If your terms are instead textual, - you should use . - is the filter equivalent of this - query.

- -

You create a new NumericRangeQuery with the static - factory methods, eg: - - - Query q = NumericRangeQuery.newFloatRange("weight", - new Float(0.3f), new Float(0.10f), - true, true); - - - matches all documents whose float valued "weight" field - ranges from 0.3 to 0.10, inclusive. - -

The performance of NumericRangeQuery is much better - than the corresponding because the - number of terms that must be searched is usually far - fewer, thanks to trie indexing, described below.

- -

You can optionally specify a precisionStep - when creating this query. This is necessary if you've - changed this configuration from its default (4) during - indexing. Lower values consume more disk space but speed - up searching. Suitable values are between 1 and - 8. A good starting point to test is 4, - which is the default value for all Numeric* - classes. See below for - details. - -

This query defaults to - for - 32 bit (int/float) ranges with precisionStep <8 and 64 - bit (long/double) ranges with precisionStep <6. - Otherwise it uses - as the - number of terms is likely to be high. With precision - steps of <4, this query can be run with one of the - BooleanQuery rewrite methods without changing - BooleanQuery's default max clause count. - -

NOTE: This API is experimental and - might change in incompatible ways in the next release. - -

How it works

- -

See the publication about panFMP, - where this algorithm was described (referred to as TrieRangeQuery): - -

Schindler, U, Diepenbroek, M, 2008. - Generic XML-based Framework for Metadata Portals. - Computers & Geosciences 34 (12), 1947-1955. - doi:10.1016/j.cageo.2008.02.023
- -

A quote from this paper: Because Apache Lucene is a full-text - search engine and not a conventional database, it cannot handle numerical ranges - (e.g., field value is inside user defined bounds, even dates are numerical values). - We have developed an extension to Apache Lucene that stores - the numerical values in a special string-encoded format with variable precision - (all numerical values like doubles, longs, floats, and ints are converted to - lexicographic sortable string representations and stored with different precisions - (for a more detailed description of how the values are stored, - see ). A range is then divided recursively into multiple intervals for searching: - The center of the range is searched only with the lowest possible precision in the trie, - while the boundaries are matched more exactly. This reduces the number of terms dramatically.

- -

For the variant that stores long values in 8 different precisions (each reduced by 8 bits) that - uses a lowest precision of 1 byte, the index contains only a maximum of 256 distinct values in the - lowest precision. Overall, a range could consist of a theoretical maximum of - 7*255*2 + 255 = 3825 distinct terms (when there is a term for every distinct value of an - 8-byte-number in the index and the range covers almost all of them; a maximum of 255 distinct values is used - because it would always be possible to reduce the full 256 values to one term with degraded precision). - In practice, we have seen up to 300 terms in most cases (index with 500,000 metadata records - and a uniform value distribution).

- -

Precision Step

-

You can choose any precisionStep when encoding values. - Lower step values mean more precisions and so more terms in index (and index gets larger). - On the other hand, the maximum number of terms to match reduces, which optimized query speed. - The formula to calculate the maximum term count is: - - n = [ (bitsPerValue/precisionStep - 1) * (2^precisionStep - 1 ) * 2 ] + (2^precisionStep - 1 ) - -

(this formula is only correct, when bitsPerValue/precisionStep is an integer; - in other cases, the value must be rounded up and the last summand must contain the modulo of the division as - precision step). - For longs stored using a precision step of 4, n = 15*15*2 + 15 = 465, and for a precision - step of 2, n = 31*3*2 + 3 = 189. But the faster search speed is reduced by more seeking - in the term enum of the index. Because of this, the ideal precisionStep value can only - be found out by testing. Important: You can index with a lower precision step value and test search speed - using a multiple of the original step value.

- -

Good values for precisionStep are depending on usage and data type: - - The default for all data types is 4, which is used, when no precisionStep is given. - Ideal value in most cases for 64 bit data types (long, double) is 6 or 8. - Ideal value in most cases for 32 bit data types (int, float) is 4. - Steps >64 for long/double and >32 for int/float produces one token - per value in the index and querying is as slow as a conventional . But it can be used - to produce fields, that are solely used for sorting (in this case simply use as - precisionStep). Using NumericFields for sorting - is ideal, because building the field cache is much faster than with text-only numbers. - Sorting is also possible with range query optimized fields using one of the above precisionSteps. - - -

Comparisons of the different types of RangeQueries on an index with about 500,000 docs showed - that in boolean rewrite mode (with raised clause count) - took about 30-40 secs to complete, in constant score filter rewrite mode took 5 secs - and executing this class took <100ms to complete (on an Opteron64 machine, Java 1.5, 8 bit - precision step). This query type was developed for a geographic portal, where the performance for - e.g. bounding boxes or exact date/time stamps is important.

- -

- 2.9 - - -
- - Returns the field name for this query - - - Returns true if the lower endpoint is inclusive - - - Returns true if the upper endpoint is inclusive - - - Returns the lower value of this range query - - - Returns the upper value of this range query - - - Subclass of FilteredTermEnum for enumerating all terms that match the - sub-ranges for trie range queries. -

- WARNING: This term enumeration is not guaranteed to be always ordered by - . - The ordering depends on how and - generates the sub-ranges. For - ordering is not relevant. -

-
- - this is a dummy, it is not used by this class. - - - this is a dummy, it is not used by this class. - - - Compares if current upper bound is reached, - this also updates the term count for statistics. - In contrast to , a return value - of false ends iterating the current enum - and forwards to the next sub-range. - - - - Increments the enumeration to the next element. True if one exists. - - - Closes the enumeration to further activity, freeing resources. - - - Expert: Callback for . - You need to overwrite only one of the methods. -

NOTE: This is a very low-level interface, - the method signatures may change in later versions. -

-
- - This is a helper class to generate prefix-encoded representations for numerical values - and supplies converters to represent float/double values as sortable integers/longs. - -

To quickly execute range queries in Apache Lucene, a range is divided recursively - into multiple intervals for searching: The center of the range is searched only with - the lowest possible precision in the trie, while the boundaries are matched - more exactly. This reduces the number of terms dramatically. - -

This class generates terms to achive this: First the numerical integer values need to - be converted to strings. For that integer values (32 bit or 64 bit) are made unsigned - and the bits are converted to ASCII chars with each 7 bit. The resulting string is - sortable like the original integer value. Each value is also prefixed - (in the first char) by the shift value (number of bits removed) used - during encoding. - -

To also index floating point numbers, this class supplies two methods to convert them - to integer values by changing their bit layout: , - . You will have no precision loss by - converting floating point numbers to integers and back (only that the integer form - is not usable). Other data types like dates can easily converted to longs or ints (e.g. - date to long: ). - -

For easy usage, the trie algorithm is implemented for indexing inside - that can index int, long, - float, and double. For querying, - and implement the query part - for the same data types. - -

This class can also be used, to generate lexicographically sortable (according - ) representations of numeric data types for other - usages (e.g. sorting). - -

NOTE: This API is experimental and - might change in incompatible ways in the next release. - -

- 2.9 - -
- - The default precision step used by , , - , and as default - - - - Expert: The maximum term length (used for char[] buffer size) - for encoding long values. - - - - - - Expert: The maximum term length (used for char[] buffer size) - for encoding int values. - - - - - - Expert: Longs are stored at lower precision by shifting off lower bits. The shift count is - stored as SHIFT_START_LONG+shift in the first character - - - - Expert: Integers are stored at lower precision by shifting off lower bits. The shift count is - stored as SHIFT_START_INT+shift in the first character - - - - Expert: Returns prefix coded bits after reducing the precision by shift bits. - This is method is used by . - - the numeric value - - how many bits to strip from the right - - that will contain the encoded chars, must be at least of - length - - number of chars written to buffer - - - - Expert: Returns prefix coded bits after reducing the precision by shift bits. - This is method is used by . - - the numeric value - - how many bits to strip from the right - - - - This is a convenience method, that returns prefix coded bits of a long without - reducing the precision. It can be used to store the full precision value as a - stored field in index. -

To decode, use . -

-
- - Expert: Returns prefix coded bits after reducing the precision by shift bits. - This is method is used by . - - the numeric value - - how many bits to strip from the right - - that will contain the encoded chars, must be at least of - length - - number of chars written to buffer - - - - Expert: Returns prefix coded bits after reducing the precision by shift bits. - This is method is used by . - - the numeric value - - how many bits to strip from the right - - - - This is a convenience method, that returns prefix coded bits of an int without - reducing the precision. It can be used to store the full precision value as a - stored field in index. -

To decode, use . -

-
- - Returns a long from prefixCoded characters. - Rightmost bits will be zero for lower precision codes. - This method can be used to decode e.g. a stored field. - - NumberFormatException if the supplied string is - not correctly prefix encoded. - - - - - - Returns an int from prefixCoded characters. - Rightmost bits will be zero for lower precision codes. - This method can be used to decode e.g. a stored field. - - NumberFormatException if the supplied string is - not correctly prefix encoded. - - - - - - Converts a double value to a sortable signed long. - The value is converted by getting their IEEE 754 floating-point "double format" - bit layout and then some bits are swapped, to be able to compare the result as long. - By this the precision is not reduced, but the value can easily used as a long. - - - - - - Convenience method: this just returns: - longToPrefixCoded(doubleToSortableLong(val)) - - - - Converts a sortable long back to a double. - - - - - Convenience method: this just returns: - sortableLongToDouble(prefixCodedToLong(val)) - - - - Converts a float value to a sortable signed int. - The value is converted by getting their IEEE 754 floating-point "float format" - bit layout and then some bits are swapped, to be able to compare the result as int. - By this the precision is not reduced, but the value can easily used as an int. - - - - - - Convenience method: this just returns: - intToPrefixCoded(floatToSortableInt(val)) - - - - Converts a sortable int back to a float. - - - - - Convenience method: this just returns: - sortableIntToFloat(prefixCodedToInt(val)) - - - - Expert: Splits a long range recursively. - You may implement a builder that adds clauses to a - for each call to its - - method. -

This method is used by . -

-
- - Expert: Splits an int range recursively. - You may implement a builder that adds clauses to a - for each call to its - - method. -

This method is used by . -

-
- - This helper does the splitting for both 32 and 64 bit. - - - Helper that delegates to correct range builder - - - Expert: Callback for . - You need to overwrite only one of the methods. -

NOTE: This is a very low-level interface, - the method signatures may change in later versions. -

-
- - Overwrite this method, if you like to receive the already prefix encoded range bounds. - You can directly build classical (inclusive) range queries from them. - - - - Overwrite this method, if you like to receive the raw long range bounds. - You can use this for e.g. debugging purposes (print out range bounds). - - - - Expert: Callback for . - You need to overwrite only one of the methods. -

NOTE: This is a very low-level interface, - the method signatures may change in later versions. -

-
- - Overwrite this method, if you like to receive the already prefix encoded range bounds. - You can directly build classical range (inclusive) queries from them. - - - - Overwrite this method, if you like to receive the raw int range bounds. - You can use this for e.g. debugging purposes (print out range bounds). - - - -
Factory that creates a NumericRangeQuery, that queries a long - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeQuery, that queries a long - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeQuery, that queries a int - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeQuery, that queries a int - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeQuery, that queries a double - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeQuery, that queries a double - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeQuery, that queries a float - range using the given precisionStep. - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Factory that creates a NumericRangeQuery, that queries a float - range using the default precisionStep (4). - You can have half-open ranges (which are in fact </≤ or >/≥ queries) - by setting the min or max value to null. By setting inclusive to false, it will - match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. - - - - Implements parallel search over a set of Searchables. - -

Applications usually need only call the inherited - or methods. -

-
- - Creates a which searches searchables. - - - - Executes each 's docFreq() in its own thread and - waits for each search to complete and merge the results back together. - - - - A search implementation which executes each - in its own thread and waits for each search to complete - and merge the results back together. - - - - A search implementation allowing sorting which spans a new thread for each - Searchable, waits for each search to complete and merges - the results back together. - - - - Lower-level search API. - -

is called for every matching document. - -

Applications should only use this if they need all of the - matching documents. The high-level search API () - is usually more efficient, as it skips - non-high-scoring hits. -

This method cannot be parallelized, because - supports no concurrent access. -

- to match documents - - if non-null, a bitset used to eliminate some documents - - to receive hits - - TODO: parallelize this one too - -
- - Calculate the final score as the average score of all payloads seen. -

- Is thread safe and completely reusable. - - -

-
- - An abstract class that defines a way for Payload*Query instances - to transform the cumulative effects of payload scores for a document. - - - for more information - -

- This class and its derivations are experimental and subject to change - - - - - -

Calculate the score up to this point for this doc and field - The current doc - - The field - - The start position of the matching Span - - The end position of the matching Span - - The number of payloads seen so far - - The current score so far - - The score for the current payload - - The new current Score - - - - -
- - Calculate the final score for all the payloads seen so far for this doc/field - The current doc - - The current field - - The total number of payloads seen on this document - - The raw score for those payloads - - The final score for the payloads - - - - Returns the maximum payload score seen, else 1 if there are no payloads on the doc. -

- Is thread safe and completely reusable. - - -

-
- - Calculates the minimum payload seen - - - - - - This class is very similar to - except that it factors - in the value of the payloads located at each of the positions where the - occurs. -

- In order to take advantage of this, you must override - - which returns 1 by default. -

- Payload scores are aggregated using a pluggable . - -

- - -
- - Matches spans which are near one another. One can specify slop, the - maximum number of intervening unmatched positions, as well as whether - matches are required to be in-order. - - - - Base class for span-based queries. - - - Expert: Returns the matches for this query in an index. Used internally - to search for spans. - - - - Returns the name of the field matched by this query. - - - Construct a SpanNearQuery. Matches spans matching a span from each - clause, with up to slop total unmatched positions between - them. * When inOrder is true, the spans from each clause - must be * ordered as in clauses. - - - - Return the clauses whose spans are matched. - - - Returns true iff o is equal to this. - - - Return the maximum number of intervening unmatched positions permitted. - - - Return true if matches are required to be in-order. - - - Expert-only. Public for use by other weight implementations - - - Public for extension only. - - - - This method is no longer an official member of - but it is needed by SpanWeight to build an explanation. - - - - By default, uses the to score the payloads, but - can be overridden to do other things. - - - The payloads - - The start position of the span being scored - - The end position of the span being scored - - - - - - - Experimental class to get set of payloads for most standard Lucene queries. - Operates like Highlighter - IndexReader should only contain doc of interest, - best to use MemoryIndex. - -

- - WARNING: The status of the Payloads feature is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case. - -

-
- - that contains doc with payloads to extract - - - - Query should be rewritten for wild/fuzzy support. - - - - - payloads Collection - - IOException - - - This class is very similar to - except that it factors - in the value of the payload located at each of the positions where the - occurs. -

- In order to take advantage of this, you must override - - which returns 1 by default. -

- Payload scores are aggregated using a pluggable . - -

-
- - Matches spans containing a term. - - - Construct a SpanTermQuery matching the named term's spans. - - - Return the term whose spans are matched. - - - - * - - IOException - - - Returns the SpanScorer score only. -

- Should not be overriden without good cause! - -

- the score for just the Span part w/o the payload - - IOException - - - - -
- - The score for the payload - - - The score, as calculated by - - - - - Position of a term in a document that takes into account the term offset within the phrase. - - - Go to next location of this term current document, and set - position as location - offset, so that a - matching exact phrase is easily identified when all PhrasePositions - have exactly the same position. - - - - A Query that matches documents containing a particular sequence of terms. - A PhraseQuery is built by QueryParser for input like "new york". - -

This query may be combined with other terms or queries with a . -

-
- - Constructs an empty phrase query. - - - Adds a term to the end of the query phrase. - The relative position of the term is the one immediately after the last term added. - - - - Adds a term to the end of the query phrase. - The relative position of the term within the phrase is specified explicitly. - This allows e.g. phrases with more than one term at the same position - or phrases with gaps (e.g. in connection with stopwords). - - - - - - - - - Returns the set of terms in this phrase. - - - Returns the relative positions of terms in this phrase. - - - - - - - Prints a user-readable version of this query. - - - Returns true iff o is equal to this. - - - Returns a hash code value for this object. - - - Sets the number of other words permitted between words in query phrase. - If zero, then this is an exact phrase search. For larger values this works - like a WITHIN or NEAR operator. -

The slop is in fact an edit-distance, where the units correspond to - moves of terms in the query phrase out of position. For example, to switch - the order of two words requires two moves (the first move places the words - atop one another), so to permit re-orderings of phrases, the slop must be - at least two. -

More exact matches are scored higher than sloppier matches, thus search - results are sorted by exactness. -

The slop is zero by default, requiring exact matches. -

-
- - A implementation which wraps another - and makes sure only documents with - scores > 0 are collected. - - - - A Filter that restricts search results to values that have a matching prefix in a given - field. - - - - Prints a user-readable version of this query. - - - A Query that matches documents containing terms with a specified prefix. A PrefixQuery - is built by QueryParser for input like app*. - -

This query uses the - - rewrite method. -

-
- - Constructs a query for terms starting with prefix. - - - Prints a user-readable version of this query. - - - Returns the prefix of this query. - - - Subclass of FilteredTermEnum for enumerating all terms that match the - specified prefix filter term. -

- Term enumerations are always ordered by Term.compareTo(). Each term in - the enumeration is greater than all that precede it. - -

-
- - - - - - - - - The original list of terms from the query, can contain duplicates - - - - Constrains search results to only match those which also match a provided - query. - -

This could be used, for example, with a on a suitably - formatted date field to implement date filtering. One could re-use a single - QueryFilter that matches, e.g., only documents modified within the last - week. The QueryFilter and TermRangeQuery would only need to be reconstructed - once per day. - -

- $Id:$ - -
- - Constructs a filter which only matches documents matching - query. - - - - A Scorer for queries with a required subscorer - and an excluding (prohibited) sub DocIdSetIterator. -
- This Scorer implements , - and it uses the skipTo() on the given scorers. -
-
- - Construct a ReqExclScorer. - The scorer that must match, except where - - indicates exclusion. - - - - Advance to non excluded doc. -
On entry: - - reqScorer != null, - exclScorer != null, - reqScorer was advanced once via next() or skipTo() - and reqScorer.doc() may still be excluded. - - Advances reqScorer a non excluded required doc, if any. -
- true iff there is a non excluded required doc. - -
- - Returns the score of the current document matching the query. - Initially invalid, until is called the first time. - - The score of the required scorer. - - - - A Scorer for queries with a required part and an optional part. - Delays skipTo() on the optional part until a score() is needed. -
- This Scorer implements . -
-
- - The scorers passed from the constructor. - These are set to null as soon as their next() or skipTo() returns false. - - - - Construct a ReqOptScorer. - The required scorer. This must match. - - The optional scorer. This is used for scoring only. - - - - Returns the score of the current document matching the query. - Initially invalid, until is called the first time. - - The score of the required scorer, eventually increased by the score - of the optional scorer when it also matches the current document. - - - - A which wraps another scorer and caches the score of the - current document. Successive calls to will return the same - result and will not invoke the wrapped Scorer's score() method, unless the - current document has changed.
- This class might be useful due to the changes done to the - interface, in which the score is not computed for a document by default, only - if the collector requests it. Some collectors may need to use the score in - several places, however all they have in hand is a object, and - might end up computing the score of a document more than once. -
-
- - Creates a new instance by wrapping the given scorer. - - - - Subclass of FilteredTermEnum for enumerating a single term. -

- This can be used by s that need only visit one term, - but want to preserve MultiTermQuery semantics such as - . -

-
- - - Creates a new SingleTermEnum. -

- After calling the constructor the enumeration is already pointing to the term, - if it exists. -

-
- - Score a candidate doc for all slop-valid position-combinations (matches) - encountered while traversing/hopping the PhrasePositions. -
The score contribution of a match depends on the distance: -
- highest score for distance=0 (exact match). -
- score gets lower as distance gets higher. -
Example: for query "a b"~2, a document "x a b a y" can be scored twice: - once for "a b" (distance=0), and once for "b a" (distance=2). -
Possibly not all valid combinations are encountered, because for efficiency - we always propagate the least PhrasePosition. This allows to base on - PriorityQueue and move forward faster. - As result, for example, document "a b c b a" - would score differently for queries "a b c"~4 and "c b a"~4, although - they really are equivalent. - Similarly, for doc "a b c b a f g", query "c b"~2 - would get same score as "g f"~2, although "c b"~2 could be matched twice. - We may want to fix this in the future (currently not, for performance reasons). -
-
- - Init PhrasePositions in place. - There is a one time initialization for this scorer: -
- Put in repeats[] each pp that has another pp with same position in the doc. -
- Also mark each such pp by pp.repeats = true. -
Later can consult with repeats[] in termPositionsDiffer(pp), making that check efficient. - In particular, this allows to score queries with no repetitions with no overhead due to this computation. -
- Example 1 - query with no repetitions: "ho my"~2 -
- Example 2 - query with repetitions: "ho my my"~2 -
- Example 3 - query with repetitions: "my ho my"~2 -
Init per doc w/repeats in query, includes propagating some repeating pp's to avoid false phrase detection. -
- end (max position), or -1 if any term ran out (i.e. done) - - IOException -
- - We disallow two pp's to have the same TermPosition, thereby verifying multiple occurrences - in the query of the same word would go elsewhere in the matched doc. - - null if differ (i.e. valid) otherwise return the higher offset PhrasePositions - out of the first two PPs found to not differ. - - - - Encapsulates sort criteria for returned hits. - -

The fields used to determine sort order must be carefully chosen. - Documents must contain a single term in such a field, - and the value of the term should indicate the document's relative position in - a given sort order. The field must be indexed, but should not be tokenized, - and does not need to be stored (unless you happen to want it back with the - rest of your document data). In other words: - -

document.add (new Field ("byNumber", Integer.toString(x), Field.Store.NO, Field.Index.NOT_ANALYZED));

- - -

Valid Types of Values

- -

There are four possible kinds of term values which may be put into - sorting fields: Integers, Longs, Floats, or Strings. Unless - SortField objects are specified, the type of value - in the field is determined by parsing the first term in the field. - -

Integer term values should contain only digits and an optional - preceding negative sign. Values must be base 10 and in the range - Integer.MIN_VALUE and Integer.MAX_VALUE inclusive. - Documents which should appear first in the sort - should have low value integers, later documents high values - (i.e. the documents should be numbered 1..n where - 1 is the first and n the last). - -

Long term values should contain only digits and an optional - preceding negative sign. Values must be base 10 and in the range - Long.MIN_VALUE and Long.MAX_VALUE inclusive. - Documents which should appear first in the sort - should have low value integers, later documents high values. - -

Float term values should conform to values accepted by - (except that NaN - and Infinity are not supported). - Documents which should appear first in the sort - should have low values, later documents high values. - -

String term values can contain any valid String, but should - not be tokenized. The values are sorted according to their - natural order. Note that using this type - of term value has higher memory requirements than the other - two types. - -

Object Reuse

- -

One of these objects can be - used multiple times and the sort order changed between usages. - -

This class is thread safe. - -

Memory Usage

- -

Sorting uses of caches of term values maintained by the - internal HitQueue(s). The cache is static and contains an integer - or float array of length IndexReader.MaxDoc for each field - name for which a sort is performed. In other words, the size of the - cache in bytes is: - -

4 * IndexReader.MaxDoc * (# of different fields actually used to sort) - -

For String fields, the cache is larger: in addition to the - above array, the value of every term in the field is kept in memory. - If there are many unique terms in the field, this could - be quite large. - -

Note that the size of the cache is not affected by how many - fields are in the index and might be used to sort - only by - the ones actually used to sort a result set. - -

Created: Feb 12, 2004 10:53:57 AM - -

-
- - Represents sorting by computed relevance. Using this sort criteria returns - the same results as calling - Searcher#search()without a sort criteria, - only with slightly more overhead. - - - - Represents sorting by index order. - - - Sorts by computed relevance. This is the same sort criteria as calling - without a sort criteria, - only with slightly more overhead. - - - - Sorts by the criteria in the given SortField. - - - Sorts in succession by the criteria in each SortField. - - - Sets the sort to the given criteria. - - - Sets the sort to the given criteria in succession. - - - Representation of the sort criteria. - Array of SortField objects used in this sort criteria - - - - Returns true if o is equal to this. - - - Returns a hash code value for this object. - - - Stores information about how to sort documents by terms in an individual - field. Fields must be indexed in order to sort by them. - -

Created: Feb 11, 2004 1:25:29 PM -

- -
- - Sort by document score (relevancy). Sort values are Float and higher - values are at the front. - - - - Sort by document number (index order). Sort values are Integer and lower - values are at the front. - - - - Sort using term values as Strings. Sort values are String and lower - values are at the front. - - - - Sort using term values as encoded Integers. Sort values are Integer and - lower values are at the front. - - - - Sort using term values as encoded Floats. Sort values are Float and - lower values are at the front. - - - - Sort using term values as encoded Longs. Sort values are Long and - lower values are at the front. - - - - Sort using term values as encoded Doubles. Sort values are Double and - lower values are at the front. - - - - Sort using term values as encoded Shorts. Sort values are Short and - lower values are at the front. - - - - Sort using a custom Comparator. Sort values are any Comparable and - sorting is done according to natural order. - - - - Sort using term values as encoded Bytes. Sort values are Byte and - lower values are at the front. - - - - Sort using term values as Strings, but comparing by - value (using String.compareTo) for all comparisons. - This is typically slower than , which - uses ordinals to do the sorting. - - - - Represents sorting by document score (relevancy). - - - Represents sorting by document number (index order). - - - Creates a sort by terms in the given field with the type of term - values explicitly given. - - Name of field to sort by. Can be null if - type is SCORE or DOC. - - Type of values in the terms. - - - - Creates a sort, possibly in reverse, by terms in the given field with the - type of term values explicitly given. - - Name of field to sort by. Can be null if - type is SCORE or DOC. - - Type of values in the terms. - - True if natural order should be reversed. - - - - Creates a sort by terms in the given field, parsed - to numeric values using a custom . - - Name of field to sort by. Must not be null. - - Instance of a , - which must subclass one of the existing numeric - parsers from . Sort type is inferred - by testing which numeric parser the parser subclasses. - - IllegalArgumentException if the parser fails to - subclass an existing numeric parser, or field is null - - - - Creates a sort, possibly in reverse, by terms in the given field, parsed - to numeric values using a custom . - - Name of field to sort by. Must not be null. - - Instance of a , - which must subclass one of the existing numeric - parsers from . Sort type is inferred - by testing which numeric parser the parser subclasses. - - True if natural order should be reversed. - - IllegalArgumentException if the parser fails to - subclass an existing numeric parser, or field is null - - - - Creates a sort by terms in the given field sorted - according to the given locale. - - Name of field to sort by, cannot be null. - - Locale of values in the field. - - - - Creates a sort, possibly in reverse, by terms in the given field sorted - according to the given locale. - - Name of field to sort by, cannot be null. - - Locale of values in the field. - - - - Creates a sort with a custom comparison function. - Name of field to sort by; cannot be null. - - Returns a comparator for sorting hits. - - - - Creates a sort, possibly in reverse, with a custom comparison function. - Name of field to sort by; cannot be null. - - Returns a comparator for sorting hits. - - True if natural order should be reversed. - - - - Returns true if o is equal to this. If a - or - was provided, it must properly - implement equals (unless a singleton is always used). - - - - Returns true if o is equal to this. If a - (deprecated) or - was provided, it must properly - implement hashCode (unless a singleton is always - used). - - - - Returns the to use for - sorting. - - NOTE: This API is experimental and might change in - incompatible ways in the next release. - - - number of top hits the queue will store - - position of this SortField within - . The comparator is primary if sortPos==0, - secondary if sortPos==1, etc. Some comparators can - optimize themselves when they are the primary sort. - - to use when sorting - - - - Returns the name of the field. Could return null - if the sort is by SCORE or DOC. - - Name of field, possibly <c>null</c>. - - - Returns the type of contents in the field. - One of the constants SCORE, DOC, STRING, INT or FLOAT. - - - Returns the Locale by which term values are interpreted. - May return null if no Locale was specified. - - Locale, or <c>null</c>. - - - Returns the instance of a parser that fits to the given sort type. - May return null if no parser was specified. Sorting is using the default parser then. - - An instance of a <see cref="FieldCache" /> parser, or <c>null</c>. - - - Returns whether the sort should be reversed. - True if natural order should be reversed. - - - - Returns the used for - custom sorting - - - - The results of a SpanQueryFilter. Wraps the BitSet and the position information from the SpanQuery - -

- NOTE: This API is still experimental and subject to change. -

-
- - - The DocIdSet for the Filter - - A List of objects - - - - The first entry in the array corresponds to the first "on" bit. - Entries are increasing by document order - - A List of PositionInfo objects - - - Returns the docIdSet - - - - A List of <see cref="Lucene.Net.Search.SpanFilterResult.StartEnd" /> objects - - - - The end position of this match - - - The Start position - The start position of this match - - - Constrains search results to only match those which also match a provided - query. Also provides position information about where each document matches - at the cost of extra space compared with the QueryWrapperFilter. - There is an added cost to this above what is stored in a . Namely, - the position information for each matching document is stored. -

- This filter does not cache. See the for a wrapper that - caches. - - -

- $Id:$ - -
- - Constructs a filter which only matches documents matching - query. - - The to use as the basis for the Filter. - - - -

Wrapper to allow objects participate in composite - single-field SpanQueries by 'lying' about their search field. That is, - the masked SpanQuery will function as normal, - but simply hands back the value supplied - in this class's constructor.

- -

This can be used to support Queries like or - across different fields, which is not ordinarily - permitted.

- -

This can be useful for denormalized relational data: for example, when - indexing a document with conceptually many 'children':

- -

-            teacherid: 1
-            studentfirstname: james
-            studentsurname: jones
-            
-            teacherid: 2
-            studenfirstname: james
-            studentsurname: smith
-            studentfirstname: sally
-            studentsurname: jones
-            
- -

a SpanNearQuery with a slop of 0 can be applied across two - objects as follows: - - SpanQuery q1 = new SpanTermQuery(new Term("studentfirstname", "james")); - SpanQuery q2 = new SpanTermQuery(new Term("studentsurname", "jones")); - SpanQuery q2m new FieldMaskingSpanQuery(q2, "studentfirstname"); - Query q = new SpanNearQuery(new SpanQuery[]{q1, q2m}, -1, false); - - to search for 'studentfirstname:james studentsurname:jones' and find - teacherid 1 without matching teacherid 2 (which has a 'james' in position 0 - and 'jones' in position 1).

- -

Note: as returns the masked field, scoring will be - done using the norms of the field name supplied. This may lead to unexpected - scoring behaviour.

-

-
- - A Spans that is formed from the ordered subspans of a SpanNearQuery - where the subspans do not overlap and have a maximum slop between them. -

- The formed spans only contains minimum slop matches.
- The matching slop is computed from the distance(s) between - the non overlapping matching Spans.
- Successive matches are always formed from the successive Spans - of the SpanNearQuery. -

- The formed spans may contain overlaps when the slop is at least 1. - For example, when querying using - t1 t2 t3 - with slop at least 1, the fragment: - t1 t2 t1 t3 t2 t3 - matches twice: - t1 t2 .. t3 - t1 .. t2 t3 - - - Expert: - Only public for subclassing. Most implementations should not need this class -

-
- - Expert: an enumeration of span matches. Used to implement span searching. - Each span represents a range of term positions within a document. Matches - are enumerated in order, by increasing document number, within that by - increasing start position and finally by increasing end position. - - - - Move to the next match, returning true iff any such exists. - - - Skips to the first match beyond the current, whose document number is - greater than or equal to target.

Returns true iff there is such - a match.

Behaves as if written: - boolean skipTo(int target) { - do { - if (!next()) - return false; - } while (target > doc()); - return true; - } - - Most implementations are considerably more efficient than that. -

-
- - Returns the document number of the current match. Initially invalid. - - - Returns the start position of the current match. Initially invalid. - - - Returns the end position of the current match. Initially invalid. - - - Returns the payload data for the current span. - This is invalid until is called for - the first time. - This method must not be called more than once after each call - of . However, most payloads are loaded lazily, - so if the payload data for the current position is not needed, - this method may not be called at all for performance reasons. An ordered - SpanQuery does not lazy load, so if you have payloads in your index and - you do not want ordered SpanNearQuerys to collect payloads, you can - disable collection with a constructor option.
- - Note that the return type is a collection, thus the ordering should not be relied upon. -
-

- WARNING: The status of the Payloads feature is experimental. - The APIs introduced here might change in the future and will not be - supported anymore in such a case.

- -

- a List of byte arrays containing the data of this payload, otherwise null if isPayloadAvailable is false - java.io.IOException -
- - Checks if a payload can be loaded at this position. -

- Payloads can only be loaded once per call to - . - -

- true if there is a payload available at this position that can be loaded -
- - The spans in the same order as the SpanNearQuery - - - Indicates that all subSpans have same doc() - - - Advances the subSpans to just after an ordered match with a minimum slop - that is smaller than the slop allowed by the SpanNearQuery. - - true iff there is such a match. - - - - Advance the subSpans to the same document - - - Check whether two Spans in the same document are ordered. - - - - - true iff spans1 starts before spans2 - or the spans start at the same position, - and spans1 ends before spans2. - - - - Like , but use the spans - starts and ends as parameters. - - - - Order the subSpans within the same document by advancing all later spans - after the previous one. - - - - The subSpans are ordered in the same doc, so there is a possible match. - Compute the slop while making the match as short as possible by advancing - all subSpans except the last one in reverse order. - - - - Similar to , but for the unordered case. - - Expert: - Only public for subclassing. Most implementations should not need this class - - - - WARNING: The List is not necessarily in order of the the positions - Collection of &lt;c&gt;byte[]&lt;/c&gt; payloads - IOException - - - Wraps a Spans, and can be used to form a linked list. - - - Matches spans near the beginning of a field. - - - Construct a SpanFirstQuery matching spans in match whose end - position is less than or equal to end. - - - - Return the SpanQuery whose matches are filtered. - - - Return the maximum end position permitted in a match. - - - Removes matches which overlap with another SpanQuery. - - - Construct a SpanNotQuery matching spans from include which - have no overlap with spans from exclude. - - - - Returns true iff o is equal to this. - - - Return the SpanQuery whose matches are filtered. - - - Return the SpanQuery whose matches must not overlap those returned. - - - Matches the union of its clauses. - - - Construct a SpanOrQuery merging the provided clauses. - - - Return the clauses whose spans are matched. - - - Expert: - Public for extension only - - - - A Query that matches documents containing a term. - This may be combined with other terms with a . - - - - Constructs a query for the term t. - - - Prints a user-readable version of this query. - - - Returns true iff o is equal to this. - - - Returns a hash code value for this object. - - - Returns the term of this query. - - - A Filter that restricts search results to a range of values in a given - field. - -

This filter matches the documents looking for terms that fall into the - supplied range according to . It is not intended - for numerical ranges, use instead. - -

If you construct a large number of range filters with different ranges but on the - same field, may have significantly better performance. -

- 2.9 - -
- - The field this range applies to - - The lower bound on this range - - The upper bound on this range - - Does this range include the lower bound? - - Does this range include the upper bound? - - IllegalArgumentException if both terms are null or if - lowerTerm is null and includeLower is true (similar for upperTerm - and includeUpper) - - - - WARNING: Using this constructor and supplying a non-null - value in the collator parameter will cause every single - index Term in the Field referenced by lowerTerm and/or upperTerm to be - examined. Depending on the number of index Terms in this Field, the - operation could be very slow. - - - - The lower bound on this range - - The upper bound on this range - - Does this range include the lower bound? - - Does this range include the upper bound? - - The collator to use when determining range inclusion; set - to null to use Unicode code point ordering instead of collation. - - IllegalArgumentException if both terms are null or if - lowerTerm is null and includeLower is true (similar for upperTerm - and includeUpper) - - - - Constructs a filter for field fieldName matching - less than or equal to upperTerm. - - - - Constructs a filter for field fieldName matching - greater than or equal to lowerTerm. - - - - Returns the field name for this filter - - - Returns the lower value of this range filter - - - Returns the upper value of this range filter - - - Returns true if the lower endpoint is inclusive - - - Returns true if the upper endpoint is inclusive - - - Returns the collator used to determine range inclusion, if any. - - - A Query that matches documents within an exclusive range of terms. - -

This query matches the documents looking for terms that fall into the - supplied range according to . It is not intended - for numerical ranges, use instead. - -

This query uses the - - rewrite method. -

- 2.9 - -
- - Constructs a query selecting all terms greater/equal than lowerTerm - but less/equal than upperTerm. - -

- If an endpoint is null, it is said - to be "open". Either or both endpoints may be open. Open endpoints may not - be exclusive (you can't select all but the first or last term without - explicitly specifying the term to exclude.) - -

- The field that holds both lower and upper terms. - - The term text at the lower end of the range - - The term text at the upper end of the range - - If true, the lowerTerm is - included in the range. - - If true, the upperTerm is - included in the range. - -
- - Constructs a query selecting all terms greater/equal than - lowerTerm but less/equal than upperTerm. -

- If an endpoint is null, it is said - to be "open". Either or both endpoints may be open. Open endpoints may not - be exclusive (you can't select all but the first or last term without - explicitly specifying the term to exclude.) -

- If collator is not null, it will be used to decide whether - index terms are within the given range, rather than using the Unicode code - point order in which index terms are stored. -

- WARNING: Using this constructor and supplying a non-null - value in the collator parameter will cause every single - index Term in the Field referenced by lowerTerm and/or upperTerm to be - examined. Depending on the number of index Terms in this Field, the - operation could be very slow. - -

- - The Term text at the lower end of the range - - The Term text at the upper end of the range - - If true, the lowerTerm is - included in the range. - - If true, the upperTerm is - included in the range. - - The collator to use to collate index Terms, to determine - their membership in the range bounded by lowerTerm and - upperTerm. - -
- - Prints a user-readable version of this query. - - - Returns the field name for this query - - - Returns the lower value of this range query - - - Returns the upper value of this range query - - - Returns true if the lower endpoint is inclusive - - - Returns true if the upper endpoint is inclusive - - - Returns the collator used to determine range inclusion, if any. - - - Subclass of FilteredTermEnum for enumerating all terms that match the - specified range parameters. -

- Term enumerations are always ordered by Term.compareTo(). Each term in - the enumeration is greater than all that precede it. -

- 2.9 - -
- - Enumerates all terms greater/equal than lowerTerm - but less/equal than upperTerm. - - If an endpoint is null, it is said to be "open". Either or both - endpoints may be open. Open endpoints may not be exclusive - (you can't select all but the first or last term without - explicitly specifying the term to exclude.) - - - - - An interned field that holds both lower and upper terms. - - The term text at the lower end of the range - - The term text at the upper end of the range - - If true, the lowerTerm is included in the range. - - If true, the upperTerm is included in the range. - - The collator to use to collate index Terms, to determine their - membership in the range bounded by lowerTerm and - upperTerm. - - - IOException - - - Expert: A Scorer for documents matching a Term. - - - Construct a TermScorer. - - - The weight of the Term in the query. - - An iterator over the documents matching the Term. - - The Similarity implementation to be used for score - computations. - - The field norms of the document fields for the Term. - - - - Advances to the next document matching the query.
- The iterator over the matching documents is buffered using - . - -
- the document matching the query or -1 if there are no more documents. - -
- - Advances to the first match beyond the current whose document number is - greater than or equal to a given target.
- The implementation uses . - -
- The target document number. - - the matching document or -1 if none exist. - -
- - Returns a string representation of this TermScorer. - - - The is used to timeout search requests that - take longer than the maximum allowed search time limit. After this time is - exceeded, the search thread is stopped by throwing a - . - - - - Default timer resolution. - - - - - Default for . - - - - - Create a TimeLimitedCollector wrapper over another with a specified timeout. - the wrapped - - max time allowed for collecting hits after which is thrown - - - - Calls on the decorated - unless the allowed time has passed, in which case it throws an exception. - - - TimeExceededException - if the time allowed has exceeded. - - - - - Gets or sets the timer resolution. - The default timer resolution is 20 milliseconds. - This means that a search required to take no longer than - 800 milliseconds may be stopped after 780 to 820 milliseconds. -
Note that: - - Finer (smaller) resolution is more accurate but less efficient. - Setting resolution to less than 5 milliseconds will be silently modified to 5 milliseconds. - Setting resolution smaller than current resolution might take effect only after current - resolution. (Assume current resolution of 20 milliseconds is modified to 5 milliseconds, - then it can take up to 20 milliseconds for the change to have effect. - -
-
- - Checks if this time limited collector is greedy in collecting the last hit. - A non greedy collector, upon a timeout, would throw a - without allowing the wrapped collector to collect current doc. A greedy one would - first allow the wrapped hit collector to collect current doc and only then - throw a . - - - - TimerThread provides a pseudo-clock service to all searching - threads, so that they can count elapsed time with less overhead - than repeatedly calling System.currentTimeMillis. A single - thread should be created to be used for all searches. - - - - Get the timer value in milliseconds. - - - Thrown when elapsed search time exceeds allowed search time. - - - Returns allowed time (milliseconds). - - - Returns elapsed time (milliseconds). - - - Returns last doc(absolute doc id) that was collected when the search time exceeded. - - - Represents hits returned by - and - - - - Constructs a TopDocs with a default maxScore=Float.NaN. - - - - - - The total number of hits for the query. - - - The top hits for the query. - - - - Gets or sets the maximum score value encountered, needed for normalizing. - Note that in case scores are not tracked, this returns . - - - - A base class for all collectors that return a output. This - collector allows easy extension by providing a single constructor which - accepts a as well as protected members for that - priority queue and a counter of the number of total hits.
- Extending classes can override and - in order to provide their own implementation. -
-
- - The priority queue which holds the top documents. Note that different - implementations of PriorityQueue give different meaning to 'top documents'. - HitQueue for example aggregates the top scoring documents, while other PQ - implementations may hold documents sorted by other criteria. - - - - The total number of documents that the collector encountered. - - - Populates the results array with the ScoreDoc instaces. This can be - overridden in case a different ScoreDoc type should be returned. - - - - Returns a instance containing the given results. If - results is null it means there are no results to return, - either because there were 0 calls to collect() or because the arguments to - topDocs were invalid. - - - - Returns the top docs that were collected by this collector. - - - Returns the documents in the rage [start .. pq.size()) that were collected - by this collector. Note that if start >= pq.size(), an empty TopDocs is - returned.
- This method is convenient to call if the application allways asks for the - last results, starting from the last 'page'.
- NOTE: you cannot call this method more than once for each search - execution. If you need to call it more than once, passing each time a - different start, you should call and work - with the returned object, which will contain all the - results this search execution collected. -
-
- - Returns the documents in the rage [start .. start+howMany) that were - collected by this collector. Note that if start >= pq.size(), an empty - TopDocs is returned, and if pq.size() - start < howMany, then only the - available documents in [start .. pq.size()) are returned.
- This method is useful to call in case pagination of search results is - allowed by the search application, as well as it attempts to optimize the - memory used by allocating only as much as requested by howMany.
- NOTE: you cannot call this method more than once for each search - execution. If you need to call it more than once, passing each time a - different range, you should call and work with the - returned object, which will contain all the results this - search execution collected. -
-
- - The total number of documents that matched this query. - - - A that sorts by using - s. -

- See the method - for instantiating a TopFieldCollector. - -

NOTE: This API is experimental and might change in - incompatible ways in the next release.

-

-
- - Creates a new from the given - arguments. - -

NOTE: The instances returned by this method - pre-allocate a full array of length - numHits. - -

- the sort criteria (SortFields). - - the number of results to collect. - - specifies whether the actual field values should be returned on - the results (FieldDoc). - - specifies whether document scores should be tracked and set on the - results. Note that if set to false, then the results' scores will - be set to Float.NaN. Setting this to true affects performance, as - it incurs the score computation on each competitive result. - Therefore if document scores are not required by the application, - it is recommended to set it to false. - - specifies whether the query's maxScore should be tracked and set - on the resulting . Note that if set to false, - returns Float.NaN. Setting this to - true affects performance as it incurs the score computation on - each result. Also, setting this true automatically sets - trackDocScores to true as well. - - specifies whether documents are scored in doc Id order or not by - the given in . - - a instance which will sort the results by - the sort criteria. - - IOException -
- - - Represents hits returned by . - - - - The fields which were used to sort results by. - - - Creates one of these objects. - Total number of hits for the query. - - The top hits for the query. - - The sort criteria used to find the top hits. - - The maximum score encountered. - - - - A implementation that collects the top-scoring hits, - returning them as a . This is used by to - implement -based search. Hits are sorted by score descending - and then (when the scores are tied) docID ascending. When you create an - instance of this collector you should know in advance whether documents are - going to be collected in doc Id order or not. - -

NOTE: The values and - are not valid scores. This - collector will not properly collect hits with such - scores. -

-
- - Creates a new given the number of hits to - collect and whether documents are scored in order by the input - to . - -

NOTE: The instances returned by this method - pre-allocate a full array of length - numHits, and fill the array with sentinel - objects. -

-
- - Implements the wildcard search query. Supported wildcards are *, which - matches any character sequence (including the empty one), and ?, - which matches any single character. Note this query can be slow, as it - needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, - a Wildcard term should not start with one of the wildcards * or - ?. - -

This query uses the - - rewrite method. - -

- - -
- - Prints a user-readable version of this query. - - - Returns the pattern term. - - - Subclass of FilteredTermEnum for enumerating all terms that match the - specified wildcard filter term. -

- Term enumerations are always ordered by Term.compareTo(). Each term in - the enumeration is greater than all that precede it. -

-
- - ***************************************** - String equality with support for wildcards - ****************************************** - - - - Creates a new WildcardTermEnum. -

- After calling the constructor the enumeration is already pointing to the first - valid term if such a term exists. -

-
- - Determines if a word matches a wildcard pattern. - Work released by Granta Design Ltd after originally being done on - company time. - - - - This exception is thrown when there is an attempt to - access something that has already been closed. - - - - Base implementation class for buffered . - - - Abstract base class for output to a file in a Directory. A random-access - output stream. Used for all Lucene index output operations. - - - - - - - - Writes a single byte. - - - - - Writes an array of bytes. - the bytes to write - - the number of bytes to write - - - - - - Writes an array of bytes. - the bytes to write - - the offset in the byte array - - the number of bytes to write - - - - - - Writes an int as four bytes. - - - - - Writes an int in a variable-length format. Writes between one and - five bytes. Smaller values take fewer bytes. Negative numbers are not - supported. - - - - - - Writes a long as eight bytes. - - - - - Writes an long in a variable-length format. Writes between one and five - bytes. Smaller values take fewer bytes. Negative numbers are not - supported. - - - - - - Writes a string. - - - - - Writes a sub sequence of characters from s as the old - format (modified UTF-8 encoded bytes). - - the source of the characters - - the first character in the sequence - - the number of characters in the sequence - - -- please pre-convert to utf8 bytes - instead or use - - - - Writes a sub sequence of characters from char[] as - the old format (modified UTF-8 encoded bytes). - - the source of the characters - - the first character in the sequence - - the number of characters in the sequence - - -- please pre-convert to utf8 bytes instead or use - - - - Copy numBytes bytes from input to ourself. - - - Forces any buffered output to be written. - - - Closes this stream to further operations. - - - Closes this stream to further operations. - - - Sets current position in this file, where the next write will occur. - - - - - Set the file length. By default, this method does - nothing (it's optional for a Directory to implement - it). But, certain Directory implementations (for - - can use this to inform the - underlying IO system to pre-allocate the file to the - specified size. If the length is longer than the - current file length, the bytes added to the file are - undefined. Otherwise the file is truncated. - - file length - - - - Returns the current position in this file, where the next write will - occur. - - - - - - The number of bytes in the file. - - - Writes a single byte. - - - - - Writes an array of bytes. - the bytes to write - - the number of bytes to write - - - - - - Forces any buffered output to be written. - - - Expert: implements buffer write. Writes bytes at the current position in - the output. - - the bytes to write - - the number of bytes to write - - - - Expert: implements buffer write. Writes bytes at the current position in - the output. - - the bytes to write - - the offset in the byte array - - the number of bytes to write - - - - Closes this stream to further operations. - - - Sets current position in this file, where the next write will occur. - - - - - Returns the current position in this file, where the next write will - occur. - - - - - - The number of bytes in the file. - - - Writes bytes through to a primary IndexOutput, computing - checksum as it goes. Note that you cannot use seek(). - - - - Writes bytes through to a primary IndexOutput, computing - checksum. Note that you cannot use seek(). - - - - Starts but does not complete the commit of this file (= - writing of the final checksum at the end). After this - is called must call and the - to complete the commit. - - - - See - - - Expert: A Directory instance that switches files between - two other Directory instances. -

Files with the specified extensions are placed in the - primary directory; others are placed in the secondary - directory. The provided Set must not change once passed - to this class, and must allow multiple threads to call - contains at once.

- -

NOTE: this API is new and experimental and is - subject to suddenly change in the next release. -

-
- - Utility method to return a file's extension. - - - Return the primary directory - - - Return the secondary directory - - - - Base class for Directory implementations that store index - files in the file system. There are currently three core - subclasses: - - - - is a straightforward - implementation using java.io.RandomAccessFile. - However, it has poor concurrent performance - (multiple threads will bottleneck) as it - synchronizes when multiple threads read from the - same file. - - uses java.nio's - FileChannel's positional io when reading to avoid - synchronization when reading from the same file. - Unfortunately, due to a Windows-only Sun - JRE bug this is a poor choice for Windows, but - on all other platforms this is the preferred - choice. Applications using or - Future#cancel(boolean) (on Java 1.5) should use - instead. See java doc - for details. - - - - uses memory-mapped IO when - reading. This is a good choice if you have plenty - of virtual memory relative to your index size, eg - if you are running on a 64 bit JRE, or you are - running on a 32 bit JRE but your index sizes are - small enough to fit into the virtual memory space. - Java has currently the limitation of not being able to - unmap files from user code. The files are unmapped, when GC - releases the byte buffers. Due to - - this bug in Sun's JRE, MMapDirectory's - is unable to close the underlying OS file handle. Only when - GC finally collects the underlying objects, which could be - quite some time later, will the file handle be closed. - This will consume additional transient disk usage: on Windows, - attempts to delete or overwrite the files will result in an - exception; on other platforms, which typically have a "delete on - last close" semantics, while such operations will succeed, the bytes - are still consuming space on disk. For many applications this - limitation is not a problem (e.g. if you have plenty of disk space, - and you don't rely on overwriting files on Windows) but it's still - an important limitation to be aware of. This class supplies a - (possibly dangerous) workaround mentioned in the bug report, - which may fail on non-Sun JVMs. - - Applications using or - Future#cancel(boolean) (on Java 1.5) should use - instead. See - java doc for details. - - - Unfortunately, because of system peculiarities, there is - no single overall best implementation. Therefore, we've - added the method, to allow Lucene to choose - the best FSDirectory implementation given your - environment, and the known limitations of each - implementation. For users who have no reason to prefer a - specific implementation, it's best to simply use - . For all others, you should instantiate the - desired implementation directly. - -

The locking implementation is by default - , but can be changed by - passing in a custom instance. -

-
- - Initializes the directory to create a new file with the given name. - This method should be used in . - - - - The underlying filesystem directory - - - Create a new FSDirectory for the named location (ctor for subclasses). - the path of the directory - - the lock factory to use, or null for the default - (); - - IOException - - - Creates an FSDirectory instance, trying to pick the - best implementation given the current environment. - The directory returned uses the . - -

Currently this returns as - NIOFSDirectory is currently not supported. - -

NOTE: this method may suddenly change which - implementation is returned from release to release, in - the event that higher performance defaults become - possible; if the precise implementation is important to - your application, please instantiate it directly, - instead. On 64 bit systems, it may also good to - return , but this is disabled - because of officially missing unmap support in Java. - For optimal performance you should consider using - this implementation on 64 bit JVMs. - -

See above -

-
- - Creates an FSDirectory instance, trying to pick the - best implementation given the current environment. - The directory returned uses the . - -

Currently this returns as - NIOFSDirectory is currently not supported. - -

NOTE: this method may suddenly change which - implementation is returned from release to release, in - the event that higher performance defaults become - possible; if the precise implementation is important to - your application, please instantiate it directly, - instead. On 64 bit systems, it may also good to - return , but this is disabled - because of officially missing unmap support in Java. - For optimal performance you should consider using - this implementation on 64 bit JVMs. - -

See above -

-
- - Just like , but allows you to - also specify a custom . - - - - Lists all files (not subdirectories) in the - directory. This method never returns null (throws - instead). - - - NoSuchDirectoryException if the directory - does not exist, or does exist but is not a - directory. - - IOException if list() returns null - - - Lists all files (not subdirectories) in the - directory. - - - - - - Returns true iff a file with the given name exists. - - - Returns the time the named file was last modified. - - - Returns the time the named file was last modified. - - - Set the modified time of an existing file to now. - - - Returns the length in bytes of a file in the directory. - - - Removes an existing file in the directory. - - - So we can do some byte-to-hexchar conversion below - - - For debug output. - - - Default read chunk size. This is a conditional - default: on 32bit JVMs, it defaults to 100 MB. On - 64bit JVMs, it's Integer.MAX_VALUE. - - - - - - The maximum number of bytes to read at once from the - underlying file during . - - - - - - Base class for file system based locking implementation. - - -

Base class for Locking implementation. uses - instances of this class to implement locking.

- -

Note that there are some useful tools to verify that - your LockFactory is working correctly: - , , - .

- -

- - - - - - -
- - Return a new Lock instance identified by lockName. - name of the lock to be created. - - - - Attempt to clear (forcefully unlock and remove) the - specified lock. Only call this at a time when you are - certain this lock is no longer in use. - - name of the lock to be cleared. - - - - Gets or sets the prefix in use for all locks created in this - LockFactory. This is normally called once, when a - Directory gets this LockFactory instance. However, you - can also call this (after this instance is assigned to - a Directory) to override the prefix in use. This - is helpful if you're running Lucene on machines that - have different mount points for the same shared - directory. - - - - Directory for the lock files. - - - Gets the lock directory. - Subclasses can use this to set the lock directory. - This method can be only called - once to initialize the lock directory. It is used by - to set the lock directory to itsself. - Subclasses can also use this method to set the directory - in the constructor. - - - - - An interprocess mutex lock. -

Typical use might look like: - new Lock.With(directory.makeLock("my.lock")) { - public Object doBody() { - ... code to execute while locked ... - } - }.run(); - -

- -
- - Pass this value to to try - forever to obtain the lock. - - - - How long waits, in milliseconds, - in between attempts to acquire the lock. - - - - Attempts to obtain exclusive access and immediately return - upon success or failure. - - true iff exclusive access is obtained - - - - If a lock obtain called, this failureReason may be set - with the "root cause" Exception as to why the lock was - not obtained. - - - - Attempts to obtain an exclusive lock within amount of - time given. Polls once per - (currently 1000) milliseconds until lockWaitTimeout is - passed. - - length of time to wait in - milliseconds or - to retry forever - - true if lock was obtained - - LockObtainFailedException if lock wait times out - IllegalArgumentException if lockWaitTimeout is - out of bounds - - IOException if obtain() throws IOException - - - Releases exclusive access. - - - Returns true if the resource is currently locked. Note that one must - still call before using the resource. - - - - Utility class for executing code with exclusive access. - - - Constructs an executor that will grab the named lock. - - - Code to execute with exclusive access. - - - Calls while lock is obtained. Blocks if lock - cannot be obtained immediately. Retries to obtain lock once per second - until it is obtained, or until it has tried ten times. Lock is released when - exits. - - LockObtainFailedException if lock could not - be obtained - - IOException if throws IOException - - - This exception is thrown when the write.lock - could not be acquired. This - happens when a writer tries to open an index - that another writer already has open. - - - - - - This exception is thrown when the write.lock - could not be released. - - - - - - Simple standalone tool that forever acquires & releases a - lock using a specific LockFactory. Run without any args - to see usage. - - - - - - - - - Simple standalone server that must be running when you - use . This server simply - verifies at most one process holds the lock at a time. - Run without any args to see usage. - - - - - - - - - File-based implementation that uses - mmap for reading, and - for writing. - -

NOTE: memory mapping uses up a portion of the - virtual memory address space in your process equal to the - size of the file being mapped. Before using this class, - be sure your have plenty of virtual address space, e.g. by - using a 64 bit JRE, or a 32 bit JRE with indexes that are - guaranteed to fit within the address space. - On 32 bit platforms also consult - if you have problems with mmap failing because of fragmented - address space. If you get an OutOfMemoryException, it is recommened - to reduce the chunk size, until it works. - -

Due to - this bug in Sun's JRE, MMapDirectory's - is unable to close the underlying OS file handle. Only when GC - finally collects the underlying objects, which could be quite - some time later, will the file handle be closed. - -

This will consume additional transient disk usage: on Windows, - attempts to delete or overwrite the files will result in an - exception; on other platforms, which typically have a "delete on - last close" semantics, while such operations will succeed, the bytes - are still consuming space on disk. For many applications this - limitation is not a problem (e.g. if you have plenty of disk space, - and you don't rely on overwriting files on Windows) but it's still - an important limitation to be aware of. - -

This class supplies the workaround mentioned in the bug report - (disabled by default, see ), which may fail on - non-Sun JVMs. It forcefully unmaps the buffer on close by using - an undocumented internal cleanup functionality. - is true, if the workaround - can be enabled (with no guarantees). -

-
- - Create a new MMapDirectory for the named location. - - - the path of the directory - - the lock factory to use, or null for the default. - - IOException - - - Create a new MMapDirectory for the named location and the default lock factory. - - - the path of the directory - - IOException - - - true, if this platform supports unmapping mmaped files. - - - Try to unmap the buffer, this method silently fails if no support - for that in the JVM. On Windows, this leads to the fact, - that mmapped files cannot be modified or deleted. - - - - Creates an IndexInput for the file with the given name. - - - Creates an IndexOutput for the file with the given name. - - - Enables or disables the workaround for unmapping the buffers - from address space after closing , that is - mentioned in the bug report. This hack may fail on non-Sun JVMs. - It forcefully unmaps the buffer on close by using - an undocumented internal cleanup functionality. -

NOTE: Enabling this is completely unsupported - by Java and may lead to JVM crashs if IndexInput - is closed while another thread is still accessing it (SIGSEGV). -

- IllegalArgumentException if - is false and the workaround cannot be enabled. - -
- - Gets or sets the maximum chunk size (default is for - 64 bit JVMs and 256 MiBytes for 32 bit JVMs) used for memory mapping. - Especially on 32 bit platform, the address space can be very fragmented, - so large index files cannot be mapped. - Using a lower chunk size makes the directory implementation a little - bit slower (as the correct chunk must be resolved on each seek) - but the chance is higher that mmap does not fail. On 64 bit - Java platforms, this parameter should always be , - as the adress space is big enough. - - - -

Implements using native OS file - locks. Note that because this LockFactory relies on - java.nio.* APIs for locking, any problems with those APIs - will cause locking to fail. Specifically, on certain NFS - environments the java.nio.* locks will fail (the lock can - incorrectly be double acquired) whereas - worked perfectly in those same - environments. For NFS based access to an index, it's - recommended that you try - first and work around the one limitation that a lock file - could be left when the JVM exits abnormally.

- -

The primary benefit of is - that lock files will be properly removed (by the OS) if - the JVM has an abnormal exit.

- -

Note that, unlike , the existence of - leftover lock files in the filesystem on exiting the JVM - is fine because the OS will free the locks held against - these files even though the files still remain.

- -

If you suspect that this or any other LockFactory is - not working properly in your environment, you can easily - test it by using , - and .

- -

- - -
- - Create a NativeFSLockFactory instance, with null (unset) - lock directory. When you pass this factory to a - subclass, the lock directory is automatically set to the - directory itsself. Be sure to create one instance for each directory - your create! - - - - Create a NativeFSLockFactory instance, storing lock - files into the specified lockDirName: - - - where lock files are created. - - - - Create a NativeFSLockFactory instance, storing lock - files into the specified lockDir: - - - where lock files are created. - - - - - Not implemented. Waiting for volunteers. - - - - - Not implemented. Waiting for volunteers. - - - - Use this to disable locking entirely. - Only one instance of this lock is created. You should call - to get the instance. - - - - - - - This exception is thrown when you try to list a - non-existent directory. - - - - A memory-resident implementation. Locking - implementation is by default the - but can be changed with . - - - - Constructs an empty . - - - Creates a new RAMDirectory instance from a different - Directory implementation. This can be used to load - a disk-based index into memory. -

- This should be used only with indices that can fit into memory. -

- Note that the resulting RAMDirectory instance is fully - independent from the original Directory (it is a - complete copy). Any subsequent changes to the - original Directory will not be visible in the - RAMDirectory instance. - -

- a Directory value - - if an error occurs - -
- - Returns true iff the named file exists in this directory. - - - Returns the time the named file was last modified. - IOException if the file does not exist - - - Set the modified time of an existing file to now. - IOException if the file does not exist - - - Returns the length in bytes of a file in the directory. - IOException if the file does not exist - - - Return total size in bytes of all files in this - directory. This is currently quantized to - RAMOutputStream.BUFFER_SIZE. - - - - Removes an existing file in the directory. - IOException if the file does not exist - - - Creates a new, empty file in the directory with the given name. Returns a stream writing this file. - - - Returns a stream reading an existing file. - - - Closes the store to future operations, releasing associated memory. - - - A memory-resident implementation. - - - - - A memory-resident implementation. - For lucene internal use. - - - - Construct an empty output buffer. - - - Copy the current contents of this buffer to the named output. - - - Resets this to an empty buffer. - - - Returns byte usage of all buffers. - - - A straightforward implementation of - using java.io.RandomAccessFile. However, this class has - poor concurrent performance (multiple threads will - bottleneck) as it synchronizes when multiple threads - read from the same file. It's usually better to use - or instead. - - - - Create a new SimpleFSDirectory for the named location. - - - the path of the directory - - the lock factory to use, or null for the default. - - IOException - - - Create a new SimpleFSDirectory for the named location and the default lock factory. - - - the path of the directory - - IOException - - - Creates an IndexOutput for the file with the given name. - - - Creates an IndexInput for the file with the given name. - - - IndexInput methods - - - Method used for testing. Returns true if the underlying - file descriptor is valid. - - - - output methods: - - - Random-access methods - - -

Implements using - .

- -

NOTE: the javadocs - for File.createNewFile contain a vague - yet spooky warning about not using the API for file - locking. This warning was added due to this - bug, and in fact the only known problem with using - this API for locking is that the Lucene write lock may - not be released when the JVM exits abnormally.

-

When this happens, a - is hit when trying to create a writer, in which case you - need to explicitly clear the lock file first. You can - either manually remove the file, or use the - - API. But, first be certain that no writer is in fact - writing to the index otherwise you can easily corrupt - your index.

- -

If you suspect that this or any other LockFactory is - not working properly in your environment, you can easily - test it by using , - and .

- -

- - -
- - Create a SimpleFSLockFactory instance, with null (unset) - lock directory. When you pass this factory to a - subclass, the lock directory is automatically set to the - directory itsself. Be sure to create one instance for each directory - your create! - - - - Instantiate using the provided directory (as a File instance). - where lock files should be created. - - - - Instantiate using the provided directory name (String). - where lock files should be created. - - - - Implements for a single in-process instance, - meaning all locking will take place through this one instance. - Only use this when you are certain all - IndexReaders and IndexWriters for a given index are running - against a single shared in-process Directory instance. This is - currently the default locking for RAMDirectory. - - - - - - - A that wraps another - and verifies that each lock obtain/release - is "correct" (never results in two processes holding the - lock at the same time). It does this by contacting an - external server () to assert that - at most one process holds the lock at a time. To use - this, you should also run on the - host & port matching what you pass to the constructor. - - - - - - - - - should be a unique id across all clients - - the LockFactory that we are testing - - host or IP where - is running - - the port is - listening on - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A simple wrapper to allow for the use of the GeneralKeyedCollection. The - wrapper is required as there can be several keys for an object depending - on how many interfaces it implements. - - - - - This class provides supporting methods of java.util.BitSet - that are not present in System.Collections.BitArray. - - - - - Returns the next set bit at or after index, or -1 if no such bit exists. - - - the index of bit array at which to start checking - the next set bit or -1 - - - - Returns the next un-set bit at or after index, or -1 if no such bit exists. - - - the index of bit array at which to start checking - the next set bit or -1 - - - - Returns the number of bits set to true in this BitSet. - - The BitArray object. - The number of bits set to true in this BitSet. - - - - Mimics Java's Character class. - - - - - - - - - - - - - - - - - - - - - For Debuging purposes. - - - - - Support class used to handle Hashtable addition, which does a check - first to make sure the added item is unique in the hash. - - - - - Converts the specified collection to its string representation. - - The collection to convert to string. - A string representation of the specified collection. - - - - Compares two string arrays for equality. - - First string array list to compare - Second string array list to compare - true if the strings are equal in both arrays, false otherwise - - - - Sorts an IList collections - - The System.Collections.IList instance that will be sorted - The Comparator criteria, null to use natural comparator. - - - - Fills the array with an specific value from an specific index to an specific index. - - The array to be filled. - The first index to be filled. - The last index to be filled. - The value to fill the array with. - - - - Fills the array with an specific value. - - The array to be filled. - The value to fill the array with. - - - - Compares the entire members of one array whith the other one. - - The array to be compared. - The array to be compared with. - Returns true if the two specified arrays of Objects are equal - to one another. The two arrays are considered equal if both arrays - contain the same number of elements, and all corresponding pairs of - elements in the two arrays are equal. Two objects e1 and e2 are - considered equal if (e1==null ? e2==null : e1.equals(e2)). In other - words, the two arrays are equal if they contain the same elements in - the same order. Also, two array references are considered equal if - both are null. - - - - Summary description for TestSupportClass. - - - - - Compares two Term arrays for equality. - - First Term array to compare - Second Term array to compare - true if the Terms are equal in both arrays, false otherwise - - - - Contains conversion support elements such as classes, interfaces and static methods. - - - - - - - - - Represents a strongly typed list of objects that can be accessed by index. - Provides methods to search, sort, and manipulate lists. Also provides functionality - to compare lists against each other through an implementations of - . - The type of elements in the list. - - - Initializes a new instance of the - class that is empty and has the - default initial capacity. - - - Initializes a new instance of the - class that contains elements copied from the specified collection and has - sufficient capacity to accommodate the number of elements copied. - The collection whose elements are copied to the new list. - - - Initializes a new instance of the - class that is empty and has the specified initial capacity. - The number of elements that the new list can initially store. - - - Adds a range of objects represented by the - implementation. - The - implementation to add to this list. - - - Compares the counts of two - implementations. - This uses a trick in LINQ, sniffing types for implementations - of interfaces that might supply shortcuts when trying to make comparisons. - In this case, that is the and - interfaces, either of which can provide a count - which can be used in determining the equality of sequences (if they don't have - the same count, then they can't be equal). - The from the left hand side of the - comparison to check the count of. - The from the right hand side of the - comparison to check the count of. - Null if the result is indeterminate. This occurs when either - or doesn't implement or . - Otherwise, it will get the count from each and return true if they are equal, false otherwise. - - - Compares the contents of a - implementation to another one to determine equality. - Thinking of the implementation as - a string with any number of characters, the algorithm checks - each item in each list. If any item of the list is not equal (or - one list contains all the elements of another list), then that list - element is compared to the other list element to see which - list is greater. - The implementation - that is considered the left hand side. - The implementation - that is considered the right hand side. - True if the items are equal, false otherwise. - - - Compares this sequence to another - implementation, returning true if they are equal, false otherwise. - The other implementation - to compare against. - True if the sequence in - is the same as this one. - - - Compares this object for equality against other. - The other object to compare this object against. - True if this object and are equal, false - otherwise. - - - Gets the hash code for the list. - The hash code value. - - - Gets the hash code for the list. - The - implementation which will have all the contents hashed. - The hash code value. - - - Clones the . - This is a shallow clone. - A new shallow clone of this - . - - - - Represents the methods to support some operations over files. - - - - - Returns an array of abstract pathnames representing the files and directories of the specified path. - - The abstract pathname to list it childs. - An array of abstract pathnames childs of the path specified or null if the path is not a directory - - - - Returns a list of files in a give directory. - - The full path name to the directory. - - An array containing the files. - - - - Flushes the specified file stream. Ensures that all buffered - data is actually written to the file system. - - The file stream. - - - A collection of which can be - looked up by instances of . - The type of the items contains in this - collection. - The type of the keys that can be used to look - up the items. - - - Creates a new instance of the - class. - The which will convert - instances of to - when the override of is called. - - - The which will convert - instances of to - when the override of is called. - - - Converts an item that is added to the collection to - a key. - The instance of - to convert into an instance of . - The instance of which is the - key for this item. - - - Determines if a key for an item exists in this - collection. - The instance of - to see if it exists in this collection. - True if the key exists in the collection, false otherwise. - - - - A C# emulation of the Java Hashmap - - A is a close equivalent to the Java - Hashmap. One difference java implementation of the class is that - the Hashmap supports both null keys and values, where the C# Dictionary - only supports null values not keys. Also, V Get(TKey) - method in Java returns null if the key doesn't exist, instead of throwing - an exception. This implementation doesn't throw an exception when a key - doesn't exist, it will return null. This class is slower than using a - , because of extra checks that have to be - done on each access, to check for null. - - - NOTE: This class works best with nullable types. default(T) is returned - when a key doesn't exist in the collection (this being similar to how Java returns - null). Therefore, if the expected behavior of the java code is to execute code - based on if the key exists, when the key is an integer type, it will return 0 instead of null. - - - Consider also implementing IDictionary, IEnumerable, and ICollection - like does, so HashMap can be - used in substituted in place for the same interfaces it implements. - - - The type of keys in the dictionary - The type of values in the dictionary - - - - Wraps a dictionary and adds the value - represented by the null key - - - - - Wraps a dictionary's collection, adding in a - null key. - - - - - A simple class for number conversions. - - - - - Min radix value. - - - - - Max radix value. - - - - - Converts a number to System.String. - - - - - - - Converts a number to System.String. - - - - - - - Converts a number to System.String in the specified radix. - - A number to be converted. - A radix. - A System.String representation of the number in the specified redix. - - - - Parses a number in the specified radix. - - An input System.String. - A radix. - The parsed number in the specified radix. - - - - Performs an unsigned bitwise right shift with the specified number - - Number to operate on - Ammount of bits to shift - The resulting number from the shift operation - - - - Performs an unsigned bitwise right shift with the specified number - - Number to operate on - Ammount of bits to shift - The resulting number from the shift operation - - - - Returns the index of the first bit that is set to true that occurs - on or after the specified starting index. If no such bit exists - then -1 is returned. - - The BitArray object. - The index to start checking from (inclusive). - The index of the next set bit. - - - - Converts a System.String number to long. - - - - - - - Provides platform infos. - - - - - Whether we run under a Unix platform. - - - - - Whether we run under a supported Windows platform. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copies an array of chars obtained from a String into a specified array of chars - - The String to get the chars from - Position of the String to start getting the chars - Position of the String to end getting the chars - Array to return the chars - Position of the destination array of chars to start storing the chars - An array of chars - - - - Abstract base class that provides a synchronization interface - for derived lock types - - - - - A ThreadLock class that actually does no locking - Used in ParallelMultiSearcher/MultiSearcher - - - - - Wrapper class for the Monitor Enter/Exit methods - using the interface - - - - - A weak reference wrapper for the hashtable keys. Whenever a key\value pair - is added to the hashtable, the key is wrapped using a WeakKey. WeakKey saves the - value of the original object hashcode for fast comparison. - - - - Methods for manipulating arrays. - - - Parses the string argument as if it was an int value and returns the - result. Throws NumberFormatException if the string does not represent an - int quantity. - - - a string representation of an int quantity. - - int the value represented by the argument - - NumberFormatException if the argument could not be parsed as an int quantity. - - - Parses a char array into an int. - the character array - - The offset into the array - - The length - - the int - - NumberFormatException if it can't parse - - - Parses the string argument as if it was an int value and returns the - result. Throws NumberFormatException if the string does not represent an - int quantity. The second argument specifies the radix to use when parsing - the value. - - - a string representation of an int quantity. - - - - the base to use for conversion. - - int the value represented by the argument - - NumberFormatException if the argument could not be parsed as an int quantity. - - - Returns hash of chars in range start (inclusive) to - end (inclusive) - - - - Returns hash of chars in range start (inclusive) to - end (inclusive) - - - - An average, best guess, MemoryModel that should work okay on most systems. - - - - - Returns primitive memory sizes for estimating RAM usage. - - - - - a primitive Class - bool, byte, char, short, long, float, - short, double, int - - the size in bytes of given primitive Class - - - - size of array beyond contents - - - Class size overhead - - - size of reference - - - A variety of high efficiencly bit twiddling routines. - - - $Id$ - - - - Returns the number of bits set in the long - - - Returns the number of set bits in an array of longs. - - - Returns the popcount or cardinality of the two sets after an intersection. - Neither array is modified. - - - - Returns the popcount or cardinality of the union of two sets. - Neither array is modified. - - - - Returns the popcount or cardinality of A & ~B - Neither array is modified. - - - - table of number of trailing zeros in a byte - - - Returns number of trailing zeros in a 64 bit long value. - - - Returns number of trailing zeros in a 32 bit int value. - - - returns 0 based index of first set bit - (only works for x!=0) -
This is an alternate implementation of ntz() -
-
- - returns 0 based index of first set bit -
This is an alternate implementation of ntz() -
-
- - returns true if v is a power of two or zero - - - returns true if v is a power of two or zero - - - returns the next highest power of two, or the current value if it's already a power of two or zero - - - returns the next highest power of two, or the current value if it's already a power of two or zero - - - Optimized implementation of a vector of bits. This is more-or-less like - java.util.BitSet, but also includes the following: - - a count() method, which efficiently computes the number of one bits; - optimized read from and write to disk; - inlinable get() method; - store and load, as bit set or d-gaps, depending on sparseness; - - - - - Constructs a vector capable of holding n bits. - - - Sets the value of bit to one. - - - Sets the value of bit to true, and - returns true if bit was already set - - - - Sets the value of bit to zero. - - - Returns true if bit is one and - false if it is zero. - - - - Returns the number of bits in this vector. This is also one greater than - the number of the largest valid bit number. - - - - Returns the total number of one bits in this vector. This is efficiently - computed and cached, so that, if the vector is not changed, no - recomputation is done for repeated calls. - - - - - For testing - - - - Writes this vector to the file name in Directory - d, in a format that can be read by the constructor - . - - - - Write as a bit set - - - Write as a d-gaps list - - - Indicates if the bit vector is sparse and should be saved as a d-gaps list, or dense, and should be saved as a bit set. - - - Constructs a bit vector from the file name in Directory - d, as written by the method. - - - - Read as a bit set - - - read as a d-gaps list - - - Retrieve a subset of this BitVector. - - - starting index, inclusive - - ending index, exclusive - - subset - - - - Some useful constants. - - - The value of System.getProperty("java.version"). * - - - True iff this is Java version 1.1. - - - True iff this is Java version 1.2. - - - True iff this is Java version 1.3. - - - The value of System.getProperty("os.name"). * - - - True iff running on Linux. - - - True iff running on Windows. - - - True iff running on SunOS. - - - Simple DocIdSet and DocIdSetIterator backed by a BitSet - - - This DocIdSet implementation is cacheable. - - - Returns the underlying BitSet. - - - Provides methods for sanity checking that entries in the FieldCache - are not wasteful or inconsistent. -

-

- Lucene 2.9 Introduced numerous enhancements into how the FieldCache - is used by the low levels of Lucene searching (for Sorting and - ValueSourceQueries) to improve both the speed for Sorting, as well - as reopening of IndexReaders. But these changes have shifted the - usage of FieldCache from "top level" IndexReaders (frequently a - MultiReader or DirectoryReader) down to the leaf level SegmentReaders. - As a result, existing applications that directly access the FieldCache - may find RAM usage increase significantly when upgrading to 2.9 or - Later. This class provides an API for these applications (or their - Unit tests) to check at run time if the FieldCache contains "insane" - usages of the FieldCache. -

-

- EXPERIMENTAL API: This API is considered extremely advanced and - experimental. It may be removed or altered w/o warning in future releases - of Lucene. -

-

- - - - - - -
- - If set, will be used to estimate size for all CacheEntry objects - dealt with. - - - - Quick and dirty convenience method - - - - - Quick and dirty convenience method that instantiates an instance with - "good defaults" and uses it to test the CacheEntrys - - - - - - Tests a CacheEntry[] for indication of "insane" cache usage. -

- NOTE:FieldCache CreationPlaceholder objects are ignored. - (:TODO: is this a bad idea? are we masking a real problem?) -

-

-
- - Internal helper method used by check that iterates over - valMismatchKeys and generates a Collection of Insanity - instances accordingly. The MapOfSets are used to populate - the Insantiy objects. - - - - - - Internal helper method used by check that iterates over - the keys of readerFieldToValIds and generates a Collection - of Insanity instances whenever two (or more) ReaderField instances are - found that have an ancestery relationships. - - - - - - - Checks if the seed is an IndexReader, and if so will walk - the hierarchy of subReaders building up a list of the objects - returned by obj.getFieldCacheKey() - - - - Simple pair object for using "readerKey + fieldName" a Map key - - - Simple container for a collection of related CacheEntry objects that - in conjunction with eachother represent some "insane" usage of the - FieldCache. - - - - CacheEntry objects which suggest a problem - - - Multi-Line representation of this Insanity object, starting with - the Type and Msg, followed by each CacheEntry.toString() on it's - own line prefaced by a tab character - - - - Type of insane behavior this object represents - - - Description of hte insane behavior - - - An Enumaration of the differnet types of "insane" behavior that - may be detected in a FieldCache. - - - - - - - - - - - Indicates an overlap in cache usage on a given field - in sub/super readers. - - - -

- Indicates entries have the same reader+fieldname but - different cached values. This can happen if different datatypes, - or parsers are used -- and while it's not necessarily a bug - it's typically an indication of a possible problem. -

-

- PNOTE: Only the reader, fieldname, and cached value are actually - tested -- if two cache entries have different parsers or datatypes but - the cached values are the same Object (== not just equal()) this method - does not consider that a red flag. This allows for subtle variations - in the way a Parser is specified (null vs DEFAULT_LONG_PARSER, etc...) -

-

-
- - Indicates an expected bit of "insanity". This may be useful for - clients that wish to preserve/log information about insane usage - but indicate that it was expected. - - - - - A class that mimics Java's IdentityHashMap in that it determines - object equality solely on ReferenceEquals rather than (possibly overloaded) - object.Equals(). - - NOTE: Java's documentation on IdentityHashMap says that it also uses - ReferenceEquals on it's Values as well. This class does not follow this behavior - - The type of the keys in the dictionary - The type of the values in the dictionary - - - Provides support for converting byte sequences to Strings and back again. - The resulting Strings preserve the original byte sequences' sort order. - - The Strings are constructed using a Base 8000h encoding of the original - binary data - each char of an encoded String represents a 15-bit chunk - from the byte sequence. Base 8000h was chosen because it allows for all - lower 15 bits of char to be used without restriction; the surrogate range - [U+D8000-U+DFFF] does not represent valid chars, and would require - complicated handling to avoid them and allow use of char's high bit. - - Although unset bits are used as padding in the final char, the original - byte sequence could contain trailing bytes with no set bits (null bytes): - padding is indistinguishable from valid information. To overcome this - problem, a char is appended, indicating the number of encoded bytes in the - final content char. - - This class's operations are defined over CharBuffers and ByteBuffers, to - allow for wrapped arrays to be reused, reducing memory allocation costs for - repeated operations. Note that this class calls array() and arrayOffset() - on the CharBuffers and ByteBuffers it uses, so only wrapped arrays may be - used. This class interprets the arrayOffset() and limit() values returned by - its input buffers as beginning and end+1 positions on the wrapped array, - resprectively; similarly, on the output buffer, arrayOffset() is the first - position written to, and limit() is set to one past the final output array - position. - - - - Returns the number of chars required to encode the given byte sequence. - - - The byte sequence to be encoded. Must be backed by an array. - - The number of chars required to encode the given byte sequence - - IllegalArgumentException If the given ByteBuffer is not backed by an array - - - Returns the number of bytes required to decode the given char sequence. - - - The char sequence to be encoded. Must be backed by an array. - - The number of bytes required to decode the given char sequence - - IllegalArgumentException If the given CharBuffer is not backed by an array - - - Encodes the input byte sequence into the output char sequence. Before - calling this method, ensure that the output CharBuffer has sufficient - capacity by calling . - - - The byte sequence to encode - - Where the char sequence encoding result will go. The limit - is set to one past the position of the final char. - - IllegalArgumentException If either the input or the output buffer - is not backed by an array - - - - Decodes the input char sequence into the output byte sequence. Before - calling this method, ensure that the output ByteBuffer has sufficient - capacity by calling . - - - The char sequence to decode - - Where the byte sequence decoding result will go. The limit - is set to one past the position of the final char. - - IllegalArgumentException If either the input or the output buffer - is not backed by an array - - - - Decodes the given char sequence, which must have been encoded by - or - . - - - The char sequence to decode - - A byte sequence containing the decoding result. The limit - is set to one past the position of the final char. - - IllegalArgumentException If the input buffer is not backed by an - array - - - - Encodes the input byte sequence. - - - The byte sequence to encode - - A char sequence containing the encoding result. The limit is set - to one past the position of the final char. - - IllegalArgumentException If the input buffer is not backed by an - array - - - - Helper class for keeping Listss of Objects associated with keys. WARNING: THIS CLASS IS NOT THREAD SAFE - - - the backing store for this object - - - - Adds val to the Set associated with key in the Map. If key is not - already in the map, a new Set will first be created. - - the size of the Set associated with key once val is added to it. - - - - Adds multiple vals to the Set associated with key in the Map. - If key is not - already in the map, a new Set will first be created. - - the size of the Set associated with key once val is added to it. - - - - direct access to the map backing this object. - - - An "open" BitSet implementation that allows direct access to the array of words - storing the bits. -

- Unlike java.util.bitset, the fact that bits are packed into an array of longs - is part of the interface. This allows efficient implementation of other algorithms - by someone other than the author. It also allows one to efficiently implement - alternate serialization or interchange formats. -

- OpenBitSet is faster than java.util.BitSet in most operations - and *much* faster at calculating cardinality of sets and results of set operations. - It can also handle sets of larger cardinality (up to 64 * 2**32-1) -

- The goals of OpenBitSet are the fastest implementation possible, and - maximum code reuse. Extra safety and encapsulation - may always be built on top, but if that's built in, the cost can never be removed (and - hence people re-implement their own version in order to get better performance). - If you want a "safe", totally encapsulated (and slower and limited) BitSet - class, use java.util.BitSet. -

-

Performance Results

- - Test system: Pentium 4, Sun Java 1.5_06 -server -Xbatch -Xmx64M -
BitSet size = 1,000,000 -
Results are java.util.BitSet time divided by OpenBitSet time. - - - - - - - - - - -
cardinality intersect_count union nextSetBit get iterator
50% full 3.36 3.96 1.44 1.46 1.99 1.58
1% full 3.31 3.90   1.04   0.99
-
- Test system: AMD Opteron, 64 bit linux, Sun Java 1.5_06 -server -Xbatch -Xmx64M -
BitSet size = 1,000,000 -
Results are java.util.BitSet time divided by OpenBitSet time. - - - - - - - - - - -
cardinality intersect_count union nextSetBit get iterator
50% full 2.50 3.50 1.00 1.03 1.12 1.25
1% full 2.51 3.49   1.00   1.02
-
- $Id$ - -
- - Constructs an OpenBitSet large enough to hold numBits. - - - - - - - Constructs an OpenBitSet from an existing long[]. -
- The first 64 bits are in long[0], - with bit index 0 at the least significant bit, and bit index 63 at the most significant. - Given a bit index, - the word containing it is long[index/64], and it is at bit number index%64 within that word. -

- numWords are the number of elements in the array that contain - set bits (non-zero longs). - numWords should be <= bits.length, and - any existing words in the array at position >= numWords should be zero. - -

-
- - Returns the current capacity in bits (1 greater than the index of the last bit) - - - Returns the current capacity of this set. Included for - compatibility. This is *not* equal to - - - - Returns true if there are no set bits - - - Returns true or false for the specified bit index. - - - Returns true or false for the specified bit index. - The index should be less than the OpenBitSet size - - - - Returns true or false for the specified bit index - - - Returns true or false for the specified bit index. - The index should be less than the OpenBitSet size. - - - - returns 1 if the bit is set, 0 if not. - The index should be less than the OpenBitSet size - - - - sets a bit, expanding the set size if necessary - - - Sets the bit at the specified index. - The index should be less than the OpenBitSet size. - - - - Sets the bit at the specified index. - The index should be less than the OpenBitSet size. - - - - Sets a range of bits, expanding the set size if necessary - - - lower index - - one-past the last bit to set - - - - clears a bit. - The index should be less than the OpenBitSet size. - - - - clears a bit. - The index should be less than the OpenBitSet size. - - - - clears a bit, allowing access beyond the current set size without changing the size. - - - Clears a range of bits. Clearing past the end does not change the size of the set. - - - lower index - - one-past the last bit to clear - - - - Clears a range of bits. Clearing past the end does not change the size of the set. - - - lower index - - one-past the last bit to clear - - - - Sets a bit and returns the previous value. - The index should be less than the OpenBitSet size. - - - - Sets a bit and returns the previous value. - The index should be less than the OpenBitSet size. - - - - flips a bit. - The index should be less than the OpenBitSet size. - - - - flips a bit. - The index should be less than the OpenBitSet size. - - - - flips a bit, expanding the set size if necessary - - - flips a bit and returns the resulting bit value. - The index should be less than the OpenBitSet size. - - - - flips a bit and returns the resulting bit value. - The index should be less than the OpenBitSet size. - - - - Flips a range of bits, expanding the set size if necessary - - - lower index - - one-past the last bit to flip - - - - the number of set bits - - - - Returns the popcount or cardinality of the intersection of the two sets. - Neither set is modified. - - - - Returns the popcount or cardinality of the union of the two sets. - Neither set is modified. - - - - Returns the popcount or cardinality of "a and not b" - or "intersection(a, not(b))". - Neither set is modified. - - - - Returns the popcount or cardinality of the exclusive-or of the two sets. - Neither set is modified. - - - - Returns the index of the first set bit starting at the index specified. - -1 is returned if there are no more set bits. - - - - Returns the index of the first set bit starting at the index specified. - -1 is returned if there are no more set bits. - - - - this = this AND other - - - this = this OR other - - - Remove all elements set in other. this = this AND_NOT other - - - this = this XOR other - - - returns true if the sets have any elements in common - - - Expand the long[] with the size given as a number of words (64 bit longs). - getNumWords() is unchanged by this call. - - - - Ensure that the long[] is big enough to hold numBits, expanding it if necessary. - getNumWords() is unchanged by this call. - - - - Lowers numWords, the number of words in use, - by checking for trailing zero words. - - - - returns the number of 64 bit words it would take to hold numBits - - - returns true if both sets have the same bits set - - - This DocIdSet implementation is cacheable. - - - Expert: Gets or sets the long[] storing the bits - - - Expert: gets or sets the number of longs in the array that are in use - - - Construct an OpenBitSetDISI with its bits set - from the doc ids of the given DocIdSetIterator. - Also give a maximum size one larger than the largest doc id for which a - bit may ever be set on this OpenBitSetDISI. - - - - Construct an OpenBitSetDISI with no bits set, and a given maximum size - one larger than the largest doc id for which a bit may ever be set - on this OpenBitSetDISI. - - - - Perform an inplace OR with the doc ids from a given DocIdSetIterator, - setting the bit for each such doc id. - These doc ids should be smaller than the maximum size passed to the - constructor. - - - - Perform an inplace AND with the doc ids from a given DocIdSetIterator, - leaving only the bits set for which the doc ids are in common. - These doc ids should be smaller than the maximum size passed to the - constructor. - - - - Perform an inplace NOT with the doc ids from a given DocIdSetIterator, - clearing all the bits for each such doc id. - These doc ids should be smaller than the maximum size passed to the - constructor. - - - - Perform an inplace XOR with the doc ids from a given DocIdSetIterator, - flipping all the bits for each such doc id. - These doc ids should be smaller than the maximum size passed to the - constructor. - - - - An iterator to iterate over set bits in an OpenBitSet. - This is faster than nextSetBit() for iterating over the complete set of bits, - especially when the density of the bits set is high. - - - $Id$ - - - - ** the python code that generated bitlist - def bits2int(val): - arr=0 - for shift in range(8,0,-1): - if val & 0x80: - arr = (arr << 4) | shift - val = val << 1 - return arr - def int_table(): - tbl = [ hex(bits2int(val)).strip('L') for val in range(256) ] - return ','.join(tbl) - **** - - - - Base class for cache implementations. - - - Returns a thread-safe cache backed by the specified cache. - In order to guarantee thread-safety, all access to the backed cache must - be accomplished through the returned cache. - - - - Called by . This method - returns a instance that wraps - this instance by default and can be overridden to return - e. g. subclasses of or this - in case this cache is already synchronized. - - - - Puts a (key, value)-pair into the cache. - - - Returns the value for the given key. - - - Returns whether the given key is in this cache. - - - Closes the cache. - - - Simple Cache wrapper that synchronizes all - calls that access the cache. - - - - Simple cache implementation that uses a HashMap to store (key, value) pairs. - This cache is not synchronized, use - if needed. - - - - Returns a Set containing all keys in this cache. - - - - The maximum number of items to cache. - - - - - The list to efficiently maintain the LRU state. - - - - - The dictionary to hash into any location in the list. - - - - - The node instance to use/re-use when adding an item to the cache. - - - - - Container to hold the key and value to aid in removal from - the dictionary when an item is removed from cache. - - - - Estimates the size of a given Object using a given MemoryModel for primitive - size information. - - Resource Usage: - - Internally uses a Map to temporally hold a reference to every - object seen. - - If checkIntered, all Strings checked will be interned, but those - that were not already interned will be released for GC when the - estimate is complete. - - - - Constructs this object with an AverageGuessMemoryModel and - checkInterned = true. - - - - check if Strings are interned and don't add to size - if they are. Defaults to true but if you know the objects you are checking - won't likely contain many interned Strings, it will be faster to turn off - intern checking. - - - - MemoryModel to use for primitive object sizes. - - - - MemoryModel to use for primitive object sizes. - - check if Strings are interned and don't add to size - if they are. Defaults to true but if you know the objects you are checking - won't likely contain many interned Strings, it will be faster to turn off - intern checking. - - - - Return good default units based on byte size. - - - - Common util methods for dealing with s. - - - - Gathers sub-readers from reader into a List. - - - - - Returns sub IndexReader that contains the given document id. - - - id of document - - parent reader - - sub reader of parent which contains the specified doc id - - - - Returns sub-reader subIndex from reader. - - - parent reader - - index of desired sub reader - - the subreader at subINdex - - - - Returns index of the searcher/reader for document n in the - array used to construct this searcher/reader. - - - - A ScorerDocQueue maintains a partial ordering of its Scorers such that the - least Scorer can always be found in constant time. Put()'s and pop()'s - require log(size) time. The ordering is by Scorer.doc(). - - - - Create a ScorerDocQueue with a maximum size. - - - Adds a Scorer to a ScorerDocQueue in log(size) time. - If one tries to add more Scorers than maxSize - a RuntimeException (ArrayIndexOutOfBound) is thrown. - - - - Adds a Scorer to the ScorerDocQueue in log(size) time if either - the ScorerDocQueue is not full, or not lessThan(scorer, top()). - - - - true if scorer is added, false otherwise. - - - - Returns the least Scorer of the ScorerDocQueue in constant time. - Should not be used when the queue is empty. - - - - Returns document number of the least Scorer of the ScorerDocQueue - in constant time. - Should not be used when the queue is empty. - - - - Removes and returns the least scorer of the ScorerDocQueue in log(size) - time. - Should not be used when the queue is empty. - - - - Removes the least scorer of the ScorerDocQueue in log(size) time. - Should not be used when the queue is empty. - - - - Should be called when the scorer at top changes doc() value. - Still log(n) worst case, but it's at least twice as fast to - { pq.top().change(); pq.adjustTop(); } - instead of - { o = pq.pop(); o.change(); pq.push(o); } - - - - - Returns the number of scorers currently stored in the ScorerDocQueue. - - - Removes all entries from the ScorerDocQueue. - - - Simple lockless and memory barrier free String intern cache that is guaranteed - to return the same String instance as String.intern() does. - - - - Subclasses of StringInterner are required to - return the same single String object for all equal strings. - Depending on the implementation, this may not be - the same object returned as String.intern(). - - This StringInterner base class simply delegates to String.intern(). - - - - Returns a single object instance for each equal string. - - - Returns a single object instance for each equal string. - - - Size of the hash table, should be a power of two. - - Maximum length of each bucket, after which the oldest item inserted is dropped. - - - - Floating point numbers smaller than 32 bits. - - - $Id$ - - - - Converts a 32 bit float to an 8 bit float. -
Values less than zero are all mapped to zero. -
Values are truncated (rounded down) to the nearest 8 bit value. -
Values between zero and the smallest representable value - are rounded up. - -
- the 32 bit float to be converted to an 8 bit float (byte) - - the number of mantissa bits to use in the byte, with the remainder to be used in the exponent - - the zero-point in the range of exponent values - - the 8 bit float representation - -
- - Converts an 8 bit float to a 32 bit float. - - - floatToByte(b, mantissaBits=3, zeroExponent=15) -
smallest non-zero value = 5.820766E-10 -
largest value = 7.5161928E9 -
epsilon = 0.125 -
-
- - byteToFloat(b, mantissaBits=3, zeroExponent=15) - - - floatToByte(b, mantissaBits=5, zeroExponent=2) -
smallest nonzero value = 0.033203125 -
largest value = 1984.0 -
epsilon = 0.03125 -
-
- - byteToFloat(b, mantissaBits=5, zeroExponent=2) - - - Stores and iterate on sorted integers in compressed form in RAM.
- The code for compressing the differences between ascending integers was - borrowed from and - .

- NOTE: this class assumes the stored integers are doc Ids (hence why it - extends ). Therefore its assumes - can be used as sentinel. If you intent to use - this value, then make sure it's not used during search flow. -

-
- - When a BitSet has fewer than 1 in BITS2VINTLIST_SIZE bits set, - a SortedVIntList representing the index numbers of the set bits - will be smaller than that BitSet. - - - - Create a SortedVIntList from all elements of an array of integers. - - - A sorted array of non negative integers. - - - - Create a SortedVIntList from an array of integers. - An array of sorted non negative integers. - - The number of integers to be used from the array. - - - - Create a SortedVIntList from a BitSet. - A bit set representing a set of integers. - - - - Create a SortedVIntList from an OpenBitSet. - A bit set representing a set of integers. - - - - Create a SortedVIntList. - An iterator providing document numbers as a set of integers. - This DocIdSetIterator is iterated completely when this constructor - is called and it must provide the integers in non - decreasing order. - - - - An iterator over the sorted integers. - - - - The total number of sorted integers. - - - The size of the byte array storing the compressed sorted integers. - - - This DocIdSet implementation is cacheable. - - - Borrowed from Cglib. Allows custom swap so that two arrays can be sorted - at the same time. - - - - Methods for manipulating strings. - - - Expert: - The StringInterner implementation used by Lucene. - This shouldn't be changed to an incompatible implementation after other Lucene APIs have been used. - - - - Return the same string object for all equal strings - - - Compares two byte[] arrays, element by element, and returns the - number of elements common to both arrays. - - - The first byte[] to compare - - - The second byte[] to compare - - - The number of common elements. - - - - Compares two strings, character by character, and returns the - first position where the two strings differ from one another. - - - The first string to compare - - The second string to compare - - The first position where the two strings differ. - - - - Helper methods to ease implementing . - - - for printing boost only if not 1.0 - - - Class to encode java's UTF16 char[] into UTF8 byte[] - without always allocating a new byte[] as - String.getBytes("UTF-8") does. - -

WARNING: This API is a new and experimental and - may suddenly change.

-

-
- - Encode characters from a char[] source, starting at - offset and stopping when the character 0xffff is seen. - Returns the number of bytes written to bytesOut. - - - - Encode characters from a char[] source, starting at - offset for length chars. Returns the number of bytes - written to bytesOut. - - - - Encode characters from this String, starting at offset - for length characters. Returns the number of bytes - written to bytesOut. - - - - Convert UTF8 bytes into UTF16 characters. If offset - is non-zero, conversion starts at that starting point - in utf8, re-using the results from the previous call - up until offset. - - - - Use by certain classes to match version compatibility - across releases of Lucene. -

- WARNING: When changing the version parameter - that you supply to components in Lucene, do not simply - change the version at search-time, but instead also adjust - your indexing code to match, and re-index. -

-
- - Match settings and bugs in Lucene's 2.0 release. - - - Match settings and bugs in Lucene's 2.1 release. - - - Match settings and bugs in Lucene's 2.2 release. - - - Match settings and bugs in Lucene's 2.3 release. - - - Match settings and bugs in Lucene's 2.4 release. - - - Match settings and bugs in Lucene's 2.9 release. - - - - Match settings and bugs in Lucene's 3.0 release. - - Use this to get the latest and greatest settings, bug fixes, - etc, for Lucene. - - - - - -

WARNING: if you use this setting, and then - upgrade to a newer release of Lucene, sizable changes - may happen. If precise back compatibility is important - then you should instead explicitly specify an actual - version. - If you use this constant then you may need to - re-index all of your documents when upgrading - Lucene, as the way text is indexed may have changed. - Additionally, you may need to re-test your entire - application to ensure it behaves as expected, as - some defaults may have changed and may break functionality - in your application. -

-
-
-
diff --git a/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.dll b/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.dll deleted file mode 100644 index cbf022025f4..00000000000 Binary files a/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.dll and /dev/null differ diff --git a/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.pdb b/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.pdb deleted file mode 100644 index 6083156fbd8..00000000000 Binary files a/DNN Platform/Components/Lucene.Net/bin/Lucene.Net.pdb and /dev/null differ diff --git a/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dnn b/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dnn index d614961f70e..abc5f44eeea 100644 --- a/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dnn +++ b/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dnn @@ -33,14 +33,6 @@ - - - - bin - Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - - - diff --git a/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/bin/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll b/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/bin/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll deleted file mode 100644 index a6c4a8b9926..00000000000 Binary files a/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/bin/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll and /dev/null differ diff --git a/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/roslyn.zip b/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/roslyn.zip deleted file mode 100644 index 0b8472370a2..00000000000 Binary files a/DNN Platform/Components/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/roslyn.zip and /dev/null differ diff --git a/DNN Platform/Components/WindowsAzure/Microsoft.WindowsAzure.Storage.dll b/DNN Platform/Components/WindowsAzure/Microsoft.WindowsAzure.Storage.dll deleted file mode 100644 index 7d8507d6586..00000000000 Binary files a/DNN Platform/Components/WindowsAzure/Microsoft.WindowsAzure.Storage.dll and /dev/null differ diff --git a/DNN Platform/Connectors/Azure/AzureConnector.dnn b/DNN Platform/Connectors/Azure/AzureConnector.dnn index e23079e09f8..ef97d694377 100644 --- a/DNN Platform/Connectors/Azure/AzureConnector.dnn +++ b/DNN Platform/Connectors/Azure/AzureConnector.dnn @@ -1,6 +1,6 @@  - + Dnn Azure Connector The Azure Connector allows you to create folders mapped to Azure Storage accounts. ~/DesktopModules/Connectors/Azure/Images/icon-azure-32px.png diff --git a/DNN Platform/Connectors/Azure/Dnn.AzureConnector.csproj b/DNN Platform/Connectors/Azure/Dnn.AzureConnector.csproj index e3fc550e815..9f6c1f77440 100644 --- a/DNN Platform/Connectors/Azure/Dnn.AzureConnector.csproj +++ b/DNN Platform/Connectors/Azure/Dnn.AzureConnector.csproj @@ -28,10 +28,7 @@ - - False - ..\..\Components\WindowsAzure\Microsoft.WindowsAzure.Storage.dll - + diff --git a/DNN Platform/Connectors/GoogleAnalytics/GoogleAnalyticsConnector.dnn b/DNN Platform/Connectors/GoogleAnalytics/GoogleAnalyticsConnector.dnn index d3866ff0531..bdea3771a15 100644 --- a/DNN Platform/Connectors/GoogleAnalytics/GoogleAnalyticsConnector.dnn +++ b/DNN Platform/Connectors/GoogleAnalytics/GoogleAnalyticsConnector.dnn @@ -1,6 +1,6 @@ - + Google Analytics (Legacy UA) Connector Configure your site's Google Analytics settings using Universal Analytics. ~/DesktopModules/Connectors/GoogleAnalytics/Images/GoogleAnalytics_32X32_Standard.png diff --git a/DNN Platform/Connectors/GoogleAnalytics4/GoogleAnalytics4Connector.dnn b/DNN Platform/Connectors/GoogleAnalytics4/GoogleAnalytics4Connector.dnn index 91651e348c0..91f0b8919dd 100644 --- a/DNN Platform/Connectors/GoogleAnalytics4/GoogleAnalytics4Connector.dnn +++ b/DNN Platform/Connectors/GoogleAnalytics4/GoogleAnalytics4Connector.dnn @@ -1,6 +1,6 @@ - + Google Analytics 4 Connector Configure your site's Google Analytics 4 settings. ~/DesktopModules/Connectors/GoogleAnalytics4/Images/GoogleAnalytics4_32X32_Standard.png diff --git a/DNN Platform/Connectors/GoogleTagManager/GoogleTagManagerConnector.dnn b/DNN Platform/Connectors/GoogleTagManager/GoogleTagManagerConnector.dnn index 4ae0bc0bd99..98a2514e5bd 100644 --- a/DNN Platform/Connectors/GoogleTagManager/GoogleTagManagerConnector.dnn +++ b/DNN Platform/Connectors/GoogleTagManager/GoogleTagManagerConnector.dnn @@ -1,6 +1,6 @@ - + Google Tag Manager Connector Configure your site's Google Tag Manager settings. ~/DesktopModules/Connectors/GoogleTagManager/Images/GoogleTagManager_32X32_Standard.png diff --git a/DNN Platform/Controls/DotNetNuke.WebControls/DotNetNuke/UI/WebControls/DNNTab.vb b/DNN Platform/Controls/DotNetNuke.WebControls/DotNetNuke/UI/WebControls/DNNTab.vb index c57007f149b..c467f29be6b 100644 --- a/DNN Platform/Controls/DotNetNuke.WebControls/DotNetNuke/UI/WebControls/DNNTab.vb +++ b/DNN Platform/Controls/DotNetNuke.WebControls/DotNetNuke/UI/WebControls/DNNTab.vb @@ -201,7 +201,8 @@ Namespace DotNetNuke.UI.WebControls End Sub Protected Overrides Function SaveViewState() As Object - Dim objArray As Object() = New Object() {MyBase.SaveViewState} + Dim objArray As Object() = New Object(1) {} + objArray(0) = MyBase.SaveViewState objArray(1) = If(Object.ReferenceEquals(Me.m_oDNNTabLabel, Nothing), Nothing, DirectCast(Me.Label, IStateManager).SaveViewState) Dim num2 As Integer = (objArray.Length - 1) Dim index As Integer = 0 diff --git a/DNN Platform/Dnn.AuthServices.Jwt/Dnn.Jwt.dnn b/DNN Platform/Dnn.AuthServices.Jwt/Dnn.Jwt.dnn index 3c3a8844b9a..68971be6639 100644 --- a/DNN Platform/Dnn.AuthServices.Jwt/Dnn.Jwt.dnn +++ b/DNN Platform/Dnn.AuthServices.Jwt/Dnn.Jwt.dnn @@ -1,6 +1,6 @@ - + DNN JWT Auth Handler DNN Json Web Token Authentication (JWT) library for cookie-less Mobile authentication clients diff --git a/DNN Platform/Dnn.ClientSide/build.ts b/DNN Platform/Dnn.ClientSide/build.ts index d49369d133d..7a5bc04e5cd 100644 --- a/DNN Platform/Dnn.ClientSide/build.ts +++ b/DNN Platform/Dnn.ClientSide/build.ts @@ -1,5 +1,5 @@ import esbuild from "esbuild"; -import * as sass from "sass"; +import * as sass from "sass-embedded"; import path from "path"; import fs from "fs"; import chokidar from "chokidar"; @@ -52,7 +52,7 @@ function normalizePath(filePath: string): string { // Compile SCSS to CSS with sourcemaps async function buildScss(input: string, output: string): Promise { try { - const result = sass.compile( + const result = await sass.compileAsync( input, { sourceMap: true, diff --git a/DNN Platform/Dnn.ClientSide/package.json b/DNN Platform/Dnn.ClientSide/package.json index d98310ad9e6..30b0ceedf77 100644 --- a/DNN Platform/Dnn.ClientSide/package.json +++ b/DNN Platform/Dnn.ClientSide/package.json @@ -19,18 +19,18 @@ "devDependencies": { "@types/node": "^24.9.0", "@types/postcss-import": "^14.0.3", - "autoprefixer": "^10.4.21", + "autoprefixer": "^10.4.27", "chokidar": "^4.0.3", - "cssnano": "^7.1.1", - "esbuild": "^0.27.0", - "eslint": "^9.38.0", + "cssnano": "^7.1.3", + "esbuild": "^0.27.4", + "eslint": "^9.39.4", "modern-normalize": "^3.0.1", - "postcss": "^8.5.6", + "postcss": "^8.5.8", "postcss-banner": "^4.0.1", "postcss-cli": "^11.0.1", "postcss-import": "^16.1.1", - "sass": "^1.93.2", - "tsx": "^4.20.6", + "sass-embedded": "^1.98.0", + "tsx": "^4.21.0", "typescript": "^5.9.3" } } diff --git a/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/ui/_forms.scss b/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/ui/_forms.scss index bbd791079a9..4c4a1726723 100644 --- a/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/ui/_forms.scss +++ b/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/ui/_forms.scss @@ -28,6 +28,8 @@ .dnnFormItem{ input[type="text"], + input[type="date"], + input[type="datetime-local"], select, textarea, input[type="email"], @@ -110,6 +112,9 @@ input[type="text"]:active, .dnnFormItem input[type="text"]:focus, input[type="password"]:focus, .dnnFormItem input[type="password"]:active, input[type="email"]:active, .dnnFormItem input[type="email"]:focus, + input[type="date"]:active, .dnnFormItem input[type="date"]:focus, + input[type="datetime-local"]:active, .dnnFormItem input[type="datetime-local"]:focus, + input[type="datetime-local"]:active, .dnnFormItem input[type="datetime-local"]:focus, select:active, .dnnFormItem select:focus, textarea:active, .dnnFormItem textarea:focus, input[type="search"]:active, .dnnFormItem input[type="search"]:focus { @@ -347,6 +352,8 @@ legend.required:after { } .error{ input[type="text"], + input[type="date"], + input[type="datetime-local"], select, .error textarea, input[type="email"], input[type="search"] { @@ -359,6 +366,8 @@ legend.required:after { color: var(--dnn-color-danger, red); } input[type="text"], + input[type="date"], + input[type="datetime-local"], input[type="password"], input[type="email"], input[type="tel"], @@ -436,7 +445,7 @@ legend.required:after { .dnnFormItem{ input[type="text"] + a.dnnPrimaryAction, input[type="text"] + a.dnnSecondaryAction, - input[type="text"] + a.dnnTerriaryAction { + input[type="text"] + a.dnnTertiaryAction { margin-left: 0.3125rem; } input[type="checkbox"] + span, diff --git a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDatePicker.cs b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDatePicker.cs index 1de0afaacb2..c43febaf654 100644 --- a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDatePicker.cs +++ b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDatePicker.cs @@ -6,30 +6,17 @@ namespace DotNetNuke.Web.UI.WebControls.Internal using System; using System.Collections.Generic; using System.Globalization; - using System.Web; - using System.Web.UI; using System.Web.UI.WebControls; using DotNetNuke.Abstractions.Application; using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Abstractions.Logging; - using DotNetNuke.Common; - using DotNetNuke.Common.Utilities; - using DotNetNuke.Entities.Portals; - using DotNetNuke.Framework.JavaScriptLibraries; - using DotNetNuke.Services.ClientDependency; - - using Microsoft.Extensions.DependencyInjection; /// This control is only for internal use, please don't reference it in any other place as it may be removed in the future. + [Obsolete("Deprecated in DotNetNuke 10.3.0. Please use TextBox with TextMode=TextBoxMode.Date. Scheduled removal in v12.0.0.")] public class DnnDatePicker : TextBox { - private readonly IClientResourceController clientResourceController; - private readonly IApplicationStatusInfo appStatus; - private readonly IEventLogger eventLogger; - /// Initializes a new instance of the class. - [Obsolete("Deprecated in DotNetNuke 10.2.2. Please use overload with IHostSettings. Scheduled removal in v12.0.0.")] public DnnDatePicker() : this(null, null, null) { @@ -41,9 +28,6 @@ public DnnDatePicker() /// The event logger. public DnnDatePicker(IClientResourceController clientResourceController, IApplicationStatusInfo appStatus, IEventLogger eventLogger) { - this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.appStatus = appStatus ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.eventLogger = eventLogger ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } /// Gets or sets the selected date. @@ -82,35 +66,23 @@ protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); - JavaScript.RequestRegistration(this.appStatus, this.eventLogger, PortalSettings.Current, CommonJs.jQuery); - - this.clientResourceController.RegisterScript("~/Resources/Shared/components/DatePicker/moment.min.js"); - this.clientResourceController.RegisterScript("~/Resources/Shared/components/DatePicker/pikaday.js"); - this.clientResourceController.RegisterScript("~/Resources/Shared/components/DatePicker/pikaday.jquery.js"); - - this.clientResourceController.RegisterStylesheet("~/Resources/Shared/components/DatePicker/pikaday.css"); - - this.RegisterClientResources(); + var settings = this.GetSettings(); + foreach (var setting in settings) + { + this.Attributes[setting.Key] = setting.Value?.ToString(); + } } /// Gets the settings. - /// A dictionary of pikaday settings. + /// A dictionary of attribute values. protected virtual IDictionary GetSettings() { return new Dictionary { - { "minDate", this.MinDate > DateTime.MinValue ? $"$new Date('{HttpUtility.JavaScriptStringEncode(this.MinDate.ToString(this.Format, CultureInfo.InvariantCulture))}')$" : string.Empty }, - { "maxDate", this.MaxDate > DateTime.MinValue ? $"$new Date('{HttpUtility.JavaScriptStringEncode(this.MaxDate.ToString(this.Format, CultureInfo.InvariantCulture))}')$" : string.Empty }, - { "format", this.ClientFormat }, + { "min", this.MinDate > DateTime.MinValue ? this.MinDate.ToString(this.Format, CultureInfo.InvariantCulture) : null }, + { "max", this.MaxDate > DateTime.MinValue ? this.MaxDate.ToString(this.Format, CultureInfo.InvariantCulture) : null }, + { "data-client-format", this.ClientFormat }, }; } - - private void RegisterClientResources() - { - var settings = Json.Serialize(this.GetSettings()).Replace("\"$", string.Empty).Replace("$\"", string.Empty); - var script = $"$('#{this.ClientID}').pikaday({settings});"; - - ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DnnDatePicker" + this.ClientID, script, true); - } } } diff --git a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDateTimePicker.cs b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDateTimePicker.cs index b866af8d9f4..688afff56b5 100644 --- a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDateTimePicker.cs +++ b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/DnnDateTimePicker.cs @@ -14,10 +14,10 @@ namespace DotNetNuke.Web.UI.WebControls.Internal using Microsoft.Extensions.DependencyInjection; /// This control is only for internal use, please don't reference it in any other place as it may be removed in the future. + [Obsolete("Deprecated in DotNetNuke 10.3.0. Please use TextBox with TextMode=TextBoxMode.DateTimeLocal. Scheduled removal in v12.0.0.")] public class DnnDateTimePicker : DnnDatePicker { /// Initializes a new instance of the class. - [Obsolete("Deprecated in DotNetNuke 10.2.2. Please use overload with IClientResourceController. Scheduled removal in v12.0.0.")] public DnnDateTimePicker() : this(null, null, null) { @@ -36,19 +36,14 @@ public DnnDateTimePicker(IClientResourceController clientResourceController, IAp } /// - protected override string Format => "yyyy-MM-dd HH:mm:ss"; - - /// - protected override string ClientFormat => "YYYY-MM-DD HH:mm:ss"; + protected override string Format => "yyyy-MM-dd'T'HH:mm"; /// protected override IDictionary GetSettings() { var settings = base.GetSettings(); - settings.Add("showTime", true); - settings.Add("use24hour", true); - settings.Add("autoClose", true); + settings["type"] = "datetime-local"; return settings; } diff --git a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateEditControl.cs b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateEditControl.cs index 153adaef984..4f988f24c88 100644 --- a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateEditControl.cs +++ b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateEditControl.cs @@ -8,26 +8,19 @@ namespace DotNetNuke.Web.UI.WebControls.Internal.PropertyEditorControls using System.Data.SqlTypes; using System.Globalization; using System.Web.UI; + using System.Web.UI.WebControls; - using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Instrumentation; using DotNetNuke.UI.WebControls; - using Microsoft.Extensions.DependencyInjection; - - /// - /// The DateEditControl control provides a standard UI component for editing - /// date properties. - /// - /// - /// This control is only for internal use, please don't reference it in any other place as it may be removed in future. - /// + /// The DateEditControl control provides a standard UI component for editing date properties. + /// This control is only for internal use, please don't reference it in any other place as it may be removed in the future. [ToolboxData("<{0}:DateEditControl runat=server>")] public class DateEditControl : EditControl { private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(DateEditControl)); - private DnnDatePicker dateControl; + private TextBox dateControl; /// public override string EditControlClientId @@ -145,7 +138,7 @@ protected override string StringValue } } - private DnnDatePicker DateControl => this.dateControl ??= ActivatorUtilities.CreateInstance(Globals.GetCurrentServiceProvider()); + private TextBox DateControl => this.dateControl ??= new TextBox { TextMode = TextBoxMode.Date, }; /// public override bool LoadPostData(string postDataKey, NameValueCollection postCollection) @@ -188,7 +181,7 @@ protected virtual void LoadDateControls() { if (this.DateValue != Null.NullDate) { - this.DateControl.SelectedDate = this.DateValue.Date; + this.DateControl.Text = this.DateValue.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } } diff --git a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateTimeEditControl.cs b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateTimeEditControl.cs index 8659a2eb12e..e171bac7ef7 100644 --- a/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateTimeEditControl.cs +++ b/DNN Platform/DotNetNuke.Web/UI/WebControls/Internal/PropertyEditorControls/DateTimeEditControl.cs @@ -8,6 +8,7 @@ namespace DotNetNuke.Web.UI.WebControls.Internal.PropertyEditorControls using System.Data.SqlTypes; using System.Globalization; using System.Web.UI; + using System.Web.UI.WebControls; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; @@ -16,18 +17,13 @@ namespace DotNetNuke.Web.UI.WebControls.Internal.PropertyEditorControls using Microsoft.Extensions.DependencyInjection; - /// - /// The DateEditControl control provides a standard UI component for editing - /// date properties. - /// - /// - /// This control is only for internal use, please don't reference it in any other place as it may be removed in future. - /// + /// The DateEditControl control provides a standard UI component for editing date properties. + /// This control is only for internal use, please don't reference it in any other place as it may be removed in the future. [ToolboxData("<{0}:DateTimeEditControl runat=server>")] public class DateTimeEditControl : EditControl { private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(DateTimeEditControl)); - private DnnDateTimePicker dateControl; + private TextBox dateControl; /// public override string ID @@ -57,10 +53,7 @@ protected DateTime DateValue } } - /// - /// Gets defaultDateFormat is a string that will be used to format the date in the absence of a - /// FormatAttribute. - /// + /// Gets a string that will be used to format the date in the absence of a FormatAttribute. /// A String representing the default format to use to render the date. /// A Format String. protected virtual string DefaultFormat => "g"; @@ -77,10 +70,9 @@ protected virtual string Format { foreach (Attribute attribute in this.CustomAttributes) { - if (attribute is FormatAttribute) + if (attribute is FormatAttribute formatAttribute) { - var formatAtt = (FormatAttribute)attribute; - format = formatAtt.Format; + format = formatAttribute.Format; break; } } @@ -135,7 +127,7 @@ protected override string StringValue } } - private DnnDateTimePicker DateControl => this.dateControl ??= ActivatorUtilities.CreateInstance(Globals.GetCurrentServiceProvider()); + private TextBox DateControl => this.dateControl ??= new TextBox { TextMode = TextBoxMode.DateTimeLocal, }; /// public override bool LoadPostData(string postDataKey, NameValueCollection postCollection) @@ -153,7 +145,7 @@ public override bool LoadPostData(string postDataKey, NameValueCollection postCo } else { - if (DateTime.TryParseExact(postedValue, "yyyy-MM-dd-HH-mm-ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out var value)) + if (DateTime.TryParseExact(postedValue, "yyyy-MM-dd'T'HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out var value)) { this.Value = value; dataChanged = true; @@ -181,7 +173,7 @@ protected virtual void LoadDateControls() { if (this.DateValue != Null.NullDate) { - this.DateControl.SelectedDate = this.DateValue; + this.DateControl.Text = this.DateValue.ToString("yyyy-MM-dd'T'HH:mm", CultureInfo.InvariantCulture); } } diff --git a/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.ClientAPI.dnn b/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.ClientAPI.dnn index c4741c94359..198533b1582 100644 --- a/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.ClientAPI.dnn +++ b/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.ClientAPI.dnn @@ -1,6 +1,6 @@  - + DotNetNuke ClientAPI The DotNetNuke Client API is composed of both server-side and client-side code that works together to enable a simple and reliable interface for the developer to provide a rich client-side experience. diff --git a/DNN Platform/JavaScript Libraries/DnnPlugins/DnnPlugins.dnn b/DNN Platform/JavaScript Libraries/DnnPlugins/DnnPlugins.dnn index f93d8f90a43..aeac3094769 100644 --- a/DNN Platform/JavaScript Libraries/DnnPlugins/DnnPlugins.dnn +++ b/DNN Platform/JavaScript Libraries/DnnPlugins/DnnPlugins.dnn @@ -1,6 +1,6 @@ - + DNN jQuery Plugins A collection of jQuery plugins for DNN UI components (tabs, panels, tooltips, checkboxes, etc.) Icons\Sigma\Extensions_32x32_Standard.png diff --git a/DNN Platform/Library/Common/Utilities/UrlUtils.cs b/DNN Platform/Library/Common/Utilities/UrlUtils.cs index 0c29336d968..6f2f07340b5 100644 --- a/DNN Platform/Library/Common/Utilities/UrlUtils.cs +++ b/DNN Platform/Library/Common/Utilities/UrlUtils.cs @@ -87,12 +87,12 @@ public static partial string DecryptParameter(string value, string encryptionKey /// The decrypted value. public static string DecryptParameter(ICryptographyProvider cryptographyProvider, string value, string encryptionKey) { - // [DNN-8257] - Can't do URLEncode/URLDecode as it introduces issues on decryption (with / = %2f), so we use a modified Base64 - var toDecrypt = new StringBuilder(value); - toDecrypt.Replace('_', '/'); - toDecrypt.Replace('-', '+'); - toDecrypt.Replace("%3d", "="); - return cryptographyProvider.DecryptParameter(toDecrypt.ToString(), encryptionKey, cryptographyProvider.EncryptParameterAlgorithmName); + return DecryptParameter(DecryptWithCryptographyProvider, value, encryptionKey); + + string DecryptWithCryptographyProvider(string message, string passphrase) + { + return cryptographyProvider.DecryptParameter(message, passphrase, cryptographyProvider.EncryptParameterAlgorithmName); + } } /// Encodes a value (using base64) for placing in a URL. @@ -572,5 +572,20 @@ public static void Handle404Exception(HttpResponseBase response, IPortalSettings response.End(); } } + + /// Decrypts an encrypted value generated via . + /// A function which takes the encrypted message and passphrase and returns the decrypted message. + /// The encrypted value. + /// The key used to encrypt the value. + /// The decrypted value. + internal static string DecryptParameter(Func decrypt, string value, string encryptionKey) + { + // [DNN-8257] - Can't do URLEncode/URLDecode as it introduces issues on decryption (with / = %2f), so we use a modified Base64 + var toDecrypt = new StringBuilder(value); + toDecrypt.Replace('_', '/'); + toDecrypt.Replace('-', '+'); + toDecrypt.Replace("%3d", "="); + return decrypt(toDecrypt.ToString(), encryptionKey); + } } } diff --git a/DNN Platform/Library/DotNetNuke.Library.csproj b/DNN Platform/Library/DotNetNuke.Library.csproj index 1007110357c..bdc3eff839d 100644 --- a/DNN Platform/Library/DotNetNuke.Library.csproj +++ b/DNN Platform/Library/DotNetNuke.Library.csproj @@ -25,7 +25,9 @@ + + @@ -52,20 +54,6 @@ - - - ..\Components\Lucene.Net\bin\Lucene.Net.dll - - - ..\Components\Lucene.Net.Contrib\bin\Lucene.Net.Contrib.FastVectorHighlighter.dll - - - False - ..\Components\DataAccessBlock\bin\Microsoft.ApplicationBlocks.Data.dll - False - - - diff --git a/DNN Platform/Library/Entities/Users/Profile/UserProfile.cs b/DNN Platform/Library/Entities/Users/Profile/UserProfile.cs index fcda056b929..2a5a6853dab 100644 --- a/DNN Platform/Library/Entities/Users/Profile/UserProfile.cs +++ b/DNN Platform/Library/Entities/Users/Profile/UserProfile.cs @@ -127,6 +127,7 @@ public UserProfile(UserInfo user) public string FullName => $"{this.FirstName} {this.LastName}"; /// Gets a value indicating whether a property has been changed. + [XmlIgnore] public bool IsDirty { get; private set; } /// Gets a URL for the profile picture - if the path contains invalid url characters it will return a fileticket. diff --git a/DNN Platform/Library/Services/FileSystem/FileLinkClickController.cs b/DNN Platform/Library/Services/FileSystem/FileLinkClickController.cs index 41697b625a0..f7290a4c105 100644 --- a/DNN Platform/Library/Services/FileSystem/FileLinkClickController.cs +++ b/DNN Platform/Library/Services/FileSystem/FileLinkClickController.cs @@ -7,56 +7,97 @@ namespace DotNetNuke.Services.FileSystem using System.Collections.Specialized; using System.Globalization; + using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.Security; using DotNetNuke.Common; using DotNetNuke.Common.Internal; using DotNetNuke.Common.Utilities; - using DotNetNuke.Entities.Host; using DotNetNuke.Entities.Portals; using DotNetNuke.Framework; + using DotNetNuke.Instrumentation; - public class FileLinkClickController : ServiceLocator, IFileLinkClickController + using Microsoft.Extensions.DependencyInjection; + +#pragma warning disable CS0618 // Type or member is obsolete + using DeprecatedCryptographyProvider = DotNetNuke.Services.Cryptography.CryptographyProvider; +#pragma warning restore CS0618 // Type or member is obsolete + + /// The default implementation. + /// The cryptography provider. + /// The host settings. + /// The host settings service. + public class FileLinkClickController(ICryptographyProvider cryptographyProvider, IHostSettings hostSettings, IHostSettingsService hostSettingsService) + : ServiceLocator, IFileLinkClickController { + private readonly ILog logger = LoggerSource.Instance.GetLogger(typeof(FileLinkClickController)); + private readonly ICryptographyProvider cryptographyProvider = cryptographyProvider ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + private readonly IHostSettings hostSettings = hostSettings ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + private readonly IHostSettingsService hostSettingsService = hostSettingsService ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + + /// Initializes a new instance of the class. + [Obsolete("Deprecated in DotNetNuke 10.4.0. Use overload with IICryptographyProvider. Scheduled removal in v12.0.0.")] + public FileLinkClickController() + : this(null, null, null) + { + } + /// public string GetFileLinkClick(IFileInfo file) { Requires.NotNull("file", file); var portalId = file.PortalId; - var linkClickPortalSettings = GetPortalSettingsForLinkClick(portalId); + var linkClickPortalSettings = this.GetPortalSettingsForLinkClick(portalId); - return TestableGlobals.Instance.LinkClick(string.Format(CultureInfo.InvariantCulture, "fileid={0}", file.FileId), Null.NullInteger, Null.NullInteger, true, false, portalId, linkClickPortalSettings.EnableUrlLanguage, linkClickPortalSettings.PortalGUID); + return TestableGlobals.Instance.LinkClick( + $"fileid={file.FileId.ToString(CultureInfo.InvariantCulture)}", + Null.NullInteger, + Null.NullInteger, + true, + false, + portalId, + linkClickPortalSettings.EnableUrlLanguage, + linkClickPortalSettings.PortalGUID); } /// public int GetFileIdFromLinkClick(NameValueCollection queryParams) { - var linkClickPortalSettings = GetPortalSettingsForLinkClick(GetPortalIdFromLinkClick(queryParams)); - var strFileId = UrlUtils.DecryptParameter(queryParams["fileticket"], linkClickPortalSettings.PortalGUID); + var linkClickPortalSettings = this.GetPortalSettingsForLinkClick(GetPortalIdFromLinkClick(queryParams)); + var fileTicket = queryParams["fileticket"]; + var encryptionKey = linkClickPortalSettings.PortalGUID; + var strFileId = UrlUtils.DecryptParameter(this.cryptographyProvider, fileTicket, encryptionKey); + if (string.IsNullOrEmpty(strFileId)) + { +#pragma warning disable CS0618 // Type or member is obsolete + string obsoleteFileId = null; + if (this.cryptographyProvider is DeprecatedCryptographyProvider deprecatedCryptographyProvider) + { + obsoleteFileId = UrlUtils.DecryptParameter(deprecatedCryptographyProvider.DecryptParameter, fileTicket, encryptionKey); + } +#pragma warning restore CS0618 // Type or member is obsolete + + if (string.IsNullOrEmpty(obsoleteFileId)) + { + this.logger.InfoFormat(CultureInfo.InvariantCulture, "Encountered FileTicket value {0} which was not able to be decrypted", fileTicket); + } + else if (this.hostSettingsService.GetBoolean("AllowFileTicketDecryptFallback", false)) + { + this.logger.WarnFormat(CultureInfo.InvariantCulture, "Encountered FileTicket value {0} which was generated with DES algorithm, regenerating this URL is recommended, falling back to broken DES algorithm based on AllowFileTicketDecryptFallback host setting", fileTicket); + strFileId = obsoleteFileId; + } + else + { + this.logger.ErrorFormat(CultureInfo.InvariantCulture, "Encountered FileTicket value {0} which was generated with DES algorithm, set AllowFileTicketDecryptFallback host setting to enable accessing this URL; however, regenerating this URL is recommended instead", fileTicket); + } + } + return int.TryParse(strFileId, out var fileId) ? fileId : -1; } /// protected override Func GetFactory() { - return () => new FileLinkClickController(); - } - - private static LinkClickPortalSettings GetPortalSettingsForLinkClick(int portalId) - { - if (portalId == Null.NullInteger) - { - return new LinkClickPortalSettings - { - PortalGUID = Host.GUID, - EnableUrlLanguage = Host.EnableUrlLanguage, - }; - } - - var portalSettings = new PortalSettings(portalId); - return new LinkClickPortalSettings - { - PortalGUID = portalSettings.GUID.ToString(), - EnableUrlLanguage = portalSettings.EnableUrlLanguage, - }; + return () => Globals.DependencyProvider.GetRequiredService(); } private static int GetPortalIdFromLinkClick(NameValueCollection queryParams) @@ -68,8 +109,7 @@ private static int GetPortalIdFromLinkClick(NameValueCollection queryParams) if (queryParams["portalid"] != null) { - int portalId; - if (int.TryParse(queryParams["portalid"], out portalId)) + if (int.TryParse(queryParams["portalid"], out var portalId)) { return portalId; } @@ -77,5 +117,24 @@ private static int GetPortalIdFromLinkClick(NameValueCollection queryParams) return PortalSettings.Current.PortalId; } + + private LinkClickPortalSettings GetPortalSettingsForLinkClick(int portalId) + { + if (portalId == Null.NullInteger) + { + return new LinkClickPortalSettings + { + PortalGUID = this.hostSettings.Guid, + EnableUrlLanguage = this.hostSettings.EnableUrlLanguage, + }; + } + + var portalSettings = new PortalSettings(portalId); + return new LinkClickPortalSettings + { + PortalGUID = portalSettings.GUID.ToString(), + EnableUrlLanguage = portalSettings.EnableUrlLanguage, + }; + } } } diff --git a/DNN Platform/Library/Services/FileSystem/IFileLinkClickController.cs b/DNN Platform/Library/Services/FileSystem/IFileLinkClickController.cs index aedec8cb1f4..c1ae1bcc797 100644 --- a/DNN Platform/Library/Services/FileSystem/IFileLinkClickController.cs +++ b/DNN Platform/Library/Services/FileSystem/IFileLinkClickController.cs @@ -8,14 +8,14 @@ namespace DotNetNuke.Services.FileSystem public interface IFileLinkClickController { - /// Get the Link Click Url from a file. + /// Get the Link Click URL from a file. /// The specified file. - /// The Link Click Url. + /// The Link Click URL. string GetFileLinkClick(IFileInfo file); - /// Get the File Id value contained in a Link Click Url. - /// Query string parameters collection from a Link Click url. - /// A File Id (or -1 if no File Id could be extracted from the query string parameters). + /// Get the File ID value contained in a Link Click URL. + /// Query string parameters collection from a Link Click URL. + /// A File ID (or -1 if no File ID could be extracted from the query string parameters). int GetFileIdFromLinkClick(NameValueCollection queryParams); } } diff --git a/DNN Platform/Library/Services/Search/Internals/InternalSearchControllerImpl.cs b/DNN Platform/Library/Services/Search/Internals/InternalSearchControllerImpl.cs index 4ab1b06a855..b168c7be0b4 100644 --- a/DNN Platform/Library/Services/Search/Internals/InternalSearchControllerImpl.cs +++ b/DNN Platform/Library/Services/Search/Internals/InternalSearchControllerImpl.cs @@ -41,7 +41,7 @@ internal class InternalSearchControllerImpl : IInternalSearchController private const string SearchableModuleDefsCacheKey = "SearchableModuleDefs"; private const string LocalizedResxFile = "~/DesktopModules/Admin/SearchResults/App_LocalResources/SearchableModules.resx"; - private const string HtmlTagsWithAttrs = "<[a-z_:][\\w:.-]*(\\s+(?\\w+\\s*?=\\s*?[\"'].*?[\"']))+\\s*/?>"; + private const string HtmlTagsWithAttrs = "<[a-z_:][\\w:.-]*(?>(?:\\s+(?\\w+\\s*?=\\s*?[\"'].*?[\"']))*)?\\s*/?>"; private const string AttrText = "[\"'](?.*?)[\"']"; private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(InternalSearchControllerImpl)); @@ -49,10 +49,10 @@ internal class InternalSearchControllerImpl : IInternalSearchController private static readonly string[] HtmlAttributesToRetain = { "alt", "title" }; private static readonly DataProvider DataProvider = DataProvider.Instance(); - private static readonly Regex StripOpeningTagsRegex = new Regex(@"<\w*\s*>", RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex StripClosingTagsRegex = new Regex(@"", RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex HtmlTagsRegex = new Regex(HtmlTagsWithAttrs, RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex AttrTextRegex = new Regex(AttrText, RegexOptions.Compiled); + private static readonly Regex StripOpeningTagsRegex = RegexUtils.GetCachedRegex(@"<\w*\s*>", RegexOptions.IgnoreCase | RegexOptions.Compiled); + private static readonly Regex StripClosingTagsRegex = RegexUtils.GetCachedRegex(@"", RegexOptions.IgnoreCase | RegexOptions.Compiled); + private static readonly Regex HtmlTagsRegex = RegexUtils.GetCachedRegex(HtmlTagsWithAttrs, RegexOptions.IgnoreCase | RegexOptions.Compiled); + private static readonly Regex AttrTextRegex = RegexUtils.GetCachedRegex(AttrText, RegexOptions.Compiled); private readonly IHostSettings hostSettings; private readonly IServiceProvider serviceProvider; @@ -298,43 +298,90 @@ private static string StripTagsRetainAttributes(string html, IEnumerable if (!string.IsNullOrEmpty(strippedString)) { // Remove all opening HTML Tags with no attributes - strippedString = StripOpeningTagsRegex.Replace(strippedString, emptySpace); + try + { + strippedString = StripOpeningTagsRegex.Replace(strippedString, emptySpace); + } + catch (RegexMatchTimeoutException ex) + { + DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); + return string.Empty; + } + catch + { + throw; + } // Remove all closing HTML Tags - strippedString = StripClosingTagsRegex.Replace(strippedString, emptySpace); + try + { + strippedString = StripClosingTagsRegex.Replace(strippedString, emptySpace); + } + catch (RegexMatchTimeoutException ex) + { + DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); + return string.Empty; + } + catch + { + throw; + } } if (!string.IsNullOrEmpty(strippedString)) { var list = new List(); - - foreach (var match in HtmlTagsRegex.Matches(strippedString).Cast()) + try { - var captures = match.Groups["attr"].Captures; - foreach (var capture in captures.Cast()) + foreach (var match in HtmlTagsRegex.Matches(strippedString).Cast()) { - var val = capture.Value.Trim(); - var pos = val.IndexOf('='); - if (pos > 0) + var captures = match.Groups["attr"].Captures; + foreach (var capture in captures.Cast()) { - var attr = val.Substring(0, pos).Trim(); - if (attributesList.Contains(attr)) + var val = capture.Value.Trim(); + var pos = val.IndexOf('='); + if (pos > 0) { - var text = AttrTextRegex.Match(val).Groups["text"].Value.Trim(); - if (text.Length > 0 && !list.Contains(text)) + var attr = val.Substring(0, pos).Trim(); + if (attributesList.Contains(attr)) { - list.Add(text); + try + { + var text = AttrTextRegex.Match(val).Groups["text"].Value.Trim(); + if (text.Length > 0 && !list.Contains(text)) + { + list.Add(text); + } + } + catch (RegexMatchTimeoutException ex) + { + DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); + return string.Empty; + } + catch + { + throw; + } } } } - } - if (list.Count > 0) - { - strippedString = strippedString.Replace(match.ToString(), string.Join(" ", list)); - list.Clear(); + if (list.Count > 0) + { + strippedString = strippedString.Replace(match.ToString(), string.Join(" ", list)); + list.Clear(); + } } } + catch (RegexMatchTimeoutException ex) + { + DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); + return string.Empty; + } + catch + { + throw; + } } // If not decoded, decode and strip again. Becareful with recursive diff --git a/DNN Platform/Library/Startup.cs b/DNN Platform/Library/Startup.cs index 29dd6254443..0b45945a739 100644 --- a/DNN Platform/Library/Startup.cs +++ b/DNN Platform/Library/Startup.cs @@ -175,6 +175,7 @@ public void ConfigureServices(IServiceCollection services) services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(_ => new PathUtils()); if (CryptoConfig.AllowOnlyFipsAlgorithms) { diff --git a/DNN Platform/Modules/CoreMessaging/CoreMessaging.dnn b/DNN Platform/Modules/CoreMessaging/CoreMessaging.dnn index 64f9639a1ef..cbdfe56a627 100644 --- a/DNN Platform/Modules/CoreMessaging/CoreMessaging.dnn +++ b/DNN Platform/Modules/CoreMessaging/CoreMessaging.dnn @@ -1,6 +1,6 @@ - + Message Center Core Messaging module allows users to message each other. ~/DesktopModules/CoreMessaging/Images/messaging_32X32.png diff --git a/DNN Platform/Modules/DDRMenu/DDRMenu.dnn b/DNN Platform/Modules/DDRMenu/DDRMenu.dnn index 78c0d3bbac8..12936a34208 100644 --- a/DNN Platform/Modules/DDRMenu/DDRMenu.dnn +++ b/DNN Platform/Modules/DDRMenu/DDRMenu.dnn @@ -1,6 +1,6 @@  - + DDR Menu DotNetNuke Navigation Provider. diff --git a/DNN Platform/Modules/DnnExportImport/dnn_SiteExportImport.dnn b/DNN Platform/Modules/DnnExportImport/dnn_SiteExportImport.dnn index caa4b0baf79..4b7a141208b 100644 --- a/DNN Platform/Modules/DnnExportImport/dnn_SiteExportImport.dnn +++ b/DNN Platform/Modules/DnnExportImport/dnn_SiteExportImport.dnn @@ -1,6 +1,6 @@ - + Site Export Import DotNetNuke Corporation Site Export Import Library Images/Files_32x32_Standard.png diff --git a/DNN Platform/Modules/Groups/SocialGroups.dnn b/DNN Platform/Modules/Groups/SocialGroups.dnn index 8726f55de38..c3dad6bc1ef 100644 --- a/DNN Platform/Modules/Groups/SocialGroups.dnn +++ b/DNN Platform/Modules/Groups/SocialGroups.dnn @@ -1,6 +1,6 @@ - + Social Groups DotNetNuke Corporation Social Groups module ~/DesktopModules/SocialGroups/Images/Social_Groups_32X32.png diff --git a/DNN Platform/Modules/HTML/dnn_HTML.dnn b/DNN Platform/Modules/HTML/dnn_HTML.dnn index 4c7ec86db04..dba0327085a 100644 --- a/DNN Platform/Modules/HTML/dnn_HTML.dnn +++ b/DNN Platform/Modules/HTML/dnn_HTML.dnn @@ -1,6 +1,6 @@  - + HTML This module renders a block of HTML or Text content. The Html/Text module allows authorized users to edit the content either inline or in a separate administration page. Optional tokens can be used that get replaced dynamically during display. All versions of content are stored in the database including the ability to rollback to an older version. DesktopModules\HTML\Images\html.png diff --git a/DNN Platform/Modules/HtmlEditorManager/dnn_HtmlEditorManager.dnn b/DNN Platform/Modules/HtmlEditorManager/dnn_HtmlEditorManager.dnn index 05a857dc626..7e1bcc9a907 100644 --- a/DNN Platform/Modules/HtmlEditorManager/dnn_HtmlEditorManager.dnn +++ b/DNN Platform/Modules/HtmlEditorManager/dnn_HtmlEditorManager.dnn @@ -1,6 +1,6 @@  - + Html Editor Management Images/HtmlEditorManager_Standard_32x32.png A module used to configure toolbar items, behavior, and other options used in the DotNetNuke HtmlEditor Provider. diff --git a/DNN Platform/Modules/Journal/Journal.dnn b/DNN Platform/Modules/Journal/Journal.dnn index 732c73ee57d..5e4b0ff3140 100644 --- a/DNN Platform/Modules/Journal/Journal.dnn +++ b/DNN Platform/Modules/Journal/Journal.dnn @@ -1,6 +1,6 @@ - + Journal DotNetNuke Corporation Journal module DesktopModules/Journal/Images/journal_32X32.png diff --git a/DNN Platform/Modules/MemberDirectory/MemberDirectory.dnn b/DNN Platform/Modules/MemberDirectory/MemberDirectory.dnn index daca37c07e5..f333ac60906 100644 --- a/DNN Platform/Modules/MemberDirectory/MemberDirectory.dnn +++ b/DNN Platform/Modules/MemberDirectory/MemberDirectory.dnn @@ -1,6 +1,6 @@ - + Member Directory The Member Directory module displays a list of Members based on role, profile property or relationship. ~/DesktopModules/MemberDirectory/Images/member_list_32X32.png diff --git a/DNN Platform/Modules/RazorHost/Manifest.dnn b/DNN Platform/Modules/RazorHost/Manifest.dnn index 8b64971dfde..bba0c54ed1a 100644 --- a/DNN Platform/Modules/RazorHost/Manifest.dnn +++ b/DNN Platform/Modules/RazorHost/Manifest.dnn @@ -1,6 +1,6 @@  - + {0} {1} diff --git a/DNN Platform/Modules/RazorHost/RazorHost.dnn b/DNN Platform/Modules/RazorHost/RazorHost.dnn index eee8652e8c7..3d6bb2c3a67 100644 --- a/DNN Platform/Modules/RazorHost/RazorHost.dnn +++ b/DNN Platform/Modules/RazorHost/RazorHost.dnn @@ -1,6 +1,6 @@  - + Razor Host The Razor Host module allows developers to host Razor Scripts. diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index cde4e2549f7..ed262e85f1e 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -1,6 +1,6 @@ { "name": "dnn-resource-manager", - "version": "10.2.4", + "version": "10.3.1", "description": "Resource Manager", "private": true, "main": "dist/index.cjs.js", @@ -28,17 +28,17 @@ }, "license": "MIT", "devDependencies": { - "@dnncommunity/dnn-elements": "^0.29.0", - "@eslint/js": "^9.38.0", - "@stencil/core": "^4.38.2", - "@stencil/eslint-plugin": "^1.1.0", - "@stencil/sass": "^3.2.2", - "@stencil/store": "^2.2.0", + "@dnncommunity/dnn-elements": "^0.29.2", + "@eslint/js": "^9.39.4", + "@stencil/core": "^4.43.3", + "@stencil/eslint-plugin": "^1.2.0", + "@stencil/sass": "^3.2.3", + "@stencil/store": "^2.2.2", "@types/node": "^24.9.0", - "@typescript-eslint/utils": "^8.46.2", - "eslint": "^9.38.0", + "@typescript-eslint/utils": "^8.57.2", + "eslint": "^9.39.4", "jiti": "^2.6.1", "typescript": "^5.9.3", - "typescript-eslint": "^8.46.2" + "typescript-eslint": "^8.57.2" } } diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components.d.ts b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components.d.ts index 4d851671f6c..7a7c36c25d2 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components.d.ts +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components.d.ts @@ -616,6 +616,8 @@ declare global { } } declare namespace LocalJSX { + type OneOf = { [P in K]: PropT } & { [P in `attr:${K}` | `prop:${K}`]?: never } | { [P in `attr:${K}`]: AttrT } & { [P in K | `prop:${K}`]?: never } | { [P in `prop:${K}`]: PropT } & { [P in K | `attr:${K}`]?: never }; + interface DnnActionCopyUrl { /** * The list of items to copy. @@ -869,34 +871,68 @@ declare namespace LocalJSX { */ "onDnnRmFoldersChanged"?: (event: DnnRmUploadFileCustomEvent) => void; } + + interface DnnActionCreateFolderAttributes { + "parentFolderId": number; + } + interface DnnActionUploadFileAttributes { + "parentFolderId": number; + } + interface DnnResourceManagerAttributes { + "moduleId": number; + } + interface DnnRmEditFileAttributes { + "fileId": number; + } + interface DnnRmEditFolderAttributes { + "folderId": number; + } + interface DnnRmFilesPaneAttributes { + "preloadOffset": number; + } + interface DnnRmFolderListItemAttributes { + "expanded": boolean; + "parentFolderId": number; + } + interface DnnRmProgressBarAttributes { + "value": number; + "max": number; + } + interface DnnRmQueuedFileAttributes { + "extract": boolean; + "validationCode": string; + "filter": string; + "maxUploadFileSize": number; + } + interface IntrinsicElements { "dnn-action-copy-url": DnnActionCopyUrl; - "dnn-action-create-folder": DnnActionCreateFolder; + "dnn-action-create-folder": Omit & { [K in keyof DnnActionCreateFolder & keyof DnnActionCreateFolderAttributes]?: DnnActionCreateFolder[K] } & { [K in keyof DnnActionCreateFolder & keyof DnnActionCreateFolderAttributes as `attr:${K}`]?: DnnActionCreateFolderAttributes[K] } & { [K in keyof DnnActionCreateFolder & keyof DnnActionCreateFolderAttributes as `prop:${K}`]?: DnnActionCreateFolder[K] }; "dnn-action-delete-items": DnnActionDeleteItems; "dnn-action-download-item": DnnActionDownloadItem; "dnn-action-edit-item": DnnActionEditItem; "dnn-action-move-items": DnnActionMoveItems; "dnn-action-open-file": DnnActionOpenFile; "dnn-action-unlink-items": DnnActionUnlinkItems; - "dnn-action-upload-file": DnnActionUploadFile; - "dnn-resource-manager": DnnResourceManager; + "dnn-action-upload-file": Omit & { [K in keyof DnnActionUploadFile & keyof DnnActionUploadFileAttributes]?: DnnActionUploadFile[K] } & { [K in keyof DnnActionUploadFile & keyof DnnActionUploadFileAttributes as `attr:${K}`]?: DnnActionUploadFileAttributes[K] } & { [K in keyof DnnActionUploadFile & keyof DnnActionUploadFileAttributes as `prop:${K}`]?: DnnActionUploadFile[K] }; + "dnn-resource-manager": Omit & { [K in keyof DnnResourceManager & keyof DnnResourceManagerAttributes]?: DnnResourceManager[K] } & { [K in keyof DnnResourceManager & keyof DnnResourceManagerAttributes as `attr:${K}`]?: DnnResourceManagerAttributes[K] } & { [K in keyof DnnResourceManager & keyof DnnResourceManagerAttributes as `prop:${K}`]?: DnnResourceManager[K] } & OneOf<"moduleId", DnnResourceManager["moduleId"], DnnResourceManagerAttributes["moduleId"]>; "dnn-rm-actions-bar": DnnRmActionsBar; "dnn-rm-create-folder": DnnRmCreateFolder; "dnn-rm-delete-items": DnnRmDeleteItems; - "dnn-rm-edit-file": DnnRmEditFile; - "dnn-rm-edit-folder": DnnRmEditFolder; + "dnn-rm-edit-file": Omit & { [K in keyof DnnRmEditFile & keyof DnnRmEditFileAttributes]?: DnnRmEditFile[K] } & { [K in keyof DnnRmEditFile & keyof DnnRmEditFileAttributes as `attr:${K}`]?: DnnRmEditFileAttributes[K] } & { [K in keyof DnnRmEditFile & keyof DnnRmEditFileAttributes as `prop:${K}`]?: DnnRmEditFile[K] } & OneOf<"fileId", DnnRmEditFile["fileId"], DnnRmEditFileAttributes["fileId"]>; + "dnn-rm-edit-folder": Omit & { [K in keyof DnnRmEditFolder & keyof DnnRmEditFolderAttributes]?: DnnRmEditFolder[K] } & { [K in keyof DnnRmEditFolder & keyof DnnRmEditFolderAttributes as `attr:${K}`]?: DnnRmEditFolderAttributes[K] } & { [K in keyof DnnRmEditFolder & keyof DnnRmEditFolderAttributes as `prop:${K}`]?: DnnRmEditFolder[K] } & OneOf<"folderId", DnnRmEditFolder["folderId"], DnnRmEditFolderAttributes["folderId"]>; "dnn-rm-file-context-menu": DnnRmFileContextMenu; - "dnn-rm-files-pane": DnnRmFilesPane; + "dnn-rm-files-pane": Omit & { [K in keyof DnnRmFilesPane & keyof DnnRmFilesPaneAttributes]?: DnnRmFilesPane[K] } & { [K in keyof DnnRmFilesPane & keyof DnnRmFilesPaneAttributes as `attr:${K}`]?: DnnRmFilesPaneAttributes[K] } & { [K in keyof DnnRmFilesPane & keyof DnnRmFilesPaneAttributes as `prop:${K}`]?: DnnRmFilesPane[K] }; "dnn-rm-folder-context-menu": DnnRmFolderContextMenu; "dnn-rm-folder-list": DnnRmFolderList; - "dnn-rm-folder-list-item": DnnRmFolderListItem; + "dnn-rm-folder-list-item": Omit & { [K in keyof DnnRmFolderListItem & keyof DnnRmFolderListItemAttributes]?: DnnRmFolderListItem[K] } & { [K in keyof DnnRmFolderListItem & keyof DnnRmFolderListItemAttributes as `attr:${K}`]?: DnnRmFolderListItemAttributes[K] } & { [K in keyof DnnRmFolderListItem & keyof DnnRmFolderListItemAttributes as `prop:${K}`]?: DnnRmFolderListItem[K] } & OneOf<"parentFolderId", DnnRmFolderListItem["parentFolderId"], DnnRmFolderListItemAttributes["parentFolderId"]>; "dnn-rm-folder-mappings": DnnRmFolderMappings; "dnn-rm-items-cardview": DnnRmItemsCardview; "dnn-rm-items-listview": DnnRmItemsListview; "dnn-rm-left-pane": DnnRmLeftPane; "dnn-rm-move-items": DnnRmMoveItems; - "dnn-rm-progress-bar": DnnRmProgressBar; - "dnn-rm-queued-file": DnnRmQueuedFile; + "dnn-rm-progress-bar": Omit & { [K in keyof DnnRmProgressBar & keyof DnnRmProgressBarAttributes]?: DnnRmProgressBar[K] } & { [K in keyof DnnRmProgressBar & keyof DnnRmProgressBarAttributes as `attr:${K}`]?: DnnRmProgressBarAttributes[K] } & { [K in keyof DnnRmProgressBar & keyof DnnRmProgressBarAttributes as `prop:${K}`]?: DnnRmProgressBar[K] }; + "dnn-rm-queued-file": Omit & { [K in keyof DnnRmQueuedFile & keyof DnnRmQueuedFileAttributes]?: DnnRmQueuedFile[K] } & { [K in keyof DnnRmQueuedFile & keyof DnnRmQueuedFileAttributes as `attr:${K}`]?: DnnRmQueuedFileAttributes[K] } & { [K in keyof DnnRmQueuedFile & keyof DnnRmQueuedFileAttributes as `prop:${K}`]?: DnnRmQueuedFile[K] } & OneOf<"validationCode", DnnRmQueuedFile["validationCode"], DnnRmQueuedFileAttributes["validationCode"]> & OneOf<"filter", DnnRmQueuedFile["filter"], DnnRmQueuedFileAttributes["filter"]> & OneOf<"maxUploadFileSize", DnnRmQueuedFile["maxUploadFileSize"], DnnRmQueuedFileAttributes["maxUploadFileSize"]>; "dnn-rm-right-pane": DnnRmRightPane; "dnn-rm-status-bar": DnnRmStatusBar; "dnn-rm-top-bar": DnnRmTopBar; @@ -908,38 +944,38 @@ export { LocalJSX as JSX }; declare module "@stencil/core" { export namespace JSX { interface IntrinsicElements { - "dnn-action-copy-url": LocalJSX.DnnActionCopyUrl & JSXBase.HTMLAttributes; - "dnn-action-create-folder": LocalJSX.DnnActionCreateFolder & JSXBase.HTMLAttributes; - "dnn-action-delete-items": LocalJSX.DnnActionDeleteItems & JSXBase.HTMLAttributes; - "dnn-action-download-item": LocalJSX.DnnActionDownloadItem & JSXBase.HTMLAttributes; - "dnn-action-edit-item": LocalJSX.DnnActionEditItem & JSXBase.HTMLAttributes; - "dnn-action-move-items": LocalJSX.DnnActionMoveItems & JSXBase.HTMLAttributes; - "dnn-action-open-file": LocalJSX.DnnActionOpenFile & JSXBase.HTMLAttributes; - "dnn-action-unlink-items": LocalJSX.DnnActionUnlinkItems & JSXBase.HTMLAttributes; - "dnn-action-upload-file": LocalJSX.DnnActionUploadFile & JSXBase.HTMLAttributes; - "dnn-resource-manager": LocalJSX.DnnResourceManager & JSXBase.HTMLAttributes; - "dnn-rm-actions-bar": LocalJSX.DnnRmActionsBar & JSXBase.HTMLAttributes; - "dnn-rm-create-folder": LocalJSX.DnnRmCreateFolder & JSXBase.HTMLAttributes; - "dnn-rm-delete-items": LocalJSX.DnnRmDeleteItems & JSXBase.HTMLAttributes; - "dnn-rm-edit-file": LocalJSX.DnnRmEditFile & JSXBase.HTMLAttributes; - "dnn-rm-edit-folder": LocalJSX.DnnRmEditFolder & JSXBase.HTMLAttributes; - "dnn-rm-file-context-menu": LocalJSX.DnnRmFileContextMenu & JSXBase.HTMLAttributes; - "dnn-rm-files-pane": LocalJSX.DnnRmFilesPane & JSXBase.HTMLAttributes; - "dnn-rm-folder-context-menu": LocalJSX.DnnRmFolderContextMenu & JSXBase.HTMLAttributes; - "dnn-rm-folder-list": LocalJSX.DnnRmFolderList & JSXBase.HTMLAttributes; - "dnn-rm-folder-list-item": LocalJSX.DnnRmFolderListItem & JSXBase.HTMLAttributes; - "dnn-rm-folder-mappings": LocalJSX.DnnRmFolderMappings & JSXBase.HTMLAttributes; - "dnn-rm-items-cardview": LocalJSX.DnnRmItemsCardview & JSXBase.HTMLAttributes; - "dnn-rm-items-listview": LocalJSX.DnnRmItemsListview & JSXBase.HTMLAttributes; - "dnn-rm-left-pane": LocalJSX.DnnRmLeftPane & JSXBase.HTMLAttributes; - "dnn-rm-move-items": LocalJSX.DnnRmMoveItems & JSXBase.HTMLAttributes; - "dnn-rm-progress-bar": LocalJSX.DnnRmProgressBar & JSXBase.HTMLAttributes; - "dnn-rm-queued-file": LocalJSX.DnnRmQueuedFile & JSXBase.HTMLAttributes; - "dnn-rm-right-pane": LocalJSX.DnnRmRightPane & JSXBase.HTMLAttributes; - "dnn-rm-status-bar": LocalJSX.DnnRmStatusBar & JSXBase.HTMLAttributes; - "dnn-rm-top-bar": LocalJSX.DnnRmTopBar & JSXBase.HTMLAttributes; - "dnn-rm-unlink-items": LocalJSX.DnnRmUnlinkItems & JSXBase.HTMLAttributes; - "dnn-rm-upload-file": LocalJSX.DnnRmUploadFile & JSXBase.HTMLAttributes; + "dnn-action-copy-url": LocalJSX.IntrinsicElements["dnn-action-copy-url"] & JSXBase.HTMLAttributes; + "dnn-action-create-folder": LocalJSX.IntrinsicElements["dnn-action-create-folder"] & JSXBase.HTMLAttributes; + "dnn-action-delete-items": LocalJSX.IntrinsicElements["dnn-action-delete-items"] & JSXBase.HTMLAttributes; + "dnn-action-download-item": LocalJSX.IntrinsicElements["dnn-action-download-item"] & JSXBase.HTMLAttributes; + "dnn-action-edit-item": LocalJSX.IntrinsicElements["dnn-action-edit-item"] & JSXBase.HTMLAttributes; + "dnn-action-move-items": LocalJSX.IntrinsicElements["dnn-action-move-items"] & JSXBase.HTMLAttributes; + "dnn-action-open-file": LocalJSX.IntrinsicElements["dnn-action-open-file"] & JSXBase.HTMLAttributes; + "dnn-action-unlink-items": LocalJSX.IntrinsicElements["dnn-action-unlink-items"] & JSXBase.HTMLAttributes; + "dnn-action-upload-file": LocalJSX.IntrinsicElements["dnn-action-upload-file"] & JSXBase.HTMLAttributes; + "dnn-resource-manager": LocalJSX.IntrinsicElements["dnn-resource-manager"] & JSXBase.HTMLAttributes; + "dnn-rm-actions-bar": LocalJSX.IntrinsicElements["dnn-rm-actions-bar"] & JSXBase.HTMLAttributes; + "dnn-rm-create-folder": LocalJSX.IntrinsicElements["dnn-rm-create-folder"] & JSXBase.HTMLAttributes; + "dnn-rm-delete-items": LocalJSX.IntrinsicElements["dnn-rm-delete-items"] & JSXBase.HTMLAttributes; + "dnn-rm-edit-file": LocalJSX.IntrinsicElements["dnn-rm-edit-file"] & JSXBase.HTMLAttributes; + "dnn-rm-edit-folder": LocalJSX.IntrinsicElements["dnn-rm-edit-folder"] & JSXBase.HTMLAttributes; + "dnn-rm-file-context-menu": LocalJSX.IntrinsicElements["dnn-rm-file-context-menu"] & JSXBase.HTMLAttributes; + "dnn-rm-files-pane": LocalJSX.IntrinsicElements["dnn-rm-files-pane"] & JSXBase.HTMLAttributes; + "dnn-rm-folder-context-menu": LocalJSX.IntrinsicElements["dnn-rm-folder-context-menu"] & JSXBase.HTMLAttributes; + "dnn-rm-folder-list": LocalJSX.IntrinsicElements["dnn-rm-folder-list"] & JSXBase.HTMLAttributes; + "dnn-rm-folder-list-item": LocalJSX.IntrinsicElements["dnn-rm-folder-list-item"] & JSXBase.HTMLAttributes; + "dnn-rm-folder-mappings": LocalJSX.IntrinsicElements["dnn-rm-folder-mappings"] & JSXBase.HTMLAttributes; + "dnn-rm-items-cardview": LocalJSX.IntrinsicElements["dnn-rm-items-cardview"] & JSXBase.HTMLAttributes; + "dnn-rm-items-listview": LocalJSX.IntrinsicElements["dnn-rm-items-listview"] & JSXBase.HTMLAttributes; + "dnn-rm-left-pane": LocalJSX.IntrinsicElements["dnn-rm-left-pane"] & JSXBase.HTMLAttributes; + "dnn-rm-move-items": LocalJSX.IntrinsicElements["dnn-rm-move-items"] & JSXBase.HTMLAttributes; + "dnn-rm-progress-bar": LocalJSX.IntrinsicElements["dnn-rm-progress-bar"] & JSXBase.HTMLAttributes; + "dnn-rm-queued-file": LocalJSX.IntrinsicElements["dnn-rm-queued-file"] & JSXBase.HTMLAttributes; + "dnn-rm-right-pane": LocalJSX.IntrinsicElements["dnn-rm-right-pane"] & JSXBase.HTMLAttributes; + "dnn-rm-status-bar": LocalJSX.IntrinsicElements["dnn-rm-status-bar"] & JSXBase.HTMLAttributes; + "dnn-rm-top-bar": LocalJSX.IntrinsicElements["dnn-rm-top-bar"] & JSXBase.HTMLAttributes; + "dnn-rm-unlink-items": LocalJSX.IntrinsicElements["dnn-rm-unlink-items"] & JSXBase.HTMLAttributes; + "dnn-rm-upload-file": LocalJSX.IntrinsicElements["dnn-rm-upload-file"] & JSXBase.HTMLAttributes; } } } diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.dnn b/DNN Platform/Modules/ResourceManager/ResourceManager.dnn index 7206adb9168..458c9df55a6 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.dnn +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.dnn @@ -1,6 +1,6 @@ - + Resource Manager This module allows you to manage files on the server ~/Images/icon_filemanager_32px.gif diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/ContactList_Mvc.dnn b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/ContactList_Mvc.dnn index ff4bfa8560d..fd0fc2b0df4 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/ContactList_Mvc.dnn +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/ContactList_Mvc.dnn @@ -1,6 +1,6 @@  - + Contact List Mvc DNN Contact List using MVC diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList_Spa.dnn b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList_Spa.dnn index 46938500bbd..ce16aa35f87 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList_Spa.dnn +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList_Spa.dnn @@ -1,6 +1,6 @@  - + Contact List Spa DNN Contact List SPA diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/ContactList_SpaReact.dnn b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/ContactList_SpaReact.dnn index f004106c420..4135301592f 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/ContactList_SpaReact.dnn +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/ContactList_SpaReact.dnn @@ -1,6 +1,6 @@  - + Contact List Spa React DNN Contact List SPA+React module diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/package.json b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/package.json index 8f5595e066c..729dee88c45 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/package.json +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/package.json @@ -12,13 +12,13 @@ "dependencies": { "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^6.26.0" + "react-router": "^7.13.1" }, "devDependencies": { "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.1", - "typescript": "^5.5.4", - "vite": "^5.4.3" + "@vitejs/plugin-react": "^6.0.1", + "typescript": "^5.9.3", + "vite": "^8.0.2" } } diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/App.tsx b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/App.tsx index 14876681b4c..99f8c6e2dcb 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/App.tsx +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/App.tsx @@ -1,4 +1,4 @@ -import { HashRouter as Router, Routes, Route } from 'react-router-dom'; +import { HashRouter as Router, Routes, Route } from 'react-router'; import { SecurityContext } from './types/Security'; import { ModuleContext } from './types/Module'; import ContactList from './pages/ContactList'; diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactForm.tsx b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactForm.tsx index 69f6aec9e3d..7ea60f27fcd 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactForm.tsx +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactForm.tsx @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import { useNavigate, useParams } from 'react-router-dom'; +import { useNavigate, useParams } from 'react-router'; import { Contact } from '../types/Contact'; import { ModuleContext } from '../types/Module'; import { getContact, saveContact } from '../services/services'; diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactList.tsx b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactList.tsx index 2b2fa96209c..5154e07d210 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactList.tsx +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.SpaReact/src/pages/ContactList.tsx @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate } from 'react-router'; import { Contact } from '../types/Contact'; import { SecurityContext } from '../types/Security'; import { ModuleContext } from '../types/Module'; diff --git a/DNN Platform/Modules/TelerikRemoval/Dnn.Modules.TelerikRemoval.csproj b/DNN Platform/Modules/TelerikRemoval/Dnn.Modules.TelerikRemoval.csproj index 4049fcb5232..084d6bffbf6 100644 --- a/DNN Platform/Modules/TelerikRemoval/Dnn.Modules.TelerikRemoval.csproj +++ b/DNN Platform/Modules/TelerikRemoval/Dnn.Modules.TelerikRemoval.csproj @@ -150,5 +150,4 @@ - \ No newline at end of file diff --git a/DNN Platform/Modules/TelerikRemoval/TelerikRemoval.dnn b/DNN Platform/Modules/TelerikRemoval/TelerikRemoval.dnn index 6e304b4caf8..4cd1f5bbf6e 100644 --- a/DNN Platform/Modules/TelerikRemoval/TelerikRemoval.dnn +++ b/DNN Platform/Modules/TelerikRemoval/TelerikRemoval.dnn @@ -1,6 +1,6 @@ - + Telerik Removal This module allows you to remove the DotNetNuke Telerik Web Components library from your site. diff --git a/DNN Platform/Modules/TelerikRemoval/Web.config b/DNN Platform/Modules/TelerikRemoval/Web.config index 50fea3a1bb9..907f9edd326 100644 --- a/DNN Platform/Modules/TelerikRemoval/Web.config +++ b/DNN Platform/Modules/TelerikRemoval/Web.config @@ -76,10 +76,4 @@ - - - - - - \ No newline at end of file diff --git a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Facebook/Facebook_Auth.dnn b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Facebook/Facebook_Auth.dnn index 9fa81000c38..e1a755cd459 100644 --- a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Facebook/Facebook_Auth.dnn +++ b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Facebook/Facebook_Auth.dnn @@ -1,6 +1,6 @@ - + DotNetNuke Facebook Authentication Project The DotNetNuke Facebook Authentication Project is an Authentication provider for DotNetNuke that uses Facebook authentication to authenticate users. diff --git a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Google/Google_Auth.dnn b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Google/Google_Auth.dnn index a3dfeaaf67e..bea55ee0958 100644 --- a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Google/Google_Auth.dnn +++ b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Google/Google_Auth.dnn @@ -1,6 +1,6 @@ - + DotNetNuke Google Authentication Project The DotNetNuke Google Authentication Project is an Authentication provider for DotNetNuke that uses Google authentication to authenticate users. diff --git a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.LiveConnect/Live_Auth.dnn b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.LiveConnect/Live_Auth.dnn index 4b33b9d3d4d..ce44a0a03b0 100644 --- a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.LiveConnect/Live_Auth.dnn +++ b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.LiveConnect/Live_Auth.dnn @@ -1,6 +1,6 @@ - + DotNetNuke Live Authentication Project The DotNetNuke Live Authentication Project is an Authentication provider for DotNetNuke that uses diff --git a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Twitter/Twitter_Auth.dnn b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Twitter/Twitter_Auth.dnn index 3d404993b6e..2ee6ce4d27f 100644 --- a/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Twitter/Twitter_Auth.dnn +++ b/DNN Platform/Providers/AuthenticationProviders/DotNetNuke.Authentication.Twitter/Twitter_Auth.dnn @@ -1,6 +1,6 @@ - + DotNetNuke Twitter Authentication Project The DotNetNuke Twitter Authentication Project is an Authentication provider for DotNetNuke that uses diff --git a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider.csproj b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider.csproj index 0eb186f9bdb..d46622eb13c 100644 --- a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider.csproj +++ b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider.csproj @@ -1,6 +1,8 @@  + bin/Providers + false net48 true latest diff --git a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/Provider.build b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/Provider.build index 698c4db9c93..f0945c61e3b 100644 --- a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/Provider.build +++ b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/Provider.build @@ -11,7 +11,7 @@ $(WebsiteInstallPath)\Provider - + diff --git a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/SimpleWebFarmCachingProvider.dnn b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/SimpleWebFarmCachingProvider.dnn index 2f022f80e4a..756cdc3e90f 100644 --- a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/SimpleWebFarmCachingProvider.dnn +++ b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/SimpleWebFarmCachingProvider.dnn @@ -1,6 +1,6 @@  - + DotNetNuke Simple Web Farm Caching Provider DotNetNuke Simple Web Farm Caching Provider diff --git a/DNN Platform/Providers/ClientCapabilityProviders/Provider.AspNetCCP/AspNetClientCapabilityProvider.dnn b/DNN Platform/Providers/ClientCapabilityProviders/Provider.AspNetCCP/AspNetClientCapabilityProvider.dnn index 129df99eb71..4164bf1ce90 100644 --- a/DNN Platform/Providers/ClientCapabilityProviders/Provider.AspNetCCP/AspNetClientCapabilityProvider.dnn +++ b/DNN Platform/Providers/ClientCapabilityProviders/Provider.AspNetCCP/AspNetClientCapabilityProvider.dnn @@ -1,6 +1,6 @@ - + DotNetNuke ASP.NET Client Capability Provider ASP.NET Device Detection / Client Capability Provider ~/Providers/ClientCapabilityProviders/AspNetClientCapabilityProvider/Images/mobiledevicedet_32X32.png diff --git a/DNN Platform/Providers/FolderProviders/DotNetNuke.Providers.FolderProviders.csproj b/DNN Platform/Providers/FolderProviders/DotNetNuke.Providers.FolderProviders.csproj index 7aa7bac8658..1f06d9cc12f 100644 --- a/DNN Platform/Providers/FolderProviders/DotNetNuke.Providers.FolderProviders.csproj +++ b/DNN Platform/Providers/FolderProviders/DotNetNuke.Providers.FolderProviders.csproj @@ -69,10 +69,6 @@ - - False - ..\..\Components\WindowsAzure\Microsoft.WindowsAzure.Storage.dll - @@ -140,6 +136,9 @@ DotNetNuke.Library + + + \ No newline at end of file diff --git a/DNN Platform/Providers/FolderProviders/FolderProviders.dnn b/DNN Platform/Providers/FolderProviders/FolderProviders.dnn index 9b45778d289..5a12f398921 100644 --- a/DNN Platform/Providers/FolderProviders/FolderProviders.dnn +++ b/DNN Platform/Providers/FolderProviders/FolderProviders.dnn @@ -1,6 +1,6 @@  - + DotNetNuke Folder Providers Azure Folder Providers for DotNetNuke. diff --git a/DNN Platform/Providers/FolderProviders/Provider.build b/DNN Platform/Providers/FolderProviders/Provider.build index e6b7ed2eed3..cb4d7606a1c 100644 --- a/DNN Platform/Providers/FolderProviders/Provider.build +++ b/DNN Platform/Providers/FolderProviders/Provider.build @@ -12,7 +12,7 @@ - + diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.csproj b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.csproj index 6723aa03fbf..a5cf25ba973 100644 --- a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.csproj +++ b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.csproj @@ -73,9 +73,6 @@ SA1600 - - ..\..\..\Components\DataAccessBlock\bin\Microsoft.ApplicationBlocks.Data.dll - diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.dnn b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.dnn index 0650d1891ac..d5145a34eb8 100644 --- a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.dnn +++ b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/DNNConnect.CKEditorProvider.dnn @@ -1,6 +1,6 @@  - + CKEditor Provider CKEditor Provider for DNN ~/Providers/HtmlEditorProviders/DNNConnect.CKE/LogoCKEditor.png diff --git a/DNN Platform/Providers/SmtpOAuthProviders/ExchangeOnlineAuthProvider/ExchangeOnlineAuthProvider.dnn b/DNN Platform/Providers/SmtpOAuthProviders/ExchangeOnlineAuthProvider/ExchangeOnlineAuthProvider.dnn index 2cc2786b1db..1464f30c9f6 100644 --- a/DNN Platform/Providers/SmtpOAuthProviders/ExchangeOnlineAuthProvider/ExchangeOnlineAuthProvider.dnn +++ b/DNN Platform/Providers/SmtpOAuthProviders/ExchangeOnlineAuthProvider/ExchangeOnlineAuthProvider.dnn @@ -1,6 +1,6 @@  - + Exchange Online SMTP OAuth Provider The provider allows you to config the SMTP client to send emails with Microsoft exchange online service. ~/Icons/Sigma/Extensions_32x32_Standard.png diff --git a/DNN Platform/Providers/SmtpOAuthProviders/GoogleMailAuthProvider/GoogleMailAuthProvider.dnn b/DNN Platform/Providers/SmtpOAuthProviders/GoogleMailAuthProvider/GoogleMailAuthProvider.dnn index b27016c2c87..4f132a8584b 100644 --- a/DNN Platform/Providers/SmtpOAuthProviders/GoogleMailAuthProvider/GoogleMailAuthProvider.dnn +++ b/DNN Platform/Providers/SmtpOAuthProviders/GoogleMailAuthProvider/GoogleMailAuthProvider.dnn @@ -1,6 +1,6 @@  - + Google Mail SMTP OAuth Provider The provider allows you to config the SMTP client to send emails with gmail service. ~/Icons/Sigma/Extensions_32x32_Standard.png diff --git a/DNN Platform/Skins/Aperture/build.ts b/DNN Platform/Skins/Aperture/build.ts index 84c31b7c47a..8303c246d52 100644 --- a/DNN Platform/Skins/Aperture/build.ts +++ b/DNN Platform/Skins/Aperture/build.ts @@ -2,7 +2,7 @@ import esbuild from "esbuild"; import path from "path"; import settings from "../../../settings.local.json"; import fs from "fs"; -import sass from "sass"; +import * as sass from "sass-embedded"; import postcss from "postcss"; import postcssImport from "postcss-import"; import autoprefixer from "autoprefixer"; @@ -97,7 +97,7 @@ function ensureDirectoryExists(filePath: string): void { /** Compile SCSS to CSS with sourcemaps */ async function buildScss(input: string, output: string): Promise { try { - const result = sass.compile( + const result = await sass.compileAsync( input, { sourceMap: true, diff --git a/DNN Platform/Skins/Aperture/manifest.dnn b/DNN Platform/Skins/Aperture/manifest.dnn index 8b601cc84f6..b346da2ca6b 100644 --- a/DNN Platform/Skins/Aperture/manifest.dnn +++ b/DNN Platform/Skins/Aperture/manifest.dnn @@ -1,6 +1,6 @@ - + Aperture Default theme for DNN 10. aperture.png diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 77ab9b4f07c..c8809e288e3 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -1,6 +1,6 @@ { "name": "aperture", - "version": "10.2.4", + "version": "10.3.1", "description": "Default theme for DNN 10.", "main": "src/scripts/main.ts", "author": "DNN Community", @@ -19,16 +19,16 @@ "@types/postcss-import": "^14.0.3", "browser-sync": "^3.0.4", "chokidar": "^4.0.3", - "cssnano": "^7.1.1", - "glob": "^13.0.0", - "postcss": "^8.5.6", + "cssnano": "^7.1.3", + "glob": "^13.0.6", + "postcss": "^8.5.8", "postcss-banner": "^4.0.1", "postcss-cli": "^11.0.1", "postcss-import": "^16.1.1", - "sass": "^1.93.2", - "tsx": "^4.20.6", + "sass-embedded": "^1.98.0", + "tsx": "^4.21.0", "typescript": "^5.9.3", - "zip-lib": "^1.1.2" + "zip-lib": "^1.3.1" }, "browserslist": [ "last 2 versions", diff --git a/DNN Platform/Skins/Aperture/src/scss/utilities/_borders.scss b/DNN Platform/Skins/Aperture/src/scss/utilities/_borders.scss index 802c0c57a6f..0c1867853ca 100644 --- a/DNN Platform/Skins/Aperture/src/scss/utilities/_borders.scss +++ b/DNN Platform/Skins/Aperture/src/scss/utilities/_borders.scss @@ -13,7 +13,7 @@ $border-radius-sizes: ( // Border Radius Mixin @mixin border-radius($size, $important: false) { - border-radius: $size if($important, !important, null); + border-radius: $size if(sass($important): !important); } // Responsive Border Radius Mixin diff --git a/DNN Platform/Skins/Aperture/src/scss/utilities/_flex.scss b/DNN Platform/Skins/Aperture/src/scss/utilities/_flex.scss index 0cc8e596ba4..f999fc8c330 100644 --- a/DNN Platform/Skins/Aperture/src/scss/utilities/_flex.scss +++ b/DNN Platform/Skins/Aperture/src/scss/utilities/_flex.scss @@ -3,11 +3,11 @@ // Mixin for generating flex-direction classes // usage: @include flex-direction('row'); @mixin flex-direction($direction, $important: false) { - -webkit-box-orient: if($direction == 'row', horizontal, vertical) if($important, !important, null); - -webkit-box-direction: normal if($important, !important, null); - -webkit-flex-direction: #{$direction} if($important, !important, null); - -ms-flex-direction: #{$direction} if($important, !important, null); - flex-direction: #{$direction} if($important, !important, null); + -webkit-box-orient: if(sass($direction == 'row'): horizontal; else: vertical) if(sass($important): !important); + -webkit-box-direction: normal if(sass($important): !important); + -webkit-flex-direction: #{$direction} if(sass($important): !important); + -ms-flex-direction: #{$direction} if(sass($important): !important); + flex-direction: #{$direction} if(sass($important): !important); } // Mixin for generating media queries for flex-direction diff --git a/DNN Platform/Skins/Aperture/src/scss/utilities/_gap.scss b/DNN Platform/Skins/Aperture/src/scss/utilities/_gap.scss index 83fd1ec6e0b..cdd5007002c 100644 --- a/DNN Platform/Skins/Aperture/src/scss/utilities/_gap.scss +++ b/DNN Platform/Skins/Aperture/src/scss/utilities/_gap.scss @@ -13,11 +13,11 @@ $gap-sizes: ( // Gap Mixin @mixin gap($type, $size, $important: false) { @if $type == 'gap' { - gap: $size if($important, !important, null); + gap: $size if(sass($important): !important); } @else if $type == 'row-gap' { - row-gap: $size if($important, !important, null); + row-gap: $size if(sass($important): !important); } @else if $type == 'column-gap' { - column-gap: $size if($important, !important, null); + column-gap: $size if(sass($important): !important); } } diff --git a/DNN Platform/Skins/Aperture/src/scss/utilities/_margin.scss b/DNN Platform/Skins/Aperture/src/scss/utilities/_margin.scss index efeee03eea2..650783919ed 100644 --- a/DNN Platform/Skins/Aperture/src/scss/utilities/_margin.scss +++ b/DNN Platform/Skins/Aperture/src/scss/utilities/_margin.scss @@ -14,15 +14,15 @@ $margin-sizes: ( // Margin Mixin @mixin margin($side, $size, $important: false) { @if $side == 'all' { - margin: $size if($important, !important, null); + margin: $size if(sass($important): !important); } @else if $side == 'x' { - margin-left: $size if($important, !important, null); - margin-right: $size if($important, !important, null); + margin-left: $size if(sass($important): !important); + margin-right: $size if(sass($important): !important); } @else if $side == 'y' { - margin-top: $size if($important, !important, null); - margin-bottom: $size if($important, !important, null); + margin-top: $size if(sass($important): !important); + margin-bottom: $size if(sass($important): !important); } @else { - margin-#{$side}: $size if($important, !important, null); + margin-#{$side}: $size if(sass($important): !important); } } diff --git a/DNN Platform/Skins/Aperture/src/scss/utilities/_padding.scss b/DNN Platform/Skins/Aperture/src/scss/utilities/_padding.scss index 15cd65a7029..3d9aada7a94 100644 --- a/DNN Platform/Skins/Aperture/src/scss/utilities/_padding.scss +++ b/DNN Platform/Skins/Aperture/src/scss/utilities/_padding.scss @@ -13,15 +13,15 @@ $padding-sizes: ( // Padding Mixin @mixin padding($side, $size, $important: false) { @if $side == 'all' { - padding: $size if($important, !important, null); + padding: $size if(sass($important): !important); } @else if $side == 'x' { - padding-left: $size if($important, !important, null); - padding-right: $size if($important, !important, null); + padding-left: $size if(sass($important): !important); + padding-right: $size if(sass($important): !important); } @else if $side == 'y' { - padding-top: $size if($important, !important, null); - padding-bottom: $size if($important, !important, null); + padding-top: $size if(sass($important): !important); + padding-bottom: $size if(sass($important): !important); } @else { - padding-#{$side}: $size if($important, !important, null); + padding-#{$side}: $size if(sass($important): !important); } } diff --git a/DNN Platform/Skins/Aperture/src/scss/utilities/_position.scss b/DNN Platform/Skins/Aperture/src/scss/utilities/_position.scss index fba8a52489b..1f7d6463d71 100644 --- a/DNN Platform/Skins/Aperture/src/scss/utilities/_position.scss +++ b/DNN Platform/Skins/Aperture/src/scss/utilities/_position.scss @@ -2,7 +2,7 @@ // Position Mixin @mixin position($type) { - position: if($type == 'sticky', '-webkit-sticky', $type); + position: if(sass($type == 'sticky'): '-webkit-sticky'; else: $type); position: $type; } diff --git a/DNN Platform/Skins/Aperture/src/scss/utilities/_text.scss b/DNN Platform/Skins/Aperture/src/scss/utilities/_text.scss index ad102dd5e5c..8ca80a5bdb0 100644 --- a/DNN Platform/Skins/Aperture/src/scss/utilities/_text.scss +++ b/DNN Platform/Skins/Aperture/src/scss/utilities/_text.scss @@ -3,7 +3,7 @@ // Text Mixin @mixin text($alignment, $important: false) { - text-align: #{$alignment} if($important, !important, null); + text-align: #{$alignment} if(sass($important): !important); } // Responsive Text Mixin diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj index 923a883007d..f7a4fc7c980 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj @@ -26,12 +26,6 @@ - - ..\..\Components\Lucene.Net\bin\Lucene.Net.dll - - - ..\..\Components\Lucene.Net.Contrib\bin\Lucene.Net.Contrib.Analyzers.dll - diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.cs index 580898f93cb..d9305d606c8 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.cs @@ -598,8 +598,8 @@ private void GetDates(int userId, int roleId) } } - this.effectiveDatePicker.SelectedDate = effectiveDate; - this.expiryDatePicker.SelectedDate = expiryDate; + this.effectiveDatePicker.Text = effectiveDate?.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); + this.expiryDatePicker.Text = expiryDate?.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } private void CboUsers_SelectedIndexChanged(object sender, EventArgs e) @@ -660,34 +660,23 @@ private void CmdAdd_Click(object sender, EventArgs e) // do not modify the portal Administrator account dates if (this.User.UserID == this.PortalSettings.AdministratorId && this.Role.RoleID == this.PortalSettings.AdministratorRoleId) { - this.effectiveDatePicker.SelectedDate = null; - this.expiryDatePicker.SelectedDate = null; + this.effectiveDatePicker.Text = null; + this.expiryDatePicker.Text = null; } - DateTime datEffectiveDate; - if (this.effectiveDatePicker.SelectedDate != null) - { - datEffectiveDate = this.effectiveDatePicker.SelectedDate.Value; - } - else + if (!DateTime.TryParseExact(this.effectiveDatePicker.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var datEffectiveDate)) { datEffectiveDate = Null.NullDate; } - DateTime datExpiryDate; - if (this.expiryDatePicker.SelectedDate != null) - { - datExpiryDate = this.expiryDatePicker.SelectedDate.Value; - } - else + if (!DateTime.TryParseExact(this.expiryDatePicker.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var datExpiryDate)) { datExpiryDate = Null.NullDate; } // Add User to Role var isOwner = false; - - if ((this.Role.SecurityMode == SecurityMode.SocialGroup) || (this.Role.SecurityMode == SecurityMode.Both)) + if (this.Role.SecurityMode is SecurityMode.SocialGroup or SecurityMode.Both) { isOwner = this.chkIsOwner.Checked; } @@ -709,27 +698,23 @@ private void GrdUserRoles_ItemCreated(object sender, DataGridItemEventArgs e) { try { - DataGridItem item = e.Item; - - var cmdDeleteUserRole = e.Item.FindControl("cmdDeleteUserRole") as ImageButton; - var role = e.Item.DataItem as UserRoleInfo; - - if (cmdDeleteUserRole != null) + if (e.Item.FindControl("cmdDeleteUserRole") is ImageButton cmdDeleteUserRole) { + var userRoleInfo = (UserRoleInfo)e.Item.DataItem; if (this.roleId == Null.NullInteger) { - ClientAPI.AddButtonConfirm(cmdDeleteUserRole, string.Format(CultureInfo.CurrentCulture, Localization.GetString("DeleteRoleFromUser.Text", this.LocalResourceFile), role.FullName, role.RoleName)); + ClientAPI.AddButtonConfirm(cmdDeleteUserRole, string.Format(CultureInfo.CurrentCulture, Localization.GetString("DeleteRoleFromUser.Text", this.LocalResourceFile), userRoleInfo.FullName, userRoleInfo.RoleName)); } else { - ClientAPI.AddButtonConfirm(cmdDeleteUserRole, string.Format(CultureInfo.CurrentCulture, Localization.GetString("DeleteUsersFromRole.Text", this.LocalResourceFile), role.FullName, role.RoleName)); + ClientAPI.AddButtonConfirm(cmdDeleteUserRole, string.Format(CultureInfo.CurrentCulture, Localization.GetString("DeleteUsersFromRole.Text", this.LocalResourceFile), userRoleInfo.FullName, userRoleInfo.RoleName)); } - cmdDeleteUserRole.Attributes.Add("roleId", role.RoleID.ToString()); - cmdDeleteUserRole.Attributes.Add("userId", role.UserID.ToString()); + cmdDeleteUserRole.Attributes.Add("roleId", userRoleInfo.RoleID.ToString()); + cmdDeleteUserRole.Attributes.Add("userId", userRoleInfo.UserID.ToString()); } - item.Cells[5].Visible = (this.Role.SecurityMode == SecurityMode.SocialGroup) || (this.Role.SecurityMode == SecurityMode.Both); + e.Item.Cells[5].Visible = this.Role.SecurityMode is SecurityMode.SocialGroup or SecurityMode.Both; } catch (Exception exc) { diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.designer.cs b/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.designer.cs index e379bfe0de4..522e2cd0cfd 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.designer.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/SecurityRoles.ascx.designer.cs @@ -92,13 +92,13 @@ public partial class SecurityRoles { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::DotNetNuke.Web.UI.WebControls.Internal.DnnDatePicker effectiveDatePicker; + protected global::System.Web.UI.WebControls.TextBox effectiveDatePicker; /// expiryDatePicker control. /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::DotNetNuke.Web.UI.WebControls.Internal.DnnDatePicker expiryDatePicker; + protected global::System.Web.UI.WebControls.TextBox expiryDatePicker; /// placeIsOwner control. /// /// Auto-generated field. diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/securityroles.ascx b/DNN Platform/Website/DesktopModules/Admin/Security/securityroles.ascx index 12fab38d344..1849682df7e 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/securityroles.ascx +++ b/DNN Platform/Website/DesktopModules/Admin/Security/securityroles.ascx @@ -41,11 +41,11 @@ - + - + diff --git a/DNN Platform/Website/DotNetNuke.Website.csproj b/DNN Platform/Website/DotNetNuke.Website.csproj index f1d8b105d49..77802233537 100644 --- a/DNN Platform/Website/DotNetNuke.Website.csproj +++ b/DNN Platform/Website/DotNetNuke.Website.csproj @@ -534,7 +534,6 @@ - stylecop.json @@ -768,10 +767,6 @@ - - - - @@ -3379,6 +3374,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/DNN Platform/Website/Licenses/Pikaday (MIT).txt.resources b/DNN Platform/Website/Licenses/Pikaday (MIT).txt.resources deleted file mode 100644 index 211d85b3fcf..00000000000 --- a/DNN Platform/Website/Licenses/Pikaday (MIT).txt.resources +++ /dev/null @@ -1,46 +0,0 @@ -PROJECT: Pikaday - -WHERE WE USE IT: As a reusable javascript library and in DnnDatePicker, see https://github.com/dnnsoftware/Dnn.Platform/search?q=pikaday&unscoped_q=pikaday - -LICENSE TYPE: MIT - -PROJECT LINK: https://github.com/Pikaday/Pikaday - -LICENSE (AS OF 2019-04-20): - -Copyright (c) 2014 David Bushell BSD & MIT license - -The MIT License (MIT) - -Copyright (c) 2014 David Bushell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -The BSD License - -Copyright (c) 2014 David Bushell -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/10.03.00.SqlDataProvider b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/10.03.00.SqlDataProvider new file mode 100644 index 00000000000..33a259d05fa --- /dev/null +++ b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/10.03.00.SqlDataProvider @@ -0,0 +1,9 @@ +/************************************************************/ +/***** SqlDataProvider *****/ +/***** *****/ +/***** *****/ +/***** Note: To manually execute this script you must *****/ +/***** perform a search and replace operation *****/ +/***** for {databaseOwner} and {objectQualifier} *****/ +/***** *****/ +/************************************************************/ diff --git a/DNN Platform/Website/Resources/Shared/components/DatePicker/moment.min.js b/DNN Platform/Website/Resources/Shared/components/DatePicker/moment.min.js deleted file mode 100644 index a508d6f7241..00000000000 --- a/DNN Platform/Website/Resources/Shared/components/DatePicker/moment.min.js +++ /dev/null @@ -1,6 +0,0 @@ -//! moment.js -//! version : 2.29.4 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var H;function f(){return H.apply(null,arguments)}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function F(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function L(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(c(e,t))return;return 1}function o(e){return void 0===e}function u(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function V(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function G(e,t){for(var n=[],s=e.length,i=0;i>>0,s=0;sAe(e)?(r=e+1,t-Ae(e)):(r=e,t);return{year:r,dayOfYear:n}}function qe(e,t,n){var s,i,r=ze(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+P(i=e.year()-1,t,n):r>P(e.year(),t,n)?(s=r-P(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function P(e,t,n){var s=ze(e,t,n),t=ze(e+1,t,n);return(Ae(e)-s+t)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),t("week","w"),t("isoWeek","W"),n("week",5),n("isoWeek",5),v("w",p),v("ww",p,w),v("W",p),v("WW",p,w),Te(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=g(e)});function Be(e,t){return e.slice(t,7).concat(e.slice(0,t))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),t("day","d"),t("weekday","e"),t("isoWeekday","E"),n("day",11),n("weekday",11),n("isoWeekday",11),v("d",p),v("e",p),v("E",p),v("dd",function(e,t){return t.weekdaysMinRegex(e)}),v("ddd",function(e,t){return t.weekdaysShortRegex(e)}),v("dddd",function(e,t){return t.weekdaysRegex(e)}),Te(["dd","ddd","dddd"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:m(n).invalidWeekday=e}),Te(["d","e","E"],function(e,t,n,s){t[s]=g(e)});var Je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Qe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Xe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=k,et=k,tt=k;function nt(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=M(this.weekdaysMin(s,"")),n=M(this.weekdaysShort(s,"")),s=M(this.weekdays(s,"")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function st(){return this.hours()%12||12}function it(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rt(e,t){return t._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,st),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)}),s("hmmss",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+r(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),it("a",!0),it("A",!1),t("hour","h"),n("hour",13),v("a",rt),v("A",rt),v("H",p),v("h",p),v("k",p),v("HH",p,w),v("hh",p,w),v("kk",p,w),v("hmm",ge),v("hmmss",we),v("Hmm",ge),v("Hmmss",we),D(["H","HH"],x),D(["k","kk"],function(e,t,n){e=g(e);t[x]=24===e?0:e}),D(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),D(["h","hh"],function(e,t,n){t[x]=g(e),m(n).bigHour=!0}),D("hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s)),m(n).bigHour=!0}),D("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i)),m(n).bigHour=!0}),D("Hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s))}),D("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i))});k=de("Hours",!0);var at,ot={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ce,monthsShort:Ue,week:{dow:0,doy:6},weekdays:Je,weekdaysMin:Xe,weekdaysShort:Qe,meridiemParse:/[ap]\.?m?\.?/i},R={},ut={};function lt(e){return e&&e.toLowerCase().replace("_","-")}function ht(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return at}function dt(t){var e;if(void 0===R[t]&&"undefined"!=typeof module&&module&&module.exports&&null!=t.match("^[^/\\\\]*$"))try{e=at._abbr,require("./locale/"+t),ct(e)}catch(e){R[t]=null}return R[t]}function ct(e,t){return e&&((t=o(t)?mt(e):ft(e,t))?at=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),at._abbr}function ft(e,t){if(null===t)return delete R[e],null;var n,s=ot;if(t.abbr=e,null!=R[e])Q("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=R[e]._config;else if(null!=t.parentLocale)if(null!=R[t.parentLocale])s=R[t.parentLocale]._config;else{if(null==(n=dt(t.parentLocale)))return ut[t.parentLocale]||(ut[t.parentLocale]=[]),ut[t.parentLocale].push({name:e,config:t}),null;s=n._config}return R[e]=new K(X(s,t)),ut[e]&&ut[e].forEach(function(e){ft(e.name,e.config)}),ct(e),R[e]}function mt(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return at;if(!a(e)){if(t=dt(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===m(e).overflow&&(t=t[O]<0||11We(t[Y],t[O])?b:t[x]<0||24P(r,u,l)?m(s)._overflowWeeks=!0:null!=h?m(s)._overflowWeekday=!0:(d=$e(r,a,o,u,l),s._a[Y]=d.year,s._dayOfYear=d.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[Y],n[Y]),(e._dayOfYear>Ae(i)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),h=Ze(i,0,e._dayOfYear),e._a[O]=h.getUTCMonth(),e._a[b]=h.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[x]&&0===e._a[T]&&0===e._a[N]&&0===e._a[Ne]&&(e._nextDay=!0,e._a[x]=0),e._d=(e._useUTC?Ze:je).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[x]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(m(e).weekdayMismatch=!0)}}function Tt(e){if(e._f===f.ISO_8601)St(e);else if(e._f===f.RFC_2822)Ot(e);else{e._a=[],m(e).empty=!0;for(var t,n,s,i,r,a=""+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],h=l.length,d=0;de.valueOf():e.valueOf()"}),i.toJSON=function(){return this.isValid()?this.toISOString():null},i.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},i.unix=function(){return Math.floor(this.valueOf()/1e3)},i.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},i.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},i.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},i.isLocal=function(){return!!this.isValid()&&!this._isUTC},i.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},i.isUtc=At,i.isUTC=At,i.zoneAbbr=function(){return this._isUTC?"UTC":""},i.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},i.dates=e("dates accessor is deprecated. Use date instead.",ke),i.months=e("months accessor is deprecated. Use month instead",Ge),i.years=e("years accessor is deprecated. Use year instead",Ie),i.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,t),this):-this.utcOffset()}),i.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return $(t,this),(t=Nt(t))._a?(e=(t._isUTC?l:W)(t._a),this._isDSTShifted=this.isValid()&&0 11) { - calendar.year += Math.floor(Math.abs(calendar.month) / 12); - calendar.month -= 12; - } - return calendar; - }, - - /** - * defaults and localisation - */ - defaults = { - // bind the picker to a form field - field: null, - - // automatically show/hide the picker on `field` focus (default `true` if `field` is set) - bound: undefined, - - // position of the datepicker, relative to the field (default to bottom & left) - // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position) - position: 'bottom left', - - // automatically fit in the viewport even if it means repositioning from the position option - reposition: true, - - // the default output format for `.toString()` and `field` value - // set in `config` based on if showTime is set - format: null, - - // an array giving the allowable input format(s). As with moment, - // the input formats may be either a single string or an array of strings. - // Usually set in `config` - inputFormats: null, - - // the initial date to view when first opened - defaultDate: null, - - // make the `defaultDate` the initial selected value - setDefaultDate: false, - - // first day of week (0: Sunday, 1: Monday etc) - firstDay: 0, - - // the default flag for moment's strict date parsing - formatStrict: false, - - // the minimum/earliest date that can be selected - minDate: null, - // the maximum/latest date that can be selected - maxDate: null, - - // number of years either side, or array of upper/lower range - yearRange: 10, - - // show week numbers at head of row - showWeekNumber: false, - - // used internally (don't config outside) - minYear: 0, - maxYear: 9999, - minMonth: undefined, - maxMonth: undefined, - - startRange: null, - endRange: null, - - isRTL: false, - - // Additional text to append to the year in the calendar title - yearSuffix: '', - - // Render the month after year in the calendar title - showMonthAfterYear: false, - - // Render days of the calendar grid that fall in the next or previous month - showDaysInNextAndPreviousMonths: false, - - // how many months are visible - numberOfMonths: 1, - - // time - showTime: true, - showMinutes: true, - showSeconds: false, - use24hour: false, - incrementHourBy: 1, - incrementMinuteBy: 1, - incrementSecondBy: 1, - timeLabel: null, - - // option to prevent calendar from auto-closing after date is selected - autoClose: true, - - // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`) - // only used for the first display or when a selected date is not visible - mainCalendar: 'left', - - // Specify a DOM element to render the calendar in - container: undefined, - - // internationalization - i18n: { - previousMonth: 'Previous Month', - nextMonth: 'Next Month', - months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - midnight: 'Midnight', - noon: 'Noon' - }, - - // Theme Classname - theme: null, - - // callback function - onSelect: null, - onOpen: null, - onClose: null, - onDraw: null - }, - - - /** - * templating functions to abstract HTML rendering - */ - renderDayName = function (opts, day, abbr) { - day += opts.firstDay; - while (day >= 7) { - day -= 7; - } - return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day]; - }, - - renderDay = function (opts) { - var arr = []; - var ariaSelected = 'false'; - if (opts.isEmpty) { - if (opts.showDaysInNextAndPreviousMonths) { - arr.push('is-outside-current-month'); - } else { - return ''; - } - } - if (opts.isDisabled) { - arr.push('is-disabled'); - } - if (opts.isToday) { - arr.push('is-today'); - } - if (opts.isSelected) { - arr.push('is-selected'); - ariaSelected = 'true'; - } - if (opts.isInRange) { - arr.push('is-inrange'); - } - if (opts.isStartRange) { - arr.push('is-startrange'); - } - if (opts.isEndRange) { - arr.push('is-endrange'); - } - return '' + - '' + - ''; - }, - - renderWeek = function (d, m, y) { - // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified. - var onejan = new Date(y, 0, 1), - weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay() + 1) / 7); - return '' + weekNum + ''; - }, - - renderRow = function (days, isRTL) { - return '' + (isRTL ? days.reverse() : days).join('') + ''; - }, - - renderBody = function (rows) { - return '' + rows.join('') + ''; - }, - - renderHead = function (opts) { - var i, arr = []; - if (opts.showWeekNumber) { - arr.push(''); - } - for (i = 0; i < 7; i++) { - arr.push('' + renderDayName(opts, i, true) + ''); - } - return '' + (opts.isRTL ? arr.reverse() : arr).join('') + ''; - }, - - renderTitle = function (instance, c, year, month, refYear, randId) { - var i, j, arr, - opts = instance._o, - isMinYear = year === opts.minYear, - isMaxYear = year === opts.maxYear, - html = '
', - monthHtml, - yearHtml, - prev = true, - next = true; - - for (arr = [], i = 0; i < 12; i++) { - arr.push(''); - } - - monthHtml = '
' + opts.i18n.months[month] + '
'; - - if (isArray(opts.yearRange)) { - i = opts.yearRange[0]; - j = opts.yearRange[1] + 1; - } else { - i = year - opts.yearRange; - j = 1 + year + opts.yearRange; - } - - for (arr = []; i < j && i <= opts.maxYear; i++) { - if (i >= opts.minYear) { - arr.push(''); - } - } - yearHtml = '
' + year + opts.yearSuffix + '
'; - - if (opts.showMonthAfterYear) { - html += yearHtml + monthHtml; - } else { - html += monthHtml + yearHtml; - } - - if (isMinYear && (month === 0 || opts.minMonth >= month)) { - prev = false; - } - - if (isMaxYear && (month === 11 || opts.maxMonth <= month)) { - next = false; - } - - if (c === 0) { - html += ''; - } - if (c === (instance._o.numberOfMonths - 1)) { - html += ''; - } - - return html += '
'; - }, - - renderTable = function (opts, data, randId) { - return '' + renderHead(opts) + renderBody(data) + '
'; - }, - - renderTimePicker = function (num_options, selected_val, select_class, display_func, increment_by) { - increment_by = increment_by || 1; - var to_return = ''; - return to_return; - }, - - renderTime = function (hh, mm, ss, opts) { - var to_return = '' + - (opts.timeLabel !== null ? '' : '') + - renderTimePicker(24, hh, 'pika-select-hour', function (i) { - if (opts.use24hour) { - return i; - } else { - var to_return = (i % 12) + (i < 12 ? ' AM' : ' PM'); - if (to_return == '0 AM') { - return opts.i18n.midnight; - } else if (to_return == '0 PM') { - return opts.i18n.noon; - } else { - return to_return; - } - } - }, - opts.incrementHourBy); - - if (opts.showMinutes) { - to_return += '' + - renderTimePicker(60, mm, 'pika-select-minute', function (i) { if (i < 10) return "0" + i; return i }, opts.incrementMinuteBy); - } - - if (opts.showSeconds) { - to_return += '' + - renderTimePicker(60, ss, 'pika-select-second', function (i) { if (i < 10) return "0" + i; return i }, opts.incrementSecondBy); - } - return to_return + '
' + opts.timeLabel + '::
'; - }, - - - - /** - * Pikaday constructor - */ - Pikaday = function (options) { - var self = this, - opts = self.config(options); - - self._onMouseDown = function (e) { - if (!self._v) { - return; - } - e = e || window.event; - var target = e.target || e.srcElement; - if (!target) { - return; - } - - if (!hasClass(target, 'is-disabled')) { - if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) { - var newDate = new Date( - target.getAttribute('data-pika-year'), - target.getAttribute('data-pika-month'), - target.getAttribute('data-pika-day') - ); - // Preserve time selection when date changed - var prevDate = self._d || opts.defaultDate; - if (prevDate && isDate(prevDate) && opts.showTime) { - newDate.setHours(prevDate.getHours()); - newDate.setMinutes(prevDate.getMinutes()); - if (opts.showSeconds) { - newDate.setSeconds(prevDate.getSeconds()); - } - } - self.setDate(newDate); - if (opts.bound) { - sto(function () { - if (opts.autoClose) { - self.hide(); - } - if (opts.field) { - opts.field.blur(); - } - }, 100); - } - } - else if (hasClass(target, 'pika-prev')) { - self.prevMonth(); - } - else if (hasClass(target, 'pika-next')) { - self.nextMonth(); - } - } - if (!hasClass(target, 'pika-select')) { - // if this is touch event prevent mouse events emulation - if (e.preventDefault) { - e.preventDefault(); - } else { - e.returnValue = false; - return false; - } - } else { - self._c = true; - } - }; - - self._onChange = function (e) { - e = e || window.event; - var target = e.target || e.srcElement; - if (!target) { - return; - } - if (hasClass(target, 'pika-select-month')) { - self.gotoMonth(target.value); - } - else if (hasClass(target, 'pika-select-year')) { - self.gotoYear(target.value); - } - else if (hasClass(target, 'pika-select-hour')) { - self.setTime(target.value); - } - else if (hasClass(target, 'pika-select-minute')) { - self.setTime(null, target.value); - } - else if (hasClass(target, 'pika-select-second')) { - self.setTime(null, null, target.value); - } - }; - - self._onKeyChange = function (e) { - e = e || window.event; - - if (self.isVisible()) { - - switch (e.keyCode) { - case 13: - case 27: - opts.field.blur(); - break; - case 37: - e.preventDefault(); - self.adjustDate('subtract', 1); - break; - case 38: - self.adjustDate('subtract', 7); - break; - case 39: - self.adjustDate('add', 1); - break; - case 40: - self.adjustDate('add', 7); - break; - } - } - }; - - self._onInputChange = function (e) { - var date; - - if (e.firedBy === self) { - return; - } - if (hasMoment) { - date = moment(opts.field.value, opts.inputFormats, opts.formatStrict); - date = (date && date.isValid()) ? date.toDate() : null; - } - else { - date = new Date(Date.parse(opts.field.value)); - } - if (isDate(date)) { - self.setDate(date); - } - if (!self._v) { - self.show(); - } - }; - - self._onInputFocus = function () { - self.show(); - }; - - self._onInputClick = function () { - self.show(); - }; - - self._onInputBlur = function () { - // IE allows pika div to gain focus; catch blur the input field - var pEl = document.activeElement; - do { - if (hasClass(pEl, 'pika-single')) { - return; - } - } - while ((pEl = pEl.parentNode)); - - if (opts.autoClose && !self._c) { - self._b = sto(function () { - self.hide(); - }, 50); - } - self._c = false; - }; - - self._onClick = function (e) { - e = e || window.event; - var target = e.target || e.srcElement, - pEl = target; - if (!target) { - return; - } - if (!hasEventListeners && hasClass(target, 'pika-select')) { - if (!target.onchange) { - target.setAttribute('onchange', 'return;'); - addEvent(target, 'change', self._onChange); - } - } - do { - if (hasClass(pEl, 'pika-single') || - pEl === opts.trigger || - (opts.showTime && hasClass(pEl, 'pika-time-container'))) { - return; - } - } - while ((pEl = pEl.parentNode)); - if (self._v && target !== opts.trigger && pEl !== opts.trigger) { - self.hide(); - } - }; - - self.el = document.createElement('div'); - self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : ''); - - addEvent(self.el, 'mousedown', self._onMouseDown, true); - addEvent(self.el, 'touchend', self._onMouseDown, true); - addEvent(self.el, 'change', self._onChange); - addEvent(document, 'keydown', self._onKeyChange); - - if (opts.field) { - if (opts.container) { - opts.container.appendChild(self.el); - } else if (opts.bound) { - document.body.appendChild(self.el); - } else { - opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling); - } - addEvent(opts.field, 'change', self._onInputChange); - - if (!opts.defaultDate) { - if (hasMoment && opts.field.value) { - opts.defaultDate = moment(opts.field.value, opts.inputFormats).toDate(); - } else { - opts.defaultDate = new Date(Date.parse(opts.field.value)); - } - opts.setDefaultDate = true; - } - } - - var defDate = opts.defaultDate; - - if (isDate(defDate)) { - if (opts.setDefaultDate) { - self.setDate(defDate, true); - } else { - self.gotoDate(defDate); - } - } else { - self.gotoDate(new Date()); - } - - if (opts.bound) { - this.hide(); - self.el.className += ' is-bound'; - addEvent(opts.trigger, 'click', self._onInputClick); - addEvent(opts.trigger, 'focus', self._onInputFocus); - addEvent(opts.trigger, 'blur', self._onInputBlur); - } else { - this.show(); - } - }; - - - /** - * public Pikaday API - */ - Pikaday.prototype = { - /** - * configure functionality - */ - config: function (options) { - if (!this._o) { - this._o = extend({}, defaults, true); - } - - var opts = extend(this._o, options, true); - - opts.isRTL = !!opts.isRTL; - - opts.autoClose = !!opts.autoClose; - - opts.field = (opts.field && opts.field.nodeName) ? opts.field : null; - - opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null; - - opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field); - - opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field; - - opts.disableWeekends = !!opts.disableWeekends; - - opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null; - - var nom = parseInt(opts.numberOfMonths, 10) || 1; - opts.numberOfMonths = nom > 4 ? 4 : nom; - - if (!isDate(opts.minDate)) { - opts.minDate = false; - } - if (!isDate(opts.maxDate)) { - opts.maxDate = false; - } - if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) { - opts.maxDate = opts.minDate = false; - } - if (opts.minDate) { - this.setMinDate(opts.minDate); - } - if (opts.maxDate) { - this.setMaxDate(opts.maxDate); - } - - if (isArray(opts.yearRange)) { - var fallback = new Date().getFullYear() - 10; - opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback; - opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback; - } else { - opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange; - if (opts.yearRange > 100) { - opts.yearRange = 100; - } - } - - // If no format is given, set based on showTime - if (opts.format === null) { - opts.format = 'YYYY-MM-DD'; - if (opts.showTime) { - opts.format += ' HH:mm:ss'; - } - } - - if (!opts.inputFormats) { - opts.inputFormats = opts.format; - } - - return opts; - }, - - /** - * return a formatted string of the current selection (using Moment.js if available) - */ - toString: function (format) { - return !isDate(this._d) ? '' : hasMoment ? moment(this._d).format(format || this._o.format) : this._o.showTime ? this._d.toString() : this._d.toDateString(); - }, - - /** - * return a Moment.js object of the current selection (if available) - */ - getMoment: function () { - return hasMoment ? moment(this._d) : null; - }, - - /** - * set the current selection from a Moment.js object (if available) - */ - setMoment: function (date, preventOnSelect) { - if (hasMoment && moment.isMoment(date)) { - this.setDate(date.toDate(), preventOnSelect); - } - }, - - /** - * return a Date object of the current selection with fallback for the current date - */ - getDate: function () { - return isDate(this._d) ? new Date(this._d.getTime()) : new Date(); - }, - - /** - * set time components - * Currently defaulting to setting date to today if not set - */ - setTime: function (hours, minutes, seconds) { - if (!this._d) { - this._d = new Date(); - this._d.setHours(0, 0, 0, 0); - } - if (hours) { - this._d.setHours(hours); - } - if (minutes) { - this._d.setMinutes(minutes); - } - if (seconds) { - this._d.setSeconds(seconds); - } - this.setDate(this._d); - }, - - /** - * set the current selection - */ - setDate: function (date, preventOnSelect) { - if (!date) { - this._d = null; - - if (this._o.field) { - this._o.field.value = ''; - fireEvent(this._o.field, 'change', { firedBy: this }); - } - - return this.draw(); - } - if (typeof date === 'string') { - date = new Date(Date.parse(date)); - } - if (!isDate(date)) { - return; - } - - var min = this._o.minDate, - max = this._o.maxDate; - - if (isDate(min) && date < min) { - date = min; - } else if (isDate(max) && date > max) { - date = max; - } - - this._d = new Date(date.getTime()); - - if (this._o.showTime && !this._o.showSeconds) { - this._d.setSeconds(0); - } else if (!this._o.showTime) { - setToStartOfDay(this._d); - } - - this.gotoDate(this._d); - - if (this._o.field) { - this._o.field.value = this.toString(); - fireEvent(this._o.field, 'change', { firedBy: this }); - } - if (!preventOnSelect && typeof this._o.onSelect === 'function') { - this._o.onSelect.call(this, this.getDate()); - } - }, - - /** - * change view to a specific date - */ - gotoDate: function (date) { - var newCalendar = true; - - if (!isDate(date)) { - return; - } - - if (this.calendars) { - var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), - lastVisibleDate = new Date(this.calendars[this.calendars.length - 1].year, this.calendars[this.calendars.length - 1].month, 1), - visibleDate = date.getTime(); - // get the end of the month - lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1); - lastVisibleDate.setDate(lastVisibleDate.getDate() - 1); - newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate); - } - - if (newCalendar) { - this.calendars = [{ - month: date.getMonth(), - year: date.getFullYear(), - hour: date.getHours(), - minute: date.getMinutes(), - second: date.getSeconds() - }]; - if (this._o.mainCalendar === 'right') { - this.calendars[0].month += 1 - this._o.numberOfMonths; - } - } - - this.adjustCalendars(); - }, - - adjustDate: function (sign, days) { - - var day = this.getDate(); - var difference = parseInt(days) * 24 * 60 * 60 * 1000; - - var newDay; - - if (sign === 'add') { - newDay = new Date(day.valueOf() + difference); - } else if (sign === 'subtract') { - newDay = new Date(day.valueOf() - difference); - } - - if (hasMoment) { - if (sign === 'add') { - newDay = moment(day).add(days, "days").toDate(); - } else if (sign === 'subtract') { - newDay = moment(day).subtract(days, "days").toDate(); - } - } - - this.setDate(newDay); - }, - - adjustCalendars: function () { - this.calendars[0] = adjustCalendar(this.calendars[0]); - for (var c = 1; c < this._o.numberOfMonths; c++) { - this.calendars[c] = adjustCalendar({ - month: this.calendars[0].month + c, - year: this.calendars[0].year - }); - } - this.draw(); - }, - - gotoToday: function () { - this.gotoDate(new Date()); - }, - - /** - * change view to a specific month (zero-index, e.g. 0: January) - */ - gotoMonth: function (month) { - if (!isNaN(month)) { - this.calendars[0].month = parseInt(month, 10); - this.adjustCalendars(); - } - }, - - nextMonth: function () { - this.calendars[0].month++; - this.adjustCalendars(); - }, - - prevMonth: function () { - this.calendars[0].month--; - this.adjustCalendars(); - }, - - /** - * change view to a specific full year (e.g. "2012") - */ - gotoYear: function (year) { - if (!isNaN(year)) { - this.calendars[0].year = parseInt(year, 10); - this.adjustCalendars(); - } - }, - - /** - * change the minDate - */ - setMinDate: function (value) { - if (value instanceof Date) { - if (!this._o.showTime) setToStartOfDay(value); - this._o.minDate = value; - this._o.minYear = value.getFullYear(); - this._o.minMonth = value.getMonth(); - } else { - this._o.minDate = defaults.minDate; - this._o.minYear = defaults.minYear; - this._o.minMonth = defaults.minMonth; - this._o.startRange = defaults.startRange; - } - this.draw(); - }, - - /** - * change the maxDate - */ - setMaxDate: function (value) { - if (value instanceof Date) { - if (!this._o.showTime) setToStartOfDay(value); - this._o.maxDate = value; - this._o.maxYear = value.getFullYear(); - this._o.maxMonth = value.getMonth(); - } else { - this._o.maxDate = defaults.maxDate; - this._o.maxYear = defaults.maxYear; - this._o.maxMonth = defaults.maxMonth; - this._o.endRange = defaults.endRange; - } - this.draw(); - }, - - setStartRange: function (value) { - this._o.startRange = value; - }, - - setEndRange: function (value) { - this._o.endRange = value; - }, - - /** - * refresh the HTML - */ - draw: function (force) { - if (!this._v && !force) { - return; - } - var opts = this._o, - minYear = opts.minYear, - maxYear = opts.maxYear, - minMonth = opts.minMonth, - maxMonth = opts.maxMonth, - html = '', - randId; - - if (this._y <= minYear) { - this._y = minYear; - if (!isNaN(minMonth) && this._m < minMonth) { - this._m = minMonth; - } - } - if (this._y >= maxYear) { - this._y = maxYear; - if (!isNaN(maxMonth) && this._m > maxMonth) { - this._m = maxMonth; - } - } - - randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2); - - for (var c = 0; c < opts.numberOfMonths; c++) { - html += '
' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
'; - } - - if (opts.showTime) { - var prevDate = this._d || this._o.defaultDate; - html += '
' + - renderTime( - prevDate && isDate(prevDate) ? prevDate.getHours() : 0, - prevDate && isDate(prevDate) ? prevDate.getMinutes() : 0, - prevDate && isDate(prevDate) ? prevDate.getSeconds() : 0, - opts) - + '
'; - } - - this.el.innerHTML = html; - - if (opts.bound) { - if (opts.field.type !== 'hidden') { - sto(function () { - opts.trigger.focus(); - }, 1); - } - } - - if (typeof this._o.onDraw === 'function') { - this._o.onDraw(this); - } - - if (opts.bound) { - // let the screen reader user know to use arrow keys - opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date'); - } - }, - - adjustPosition: function () { - var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect; - - if (this._o.container) return; - - this.el.style.position = 'absolute'; - - field = this._o.trigger; - pEl = field; - width = this.el.offsetWidth; - height = this.el.offsetHeight; - viewportWidth = window.innerWidth || document.documentElement.clientWidth; - viewportHeight = window.innerHeight || document.documentElement.clientHeight; - scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop; - - if (typeof field.getBoundingClientRect === 'function') { - clientRect = field.getBoundingClientRect(); - left = clientRect.left + window.pageXOffset; - top = clientRect.bottom + window.pageYOffset; - } else { - left = pEl.offsetLeft; - top = pEl.offsetTop + pEl.offsetHeight; - while ((pEl = pEl.offsetParent)) { - left += pEl.offsetLeft; - top += pEl.offsetTop; - } - } - - // default position is bottom & left - if ((this._o.reposition && left + width > viewportWidth) || - ( - this._o.position.indexOf('right') > -1 && - left - width + field.offsetWidth > 0 - ) - ) { - left = left - width + field.offsetWidth; - } - if ((this._o.reposition && top + height > viewportHeight + scrollTop) || - ( - this._o.position.indexOf('top') > -1 && - top - height - field.offsetHeight > 0 - ) - ) { - top = top - height - field.offsetHeight; - } - - this.el.style.left = left + 'px'; - this.el.style.top = top + 'px'; - }, - - /** - * render HTML for a particular month - */ - render: function (year, month, randId) { - var opts = this._o, - now = new Date(), - days = getDaysInMonth(year, month), - before = new Date(year, month, 1).getDay(), - data = [], - row = []; - if (!opts.showTime) setToStartOfDay(now); - if (opts.firstDay > 0) { - before -= opts.firstDay; - if (before < 0) { - before += 7; - } - } - var previousMonth = month === 0 ? 11 : month - 1, - nextMonth = month === 11 ? 0 : month + 1, - yearOfPreviousMonth = month === 0 ? year - 1 : year, - yearOfNextMonth = month === 11 ? year + 1 : year, - daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth); - var cells = days + before, - after = cells; - while (after > 7) { - after -= 7; - } - cells += 7 - after; - - // Ensure we only compare date portion when deciding to show a date in picker - var minDate_date = opts.minDate ? new Date(opts.minDate.getFullYear(), opts.minDate.getMonth(), opts.minDate.getDate()) : null; - var maxDate_date = opts.maxDate ? new Date(opts.maxDate.getFullYear(), opts.maxDate.getMonth(), opts.maxDate.getDate()) : null; - - for (var i = 0, r = 0; i < cells; i++) { - var day = new Date(year, month, 1 + (i - before)), - isSelected = isDate(this._d) ? compareDates(day, this._d) : false, - isToday = compareDates(day, now), - isEmpty = i < before || i >= (days + before), - dayNumber = 1 + (i - before), - monthNumber = month, - yearNumber = year, - isStartRange = opts.startRange && compareDates(opts.startRange, day), - isEndRange = opts.endRange && compareDates(opts.endRange, day), - isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, - isDisabled = (minDate_date && day < minDate_date) || - (maxDate_date && day > maxDate_date) || - (opts.disableWeekends && isWeekend(day)) || - (opts.disableDayFn && opts.disableDayFn(day)); - - if (isEmpty) { - if (i < before) { - dayNumber = daysInPreviousMonth + dayNumber; - monthNumber = previousMonth; - yearNumber = yearOfPreviousMonth; - } else { - dayNumber = dayNumber - days; - monthNumber = nextMonth; - yearNumber = yearOfNextMonth; - } - } - - var dayConfig = { - day: dayNumber, - month: monthNumber, - year: yearNumber, - isSelected: isSelected, - isToday: isToday, - isDisabled: isDisabled, - isEmpty: isEmpty, - isStartRange: isStartRange, - isEndRange: isEndRange, - isInRange: isInRange, - showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths - }; - - row.push(renderDay(dayConfig)); - - if (++r === 7) { - if (opts.showWeekNumber) { - row.unshift(renderWeek(i - before, month, year)); - } - data.push(renderRow(row, opts.isRTL)); - row = []; - r = 0; - } - } - return renderTable(opts, data, randId); - }, - - isVisible: function () { - return this._v; - }, - - show: function () { - if (!this.isVisible()) { - removeClass(this.el, 'is-hidden'); - this._v = true; - this.draw(); - if (this._o.bound) { - addEvent(document, 'click', this._onClick); - this.adjustPosition(); - } - if (typeof this._o.onOpen === 'function') { - this._o.onOpen.call(this); - } - } - }, - - hide: function () { - var v = this._v; - if (v !== false) { - if (this._o.bound) { - removeEvent(document, 'click', this._onClick); - } - this.el.style.position = 'static'; // reset - this.el.style.left = 'auto'; - this.el.style.top = 'auto'; - addClass(this.el, 'is-hidden'); - this._v = false; - if (v !== undefined && typeof this._o.onClose === 'function') { - this._o.onClose.call(this); - } - } - }, - - /** - * GAME OVER - */ - destroy: function () { - this.hide(); - removeEvent(this.el, 'mousedown', this._onMouseDown, true); - removeEvent(this.el, 'touchend', this._onMouseDown, true); - removeEvent(this.el, 'change', this._onChange); - if (this._o.field) { - removeEvent(this._o.field, 'change', this._onInputChange); - if (this._o.bound) { - removeEvent(this._o.trigger, 'click', this._onInputClick); - removeEvent(this._o.trigger, 'focus', this._onInputFocus); - removeEvent(this._o.trigger, 'blur', this._onInputBlur); - } - } - if (this.el.parentNode) { - this.el.parentNode.removeChild(this.el); - } - } - - }; - - return Pikaday; - -})); \ No newline at end of file diff --git a/DNN Platform/Website/admin/Modules/Modulesettings.ascx b/DNN Platform/Website/admin/Modules/Modulesettings.ascx index 9c33428dd01..d7f16c68c5c 100644 --- a/DNN Platform/Website/admin/Modules/Modulesettings.ascx +++ b/DNN Platform/Website/admin/Modules/Modulesettings.ascx @@ -80,11 +80,11 @@
- +
- +
diff --git a/DNN Platform/Website/admin/Modules/Modulesettings.ascx.cs b/DNN Platform/Website/admin/Modules/Modulesettings.ascx.cs index 6d967a4e767..f3e4b2501ca 100644 --- a/DNN Platform/Website/admin/Modules/Modulesettings.ascx.cs +++ b/DNN Platform/Website/admin/Modules/Modulesettings.ascx.cs @@ -8,6 +8,7 @@ namespace DotNetNuke.Modules.Admin.Modules using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; + using System.Globalization; using System.Linq; using System.Text; using System.Threading; @@ -482,13 +483,8 @@ protected void OnUpdateClick(object sender, EventArgs e) this.Module.Header = this.txtHeader.Text; this.Module.Footer = this.txtFooter.Text; - this.Module.StartDate = this.startDatePicker.SelectedDate != null - ? this.startDatePicker.SelectedDate.Value - : Null.NullDate; - - this.Module.EndDate = this.endDatePicker.SelectedDate != null - ? this.endDatePicker.SelectedDate.Value - : Null.NullDate; + this.Module.StartDate = DateTime.TryParseExact(this.startDatePicker.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var startDate) ? startDate : Null.NullDate; + this.Module.EndDate = DateTime.TryParseExact(this.endDatePicker.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var endDate) ? endDate : Null.NullDate; this.Module.ContainerSrc = this.moduleContainerCombo.SelectedValue; this.Module.ModulePermissions.Clear(); @@ -668,12 +664,12 @@ private void BindData() if (!Null.IsNull(this.Module.StartDate)) { - this.startDatePicker.SelectedDate = this.Module.StartDate; + this.startDatePicker.Text = this.Module.StartDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } - if (!Null.IsNull(this.Module.EndDate) && this.Module.EndDate <= this.endDatePicker.MaxDate) + if (!Null.IsNull(this.Module.EndDate) && this.Module.EndDate <= DateTime.MaxValue) { - this.endDatePicker.SelectedDate = this.Module.EndDate; + this.endDatePicker.Text = this.Module.EndDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); } this.BindContainers(); diff --git a/DNN Platform/Website/admin/Modules/Modulesettings.ascx.designer.cs b/DNN Platform/Website/admin/Modules/Modulesettings.ascx.designer.cs index ed38c66558f..f86a38546d8 100644 --- a/DNN Platform/Website/admin/Modules/Modulesettings.ascx.designer.cs +++ b/DNN Platform/Website/admin/Modules/Modulesettings.ascx.designer.cs @@ -224,7 +224,7 @@ public partial class ModuleSettingsPage { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::DotNetNuke.Web.UI.WebControls.Internal.DnnDateTimePicker startDatePicker; + protected global::System.Web.UI.WebControls.TextBox startDatePicker; /// plEndDate control. /// /// Auto-generated field. @@ -236,7 +236,7 @@ public partial class ModuleSettingsPage { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::DotNetNuke.Web.UI.WebControls.Internal.DnnDateTimePicker endDatePicker; + protected global::System.Web.UI.WebControls.TextBox endDatePicker; /// plMoniker control. /// /// Auto-generated field. diff --git a/DNN Platform/Website/development.config b/DNN Platform/Website/development.config index 87655dc75cd..a6e73f65656 100644 --- a/DNN Platform/Website/development.config +++ b/DNN Platform/Website/development.config @@ -234,54 +234,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DNN Platform/Website/release.config b/DNN Platform/Website/release.config index 324aeb7f188..9f4c60ddb55 100644 --- a/DNN Platform/Website/release.config +++ b/DNN Platform/Website/release.config @@ -235,50 +235,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DNN Platform/Website/web.config b/DNN Platform/Website/web.config index 41704cdbf4e..b74f2178fd2 100644 --- a/DNN Platform/Website/web.config +++ b/DNN Platform/Website/web.config @@ -99,4 +99,10 @@ + + + + + + \ No newline at end of file diff --git a/DNN_Platform.sln b/DNN_Platform.sln index f2880f8cff4..837ed5f6dcb 100644 --- a/DNN_Platform.sln +++ b/DNN_Platform.sln @@ -358,8 +358,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BuildScripts", "BuildScript Build\BuildScripts\Provider.build = Build\BuildScripts\Provider.build Build\BuildScripts\ProviderPackage.targets = Build\BuildScripts\ProviderPackage.targets Build\BuildScripts\PublishArtifacts.ps1 = Build\BuildScripts\PublishArtifacts.ps1 - Build\BuildScripts\Yahoo.Yui.Compressor.dll = Build\BuildScripts\Yahoo.Yui.Compressor.dll - Build\BuildScripts\Yahoo.Yui.Compressor.MsBuild.dll = Build\BuildScripts\Yahoo.Yui.Compressor.MsBuild.dll EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Symbols", "Symbols", "{4F538A14-38F5-473F-8386-60D81F3F530A}" @@ -491,7 +489,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.CodeDom.Providers ProjectSection(SolutionItems) = preProject DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dnn = DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dnn DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\releaseNotes.txt = DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\releaseNotes.txt - DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\roslyn.zip = DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\roslyn.zip EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Newtonsoft", "Newtonsoft", "{CBBA26D2-68FF-4FDB-BD9E-17D4C2CE717F}" @@ -647,11 +644,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dnn.ContactList.Spa", "DNN EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dnn.ContactList.SpaReact", "DNN Platform\Modules\Samples\Dnn.ContactList.SpaReact\Dnn.ContactList.SpaReact.csproj", "{19727E7F-6D3E-917D-920A-112FD03CA96F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "bin", "bin", "{8696BBF6-427F-4E90-B00F-D55469133819}" - ProjectSection(SolutionItems) = preProject - DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\bin\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll = DNN Platform\Components\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\bin\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - EndProjectSection -EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DotNetNuke.WebControls", "DNN Platform\Controls\DotNetNuke.WebControls\DotNetNuke.WebControls.vbproj", "{6C10669D-7897-BEA4-F994-4F74EED33F5A}" EndProject Global @@ -2712,7 +2704,6 @@ Global {A1615D6C-F956-AB32-5B07-C3CC75888398} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {735974ED-BE2B-6C25-CD75-1528175F6206} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {19727E7F-6D3E-917D-920A-112FD03CA96F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {8696BBF6-427F-4E90-B00F-D55469133819} = {F3E526A3-3420-4B0B-9C31-FD813CCD83F7} {6C10669D-7897-BEA4-F994-4F74EED33F5A} = {1DFA65CE-5978-49F9-83BA-CFBD0C7A1814} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/Directory.Packages.props b/Directory.Packages.props index 0b19abc9fba..d7a49f3d63b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -16,12 +16,14 @@ - + + + @@ -34,6 +36,7 @@ + @@ -64,6 +67,7 @@ + diff --git a/Dnn.AdminExperience/.gitignore b/Dnn.AdminExperience/.gitignore index 3f95d7a5ee6..31452a23562 100644 --- a/Dnn.AdminExperience/.gitignore +++ b/Dnn.AdminExperience/.gitignore @@ -118,8 +118,5 @@ ClientSide/**/node_modules /**/yarn-error.log /**/*-bundle.js /**/*-bundle.js.map -/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Users/scripts/exportables/Users/UsersCommon.js -/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Sites/scripts/exportables/Sites/SitesListView.js -/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Roles/scripts/bundles/rw-widgets.svg /Dnn.PersonaBar.Extensions/**/*.js.map diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.babelrc b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.babelrc deleted file mode 100644 index 14824ef6e36..00000000000 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.babelrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "presets": [ - "@babel/preset-env", - "@babel/preset-react" - ], - "plugins": [ - "@babel/plugin-transform-object-assign", - "@babel/plugin-proposal-object-rest-spread", - "react-hot-loader/babel" - ], - "env": { - "production": { - "plugins": [ - "transform-react-remove-prop-types" - ] - } - } -} \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/dist/bundle-en.js b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/dist/bundle-en.js deleted file mode 100644 index 966104c4b11..00000000000 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/dist/bundle-en.js +++ /dev/null @@ -1,4 +0,0 @@ -!function (e) {function t(o) {if (n[o]) return n[o].exports;let i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports;} var n={};return t.m=e,t.c=n,t.p="",t(0);}(function (e) {for (let t in e) if (Object.prototype.hasOwnProperty.call(e,t)) switch (typeof e[t]) {case "function":break;case "object":e[t]=function (t) {let n=t.slice(1),o=e[t[0]];return function (e,t,i) {o.apply(this,[e,t,i].concat(n));};}(e[t]);break;default:e[t]=e[e[t]];} return e;}([function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};} let t=n(1),o=e(t),i=n(14),a=n(5),r=n(86),l=e(r),s=n(92),c=e(s),u=n(81),d=e(u),p=(0,c["default"])();l["default"].dispatch=p.dispatch;let f=document.getElementById("adminlogs-container");l["default"].init(f.dataset.initCallback),(0,i.render)(o["default"].createElement(a.Provider,{store:p},o["default"].createElement(d["default"],null)),f);}).call(this);} finally {}},function (e,t) {e.exports=dnn.nodeModules.React;},function (e,t) {e.exports=function () {let e=[];return e.toString=function () {for (var e=[],t=0;t=0&&v.splice(t,1);} function l(e) {let t=document.createElement("style");return t.type="text/css",a(e,t),t;} function s(e) {let t=document.createElement("link");return t.rel="stylesheet",a(e,t),t;} function c(e,t) {let n,o,i;if (t.singleton) {let a=y++;n=b||(b=l(t)),o=u.bind(null,n,a,!1),i=u.bind(null,n,a,!0);} else e.sourceMap&&"function"===typeof URL&&"function"===typeof URL.createObjectURL&&"function"===typeof URL.revokeObjectURL&&"function"===typeof Blob&&"function"===typeof btoa?(n=s(t),o=p.bind(null,n),i=function () {r(n),n.href&&URL.revokeObjectURL(n.href);}):(n=l(t),o=d.bind(null,n),i=function () {r(n);});return o(e),function (t) {if (t) {if (t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap) return;o(e=t);} else i();};} function u(e,t,n,o) {let i=n?"":o.css;if (e.styleSheet)e.styleSheet.cssText=E(t,i);else {let a=document.createTextNode(i),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(a,r[t]):e.appendChild(a);}} function d(e,t) {let n=t.css,o=t.media;if (o&&e.setAttribute("media",o),e.styleSheet)e.styleSheet.cssText=n;else {for (;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n));}} function p(e,t) {let n=t.css,o=t.sourceMap;o&&(n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");let i=new Blob([n],{type:"text/css"}),a=e.href;e.href=URL.createObjectURL(i),a&&URL.revokeObjectURL(a);} var f={},g=function (e) {let t;return function () {return "undefined"===typeof t&&(t=e.apply(this,arguments)),t;};},h=g(function () {return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase());}),m=g(function () {return document.head||document.getElementsByTagName("head")[0];}),b=null,y=0,v=[];e.exports=function (e,t) {t=t||{},"undefined"===typeof t.singleton&&(t.singleton=h()),"undefined"===typeof t.insertAt&&(t.insertAt="bottom");let n=i(e);return o(n,t),function (e) {for (var a=[],r=0;r2?arguments[2]:{},r=o(t);a&&(r=r.concat(Object.getOwnPropertySymbols(t))),i(r,function (o) {u(e,o,t[o],n[o]);});};d.supportsDescriptors=!!c,e.exports=d;},function (e,t,n) {"use strict";let o=Object.prototype.toString,i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator,a=i?Symbol.prototype.toString:o,r=n(21),l=n(20),s=Number.MAX_SAFE_INTEGER||Math.pow(2,53)-1,c=n(49),u=n(23),d=n(22),p=n(50),f=n(52),g=parseInt,h=n(56),m=h.call(Function.call,String.prototype.slice),b=h.call(Function.call,RegExp.prototype.test,/^0b[01]+$/i),y=h.call(Function.call,RegExp.prototype.test,/^0o[0-7]+$/i),v=["…","​","￾"].join(""),E=new RegExp("["+v+"]","g"),T=h.call(Function.call,RegExp.prototype.test,E),S=/^[\-\+]0x[0-9a-f]+$/i,w=h.call(Function.call,RegExp.prototype.test,S),x=["\t\n\x0B\f\r   ᠎    ","          \u2028","\u2029\ufeff"].join(""),L=new RegExp("(^["+x+"]+)|(["+x+"]+$)","g"),O=h.call(Function.call,String.prototype.replace),I=function (e) {return O(e,L,"");},P=n(48),_=n(58),C=c(c({},P),{Call:function (e,t) {let n=arguments.length>2?arguments[2]:[];if (!this.IsCallable(e)) throw new TypeError(e+" is not a function");return e.apply(t,n);},ToPrimitive:f,ToNumber:function (e) {let t=p(e)?e:f(e,"number");if ("symbol"===typeof t) throw new TypeError("Cannot convert a Symbol value to a number");if ("string"===typeof t) {if (b(t)) return this.ToNumber(g(m(t,2),2));if (y(t)) return this.ToNumber(g(m(t,2),8));if (T(t)||w(t)) return NaN;let n=I(t);if (n!==t) return this.ToNumber(n);} return Number(t);},ToInt16:function (e) {let t=this.ToUint16(e);return t>=32768?t-65536:t;},ToInt8:function (e) {let t=this.ToUint8(e);return t>=128?t-256:t;},ToUint8:function (e) {let t=this.ToNumber(e);if (r(t)||0===t||!l(t)) return 0;let n=u(t)*Math.floor(Math.abs(t));return d(n,256);},ToUint8Clamp:function (e) {let t=this.ToNumber(e);if (r(t)||t<=0) return 0;if (t>=255) return 255;let n=Math.floor(e);return n+.5s?s:t;},CanonicalNumericIndexString:function (e) {if ("[object String]"!==o.call(e)) throw new TypeError("must be a string");if ("-0"===e) return -0;let t=this.ToNumber(e);return this.SameValue(this.ToString(t),e)?t:void 0;},RequireObjectCoercible:P.CheckObjectCoercible,IsArray:Array.isArray||function (e) {return "[object Array]"===o.call(e);},IsConstructor:function (e) {return "function"===typeof e&&!!e.prototype;},IsExtensible:function (e) {return !Object.preventExtensions||!p(e)&&Object.isExtensible(e);},IsInteger:function (e) {if ("number"!==typeof e||r(e)||!l(e)) return !1;let t=Math.abs(e);return Math.floor(t)===t;},IsPropertyKey:function (e) {return "string"===typeof e||"symbol"===typeof e;},IsRegExp:function (e) {if (!e||"object"!==typeof e) return !1;if (i) {let t=e[Symbol.match];if ("undefined"!==typeof t) return P.ToBoolean(t);} return _(e);},SameValueZero:function (e,t) {return e===t||r(e)&&r(t);},Type:function (e) {return "symbol"===typeof e?"Symbol":P.Type(e);},SpeciesConstructor:function (e,t) {if ("Object"!==this.Type(e)) throw new TypeError("Assertion failed: Type(O) is not Object");let n=e.constructor;if ("undefined"===typeof n) return t;if ("Object"!==this.Type(n)) throw new TypeError("O.constructor is not an Object");let o=i&&Symbol.species?n[Symbol.species]:void 0;if (null==o) return t;if (this.IsConstructor(o)) return o;throw new TypeError("no constructor found");}});delete C.CheckObjectCoercible,e.exports=C;},function (e,t) {"use strict";let n=Function.prototype.toString,o=/^\s*class /,i=function (e) {try {let t=n.call(e),i=t.replace(/\/\/.*\n/g,""),a=i.replace(/\/\*[.\s\S]*\*\//g,""),r=a.replace(/\n/gm," ").replace(/ {2}/g," ");return o.test(r);} catch (l) {return !1;}},a=function (e) {try {return !i(e)&&(n.call(e),!0);} catch (t) {return !1;}},r=Object.prototype.toString,l="[object Function]",s="[object GeneratorFunction]",c="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;e.exports=function (e) {if (!e) return !1;if ("function"!==typeof e&&"object"!==typeof e) return !1;if (c) return a(e);if (i(e)) return !1;let t=r.call(e);return t===l||t===s;};},,function (e,t,n) {try {(function () {"use strict";function e(e,t) {if (e.some(function (e) {return e.ID===t.ID;})&&(e=e.filter(function (e) {return e.ID!==t.ID;})),!e.some(function (e) {return e.ID===t.ID;})) return e.push(t),e=e.sort(function (e,t) {let n=e.LogTypeFriendlyName,o=t.LogTypeFriendlyName;return no?1:0;});} function n(e,t) {return e.some(function (e) {return e.ID===t;})&&(e=e.filter(function (e) {return e.ID!==t;})),e;} function o(e) {let t=[];return void 0!==e&&(t=e.map(function (e) {return {label:e.LogTypeFriendlyName,value:e.LogTypeKey};})),t;} function i(e) {let t=[];return void 0!==e&&(t=e.map(function (e) {return {label:e.PortalName,value:e.PortalID};})),t;} function a(e) {let t=[];return void 0!==e&&(t=e.map(function (e) {return {label:e.Key,value:e.Value};})),t;} function r(e) {let t={thresholdsOptions:[],notificationTimesOptions:[],notificationTimeTypesOptions:[]};return t.thresholdsOptions=e.thresholds.map(function (e) {return {label:e.Key,value:e.Value};}),t.notificationTimesOptions=e.notificationTimes.map(function (e) {return {label:e.Key,value:e.Value};}),t.notificationTimeTypesOptions=e.notificationTimeTypes.map(function (e) {return {label:e.Key,value:e.Value};}),t;}Object.defineProperty(t,"__esModule",{value:!0}),t.updateLogSettingList=e,t.removeLogSetting=n,t.createLogTypeOptions=o,t.createPortalOptions=i,t.createKeepMostRecentOptions=a,t.createOccurrenceOptions=r;}).call(this);} finally {}},function (e,t) {e.exports=dnn.nodeModules.ReactDOM;},function (e,t) {e.exports=window.dnn.nodeModules.ReactCollapse;},function (e,t,n) {"use strict";let o=n(10);e.exports=function (e) {let t=o.ToObject(this),n=o.ToInteger(o.ToLength(t.length));if (!o.IsCallable(e)) throw new TypeError("Array#find: predicate must be a function");if (0!==n) for (var i,a=arguments[1],r=0;r=0?n:n+t);};},function (e,t) {e.exports=function (e) {return e>=0?1:-1;};},function (e,t) {e.exports=function (e) {return null===e||"function"!==typeof e&&"object"!==typeof e;};},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};} function o(e,t) {if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");} function i(e,t) {if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t||"object"!==typeof t&&"function"!==typeof t?e:t;} function a(e,t) {if ("function"!==typeof t&&null!==t) throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t);}Object.defineProperty(t,"__esModule",{value:!0});let r=function () {function e(e,t) {for (let n=0;ndiv .normalPanel .searchpanel .react-tabs .log-detail{margin:0 10px 10px 58px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-detail *{white-space:normal}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-wrapper{width:100%;float:left;padding:15px 0;text-transform:uppercase}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-wrapper:not(:last-child){border-bottom:1px solid #ddd}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-Checkbox{float:left;margin-left:5px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-LogTypeCSSClass{width:31px;float:left}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-LogCreateDate,#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-LogTypeFriendlyName{width:140px;float:left;font-weight:bolder}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-LogUserName{width:90px;float:left;font-weight:bolder}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-LogPortalName{width:110px;float:left;font-weight:bolder}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logHeader-Summary{width:230px;float:left;font-weight:bolder}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .Exception{color:#fff;background-color:#ff1414;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .ItemCreated{color:#fff;background-color:#090;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .ItemUpdated{color:#fff;background-color:#099;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .ItemDeleted{color:#000;background-color:#14ffff;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .OperationSuccess{color:#fff;background-color:#990;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .OperationFailure{color:#fff;background-color:#900;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .GeneralAdminOperation{color:#fff;background-color:#4d0099;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .AdminAlert{color:#fff;background-color:#148aff;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .HostAlert{color:#fff;background-color:#ff8a14;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .SecurityException{color:#fff;background-color:#000;width:15px;height:15px;display:block;float:left;margin:0 6px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logContainer{margin:10px 20px;border:1px solid #ddd;float:left}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar{border-bottom:1px solid #ddd;display:block;float:left;width:770px;margin:0 0 0 20px;padding:0 0 10px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .sitegroup-filter-container{width:140px;font-weight:bolder;margin:10px 15px 5px 0;float:left;border-right:1px solid #ddd;padding-right:10px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .sitegroup-filter-container .collapsible-content{box-shadow:0 0 1px 0 rgba(0,0,0,.2);margin-top:13px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .sitegroup-filter-container ul.site-group-filter li{padding:7px 15px;text-indent:0}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .sitegroup-filter-container>div:first-child{float:left;width:100%}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .sitegroup-filter-container:hover .dropdown-label{color:#0087c6}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .toolbar-button{font-weight:bolder;margin:10px 0 5px 20px;float:right;border-left:1px solid #ddd;padding-left:20px;text-align:right;cursor:pointer}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .toolbar-button:hover{color:#0087c6}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .toolbar-button:hover .collapsible-content{color:#000}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .toolbar .toolbar-button .collapsible-content{box-shadow:0 0 1px 0 rgba(0,0,0,.2);margin-top:13px;z-index:1000;background-color:#fff;position:absolute;width:400px;margin-left:-318px;text-align:left}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logPager{margin:0 2px;padding:18px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logLegend-wrapper{float:left;padding:20px 0 10px;margin:0 20px;border-top:1px solid #ddd;margin-top:10px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .logLegend-wrapper .logLegend-item{float:left;width:250px;padding:5px 5px 5px 0}",""]);},function (e,t,n) {t=e.exports=n(2)(),t.push([e.id,"svg{fill:#c8c8c8}svg:hover{fill:#6f7273}svg:active{fill:#1e88c3}.log-setting-editor{padding:10px 0;background-color:#fbfcfc;display:block;float:left}.log-setting-editor .editor-container{float:left;padding:10px 20px;width:auto}.log-setting-editor .editor-container.left-column{border-right:1px solid #c8c8c8}.log-setting-editor .editor-container .title-row{width:100%;float:left;font-weight:700;text-transform:uppercase;margin-bottom:10px}.log-setting-editor .editor-container .status-row{width:100%;float:left;margin-bottom:10px}.log-setting-editor .editor-container .status-row .left{float:left;width:50%}.log-setting-editor .editor-container .status-row .right{float:right;width:50%;text-align:right}.log-setting-editor .editor-container .status-row .right .checkbox{float:right}.log-setting-editor .editor-container .divider{padding-bottom:15px}.log-setting-editor .editor-container .divider .dnn-ui-common-single-line-input,.log-setting-editor .editor-container .divider .dnn-uicommon-select{border-radius:0}.log-setting-editor .editor-container .editor-row{float:left;width:100%}.log-setting-editor .editor-container .editor-row label{clear:both;float:left;text-align:left;width:100%;margin-bottom:5px}.log-setting-editor .editor-container .editor-row select.full{float:left;width:100%}.log-setting-editor .editor-container .editor-row select.two-fifth{float:left;width:40%}.log-setting-editor .editor-container .editor-row select.one-fourth{float:left;width:25%}.log-setting-editor .editor-container .editor-row .text-section{width:5%;float:left;text-align:center;vertical-align:middle;margin-top:9px}.log-setting-editor .editor-container .editor-row .dnn-single-line-input-with-error,.log-setting-editor .editor-container .editor-row input{width:100%}.log-setting-editor .buttons-box{width:100%;text-align:center;float:left;margin:10px 0}.log-setting-editor .buttons-box .dnn-ui-common-button{margin:5px}.log-setting-editor .buttons-box .edit-icon{margin:0 10px 20px;float:right}.log-setting-editor .buttons-box .edit-icon svg{width:16px;float:left;height:16px}",""]);},function (e,t,n) {t=e.exports=n(2)(),t.push([e.id,"svg{fill:#c8c8c8}svg:hover{fill:#6f7273}svg:active{fill:#1e88c3}.collapsible-component1{display:table;width:100%;border-bottom:1px solid #c8c8c8;cursor:auto}.collapsible-component1 div.collapsible-header1{color:#6f7273;width:100%;float:left;position:relative;padding:15px 20px;box-sizing:border-box;cursor:auto}.collapsible-component1 div.collapsible-header1.false{background-color:#fbfcfc}.collapsible-component1 div.collapsible-header1 .edit-icon{margin-left:20px;float:right;cursor:pointer}.collapsible-component1 div.collapsible-header1 .edit-icon svg{width:16px;float:left;height:16px}.collapsible-component1 div.collapsible-header1 .edit-icon.false svg{fill:#1e88c3}.collapsible-component1 div.collapsible-header1 .edit-icon.false svg:hover{fill:#4b4e4f}",""]);},function (e,t,n) {t=e.exports=n(2)(),t.push([e.id,"svg{fill:#c8c8c8}svg:hover{fill:#6f7273}svg:active{fill:#1e88c3}#adminlogs-container>div{padding:0}#adminlogs-container .socialpanelbody *{box-sizing:border-box}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings{width:100%;box-sizing:border-box;padding:20px;display:table}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .container{border-left:1px solid #c8c8c8;border-right:1px solid #c8c8c8}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .container .header-row{display:table;border-bottom:1px solid #c8c8c8;border-top:1px solid #c8c8c8;width:100%;float:left;position:relative;padding:15px 20px;box-sizing:border-box;text-transform:uppercase}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .container .add-setting-editor{float:left}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row{text-align:right;width:100%;font-weight:bolder;overflow:hidden;cursor:pointer;box-sizing:border-box;border-bottom:1px solid #c8c8c8;padding:0 0 15px 20px;margin-bottom:15px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row .add-setting-box{width:auto;float:right}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row .add-setting-box .add-icon{margin-left:20px;margin-right:5px;float:left;cursor:pointer}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row .add-setting-box .add-icon svg{fill:#6f7273;width:16px;float:left;height:16px}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row .add-setting-box.false{color:#1e88c3}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row .add-setting-box.false svg{fill:#1e88c3}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row .add-setting-box.false:hover{color:#4b4e4f}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs .log-settings .add-setting-row .add-setting-box.false:hover svg{fill:#4b4e4f}",""]); -},function (e,t,n) {t=e.exports=n(2)(),t.push([e.id,"svg{fill:#c8c8c8}svg:hover{fill:#6f7273}svg:active{fill:#1e88c3}#adminlogs-container .socialpanelbody>div{padding:30px 25px}#adminlogs-container .socialpanelbody>div .normalPanel{border:none}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel{padding:0}#adminlogs-container .socialpanelbody>div .normalPanel .searchpanel .react-tabs{float:left;border:1px solid #c8c8c8;width:100%}",""]);},function (e,t,n) {t=e.exports=n(2)(),t.push([e.id,".dnn-checkbox-container>label{display:inline;cursor:pointer}.dnn-checkbox-container .checkbox{position:relative;width:14px;height:14px;margin-bottom:15px;display:inline-block;margin-right:10px}.dnn-checkbox-container .checkbox input[type=checkbox]+label{position:absolute;top:0;left:0;width:100%;height:100%;background:#f2f2f2;border:1px solid #dfdfdf;cursor:pointer;border-radius:2px}.dnn-checkbox-container .checkbox input[type=checkbox]+label:after{transform:rotate(-45deg);opacity:0;content:'';position:absolute;width:9px;height:5px;background:0 0;top:5px;left:4px;border:3px solid hsla(0,0%,100%,.25);border-top:none;border-right:none}.dnn-checkbox-container .checkbox input[type=checkbox]+label:hover:after{opacity:.6}.dnn-checkbox-container .checkbox input[type=checkbox]:checked+label{background:#01ace0;border-color:#01ace0}.dnn-checkbox-container .checkbox input[type=checkbox]:checked+label:after{opacity:1!important;border-color:#fff;width:7px;height:3px;top:3.5px;left:2.5px;border-width:2px}.dnn-checkbox-container .checkbox.deselect-state input[type=checkbox]:checked+label[for]{background:#01ace0;border-color:#01ace0}.dnn-checkbox-container .checkbox.deselect-state input[type=checkbox]:checked+label[for]:after{transform:none;height:0;top:6px;left:2px}",""]);},function (e,t,n) {t=e.exports=n(2)(),t.push([e.id,"#adminlogs-container .adminlogs-app .socialpanelheader{position:absolute;top:0}#adminlogs-container .adminlogs-app .socialpanelheader button[role=primary]{float:right}",""]);},function (e,t,n) {t=e.exports=n(2)(),t.push([e.id,".personaBar-mainContainer{position:absolute;width:100%;height:100%;top:0;left:0;overflow:hidden}.personaBar-page,.personaBar-pagesContainer{position:absolute;transition:all 1s ease 0s;width:100%;height:100%;top:0;left:0}",""]);},function (e,t,n) {"use strict";let o=n(21),i=n(20),a=n(23),r=n(22),l=n(11),s=n(51),c={ToPrimitive:s,ToBoolean:function (e) {return Boolean(e);},ToNumber:function (e) {return Number(e);},ToInteger:function (e) {let t=this.ToNumber(e);return o(t)?0:0!==t&&i(t)?a(t)*Math.floor(Math.abs(t)):t;},ToInt32:function (e) {return this.ToNumber(e)>>0;},ToUint32:function (e) {return this.ToNumber(e)>>>0;},ToUint16:function (e) {let t=this.ToNumber(e);if (o(t)||0===t||!i(t)) return 0;let n=a(t)*Math.floor(Math.abs(t));return r(n,65536);},ToString:function (e) {return String(e);},ToObject:function (e) {return this.CheckObjectCoercible(e),Object(e);},CheckObjectCoercible:function (e,t) {if (null==e) throw new TypeError(t||"Cannot call method on "+e);return e;},IsCallable:l,SameValue:function (e,t) {return e===t?0!==e||1/e===1/t:o(e)&&o(t);},Type:function (e) {return null===e?"Null":"undefined"===typeof e?"Undefined":"function"===typeof e||"object"===typeof e?"Object":"number"===typeof e?"Number":"boolean"===typeof e?"Boolean":"string"===typeof e?"String":void 0;}};e.exports=c;},function (e,t) {let n=Object.prototype.hasOwnProperty;e.exports=Object.assign||function (e,t) {for (let o in t)n.call(t,o)&&(e[o]=t[o]);return e;};},24,function (e,t,n) {"use strict";let o=Object.prototype.toString,i=n(24),a=n(11),r={"[[DefaultValue]]":function (e,t) {let n=t||("[object Date]"===o.call(e)?String:Number);if (n===String||n===Number) {let r,l,s=n===String?["toString","valueOf"]:["valueOf","toString"];for (l=0;l1&&(t===String?n="string":t===Number&&(n="number"));let a;if (o&&(Symbol.toPrimitive?a=c(e,Symbol.toPrimitive):l(e)&&(a=Symbol.prototype.valueOf)),"undefined"!==typeof a) {let u=a.call(e,n);if (i(u)) return u;throw new TypeError("unable to convert exotic object to primitive");} return "default"===n&&(r(e)||l(e))&&(n="string"),s(e,"default"===n?"number":n);};},function (e,t) {"use strict";function n(e,t) {if (void 0===e||null===e) throw new TypeError("Cannot convert first argument to object");for (var n=Object(e),o=1;o0&&!o.call(e,0)) for (let f=0;f0) for (let h=0;h=0&&"[object Function]"===n.call(e.callee)),o;};},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};}Object.defineProperty(t,"__esModule",{value:!0});let o=n(4),i=n(26),a=e(i),r={getLogList:function (e,t) {return function (n) {a["default"].getLogList(e,function (e) {n({type:o.log.RETRIEVED_LOG_LIST,data:{logList:e.Results,selectedRowIds:[],excludedRowIds:e.Results.map(function (e) {return e.LogGUID;}),totalCount:e.TotalResults}}),t&&t(e);});};},getPortalList:function (e) {return function (t) {a["default"].getPortalList(function (n) {t({type:o.log.RETRIEVED_PORTAL_LIST,data:{portalList:n.Results,totalCount:n.TotalResults}}),e&&e(n);});};},getLogTypeList:function (e) {return function (t) {a["default"].getLogTypes(function (n) {t({type:o.log.RETRIEVED_LOGTYPE_LIST,data:{logTypeList:n.Results,totalCount:n.TotalResults}}),e&&e(n);});};},deleteLogItems:function (e,t) {return function (n) {a["default"].deleteLogItems(e,function (e) {n({type:o.log.DELETED_LOG_ITEMS,data:{selectedRowIds:[],excludedRowIds:[]}}),t&&t(e);});};},clearLog:function (e) {return function (t) {a["default"].clearLog(function (n) {t({type:o.log.CLEARED_LOG,data:{selectedRowIds:[],excludedRowIds:[]}}),e&&e(n);});};},emailLogItems:function (e,t) {return function (n) {a["default"].emailLogItems(e,function (e) {n({type:o.log.EMAILED_LOG_ITEMS,data:{logList:e.Results,totalCount:e.TotalResults}}),t&&t(e);});};},selectRow:function (e) {return function (t) {t({type:o.log.SELECTED_ROW,data:{rowId:e}});};},deselectRow:function (e) {return function (t) {t({type:o.log.DESELECTED_ROW,data:{rowId:e}});};},selectAll:function () {return function (e) {e({type:o.log.SELECTED_ALL,data:{}});};},deselectAll:function () {return function (e) {e({type:o.log.DESELECTED_ALL,data:{}});};}};t["default"]=r;}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};}Object.defineProperty(t,"__esModule",{value:!0});let o=n(4),i=n(26),a=e(i),r={getKeepMostRecentOptions:function (e) {return function (t) {a["default"].getKeepMostRecentOptions(function (n) {t({type:o.logSettings.RETRIEVED_KEEPMOSTRECENT_OPTIONS,data:{keepMostRecent:n.Results}}),e&&e(n);});};},getOccurrenceOptions:function (e) {return function (t) {a["default"].getOccurrenceOptions(function (n) {t({type:o.logSettings.RETRIEVED_OCCURRENCE_OPTIONS,data:{thresholds:n.Results.Thresholds,notificationTimes:n.Results.NotificationTimes,notificationTimeTypes:n.Results.NotificationTimeTypes}}),e&&e(n);});};},getLogSettings:function (e) {return function (t) {a["default"].getLogSettings(function (n) {t({type:o.logSettings.RETRIEVED_LOGSETTING_LIST,data:{logSettingList:n.Results}}),e&&e(n);});};},getLogSettingById:function (e,t) {return function (n) {a["default"].getLogSettingById(e,function (e) {n({type:o.logSettings.RETRIEVED_LOGSETTING_BY_ID,data:{logSettingDetail:e}}),t&&t(e);});};},updateLogSetting:function (e,t,n) {return function (i) {a["default"].updateLogSetting(e,function (e) {i({type:o.logSettings.UPDATED_LOGSETTING,data:{logSettingDetail:e}}),t&&t(e);},function (e) {n&&n(e);});};},addLogSetting:function (e,t,n) {return function (i) {a["default"].addLogSetting(e,function (e) {i({type:o.logSettings.ADDED_LOGSETTING,data:{logSettingDetail:e}}),t&&t(e);},function (e) {n&&n(e);});};},deleteLogSetting:function (e,t,n) {return function (i) {a["default"].deleteLogSetting(e,function (e) {i({type:o.logSettings.DELETED_LOGSETTING,data:{Success:e.Success,LogSettingId:e.LogSettingId}}),t&&t(e);},function (e) {n&&n(e);});};}};t["default"]=r;}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";Object.defineProperty(t,"__esModule",{value:!0});let e=n(4),o={loadTab:function (t) {return function (n) {n({type:e.pagination.LOAD_TAB_DATA,payload:{index:t}});};}};t["default"]=o;}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";Object.defineProperty(t,"__esModule",{value:!0});let e=n(4),o={selectPanel:function (t,n) {return function (o) {o({type:e.visiblePanel.SELECT_PANEL,payload:{selectedPage:t,selectedPageVisibleIndex:n}});};}};t["default"]=o;}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};} function o(e,t) {if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");} function i(e,t) {if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t||"object"!==typeof t&&"function"!==typeof t?e:t;} function a(e,t) {if ("function"!==typeof t&&null!==t) throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t);} function r(e) {return {logList:e.log.logList};}Object.defineProperty(t,"__esModule",{value:!0});let l=function () {function e(e,t) {for (let n=0;n()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e);}},{key:"onEmailValueChange",value:function (e,t) {let n=t.target.value,o=this.state.emailRequest;o[e]=n,this.setState({emailRequest:o}),this.SetErrorState();}},{key:"onCloseEmailPanel",value:function (e) {let t=this.props;t.onCloseEmailPanel();}},{key:"render",value:function () {let e=this.props,t=this.state;return c["default"].createElement("div",{className:"collapsible-content-email"},c["default"].createElement(p["default"],{fixedHeight:e.fixedHeight,keepCollapsedContent:e.keepCollapsedContent,isOpened:e.isOpened},e.fixedHeight&&c["default"].createElement(g["default"],{width:e.collapsibleWidth||"100%",height:e.collapsibleHeight||"100%",style:e.scrollAreaStyle},c["default"].createElement("div",null,c["default"].createElement("div",{className:"emailpanel-content-wrapper",style:{height:"calc(100% - 100px)"}},c["default"].createElement("div",{className:""},c["default"].createElement(S["default"],null,c["default"].createElement("label",{title:I["default"].get("plEmailAddress.Help")},I["default"].get("plEmailAddress")),c["default"].createElement(x["default"],{error:t.error.email&&t.triedToSubmit,errorMessage:I["default"].get("Email.Message"),inputStyle:{marginBottom:"0px"},value:t.emailRequest.Email,onChange:this.onEmailValueChange.bind(this,"Email")})),c["default"].createElement(S["default"],null,c["default"].createElement("label",{title:I["default"].get("plSubject.Help")},I["default"].get("plSubject")),c["default"].createElement("div",null,c["default"].createElement(m["default"],{value:t.emailRequest.Subject,onChange:this.onEmailValueChange.bind(this,"Subject")}))),c["default"].createElement(S["default"],null,c["default"].createElement("label",{title:I["default"].get("SendMessage.Help")},I["default"].get("SendMessage")),c["default"].createElement(y["default"],{value:t.emailRequest.Message,onChange:this.onEmailValueChange.bind(this,"Message")})),c["default"].createElement("div",{className:"action-buttons"},c["default"].createElement(E["default"],{type:"secondary",onClick:this.onCloseEmailPanel.bind(this)},I["default"].get("btnCancel")),c["default"].createElement(E["default"],{type:"primary",onClick:this.onSendEmail.bind(this)},I["default"].get("btnSend"))))))),!e.fixedHeight&&e.children));}}]),t;}(s.Component);C.PropTypes={label:s.PropTypes.string,fixedHeight:s.PropTypes.number,collapsibleWidth:s.PropTypes.number,collapsibleHeight:s.PropTypes.number,keepCollapsedContent:s.PropTypes.bool,scrollAreaStyle:s.PropTypes.object,children:s.PropTypes.node,isOpened:s.PropTypes.bool,logIds:s.PropTypes.array,onCloseEmailPanel:s.PropTypes.func.isRequired},t["default"]=(0,u.connect)(r)(C);}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};} function o(e,t) {if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");} function i(e,t) {if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t||"object"!==typeof t&&"function"!==typeof t?e:t;} function a(e,t) {if ("function"!==typeof t&&null!==t) throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t);} function r(e) {return {selectedRowIds:e.log.selectedRowIds,excludedRowIds:e.log.excludedRowIds};}Object.defineProperty(t,"__esModule",{value:!0});let l=function () {function e(e,t) {for (let n=0;n0?x["default"].utilities.confirm(O["default"].get("LogDeleteWarning"),O["default"].get("yes"),O["default"].get("no"),function () {0==t.excludedRowIds.length&&e.isLastPage()?e.setState({pageIndex:n.pageIndex>0?n.pageIndex-1:0},function () {let n=e.getNextPage();t.dispatch(p.log.deleteLogItems(t.selectedRowIds,function () {t.dispatch(p.log.getLogList(n));}));}):!function () {let n=e.getNextPage();t.dispatch(p.log.deleteLogItems(t.selectedRowIds,function () {t.dispatch(p.log.getLogList(n));}));}();}):x["default"].utilities.notify(O["default"].get("SelectException"));}},{key:"onEmailLogItems",value:function () {let e=this.props;e.selectedRowIds.length>0?e.dispatch(p.log.emailLogItems(e.selectedRowIds)):alert(O["default"].get("SelectException"));}},{key:"toggleEmailPanel",value:function () {this.setState({emailPanelOpen:!this.state.emailPanelOpen});}},{key:"onSelectPortal",value:function (e) {let t=this,n=this.props,o=this.state;e.value!==o.currentPortalId&&this.setState({currentPortal:e.label,currentPortalId:e.value,pageIndex:0},function () {n.dispatch(p.log.getLogList(t.getNextPage()));});}},{key:"onSelectLogType",value:function (e) {let t=this,n=this.props,o=this.state;e.value!==o.currentLogTypeKey&&this.setState({currentLogType:e.label,currentLogTypeKey:e.value,pageIndex:0},function () {n.dispatch(p.log.getLogList(t.getNextPage()));});}},{key:"renderedPortalList",value:function () {let e=this,t=this.props,n=t.portalList.map(function (t,n) {return u["default"].createElement("li",{onClick:e.onSelectPortal.bind(e,t.PortalID,t.PortalName),value:t.PortalID},t.PortalName);});return u["default"].createElement("ul",{className:"site-group-filter"},n);}},{key:"renderedLogTypeList",value:function () {let e=this,t=this.props,n=t.logTypeList.map(function (t,n) {return u["default"].createElement("li",{onClick:e.onSelectLogType.bind(e,t.LogTypeKey,t.LogTypeFriendlyName)},t.LogTypeFriendlyName);});return u["default"].createElement("ul",{className:"site-group-filter"},n);}},{key:"renderLogListHeader",value:function () {let e=[{name:"",id:"LogTypeCSSClass"},{name:O["default"].get("Date"),id:"LogCreateDate"},{name:O["default"].get("Type"),id:"LogTypeFriendlyName"},{name:O["default"].get("Username"),id:"LogUserName"},{name:O["default"].get("Portal"),id:"LogPortalName"},{name:O["default"].get("Summary"),id:"Summary"}],t=this.props,n=e.map(function (e) {let t="logHeader logHeader-"+e.id;return u["default"].createElement("div",{className:t},u["default"].createElement("span",null,e.name,"  "));}),o=0==t.excludedRowIds.length&&t.excludedRowIds.length||0==!t.excludedRowIds.length&&t.selectedRowIds.length,i="checkbox"+(o?" deselect-state":"");return n.unshift(u["default"].createElement("div",{key:"selector999999",style:{width:20},className:"logHeader logHeader-Checkbox","data-index":"0"},u["default"].createElement("div",{className:i},u["default"].createElement(y["default"],{checked:0===t.excludedRowIds.length&&t.selectedRowIds.length>0||o,onChange:this.onSelectAll.bind(this)}),u["default"].createElement("label",{htmlFor:"selectAll"})))),u["default"].createElement("div",{className:"logHeader-wrapper"},n);}},{key:"renderedLogList",value:function () {let e=this,t=this.props;return t.logList.map(function (t,n) {return u["default"].createElement(g["default"],{cssClass:t.LogTypeCSSClass,logId:t.LogGUID,allRowIds:e.props.logList.map(function (e) {return e.LogGUID;}),typeName:t.LogTypeFriendlyName,createDate:t.LogCreateDate,userName:t.LogUserName,portalName:t.LogPortalName,summary:t.Summary,index:n,key:"logTerm-"+n,closeOnClick:!0},u["default"].createElement("div",{className:"log-detail",dangerouslySetInnerHTML:{__html:t.LogProperties}}));});}},{key:"isLastPage",value:function () {let e=this.props,t=this.state,n=Math.ceil(e.totalCount/t.pageSize),o=t.pageIndex*t.pageSize/t.pageSize+1;return n===o;}},{key:"onPageChange",value:function (e,t) {let n=this,o=this.state,i=this.props;void 0!==t&&o.pageSize!==t&&(o.pageSize=t),o.pageIndex=e,this.setState({state:o},function () {let e=n.getNextPage();i.dispatch(p.log.getLogList(e));});}},{key:"renderPager",value:function () {let e=this.props,t=this.state;return u["default"].createElement("div",{className:"logPager"},u["default"].createElement(S["default"],{showStartEndButtons:!1,showPageSizeOptions:!0,showPageInfo:!1,numericCounters:4,pageSize:t.pageSize,totalRecords:e.totalCount,onPageChanged:this.onPageChange.bind(this),pageSizeDropDownWithoutBorder:!0,pageSizeOptionText:"{0} results per page",summaryText:"Showing {0}-{1} of {2} results"}));}},{key:"renderedLogLegend",value:function () {let e=[{name:O["default"].get("ExceptionCode"),id:"Exception"},{name:O["default"].get("ItemCreatedCode"),id:"ItemCreated"},{name:O["default"].get("ItemUpdatedCode"),id:"ItemUpdated"},{name:O["default"].get("ItemDeletedCode"),id:"ItemDeleted"},{name:O["default"].get("SuccessCode"),id:"OperationSuccess"},{name:O["default"].get("FailureCode"),id:"OperationFailure"},{name:O["default"].get("AdminOpCode"),id:"GeneralAdminOperation"},{name:O["default"].get("AdminAlertCode"),id:"AdminAlert"},{name:O["default"].get("HostAlertCode"),id:"HostAlert"},{name:O["default"].get("SecurityException"),id:"SecurityException"}],t=e.map(function (e) {return u["default"].createElement("div",{className:"logLegend-item"},u["default"].createElement("div",{className:e.id},u["default"].createElement("span",null)),u["default"].createElement("div",null,u["default"].createElement("span",null,e.name))); - });return u["default"].createElement("div",{className:"logLegend-wrapper"},t);}},{key:"render",value:function () {let e=this.props,t=this.state,n=(0,I.createPortalOptions)(t.portalList),o=(0,I.createLogTypeOptions)(t.logTypeList);return t.portalList.length>0&&t.logTypeList.length>0&&u["default"].createElement("div",null,u["default"].createElement("div",{className:"toolbar"},u["default"].createElement("div",{className:"sitegroup-filter-container"},u["default"].createElement(E["default"],{value:t.currentPortalId,fixedHeight:200,style:{width:"100%"},options:n,withBorder:!1,onSelect:this.onSelectPortal.bind(this)})),u["default"].createElement("div",{className:"sitegroup-filter-container"},u["default"].createElement(E["default"],{value:t.currentLogTypeKey,fixedHeight:200,style:{width:"100%"},options:o,withBorder:!1,onSelect:this.onSelectLogType.bind(this)})),u["default"].createElement("div",{className:"toolbar-button"},u["default"].createElement("span",{onClick:this.toggleEmailPanel.bind(this)},O["default"].get("btnEmail")," "),u["default"].createElement("div",{className:"collapsible-content"},u["default"].createElement(m["default"],{fixedHeight:370,isOpened:t.emailPanelOpen,logIds:e.selectedRowIds,onCloseEmailPanel:this.toggleEmailPanel.bind(this)}))),u["default"].createElement("div",{className:"toolbar-button",onClick:this.onDeleteLogItems.bind(this)},O["default"].get("btnDelete")," "),u["default"].createElement("div",{className:"toolbar-button",onClick:this.onClearLog.bind(this)},O["default"].get("btnClear")," ")),u["default"].createElement("div",{className:"logContainer"},this.renderLogListHeader(),this.renderedLogList()),this.renderPager(),this.renderedLogLegend());}}]),t;}(c.Component);t["default"]=(0,d.connect)(r)(_);}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};} function o(e,t) {if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");} function i(e,t) {if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t||"object"!==typeof t&&"function"!==typeof t?e:t;} function a(e,t) {if ("function"!==typeof t&&null!==t) throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t);} function r(e) {return {selectedPage:e.visiblePanel.selectedPage,selectedPageVisibleIndex:e.visiblePanel.selectedPageVisibleIndex};}Object.defineProperty(t,"__esModule",{value:!0});let l=function () {function e(e,t) {for (let n=0;n0?t.logSettingDetail.KeepMostRecent.toString():"*";case "Threshold":return void 0!==t.logSettingDetail.NotificationThreshold&&t.logSettingDetail.NotificationThreshold>0?t.logSettingDetail.NotificationThreshold.toString():"1";case "ThresholdNotificationTime":return void 0!==t.logSettingDetail.NotificationThresholdTime&&t.logSettingDetail.NotificationThresholdTime>0?t.logSettingDetail.NotificationThresholdTime.toString():"1";case "ThresholdNotificationTimeType":return void 0!==t.logSettingDetail.NotificationThresholdTimeType&&t.logSettingDetail.NotificationThresholdTimeType>0?t.logSettingDetail.NotificationThresholdTimeType.toString():"1";case "MailFromAddress":return void 0!==t.logSettingDetail.MailFromAddress?t.logSettingDetail.MailFromAddress.toString():"";case "MailToAddress":return void 0!==t.logSettingDetail.MailToAddress?t.logSettingDetail.MailToAddress.toString():"";}}},{key:"getEnabledStatus",value:function (e) {let t=this.state;switch (e) {case "EmailNotification":return void 0!==t.logSettingDetail.EmailNotificationIsActive&&t.logSettingDetail.EmailNotificationIsActive;case "Logging":return void 0!==t.logSettingDetail.LoggingIsActive&&t.logSettingDetail.LoggingIsActive;}}},{key:"onDropDownChange",value:function (e,t) {this.ProcessChange(e,t.value);}},{key:"onTextChange",value:function (e,t) {this.ProcessChange(e,t.target.value);}},{key:"ProcessChange",value:function (e,t) {let n=this.state.logSettingDetail;n[e]=t,this.setState({logSettingDetail:n}),this.SetErrorState();let o=this.state;o.formModified=!0,this.setState({state:o});}},{key:"SetErrorState",value:function () {let e=this.state.logSettingDetail,t=this.state;e.EmailNotificationIsActive?this.validateEmail(e.MailToAddress)?t.error.mailToAddress=!1:t.error.mailToAddress=!0:t.error.mailToAddress=!1,t.triedToSubmit=!1,this.setState({state:t});}},{key:"validateEmail",value:function (e) {let t=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e);}},{key:"OnCheckboxChanged",value:function (e,t) {let n=this.state.logSettingDetail;n[e]=t,this.setState({logSettingDetail:n}),this.SetErrorState();let o=this.state;o.formModified=!0,this.setState({state:o});}},{key:"addUpdateLogSetting",value:function (e) {e.preventDefault();let t=this.props,n=this.state;if (this.setState({triedToSubmit:!0}),!n.error.mailToAddress) if (n.formModified) {let o=this.state.logSettingDetail;""!==t.logTypeSettingId?t.dispatch(S.logSettings.updateLogSetting(o,function (n) {x["default"].utilities.notify(O["default"].get("ConfigUpdated")),t.Collapse(e);},function (e) {x["default"].utilities.notify(O["default"].get("ConfigUpdateError"));})):t.dispatch(S.logSettings.addLogSetting(o,function (n) {x["default"].utilities.notify(O["default"].get("ConfigAdded")),t.Collapse(e);},function (e) {x["default"].utilities.notify(O["default"].get("ConfigAddError"));}));} else t.Collapse(e);}},{key:"deleteLogSetting",value:function (e) {let t=this.props;""!==t.logTypeSettingId?x["default"].utilities.confirm(O["default"].get("ConfigDeletedWarning"),O["default"].get("yes"),O["default"].get("no"),function () {t.dispatch(S.logSettings.deleteLogSetting({LogTypeConfigId:t.logTypeSettingId},function (n) {x["default"].utilities.notify(O["default"].get("ConfigDeleted")),t.Collapse(e);},function (e) {x["default"].utilities.notify(O["default"].get("DeleteError"));}));},function () {x["default"].utilities.notify(O["default"].get("ConfigDeleteCancelled"));}):x["default"].utilities.notify(O["default"].get("ConfigDeleteInconsistency"));}},{key:"render",value:function () {let e=u["default"].createElement("div",{className:"editor-container left-column"},u["default"].createElement("div",{className:"title-row divider"},O["default"].get("Settings")),u["default"].createElement("div",{className:"status-row divider"},u["default"].createElement("div",{className:"left",title:O["default"].get("plIsActive.Help")},O["default"].get("plIsActive")),u["default"].createElement("div",{className:"right"},u["default"].createElement(f["default"],{labelHidden:!0,value:this.getEnabledStatus("Logging"),onChange:this.OnCheckboxChanged.bind(this,"LoggingIsActive")}))),u["default"].createElement("div",{className:"editor-row divider",title:O["default"].get("plLogTypeKey.Help")},u["default"].createElement("label",null,O["default"].get("plLogTypeKey")," "),u["default"].createElement(v["default"],{enabled:this.getEnabledStatus("Logging"),options:this.props.logTypeList,value:this.getValue("LogType"),onSelect:this.onDropDownChange.bind(this,"LogTypeKey"),style:{width:"100%","float":"left"}})),u["default"].createElement("div",{className:"editor-row divider",title:O["default"].get("plLogTypePortalID.Help")},u["default"].createElement("label",null,O["default"].get("plLogTypePortalID")," "),u["default"].createElement(v["default"],{enabled:this.getEnabledStatus("Logging"),options:this.props.portalList,value:this.getValue("Website"),onSelect:this.onDropDownChange.bind(this,"LogTypePortalID"),style:{width:"100%","float":"left"}})),u["default"].createElement("div",{className:"editor-row divider"},u["default"].createElement("label",null,O["default"].get("plKeepMostRecent")," "),u["default"].createElement(v["default"],{enabled:this.getEnabledStatus("Logging"),options:this.props.keepMostRecentOptions,value:this.getValue("Recent"),onSelect:this.onDropDownChange.bind(this,"KeepMostRecent"),style:{width:"100%","float":"left"}}))),t=u["default"].createElement("div",{className:"editor-container"},u["default"].createElement("div",{className:"title-row divider"},O["default"].get("EmailSettings")),u["default"].createElement("div",{className:"status-row divider"},u["default"].createElement("div",{className:"left",title:O["default"].get("plEmailNotificationStatus.Help")},O["default"].get("plEmailNotificationStatus")),u["default"].createElement("div",{className:"right"},u["default"].createElement(f["default"],{labelHidden:!0,value:this.getEnabledStatus("EmailNotification"),onChange:this.OnCheckboxChanged.bind(this,"EmailNotificationIsActive")}))),u["default"].createElement("div",{className:"editor-row divider"},u["default"].createElement("label",null,O["default"].get("plThreshold")),u["default"].createElement(v["default"],{enabled:this.getEnabledStatus("EmailNotification"),options:this.props.thresholdsOptions,value:this.getValue("Threshold"),onSelect:this.onDropDownChange.bind(this,"NotificationThreshold"),style:{width:"40%","float":"left"}}),u["default"].createElement("div",{className:"text-section"},"in"),u["default"].createElement(v["default"],{enabled:this.getEnabledStatus("EmailNotification"),options:this.props.notificationTimesOptions,value:this.getValue("ThresholdNotificationTime"),onSelect:this.onDropDownChange.bind(this,"NotificationThresholdTime"),style:{width:"25%","float":"left"}}),u["default"].createElement("div",{className:"text-section"},"  "),u["default"].createElement(v["default"],{enabled:this.getEnabledStatus("EmailNotification"),options:this.props.notificationTimeTypesOptions,value:this.getValue("ThresholdNotificationTimeType"),onSelect:this.onDropDownChange.bind(this,"NotificationThresholdTimeType"),style:{width:"25%","float":"left"}})),u["default"].createElement("div",{className:"editor-row divider",title:O["default"].get("plMailToAddress.Help")},u["default"].createElement("label",null,O["default"].get("plMailToAddress")," *"),u["default"].createElement(T["default"],{error:this.state.error.mailToAddress&&this.state.triedToSubmit,errorMessage:O["default"].get("MailToAddress.Message"),enabled:this.getEnabledStatus("EmailNotification"),value:this.getValue("MailToAddress"),onChange:this.onTextChange.bind(this,"MailToAddress")}))),n=[];return n.push(e),n.push(t),u["default"].createElement("div",{className:"log-setting-editor"},u["default"].createElement(h["default"],{children:n,numberOfColumns:2}),u["default"].createElement("div",{className:"buttons-box"},""!==this.props.logTypeSettingId&&u["default"].createElement(b["default"],{type:"secondary",onClick:this.deleteLogSetting.bind(this)},O["default"].get("ConfigBtnDelete")),u["default"].createElement(b["default"],{type:"secondary",onClick:this.props.Collapse.bind(this)},O["default"].get("ConfigBtnCancel")),u["default"].createElement(b["default"],{type:"primary",onClick:this.addUpdateLogSetting.bind(this)},O["default"].get("ConfigBtnSave"))));}}]),t;}(c.Component);t["default"]=(0,d.connect)(r)(I);}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};} function o(e,t) {if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");} function i(e,t) {if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t||"object"!==typeof t&&"function"!==typeof t?e:t;} function a(e,t) {if ("function"!==typeof t&&null!==t) throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t);}Object.defineProperty(t,"__esModule",{value:!0});let r=function () {function e(e,t) {for (let n=0;n0?s["default"].createElement(u["default"],{left:100*n,top:e.repaintChildren?0:e.selectedPageVisibleIndex*-100},t.map(function (t,n) {return s["default"].createElement(p["default"],{childPage:!0,top:e.repaintChildren?0:100*n},e.repaintChildren?n===e.selectedPageVisibleIndex&&t:t);})):s["default"].createElement(p["default"],{left:100*n},t);});return s["default"].createElement("div",{className:"personaBar-pagesContainer",style:{left:e.selectedPage*-100+"%"}},t);}}]),t;}(l.Component);f.PropTypes={pages:l.PropTypes.array,selectedPage:l.PropTypes.number,selectedPageVisibleIndex:l.PropTypes.number},t["default"]=f;}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";function e(e) {return e&&e.__esModule?e:{"default":e};}Object.defineProperty(t,"__esModule",{value:!0});let o=n(7),i=e(o),a={init:function (e) {let t=window.dnn[e]();i["default"].init(t.utility),i["default"].moduleName=t.moduleName,n(102);},dispatch:function () {throw new Error("dispatch method needs to be overwritten from the Redux store");}};t["default"]=a;}).call(this);} finally {}},function (e,t,n) {try {(function () {"use strict";function e() {let e=arguments.length<=0||void 0===arguments[0]?{logList:[],portalList:[],logTypeList:[],selectedRowIds:[],excludedRowIds:[],totalCount:0}:arguments[0],t=arguments[1];switch (t.type) {case i.log.RETRIEVED_LOG_LIST:return o({},e,{logList:t.data.logList,selectedRowIds:t.data.selectedRowIds,excludedRowIds:t.data.excludedRowIds,totalCount:t.data.totalCount});case i.log.RETRIEVED_PORTAL_LIST:return o({},e,{portalList:t.data.portalList});case i.log.RETRIEVED_LOGTYPE_LIST:return o({},e,{logTypeList:t.data.logTypeList});case i.log.SELECTED_ROW:return o({},e,{selectedRowIds:e.selectedRowIds.concat(t.data.rowId),excludedRowIds:e.excludedRowIds.filter(function (e) {return e!=t.data.rowId;})});case i.log.DESELECTED_ROW:return o({},e,{excludedRowIds:e.excludedRowIds.concat(t.data.rowId),selectedRowIds:e.selectedRowIds.filter(function (e) {return e!=t.data.rowId;})});case i.log.SELECTED_ALL:return o({},e,{selectedRowIds:e.selectedRowIds.concat(e.excludedRowIds),excludedRowIds:[]});case i.log.DESELECTED_ALL:return o({},e,{selectedRowIds:[],excludedRowIds:e.excludedRowIds.concat(e.selectedRowIds)});case i.log.DELETED_LOG_ITEMS:return o({},e,{selectedRowIds:t.data.selectedRowIds,excludedRowIds:t.data.excludedRowIds});case i.log.CLEARED_LOG:return o({},e,{selectedRowIds:t.data.selectedRowIds,excludedRowIds:t.data.excludedRowIds});default:return o({},e);}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function (e) {for (let t=1;t","<","\"","'","isAttributeNameSafe","attributeName","validatedAttributeNameCache","illegalAttributeNameCache","VALID_ATTRIBUTE_NAME_REGEX","shouldIgnoreValue","propertyInfo","value","hasBooleanValue","hasNumericValue","isNaN","hasPositiveNumericValue","hasOverloadedBooleanValue","DOMProperty","quoteAttributeValueForBrowser","ID_ATTRIBUTE_NAME","setAttribute","createMarkupForProperty","properties","isCustomAttribute","createMarkupForCustomAttribute","setValueForProperty","mutationMethod","deleteValueForProperty","mustUseAttribute","namespace","attributeNamespace","setAttributeNS","propName","propertyName","hasSideEffects","setValueForAttribute","defaultValue","getDefaultValueForProperty","checkMask","bitmask","DOMPropertyInjection","MUST_USE_ATTRIBUTE","MUST_USE_PROPERTY","HAS_SIDE_EFFECTS","HAS_BOOLEAN_VALUE","HAS_NUMERIC_VALUE","HAS_POSITIVE_NUMERIC_VALUE","HAS_OVERLOADED_BOOLEAN_VALUE","injectDOMPropertyConfig","domPropertyConfig","Injection","Properties","DOMAttributeNamespaces","DOMAttributeNames","DOMPropertyNames","DOMMutationMethods","_isCustomAttributeFunctions","lowerCased","propConfig","mustUseProperty","defaultValueCache","getPossibleStandardName","isCustomAttributeFn","prop","nodeDefaults","warning","ReactDOMIDOperations","processChildrenUpdates","dangerouslyProcessChildrenUpdates","replaceNodeWithMarkupByID","dangerouslyReplaceNodeWithMarkupByID","rootNodeID","purgeID","INVALID_PROPERTY_ERRORS","dangerouslySetInnerHTML","style","updatePropertyByID","firstDifferenceIndex","string1","string2","minLen","Math","min","charAt","getReactRootElementInContainer","container","DOC_NODE_TYPE","getReactRootID","rootElement","internalGetID","nodeCache","cached","isValid","ATTR_NAME","setID","oldID","findReactNodeByID","getNodeFromInstance","instance","ReactInstanceMap","get","ReactEmptyComponentRegistry","isNullComponentID","findReactContainerForID","containsNode","findDeepestCachedAncestorImpl","ancestorID","ancestor","deepestNodeSoFar","findDeepestCachedAncestor","targetID","traverseAncestors","foundNode","mountComponentIntoNode","componentInstance","shouldReuseMarkup","ReactDOMFeatureFlags","_renderedComponent","_topLevelWrapper","_mountImageIntoNode","batchedMountComponentIntoNode","ReactReconcileTransaction","getPooled","perform","release","unmountComponentFromNode","hasNonRootReactChild","reactRootID","getReactRootIDFromNodeID","findFirstReactDOMImpl","nodeID","lastID","containersByReactRootID","ReactBrowserEventEmitter","ReactElement","ReactMarkupChecksum","ReactUpdateQueue","emptyObject","instantiateReactComponent","shouldUpdateReactComponent","ELEMENT_NODE_TYPE","DOCUMENT_FRAGMENT_NODE_TYPE","random","toString","instancesByReactRootID","findComponentRootReusableArray","TopLevelWrapper","isReactComponent","_instancesByReactRootID","scrollMonitor","renderCallback","_updateRootComponent","prevComponent","nextElement","callback","enqueueElementInternal","enqueueCallbackInternal","_registerComponent","nextComponent","ensureScrollValueMonitoring","registerContainer","_renderNewRootComponent","parentComponent","_reactInternalInstance","_renderSubtreeIntoContainer","isValidElement","nextWrappedElement","prevWrappedElement","prevElement","publicInst","getPublicInstance","updatedCallback","reactRootElement","containerHasReactMarkup","containerHasNonRootReactChild","component","_processChildContext","_context","createReactRootID","containerID","reactRoot","findComponentRoot","getFirstReactDOM","ancestorNode","firstChildren","childIndex","deepestAncestor","targetChild","child","childID","isAncestorIDOf","nextSibling","canReuseMarkup","checksum","CHECKSUM_ATTR_NAME","rootMarkup","outerHTML","normalizedMarkup","diffIndex","appendChild","getListeningForDocument","mountAt","topListenersIDKey","reactTopListenersCounter","alreadyListeningTo","EventConstants","EventPluginHub","EventPluginRegistry","ReactEventEmitterMixin","ViewportMetrics","isEventSupported","isMonitoringScrollValue","topEventMapping","topAbort","topBlur","topCanPlay","topCanPlayThrough","topChange","topClick","topCompositionEnd","topCompositionStart","topCompositionUpdate","topContextMenu","topCopy","topCut","topDoubleClick","topDrag","topDragEnd","topDragEnter","topDragExit","topDragLeave","topDragOver","topDragStart","topDrop","topDurationChange","topEmptied","topEncrypted","topEnded","topError","topFocus","topInput","topKeyDown","topKeyPress","topKeyUp","topLoadedData","topLoadedMetadata","topLoadStart","topMouseDown","topMouseMove","topMouseOut","topMouseOver","topMouseUp","topPaste","topPause","topPlay","topPlaying","topProgress","topRateChange","topScroll","topSeeked","topSeeking","topSelectionChange","topStalled","topSuspend","topTextInput","topTimeUpdate","topTouchCancel","topTouchEnd","topTouchMove","topTouchStart","topVolumeChange","topWaiting","topWheel","ReactEventListener","injectReactEventListener","setHandleTopLevel","handleTopLevel","setEnabled","enabled","isEnabled","listenTo","registrationName","contentDocumentHandle","isListening","dependencies","registrationNameDependencies","topLevelTypes","dependency","trapBubbledEvent","trapCapturedEvent","WINDOW_HANDLE","topLevelType","handlerBaseName","handle","refresh","refreshScrollValues","monitorScrollValue","eventNameDispatchConfigs","registrationNameModules","putListener","getListener","deleteListener","deleteAllListeners","PropagationPhases","bubbled","captured","topLoad","topReset","topSubmit","EventPluginUtils","ReactErrorUtils","accumulateInto","forEachAccumulated","listenerBank","eventQueue","executeDispatchesAndRelease","event","simulated","executeDispatchesInOrder","isPersistent","constructor","executeDispatchesAndReleaseSimulated","executeDispatchesAndReleaseTopLevel","InstanceHandle","injectMount","injectInstanceHandle","InjectedInstanceHandle","getInstanceHandle","injectEventPluginOrder","injectEventPluginsByName","listener","bankForRegistrationName","PluginModule","didPutListener","willDeleteListener","extractEvents","topLevelTarget","topLevelTargetID","nativeEvent","nativeEventTarget","events","plugins","possiblePlugin","extractedEvents","enqueueEvents","processEventQueue","processingEventQueue","rethrowCaughtError","__purge","__getListenerBank","recomputePluginOrdering","EventPluginOrder","pluginName","namesToPlugins","pluginIndex","publishedEvents","eventTypes","eventName","publishEventForPlugin","dispatchConfig","phasedRegistrationNames","phaseName","phasedRegistrationName","publishRegistrationName","InjectedEventPluginOrder","injectedNamesToPlugins","isOrderingDirty","getPluginModuleForEvent","phase","_resetEventPlugins","isEndish","isMoveish","isStartish","executeDispatch","domID","currentTarget","invokeGuardedCallbackWithCatch","invokeGuardedCallback","dispatchListeners","_dispatchListeners","dispatchIDs","_dispatchIDs","isPropagationStopped","executeDispatchesInOrderStopAtTrueImpl","executeDispatchesInOrderStopAtTrue","executeDirectDispatch","dispatchListener","dispatchID","res","hasDispatches","InjectedMount","x","caughtError","next","currentIsArray","nextIsArray","apply","concat","arr","cb","scope","runEventQueueInBatch","currentScrollLeft","currentScrollTop","scrollPosition","y","target","sources","TypeError","to","nextIndex","arguments","nextSource","from","eventNameSuffix","capture","isSupported","element","useHasFeature","implementation","hasFeature","REACT_ELEMENT_TYPE","Symbol","RESERVED_PROPS","ref","__self","__source","self","source","owner","$$typeof","_owner","config","children","childrenLength","childArray","defaultProps","createFactory","factory","bind","cloneAndReplaceKey","oldElement","newKey","newElement","_self","_source","cloneAndReplaceProps","newProps","cloneElement","canDefineProperty","nullComponentIDsRegistry","registerNullComponentID","deregisterNullComponentID","getReactRootIDString","SEPARATOR","isBoundary","isValidID","descendantID","getParentID","substr","lastIndexOf","getNextDescendantID","destinationID","start","SEPARATOR_LENGTH","getFirstCommonAncestorID","oneID","twoID","minLength","lastCommonMarkerIndex","longestCommonID","traverseParentPath","stop","skipFirst","skipLast","traverseUp","depth","traverse","MAX_TREE_DEPTH","ReactRootIndex","createReactRootIndex","createReactID","traverseEnterLeave","leaveID","enterID","upArg","downArg","traverseTwoPhase","traverseTwoPhaseSkipTarget","_getNextDescendantID","ReactRootIndexInjection","injectCreateReactRootIndex","_createReactRootIndex","remove","has","set","adler32","TAG_END","addChecksumToMarkup","existingChecksum","parseInt","markupChecksum","l","charCodeAt","MOD","attachRefs","ReactRef","internalInstance","getReactMountReady","enqueue","detachRefs","refsChanged","shouldUpdateRefs","performUpdateIfNecessary","attachRef","ReactOwner","addComponentAsRefTo","detachRef","removeComponentAsRefFrom","prevEmpty","nextEmpty","isValidOwner","refs","enqueueUpdate","getInternalInstanceReadyForUpdate","publicInstance","callerName","isMounted","enqueueCallback","_pendingCallbacks","enqueueForceUpdate","_pendingForceUpdate","enqueueReplaceState","completeState","_pendingStateQueue","_pendingReplaceState","enqueueSetState","partialState","queue","enqueueSetProps","partialProps","enqueueSetPropsInternal","topLevelWrapper","wrapElement","_pendingElement","enqueueReplaceProps","enqueueReplacePropsInternal","ensureInjected","batchingStrategy","ReactUpdatesFlushTransaction","reinitializeTransaction","dirtyComponentsLength","callbackQueue","CallbackQueue","reconcileTransaction","mountOrderComparator","c1","c2","_mountOrder","runBatchedUpdates","len","dirtyComponents","sort","callbacks","isBatchingUpdates","asap","asapCallbackQueue","asapEnqueued","PooledClass","Transaction","NESTED_UPDATES","initialize","close","splice","flushBatchedUpdates","UPDATE_QUEUEING","reset","notifyAll","TRANSACTION_WRAPPERS","Mixin","getTransactionWrappers","destructor","method","addPoolingTo","ReactUpdatesInjection","injectReconcileTransaction","ReconcileTransaction","injectBatchingStrategy","_batchingStrategy","_callbacks","_contexts","contexts","oneArgumentPooler","copyFieldsFrom","Klass","instancePool","pop","twoArgumentPooler","a1","a2","threeArgumentPooler","a3","fourArgumentPooler","a4","fiveArgumentPooler","a5","standardReleaser","poolSize","DEFAULT_POOL_SIZE","DEFAULT_POOLER","CopyConstructor","pooler","NewKlass","transactionWrappers","wrapperInitData","_isInTransaction","isInTransaction","errorThrown","initializeAll","closeAll","err","startIndex","wrapper","OBSERVED_ERROR","initData","_x","_x2","_again","_function","outerNode","innerNode","isTextNode","contains","compareDocumentPosition","isNode","Node","isInternalComponentType","ReactEmptyComponent","ReactNativeComponent","createInternalComponent","ReactCompositeComponentWrapper","createInstanceForText","_mountImage","ReactCompositeComponent","_instantiateReactComponent","getDeclarationErrorAddendum","getName","StatelessComponent","Component","ReactComponentEnvironment","ReactPropTypeLocations","updater","nextMountID","ReactCompositeComponentMixin","_instance","inst","renderedElement","publicProps","_processProps","publicContext","_processContext","canInstantiate","initialState","state","componentWillMount","_processPendingState","_renderValidatedComponent","componentDidMount","componentWillUnmount","_maskContext","maskedContext","contextTypes","contextName","currentContext","childContext","getChildContext","childContextTypes","_checkPropTypes","propTypes","location","componentName","ex","nextContext","prevContext","updateComponent","prevParentElement","nextParentElement","prevUnmaskedContext","nextUnmaskedContext","nextProps","componentWillReceiveProps","nextState","shouldUpdate","shouldComponentUpdate","_performComponentUpdate","partial","unmaskedContext","prevProps","prevState","hasComponentDidUpdate","Boolean","componentDidUpdate","componentWillUpdate","_updateRenderedComponent","prevComponentInstance","prevRenderedElement","nextRenderedElement","thisID","prevComponentID","nextMarkup","_replaceNodeWithMarkupByID","_renderValidatedComponentWithoutOwnerOrContext","renderedComponent","publicComponentInstance","displayName","injected","injectEnvironment","environment","ReactPropTypeLocationNames","prevType","nextType","placeholderElement","ReactEmptyComponentInjection","injectEmptyComponent","instantiate","getComponentClassForElement","tag","componentClass","tagToComponentClass","autoGenerateWrapperClass","genericComponentClass","textComponentClass","isTextComponent","ReactNativeComponentInjection","injectGenericComponentClass","injectTextComponentClass","injectComponentClasses","componentClasses","validateDOMNesting","alreadyInjected","ReactInjection","EventEmitter","DefaultEventPluginOrder","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","NativeComponent","ReactDOMComponent","Class","injectMixin","ReactBrowserComponentMixin","HTMLDOMPropertyConfig","SVGDOMPropertyConfig","EmptyComponent","Updates","ReactDefaultBatchingStrategy","RootIndex","ClientReactRootIndex","ServerReactRootIndex","isPresto","opera","isKeypressCommand","ctrlKey","altKey","metaKey","getCompositionEventType","compositionStart","compositionEnd","compositionUpdate","isFallbackCompositionStart","keyCode","START_KEYCODE","isFallbackCompositionEnd","END_KEYCODES","getDataFromCustomEvent","detail","extractCompositionEvent","eventType","fallbackData","canUseCompositionEvent","currentComposition","useFallbackCompositionData","getData","FallbackCompositionState","SyntheticCompositionEvent","customData","EventPropagators","accumulateTwoPhaseDispatches","getNativeBeforeInputChars","which","SPACEBAR_CODE","hasSpaceKeypress","SPACEBAR_CHAR","chars","getFallbackBeforeInputChars","extractBeforeInputEvent","canUseTextInputEvent","SyntheticInputEvent","beforeInput","keyOf","documentMode","onBeforeInput","onBeforeInputCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","listenerAtPhase","propagationPhase","accumulateDirectionalDispatches","upwards","accumulateTwoPhaseDispatchesSingle","dispatchMarker","accumulateTwoPhaseDispatchesSingleSkipTarget","accumulateDispatches","ignoredDirection","accumulateDirectDispatchesSingle","accumulateTwoPhaseDispatchesSkipTarget","accumulateEnterLeaveDispatches","leave","enter","fromID","toID","accumulateDirectDispatches","root","_root","_startText","getText","_fallbackText","getTextContentAccessor","end","startValue","startLength","endValue","endLength","minEnd","sliceTail","contentKey","SyntheticEvent","CompositionEventInterface","augmentClass","Interface","normalize","defaultPrevented","returnValue","isDefaultPrevented","EventInterface","eventPhase","bubbles","cancelable","timeStamp","Date","now","isTrusted","preventDefault","stopPropagation","cancelBubble","persist","Super","create","InputEventInterface","oneKeyObj","shouldUseChangeEvent","elem","manualDispatchChangeEvent","change","activeElementID","getEventTarget","runEventInBatch","startWatchingForChangeEventIE8","activeElement","stopWatchingForChangeEventIE8","detachEvent","getTargetIDForChangeEvent","handleEventsForChangeEventIE8","startWatchingForValueChange","activeElementValue","activeElementValueProp","getOwnPropertyDescriptor","defineProperty","newValueProp","handlePropertyChange","stopWatchingForValueChange","srcElement","getTargetIDForInputEvent","handleEventsForInputEventIE","getTargetIDForInputEventIE","shouldUseClickEvent","getTargetIDForClickEvent","isTextInputElement","onChange","onChangeCapture","doesChangeEventBubble","isInputEventSupported","val","getTargetIDFunc","handleEventFunc","supportedInputTypes","color","date","datetime","datetime-local","email","month","number","password","range","search","tel","time","url","week","nextReactRootIndex","ResponderEventPlugin","TapEventPlugin","SyntheticMouseEvent","mouseEnter","onMouseEnter","mouseLeave","onMouseLeave","relatedTarget","fromElement","win","doc","defaultView","parentWindow","toElement","SyntheticUIEvent","getEventModifierState","MouseEventInterface","screenX","screenY","clientX","clientY","shiftKey","getModifierState","button","buttons","pageX","pageY","UIEventInterface","view","modifierStateGetter","keyArg","syntheticEvent","keyProp","modifierKeyToProp","Alt","Control","Meta","Shift","hasSVG","RegExp","accept","acceptCharset","accessKey","action","allowFullScreen","allowTransparency","alt","async","autoComplete","autoPlay","cellPadding","cellSpacing","charSet","challenge","checked","classID","className","cols","colSpan","contentEditable","contextMenu","controls","coords","crossOrigin","dateTime","defer","dir","disabled","download","draggable","encType","form","formAction","formEncType","formMethod","formNoValidate","formTarget","frameBorder","headers","height","hidden","high","href","hrefLang","htmlFor","httpEquiv","icon","inputMode","integrity","is","keyParams","keyType","kind","label","lang","list","loop","low","manifest","marginHeight","marginWidth","max","maxLength","media","mediaGroup","multiple","muted","nonce","noValidate","open","optimum","pattern","placeholder","poster","preload","radioGroup","readOnly","rel","required","reversed","role","rows","rowSpan","sandbox","scoped","scrolling","seamless","selected","shape","size","sizes","span","spellCheck","src","srcDoc","srcLang","srcSet","step","summary","tabIndex","title","useMap","width","wmode","about","datatype","inlist","prefix","property","resource","typeof","vocab","autoCapitalize","autoCorrect","autoSave","itemProp","itemScope","itemType","itemID","itemRef","results","security","unselectable","autoFocus","didWarnKey","getDOMNode","componentOrElement","ReactDefaultBatchingStrategyTransaction","RESET_BATCHED_UPDATES","FLUSH_BATCHED_UPDATES","alreadyBatchingUpdates","legacyGetDOMNode","legacyIsMounted","_reactInternalComponent","legacySetStateEtc","legacySetProps","legacyReplaceProps","assertValidProps","HTML","enqueuePutListener","listenerToPut","trapBubbledEventsLocal","_tag","_wrapperState","listeners","mediaEvents","mountReadyInputWrapper","ReactDOMInput","mountReadyWrapper","postUpdateSelectWrapper","ReactDOMSelect","postUpdateWrapper","validateDangerousTag","validatedTagCache","VALID_TAG_REGEX","isCustomComponent","_renderedChildren","_previousStyle","_previousStyleCopy","_nodeWithLegacyProperties","AutoFocusUtils","CSSPropertyOperations","ReactDOMButton","ReactDOMOption","ReactDOMTextarea","ReactMultiChild","CONTENT_TYPES","string","CHILDREN","STYLE","__html","omittedCloseTags","base","br","embed","hr","img","input","keygen","link","meta","track","wbr","newlineEatingTags","listing","pre","textarea","menuitem","getNativeProps","mountWrapper","processChildContext","mountImage","_updateDOMProperties","_createInitialChildren","tagOpen","_createOpenTagMarkupAndPutListeners","tagContent","_createContentMarkup","focusDOMComponent","propKey","propValue","createMarkupForStyles","markupForID","contentToUse","childrenToUse","mountImages","mountChildren","lastProps","updateWrapper","_updateDOMChildren","styleName","styleUpdates","lastStyle","nextProp","lastProp","setValueForStyles","lastContent","nextContent","lastHtml","nextHtml","lastChildren","nextChildren","lastHasContentOrHtml","nextHasContentOrHtml","updateChildren","updateMarkup","unmountWrapper","unmountChildren","setState","replaceState","forceUpdate","setProps","replaceProps","focusNode","focus","CSSProperty","dangerousStyleValue","hyphenateStyleName","memoizeStringOnly","processStyleName","hasShorthandPropertyBug","styleFloatAccessor","tempStyle","font","cssFloat","styles","serialized","styleValue","expansion","shorthandPropertyExpansions","individualStyleName","prefixKey","toUpperCase","isUnitlessNumber","animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","stopOpacity","strokeDashoffset","strokeOpacity","strokeWidth","prefixes","keys","background","backgroundAttachment","backgroundColor","backgroundImage","backgroundPositionX","backgroundPositionY","backgroundRepeat","backgroundPosition","border","borderWidth","borderStyle","borderColor","borderBottom","borderBottomWidth","borderBottomStyle","borderBottomColor","borderLeft","borderLeftWidth","borderLeftStyle","borderLeftColor","borderRight","borderRightWidth","borderRightStyle","borderRightColor","borderTop","borderTopWidth","borderTopStyle","borderTopColor","fontStyle","fontVariant","fontSize","fontFamily","outline","outlineWidth","outlineStyle","outlineColor","camelizeStyleName","camelize","msPattern","_hyphenPattern","_","character","isEmpty","isNonNumeric","trim","hyphenate","_uppercasePattern","cache","mouseListenerNames","onClick","onDoubleClick","onMouseDown","onMouseMove","onMouseUp","onClickCapture","onDoubleClickCapture","onMouseDownCapture","onMouseMoveCapture","onMouseUpCapture","nativeProps","forceUpdateIfMounted","_handleChange","LinkedValueUtils","executeOnChange","rootNode","queryRoot","group","querySelectorAll","JSON","stringify","otherNode","otherID","otherInstance","instancesByReactID","getValue","getChecked","defaultChecked","initialValue","initialChecked","_assertSingleLink","inputProps","checkedLink","valueLink","_assertValueLink","_assertCheckedLink","ReactPropTypes","hasReadOnlyValue","checkbox","image","radio","submit","loggedTypeFailures","checkPropTypes","message","requestChange","createChainableTypeChecker","validate","checkType","isRequired","propFullName","ANONYMOUS","locationName","chainedCheckType","createPrimitiveTypeChecker","expectedType","propType","getPropType","preciseType","getPreciseType","createAnyTypeChecker","createArrayOfTypeChecker","typeChecker","createElementTypeChecker","createInstanceTypeChecker","expectedClass","expectedClassName","actualClassName","getClassName","createEnumTypeChecker","expectedValues","valuesString","createObjectOfTypeChecker","createUnionTypeChecker","arrayOfTypeCheckers","checker","createNodeChecker","createShapeTypeChecker","shapeTypes","every","iteratorFn","getIteratorFn","iterator","entries","done","entry","array","bool","any","arrayOf","instanceOf","objectOf","oneOf","oneOfType","maybeIterable","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ReactChildren","valueContextKey","selectValue","escapeUserProvidedKey","userProvidedKeyEscapeRegex","ForEachBookKeeping","forEachFunction","forEachContext","count","forEachSingleChild","bookKeeping","forEachChildren","forEachFunc","traverseContext","traverseAllChildren","MapBookKeeping","mapResult","keyPrefix","mapFunction","mapContext","result","mapSingleChildIntoContext","childKey","mappedChild","mapIntoWithKeyPrefixInternal","escapedPrefix","mapChildren","forEachSingleChildDummy","countChildren","map","userProvidedKeyEscaper","userProvidedKeyEscaperLookup","getComponentKey","wrapUserProvidedKey","traverseAllChildrenImpl","nameSoFar","nextName","subtreeCount","nextNamePrefix","SUBSEPARATOR","=",".",":","updateOptionsIfPendingUpdateAndMounted","pendingUpdate","updateOptions","selectedValue","options","wasMultiple","enqueueInsertMarkup","updateQueue","markupQueue","enqueueMove","enqueueRemove","enqueueSetMarkup","enqueueTextContent","processQueue","clearQueue","ReactChildReconciler","flattenChildren","updateDepth","_reconcilerInstantiateChildren","nestedChildren","instantiateChildren","_reconcilerUpdateChildren","prevChildren","nextNestedChildrenElements","_unmountChild","_unmountChildByName","setMarkup","_updateChildren","lastIndex","prevChild","nextChild","moveChild","_mountChildByNameAtIndex","renderedChildren","createChild","instantiateChild","childInstances","keyUnique","nestedChildNodes","nextChildInstance","renderedChild","flattenSingleChildIntoContext","shallowEqual","objA","objB","keysA","keysB","bHasOwnProperty","findParent","parent","TopLevelCallbackBookKeeping","ancestors","handleTopLevelImpl","handleTopLevelWithoutPath","_handleTopLevel","scrollValueMonitor","getUnboundedScrollPosition","EventListener","_enabled","listen","dispatchEvent","removeEventListener","registerDefault","scrollable","pageXOffset","scrollLeft","pageYOffset","scrollTop","ReactClass","Perf","validateMethodOverride","proto","specPolicy","ReactClassInterface","ReactClassMixin","SpecPolicy","OVERRIDE_BASE","DEFINE_MANY","DEFINE_MANY_MERGED","mixSpecIntoComponent","Constructor","spec","MIXINS_KEY","RESERVED_SPEC_KEYS","mixins","isReactClassMethod","isAlreadyDefined","isFunction","shouldAutoBind","autobind","__reactAutoBindMap","createMergedResultFunction","createChainedFunction","mixStaticSpecIntoComponent","statics","isReserved","isInherited","mergeIntoWithNoDuplicateKeys","one","two","bindAutoBindMethod","boundMethod","bindAutoBindMethods","autoBindKey","ReactComponent","ReactNoopUpdateQueue","DEFINE_ONCE","injectedMixins","getDefaultProps","getInitialState","newState","ReactClassComponent","createClass","methodName","mixin","warnTDZ","forceHTML","reactMountReady","ReactInputSelection","SELECTION_RESTORATION","getSelectionInformation","restoreSelection","EVENT_SUPPRESSION","currentlyEnabled","previouslyEnabled","ON_DOM_READY_QUEUEING","isInDocument","ReactDOMSelection","getActiveElement","hasSelectionCapabilities","focusedElem","selectionRange","getSelection","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","setSelection","selection","selectionStart","selectionEnd","createRange","parentElement","moveStart","moveEnd","getOffsets","offsets","createTextRange","collapse","select","setOffsets","isCollapsed","anchorNode","anchorOffset","focusOffset","getIEOffsets","selectedRange","selectedLength","fromStart","duplicate","moveToElementText","setEndPoint","startOffset","endOffset","getModernOffsets","rangeCount","currentRange","getRangeAt","startContainer","endContainer","isSelectionCollapsed","rangeLength","tempRange","cloneRange","selectNodeContents","setEnd","isTempRangeCollapsed","detectionRange","setStart","isBackward","collapsed","setIEOffsets","setModernOffsets","extend","temp","startMarker","getNodeForCharacterOffset","endMarker","offset","removeAllRanges","addRange","useIEOffsets","getLeafNode","getSiblingNode","nodeStart","nodeEnd","body","top","boundingTop","left","boundingLeft","constructSelectEvent","mouseDown","currentSelection","lastSelection","skipSelectionChangeEvent","onSelect","onSelectCapture","hasListener","ON_SELECT_KEY","GLOBAL_MOUNT_POINT_MAX","pow","ceil","SyntheticClipboardEvent","SyntheticFocusEvent","SyntheticKeyboardEvent","SyntheticDragEvent","SyntheticTouchEvent","SyntheticWheelEvent","getEventCharCode","abort","onAbort","onAbortCapture","blur","onBlur","onBlurCapture","canPlay","onCanPlay","onCanPlayCapture","canPlayThrough","onCanPlayThrough","onCanPlayThroughCapture","click","onContextMenu","onContextMenuCapture","copy","onCopy","onCopyCapture","cut","onCut","onCutCapture","doubleClick","drag","onDrag","onDragCapture","dragEnd","onDragEnd","onDragEndCapture","dragEnter","onDragEnter","onDragEnterCapture","dragExit","onDragExit","onDragExitCapture","dragLeave","onDragLeave","onDragLeaveCapture","dragOver","onDragOver","onDragOverCapture","dragStart","onDragStart","onDragStartCapture","drop","onDrop","onDropCapture","durationChange","onDurationChange","onDurationChangeCapture","emptied","onEmptied","onEmptiedCapture","encrypted","onEncrypted","onEncryptedCapture","ended","onEnded","onEndedCapture","onError","onErrorCapture","onFocus","onFocusCapture","onInput","onInputCapture","keyDown","onKeyDown","onKeyDownCapture","keyPress","onKeyPress","onKeyPressCapture","keyUp","onKeyUp","onKeyUpCapture","load","onLoad","onLoadCapture","loadedData","onLoadedData","onLoadedDataCapture","loadedMetadata","onLoadedMetadata","onLoadedMetadataCapture","loadStart","onLoadStart","onLoadStartCapture","mouseMove","mouseOut","onMouseOut","onMouseOutCapture","mouseOver","onMouseOver","onMouseOverCapture","mouseUp","paste","onPaste","onPasteCapture","pause","onPause","onPauseCapture","play","onPlay","onPlayCapture","playing","onPlaying","onPlayingCapture","progress","onProgress","onProgressCapture","rateChange","onRateChange","onRateChangeCapture","onReset","onResetCapture","scroll","onScroll","onScrollCapture","seeked","onSeeked","onSeekedCapture","seeking","onSeeking","onSeekingCapture","stalled","onStalled","onStalledCapture","onSubmit","onSubmitCapture","suspend","onSuspend","onSuspendCapture","timeUpdate","onTimeUpdate","onTimeUpdateCapture","touchCancel","onTouchCancel","onTouchCancelCapture","touchEnd","onTouchEnd","onTouchEndCapture","touchMove","onTouchMove","onTouchMoveCapture","touchStart","onTouchStart","onTouchStartCapture","volumeChange","onVolumeChange","onVolumeChangeCapture","waiting","onWaiting","onWaitingCapture","wheel","onWheel","onWheelCapture","topLevelEventsToDispatchConfig","ON_CLICK_KEY","onClickListeners","EventConstructor","ClipboardEventInterface","clipboardData","FocusEventInterface","getEventKey","KeyboardEventInterface","repeat","locale","charCode","normalizeKey","translateToKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","8","9","12","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","DragEventInterface","dataTransfer","TouchEventInterface","touches","targetTouches","changedTouches","WheelEventInterface","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","NS","xlink","xml","clipPath","cx","cy","dx","dy","fill","fx","fy","gradientTransform","gradientUnits","markerEnd","markerMid","markerStart","patternContentUnits","patternUnits","points","preserveAspectRatio","r","rx","ry","spreadMethod","stopColor","stroke","strokeDasharray","strokeLinecap","textAnchor","transform","viewBox","x1","x2","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlSpace","y1","y2","ReactServerRendering","ReactServerBatchingStrategy","ReactServerRenderingTransaction","ReactDOMFactories","onlyChild","Children","only","PropTypes","createMixin","DOM","__spread","createDOMFactory","mapObject","abbr","address","article","aside","audio","bdi","bdo","big","blockquote","canvas","cite","code","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","fieldset","figcaption","figure","footer","h1","h2","h3","h4","h5","h6","head","header","hgroup","iframe","ins","kbd","li","main","mark","menu","meter","nav","noscript","ol","output","picture","q","rp","rt","ruby","s","samp","script","section","small","strong","sub","sup","table","u","ul","var","video","circle","defs","ellipse","g","line","linearGradient","mask","path","polygon","polyline","radialGradient","rect","svg","tspan","validateExplicitKey","parentType","_store","validated","getAddendaForKeyUse","messageType","addendum","parentName","memoizer","ownerHasKeyUseWarning","addenda","parentOrOwner","childOwner","validateChildKeys","validatePropTypes","ReactElementValidator","validType","validatedFactory","newModule","newPackage","ctx","fn","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","global","process","ArrayIterator","_apply","Function","_call","not","throwsError","valueOrFalseIfThrows","isCallableWithoutNew","arePropertyDescriptorsSupported","supportsDescriptors","functionsHaveNames","_forEach","_reduce","reduce","_filter","filter","_some","some","force","configurable","enumerable","writable","defineProperties","forceOverride","_toString","isCallable","Value","getter","proxy","originalObject","targetObject","originalDescriptor","redefine","newValue","descriptor","defineByDescriptor","preserveToString","Prototype","supportsSubclassing","C","setPrototypeOf","Sub","Subclass","o","getGlobal","globals","globalIsFinite","isFinite","_indexOf","_arrayIndexOfApply","_concat","_strSlice","_push","_pushApply","_shift","shift","_max","_min","_floor","floor","_abs","abs","_log","log","_sqrt","sqrt","_hasOwnProperty","noop","symbolSpecies","species","numberIsNaN","Number","numberIsFinite","isStandardArguments","isLegacyArguments","callee","isArguments","Type","primitive","regex","symbol","overrideNative","replacement","original","hasSymbols","$iterator$","Set","Reflect","$String","ES","Call","F","V","IsCallable","RequireObjectCoercible","optMessage","TypeIsObject","ToObject","IsConstructor","ToInt32","ToNumber","ToUint32","ToInteger","ToLength","MAX_SAFE_INTEGER","SameValue","SameValueZero","IsIterable","GetIterator","itFn","GetMethod","it","IteratorComplete","iterResult","IteratorClose","completionIsThrow","returnMethod","innerResult","innerException","IteratorNext","IteratorStep","Construct","newTarget","isES6internal","SpeciesConstructor","O","defaultConstructor","S","CreateHTML","attribute","ToString","p1","escapedV","p2","p3","IsRegExp","argument","isRegExp","defineWellKnownSymbol","sym","symbolSearch","originalSearch","searchShim","regexp","searcher","symbolReplace","originalReplace","replaceValue","replaceShim","searchValue","replacer","split","symbolSplit","originalSplit","limit","splitShim","separator","splitter","symbolMatchExists","stringMatchIgnoresSymbolMatch","symbolMatch","originalMatch","matchShim","matcher","wrapConstructor","keysToSkip","getOwnPropertyNames","defaultSpeciesGetter","addDefaultSpecies","addIterator","impl","createDataProperty","createDataPropertyOrThrow","emulateES6construct","defaultNewTarget","defaultProto","slots","fromCodePoint","originalFromCodePoint","codePoints","StringShims","RangeError","raw","callSite","cooked","rawString","literalsegments","nextKey","nextSeg","nextSub","stringElements","0","1","stringRepeat","times","half","stringMaxLength","Infinity","StringPrototypeShims","thisStr","numTimes","startsWith","searchString","position","searchStr","endsWith","endPosition","pos","includes","codePointAt","first","isEnd","second","startsWithRejectsRegex","startsWithHandlesInfinity","startsWithSupportsSymbolMatch","re","endsWithSupportsSymbolMatch","includesSupportsSymbolMatch","ws","trimRegexp","trimShim","nonWS","nonWSregex","isBadHexRegex","hasStringTrimBug","StringIterator","_s","_i","ArrayShims","items","mapFn","mapping","T","usingIterator","nextValue","arrayLike","of","A","retval","arrayOfSupportsSubclassing","Foo","fooArr","ArrayPrototypeShims","copyWithin","relativeTarget","relativeStart","relativeEnd","finalItem","direction","find","predicate","thisArg","findIndex","values","unscopables","originalArrayPrototypeValues","searchElement","getPrototypeOf","arrayFromSwallowsNegativeLengths","arrayFromHandlesIterables","arrayFromHandlesUndefinedMapFunction","origArrayFrom","int32sAsOne","toLengthsCorrectly","originalForEach","callbackFn","originalMap","originalFilter","originalSome","originalEvery","originalReduce","reduceRight","originalReduceRight","lacksOctalSupport","lacksBinarySupport","trimsNonWhitespace","OrigNumber","binaryRegex","octalRegex","isBinary","isOctal","toPrimitive","valueOf","hasNonWS","isBadHex","NumberShim","primValue","NaN","receiver","valueOfSucceeds","MAX_VALUE","MIN_VALUE","NEGATIVE_INFINITY","POSITIVE_INFINITY","maxSafeInteger","MIN_SAFE_INTEGER","EPSILON","parseFloat","isInteger","isSafeInteger","idx","isEnumerableOn","propertyIsEnumerable","ensureEnumerable","sliceArgs","initial","desiredArgCount","assignTo","assignReducer","symbols","sourceKeys","getOwnPropertySymbols","ObjectShims","assignHasPendingExceptions","preventExtensions","thrower","ES5ObjectShims","magic","checkArgs","polyfill","FAKENULL","gpo","spo","objectKeysAcceptsPrimitives","originalObjectKeys","objectKeysRejectsRegex","regexRejectingObjectKeys","regexKeys","objectGOPNAcceptsPrimitives","cachedWindowNames","originalObjectGetOwnPropertyNames","objectGOPDAcceptsPrimitives","originalObjectGetOwnPropertyDescriptor","seal","objectSealAcceptsPrimitives","originalObjectSeal","isSealed","objectIsSealedAcceptsPrimitives","originalObjectIsSealed","freeze","objectFreezeAcceptsPrimitives","originalObjectFreeze","isFrozen","objectIsFrozenAcceptsPrimitives","originalObjectIsFrozen","objectPreventExtensionsAcceptsPrimitives","originalObjectPreventExtensions","isExtensible","objectIsExtensibleAcceptsPrimitives","originalObjectIsExtensible","objectGetProtoAcceptsPrimitives","originalGetProto","hasFlags","desc","regExpFlagsGetter","ignoreCase","multiline","unicode","sticky","regExpSupportsFlagsWithRegex","regExpNeedsToSupportSymbolMatch","regexToStringIsGeneric","regexToStringSupportsGenericFlags","flags","origRegExpToString","R","flagsGetter","sourceDesc","legacySourceGetter","sourceGetter","OrigRegExp","RegExpShim","patternIsRegExp","calledWithNew","P","$input","regexGlobals","lastMatch","lastParen","leftContext","rightContext","inverseEpsilon","roundTiesToEven","n","BINARY_32_EPSILON","BINARY_32_MAX_VALUE","BINARY_32_MIN_VALUE","numberCLZ","clz","MathShims","acosh","E","asinh","atanh","cbrt","negate","exp","clz32","LOG2E","cosh","expm1","t","sum","hypot","largest","log2","log10","LOG10E","log1p","sign","sinh","tanh","trunc","imul","ah","al","bh","bl","fround","v","expm1OfTen","origMathRound","round","roundHandlesBoundaryConditions","smallestPositiveNumberWhereRoundBreaks","largestPositiveNumberWhereRoundBreaks","roundDoesNotIncreaseIntegers","num","origImul","PromiseShim","setTimeout","IsPromise","promise","_promise","makeZeroTimeout","PromiseCapability","capability","resolver","resolve","reject","postMessage","timeouts","messageName","setZeroTimeout","handleMessage","Promise$prototype","Promise$prototype$then","makePromiseAsap","Promise","pr","task","then","setImmediate","nextTick","PROMISE_IDENTITY","PROMISE_THROWER","PROMISE_PENDING","PROMISE_FULFILLED","PROMISE_REJECTED","PROMISE_FULFILL_OFFSET","PROMISE_REJECT_OFFSET","PROMISE_CAPABILITY_OFFSET","PROMISE_FAKE_CAPABILITY","enqueuePromiseReactionJob","handler","promiseReactionJob","promiseCapability","handlerResult","fulfillPromise","reactionLength","fulfillReactionHandler0","reactionCapability0","rejectReactions0","rejectPromise","reason","rejectReactionHandler0","createResolvingFunctions","alreadyResolved","resolution","promiseResolveThenableJob","optimizedThen","thenable","resolvingFunctions","_promiseAllResolver","remaining","alreadyCalled","performPromiseAll","iteratorRecord","resultCapability","nextPromise","resolveElement","performPromiseRace","all","iterable","exception","ee","race","rejectFunc","resolveFunc","catch","onRejected","onFulfilled","returnValueIsIgnored","fulfillReactionHandler","rejectReactionHandler","chain","promiseSupportsSubclassing","promiseIgnoresNonFunctionThenCallbacks","promiseRequiresObjectContext","promiseResolveBroken","getsThenSynchronously","BadResolverPromise","executor","hasBadResolverPromise","origAll","origRace","origResolve","origReject","testOrder","preservesInsertionOrder","preservesNumericInsertionOrder","fastkey","addIterableToMap","MapConstructor","iter","adder","nextItem","addIterableToSet","SetConstructor","add","collectionShims","Map","empty","MapEntry","prev","isRemoved","isMap","_es6map","requireMapSlot","MapIterator","_head","Map$prototype","MapShim","_storage","_size","fkey","delete","clear","Set$prototype","isSet","_es6set","requireSetSlot","SetShim","[[SetData]]","decodeKey","ensureMap","hasFKey","entireSet","mapAcceptsArguments","OrigMapNoArgs","testMap","mapUsesSameValueZero","mapSupportsChaining","origMapSet","origMapGet","origMapHas","testSet","setUsesSameValueZero","setSupportsChaining","origSetAdd","origSetHas","origSetDel","mapSupportsSubclassing","M","mapFailsToSupportSubclassing","mapRequiresNew","OrigMap","setSupportsSubclassing","setFailsToSupportSubclassing","setRequiresNew","OrigSet","mapIterationThrowsStopIterator","anonymousSetHas","throwUnlessTargetIsObject","ReflectShims","deleteProperty","ownKeys","callAndCatchException","internalGet","internalSet","existingDesc","propertyKey","attributes","objectDotGetPrototypeOf","willCreateCircularPrototype","lastProto","defineOrOverrideReflectProperty","shim","acceptsPrimitives","originalReflectGetProto","basic","extensible","dateToString","shimmedDateToString","stringHTMLshims","anchor","blink","bold","fixed","fontcolor","fontsize","italics","strike","shouldOverwrite","quotesCount","JSONstringifiesSymbols","JSONstringifyAcceptsObjectSymbol","origStringify","replaceFn","wrappedReplacer","parsedValue","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","cachedSetTimeout","run","cachedClearTimeout","Item","fun","clearTimeout","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","umask"],"mappings":"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","file":"bundle-en.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!*********************************!*\\\n !*** ./src/components/main.jsx ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _react = __webpack_require__(/*! react */ 1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactDom = __webpack_require__(/*! react-dom */ 153);\n\t\n\t__webpack_require__(/*! es6-shim */ 154);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar appContainer = document.getElementById(\"taxonomy-container\");\n\t(0, _reactDom.render)(_react2.default.createElement(\n\t \"div\",\n\t null,\n\t _react2.default.createElement(\n\t \"h1\",\n\t null,\n\t \"Hello World\"\n\t )\n\t), appContainer);\n\n/***/ },\n/* 1 */\n/*!**************************!*\\\n !*** ./~/react/react.js ***!\n \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(/*! ./lib/React */ 2);\n\n\n/***/ },\n/* 2 */\n/*!******************************!*\\\n !*** ./~/react/lib/React.js ***!\n \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule React\n\t */\n\t\n\t'use strict';\n\t\n\tvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 3);\n\tvar ReactDOMServer = __webpack_require__(/*! ./ReactDOMServer */ 143);\n\tvar ReactIsomorphic = __webpack_require__(/*! ./ReactIsomorphic */ 147);\n\t\n\tvar assign = __webpack_require__(/*! ./Object.assign */ 38);\n\tvar deprecated = __webpack_require__(/*! ./deprecated */ 152);\n\t\n\t// `version` will be added here by ReactIsomorphic.\n\tvar React = {};\n\t\n\tassign(React, ReactIsomorphic);\n\t\n\tassign(React, {\n\t // ReactDOM\n\t findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),\n\t render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),\n\t unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),\n\t\n\t // ReactDOMServer\n\t renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),\n\t renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)\n\t});\n\t\n\tReact.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;\n\tReact.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer;\n\t\n\tmodule.exports = React;\n\n/***/ },\n/* 3 */\n/*!*********************************!*\\\n !*** ./~/react/lib/ReactDOM.js ***!\n \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactDOM\n\t */\n\t\n\t/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\t\n\t'use strict';\n\t\n\tvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 4);\n\tvar ReactDOMTextComponent = __webpack_require__(/*! ./ReactDOMTextComponent */ 5);\n\tvar ReactDefaultInjection = __webpack_require__(/*! ./ReactDefaultInjection */ 70);\n\tvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 44);\n\tvar ReactMount = __webpack_require__(/*! ./ReactMount */ 27);\n\tvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 17);\n\tvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 49);\n\tvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 53);\n\tvar ReactVersion = __webpack_require__(/*! ./ReactVersion */ 141);\n\t\n\tvar findDOMNode = __webpack_require__(/*! ./findDOMNode */ 90);\n\tvar renderSubtreeIntoContainer = __webpack_require__(/*! ./renderSubtreeIntoContainer */ 142);\n\tvar warning = __webpack_require__(/*! fbjs/lib/warning */ 24);\n\t\n\tReactDefaultInjection.inject();\n\t\n\tvar render = ReactPerf.measure('React', 'render', ReactMount.render);\n\t\n\tvar React = {\n\t findDOMNode: findDOMNode,\n\t render: render,\n\t unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n\t version: ReactVersion,\n\t\n\t /* eslint-disable camelcase */\n\t unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n\t unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n\t};\n\t\n\t// Inject the runtime into a devtools global hook regardless of browser.\n\t// Allows for debugging when the hook is injected on the page.\n\t/* eslint-enable camelcase */\n\tif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n\t CurrentOwner: ReactCurrentOwner,\n\t InstanceHandles: ReactInstanceHandles,\n\t Mount: ReactMount,\n\t Reconciler: ReactReconciler,\n\t TextComponent: ReactDOMTextComponent\n\t });\n\t}\n\t\n\tif (false) {\n\t var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');\n\t if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\t\n\t // First check if devtools is not installed\n\t if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n\t // If we're in Chrome or Firefox, provide a download link if not installed.\n\t if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n\t console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');\n\t }\n\t }\n\t\n\t // If we're in IE8, check to see if we are in compatibility mode and provide\n\t // information on preventing compatibility mode\n\t var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\t\n\t process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '') : undefined;\n\t\n\t var expectedFeatures = [\n\t // shims\n\t Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,\n\t\n\t // shams\n\t Object.create, Object.freeze];\n\t\n\t for (var i = 0; i < expectedFeatures.length; i++) {\n\t if (!expectedFeatures[i]) {\n\t console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');\n\t break;\n\t }\n\t }\n\t }\n\t}\n\t\n\tmodule.exports = React;\n\n/***/ },\n/* 4 */\n/*!******************************************!*\\\n !*** ./~/react/lib/ReactCurrentOwner.js ***!\n \\******************************************/\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactCurrentOwner\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Keeps track of the current owner.\n\t *\n\t * The current owner is the component who should own any components that are\n\t * currently being constructed.\n\t */\n\tvar ReactCurrentOwner = {\n\t\n\t /**\n\t * @internal\n\t * @type {ReactComponent}\n\t */\n\t current: null\n\t\n\t};\n\t\n\tmodule.exports = ReactCurrentOwner;\n\n/***/ },\n/* 5 */\n/*!**********************************************!*\\\n !*** ./~/react/lib/ReactDOMTextComponent.js ***!\n \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactDOMTextComponent\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\tvar DOMChildrenOperations = __webpack_require__(/*! ./DOMChildrenOperations */ 6);\n\tvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 21);\n\tvar ReactComponentBrowserEnvironment = __webpack_require__(/*! ./ReactComponentBrowserEnvironment */ 25);\n\tvar ReactMount = __webpack_require__(/*! ./ReactMount */ 27);\n\t\n\tvar assign = __webpack_require__(/*! ./Object.assign */ 38);\n\tvar escapeTextContentForBrowser = __webpack_require__(/*! ./escapeTextContentForBrowser */ 20);\n\tvar setTextContent = __webpack_require__(/*! ./setTextContent */ 19);\n\tvar validateDOMNesting = __webpack_require__(/*! ./validateDOMNesting */ 69);\n\t\n\t/**\n\t * Text nodes violate a couple assumptions that React makes about components:\n\t *\n\t * - When mounting text into the DOM, adjacent text nodes are merged.\n\t * - Text nodes cannot be assigned a React root ID.\n\t *\n\t * This component is used to wrap strings in elements so that they can undergo\n\t * the same reconciliation that is applied to elements.\n\t *\n\t * TODO: Investigate representing React components in the DOM with text nodes.\n\t *\n\t * @class ReactDOMTextComponent\n\t * @extends ReactComponent\n\t * @internal\n\t */\n\tvar ReactDOMTextComponent = function (props) {\n\t // This constructor and its argument is currently used by mocks.\n\t};\n\t\n\tassign(ReactDOMTextComponent.prototype, {\n\t\n\t /**\n\t * @param {ReactText} text\n\t * @internal\n\t */\n\t construct: function (text) {\n\t // TODO: This is really a ReactText (ReactNode), not a ReactElement\n\t this._currentElement = text;\n\t this._stringText = '' + text;\n\t\n\t // Properties\n\t this._rootNodeID = null;\n\t this._mountIndex = 0;\n\t },\n\t\n\t /**\n\t * Creates the markup for this text node. This node is not intended to have\n\t * any features besides containing text content.\n\t *\n\t * @param {string} rootID DOM ID of the root node.\n\t * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n\t * @return {string} Markup for this text node.\n\t * @internal\n\t */\n\t mountComponent: function (rootID, transaction, context) {\n\t if (false) {\n\t if (context[validateDOMNesting.ancestorInfoContextKey]) {\n\t validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]);\n\t }\n\t }\n\t\n\t this._rootNodeID = rootID;\n\t if (transaction.useCreateElement) {\n\t var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n\t var el = ownerDocument.createElement('span');\n\t DOMPropertyOperations.setAttributeForID(el, rootID);\n\t // Populate node cache\n\t ReactMount.getID(el);\n\t setTextContent(el, this._stringText);\n\t return el;\n\t } else {\n\t var escapedText = escapeTextContentForBrowser(this._stringText);\n\t\n\t if (transaction.renderToStaticMarkup) {\n\t // Normally we'd wrap this in a `span` for the reasons stated above, but\n\t // since this is a situation where React won't take over (static pages),\n\t // we can simply return the text as it is.\n\t return escapedText;\n\t }\n\t\n\t return '' + escapedText + '';\n\t }\n\t },\n\t\n\t /**\n\t * Updates this component by updating the text content.\n\t *\n\t * @param {ReactText} nextText The next text content\n\t * @param {ReactReconcileTransaction} transaction\n\t * @internal\n\t */\n\t receiveComponent: function (nextText, transaction) {\n\t if (nextText !== this._currentElement) {\n\t this._currentElement = nextText;\n\t var nextStringText = '' + nextText;\n\t if (nextStringText !== this._stringText) {\n\t // TODO: Save this as pending props and use performUpdateIfNecessary\n\t // and/or updateComponent to do the actual update for consistency with\n\t // other component types?\n\t this._stringText = nextStringText;\n\t var node = ReactMount.getNode(this._rootNodeID);\n\t DOMChildrenOperations.updateTextContent(node, nextStringText);\n\t }\n\t }\n\t },\n\t\n\t unmountComponent: function () {\n\t ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n\t }\n\t\n\t});\n\t\n\tmodule.exports = ReactDOMTextComponent;\n\n/***/ },\n/* 6 */\n/*!**********************************************!*\\\n !*** ./~/react/lib/DOMChildrenOperations.js ***!\n \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule DOMChildrenOperations\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\tvar Danger = __webpack_require__(/*! ./Danger */ 7);\n\tvar ReactMultiChildUpdateTypes = __webpack_require__(/*! ./ReactMultiChildUpdateTypes */ 15);\n\tvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 17);\n\t\n\tvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 18);\n\tvar setTextContent = __webpack_require__(/*! ./setTextContent */ 19);\n\tvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 12);\n\t\n\t/**\n\t * Inserts `childNode` as a child of `parentNode` at the `index`.\n\t *\n\t * @param {DOMElement} parentNode Parent node in which to insert.\n\t * @param {DOMElement} childNode Child node to insert.\n\t * @param {number} index Index at which to insert the child.\n\t * @internal\n\t */\n\tfunction insertChildAt(parentNode, childNode, index) {\n\t // By exploiting arrays returning `undefined` for an undefined index, we can\n\t // rely exclusively on `insertBefore(node, null)` instead of also using\n\t // `appendChild(node)`. However, using `undefined` is not allowed by all\n\t // browsers so we must replace it with `null`.\n\t\n\t // fix render order error in safari\n\t // IE8 will throw error when index out of list size.\n\t var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index);\n\t\n\t parentNode.insertBefore(childNode, beforeChild);\n\t}\n\t\n\t/**\n\t * Operations for updating with DOM children.\n\t */\n\tvar DOMChildrenOperations = {\n\t\n\t dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\n\t\n\t updateTextContent: setTextContent,\n\t\n\t /**\n\t * Updates a component's children by processing a series of updates. The\n\t * update configurations are each expected to have a `parentNode` property.\n\t *\n\t * @param {array} updates List of update configurations.\n\t * @param {array} markupList List of markup strings.\n\t * @internal\n\t */\n\t processUpdates: function (updates, markupList) {\n\t var update;\n\t // Mapping from parent IDs to initial child orderings.\n\t var initialChildren = null;\n\t // List of children that will be moved or removed.\n\t var updatedChildren = null;\n\t\n\t for (var i = 0; i < updates.length; i++) {\n\t update = updates[i];\n\t if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {\n\t var updatedIndex = update.fromIndex;\n\t var updatedChild = update.parentNode.childNodes[updatedIndex];\n\t var parentID = update.parentID;\n\t\n\t !updatedChild ? false ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a when using tables, ' + 'nesting tags like
,

, or , or using non-SVG elements ' + 'in an parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined;\n\t\n\t initialChildren = initialChildren || {};\n\t initialChildren[parentID] = initialChildren[parentID] || [];\n\t initialChildren[parentID][updatedIndex] = updatedChild;\n\t\n\t updatedChildren = updatedChildren || [];\n\t updatedChildren.push(updatedChild);\n\t }\n\t }\n\t\n\t var renderedMarkup;\n\t // markupList is either a list of markup or just a list of elements\n\t if (markupList.length && typeof markupList[0] === 'string') {\n\t renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);\n\t } else {\n\t renderedMarkup = markupList;\n\t }\n\t\n\t // Remove updated children first so that `toIndex` is consistent.\n\t if (updatedChildren) {\n\t for (var j = 0; j < updatedChildren.length; j++) {\n\t updatedChildren[j].parentNode.removeChild(updatedChildren[j]);\n\t }\n\t }\n\t\n\t for (var k = 0; k < updates.length; k++) {\n\t update = updates[k];\n\t switch (update.type) {\n\t case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n\t insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);\n\t break;\n\t case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n\t insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);\n\t break;\n\t case ReactMultiChildUpdateTypes.SET_MARKUP:\n\t setInnerHTML(update.parentNode, update.content);\n\t break;\n\t case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n\t setTextContent(update.parentNode, update.content);\n\t break;\n\t case ReactMultiChildUpdateTypes.REMOVE_NODE:\n\t // Already removed by the for-loop above.\n\t break;\n\t }\n\t }\n\t }\n\t\n\t};\n\t\n\tReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {\n\t updateTextContent: 'updateTextContent'\n\t});\n\t\n\tmodule.exports = DOMChildrenOperations;\n\n/***/ },\n/* 7 */\n/*!*******************************!*\\\n !*** ./~/react/lib/Danger.js ***!\n \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule Danger\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\tvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 8);\n\t\n\tvar createNodesFromMarkup = __webpack_require__(/*! fbjs/lib/createNodesFromMarkup */ 9);\n\tvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 14);\n\tvar getMarkupWrap = __webpack_require__(/*! fbjs/lib/getMarkupWrap */ 13);\n\tvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 12);\n\t\n\tvar OPEN_TAG_NAME_EXP = /^(<[^ \\/>]+)/;\n\tvar RESULT_INDEX_ATTR = 'data-danger-index';\n\t\n\t/**\n\t * Extracts the `nodeName` from a string of markup.\n\t *\n\t * NOTE: Extracting the `nodeName` does not require a regular expression match\n\t * because we make assumptions about React-generated markup (i.e. there are no\n\t * spaces surrounding the opening tag and there is at least one attribute).\n\t *\n\t * @param {string} markup String of markup.\n\t * @return {string} Node name of the supplied markup.\n\t * @see http://jsperf.com/extract-nodename\n\t */\n\tfunction getNodeName(markup) {\n\t return markup.substring(1, markup.indexOf(' '));\n\t}\n\t\n\tvar Danger = {\n\t\n\t /**\n\t * Renders markup into an array of nodes. The markup is expected to render\n\t * into a list of root nodes. Also, the length of `resultList` and\n\t * `markupList` should be the same.\n\t *\n\t * @param {array} markupList List of markup strings to render.\n\t * @return {array} List of rendered nodes.\n\t * @internal\n\t */\n\t dangerouslyRenderMarkup: function (markupList) {\n\t !ExecutionEnvironment.canUseDOM ? false ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined;\n\t var nodeName;\n\t var markupByNodeName = {};\n\t // Group markup by `nodeName` if a wrap is necessary, else by '*'.\n\t for (var i = 0; i < markupList.length; i++) {\n\t !markupList[i] ? false ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined;\n\t nodeName = getNodeName(markupList[i]);\n\t nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\n\t markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\n\t markupByNodeName[nodeName][i] = markupList[i];\n\t }\n\t var resultList = [];\n\t var resultListAssignmentCount = 0;\n\t for (nodeName in markupByNodeName) {\n\t if (!markupByNodeName.hasOwnProperty(nodeName)) {\n\t continue;\n\t }\n\t var markupListByNodeName = markupByNodeName[nodeName];\n\t\n\t // This for-in loop skips the holes of the sparse array. The order of\n\t // iteration should follow the order of assignment, which happens to match\n\t // numerical index order, but we don't rely on that.\n\t var resultIndex;\n\t for (resultIndex in markupListByNodeName) {\n\t if (markupListByNodeName.hasOwnProperty(resultIndex)) {\n\t var markup = markupListByNodeName[resultIndex];\n\t\n\t // Push the requested markup with an additional RESULT_INDEX_ATTR\n\t // attribute. If the markup does not start with a < character, it\n\t // will be discarded below (with an appropriate console.error).\n\t markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,\n\t // This index will be parsed back out below.\n\t '$1 ' + RESULT_INDEX_ATTR + '=\"' + resultIndex + '\" ');\n\t }\n\t }\n\t\n\t // Render each group of markup with similar wrapping `nodeName`.\n\t var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with ', '
'];\n\tvar trWrap = [3, '', '
'];\n\t\n\tvar svgWrap = [1, '', ''];\n\t\n\tvar markupWrap = {\n\t '*': [1, '?

'],\n\t\n\t 'area': [1, '', ''],\n\t 'col': [2, '', '
'],\n\t 'legend': [1, '
', '
'],\n\t 'param': [1, '', ''],\n\t 'tr': [2, '', '
'],\n\t\n\t 'optgroup': selectWrap,\n\t 'option': selectWrap,\n\t\n\t 'caption': tableWrap,\n\t 'colgroup': tableWrap,\n\t 'tbody': tableWrap,\n\t 'tfoot': tableWrap,\n\t 'thead': tableWrap,\n\t\n\t 'td': trWrap,\n\t 'th': trWrap\n\t};\n\t\n\t// Initialize the SVG elements since we know they'll always need to be wrapped\n\t// consistently. If they are created inside a
they will be initialized in\n\t// the wrong namespace (and will not display).\n\tvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\n\tsvgElements.forEach(function (nodeName) {\n\t markupWrap[nodeName] = svgWrap;\n\t shouldWrap[nodeName] = true;\n\t});\n\t\n\t/**\n\t * Gets the markup wrap configuration for the supplied `nodeName`.\n\t *\n\t * NOTE: This lazily detects which wraps are necessary for the current browser.\n\t *\n\t * @param {string} nodeName Lowercase `nodeName`.\n\t * @return {?array} Markup wrap configuration, if applicable.\n\t */\n\tfunction getMarkupWrap(nodeName) {\n\t !!!dummyNode ? false ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined;\n\t if (!markupWrap.hasOwnProperty(nodeName)) {\n\t nodeName = '*';\n\t }\n\t if (!shouldWrap.hasOwnProperty(nodeName)) {\n\t if (nodeName === '*') {\n\t dummyNode.innerHTML = '';\n\t } else {\n\t dummyNode.innerHTML = '<' + nodeName + '>';\n\t }\n\t shouldWrap[nodeName] = !dummyNode.firstChild;\n\t }\n\t return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n\t}\n\t\n\tmodule.exports = getMarkupWrap;\n\n/***/ },\n/* 14 */\n/*!*********************************************!*\\\n !*** ./~/react/~/fbjs/lib/emptyFunction.js ***!\n \\*********************************************/\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule emptyFunction\n\t */\n\t\n\t\"use strict\";\n\t\n\tfunction makeEmptyFunction(arg) {\n\t return function () {\n\t return arg;\n\t };\n\t}\n\t\n\t/**\n\t * This function accepts and discards inputs; it has no side effects. This is\n\t * primarily useful idiomatically for overridable function endpoints which\n\t * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n\t */\n\tfunction emptyFunction() {}\n\t\n\temptyFunction.thatReturns = makeEmptyFunction;\n\temptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n\temptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n\temptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\temptyFunction.thatReturnsThis = function () {\n\t return this;\n\t};\n\temptyFunction.thatReturnsArgument = function (arg) {\n\t return arg;\n\t};\n\t\n\tmodule.exports = emptyFunction;\n\n/***/ },\n/* 15 */\n/*!***************************************************!*\\\n !*** ./~/react/lib/ReactMultiChildUpdateTypes.js ***!\n \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactMultiChildUpdateTypes\n\t */\n\t\n\t'use strict';\n\t\n\tvar keyMirror = __webpack_require__(/*! fbjs/lib/keyMirror */ 16);\n\t\n\t/**\n\t * When a component's children are updated, a series of update configuration\n\t * objects are created in order to batch and serialize the required changes.\n\t *\n\t * Enumerates all the possible types of update configurations.\n\t *\n\t * @internal\n\t */\n\tvar ReactMultiChildUpdateTypes = keyMirror({\n\t INSERT_MARKUP: null,\n\t MOVE_EXISTING: null,\n\t REMOVE_NODE: null,\n\t SET_MARKUP: null,\n\t TEXT_CONTENT: null\n\t});\n\t\n\tmodule.exports = ReactMultiChildUpdateTypes;\n\n/***/ },\n/* 16 */\n/*!*****************************************!*\\\n !*** ./~/react/~/fbjs/lib/keyMirror.js ***!\n \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule keyMirror\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\tvar invariant = __webpack_require__(/*! ./invariant */ 12);\n\t\n\t/**\n\t * Constructs an enumeration with keys equal to their value.\n\t *\n\t * For example:\n\t *\n\t * var COLORS = keyMirror({blue: null, red: null});\n\t * var myColor = COLORS.blue;\n\t * var isColorValid = !!COLORS[myColor];\n\t *\n\t * The last line could not be performed if the values of the generated enum were\n\t * not equal to their keys.\n\t *\n\t * Input: {key1: val1, key2: val2}\n\t * Output: {key1: key1, key2: key2}\n\t *\n\t * @param {object} obj\n\t * @return {object}\n\t */\n\tvar keyMirror = function (obj) {\n\t var ret = {};\n\t var key;\n\t !(obj instanceof Object && !Array.isArray(obj)) ? false ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined;\n\t for (key in obj) {\n\t if (!obj.hasOwnProperty(key)) {\n\t continue;\n\t }\n\t ret[key] = key;\n\t }\n\t return ret;\n\t};\n\t\n\tmodule.exports = keyMirror;\n\n/***/ },\n/* 17 */\n/*!**********************************!*\\\n !*** ./~/react/lib/ReactPerf.js ***!\n \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactPerf\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * ReactPerf is a general AOP system designed to measure performance. This\n\t * module only has the hooks: see ReactDefaultPerf for the analysis tool.\n\t */\n\tvar ReactPerf = {\n\t /**\n\t * Boolean to enable/disable measurement. Set to false by default to prevent\n\t * accidental logging and perf loss.\n\t */\n\t enableMeasure: false,\n\t\n\t /**\n\t * Holds onto the measure function in use. By default, don't measure\n\t * anything, but we'll override this if we inject a measure function.\n\t */\n\t storedMeasure: _noMeasure,\n\t\n\t /**\n\t * @param {object} object\n\t * @param {string} objectName\n\t * @param {object} methodNames\n\t */\n\t measureMethods: function (object, objectName, methodNames) {\n\t if (false) {\n\t for (var key in methodNames) {\n\t if (!methodNames.hasOwnProperty(key)) {\n\t continue;\n\t }\n\t object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);\n\t }\n\t }\n\t },\n\t\n\t /**\n\t * Use this to wrap methods you want to measure. Zero overhead in production.\n\t *\n\t * @param {string} objName\n\t * @param {string} fnName\n\t * @param {function} func\n\t * @return {function}\n\t */\n\t measure: function (objName, fnName, func) {\n\t if (false) {\n\t var measuredFunc = null;\n\t var wrapper = function () {\n\t if (ReactPerf.enableMeasure) {\n\t if (!measuredFunc) {\n\t measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\n\t }\n\t return measuredFunc.apply(this, arguments);\n\t }\n\t return func.apply(this, arguments);\n\t };\n\t wrapper.displayName = objName + '_' + fnName;\n\t return wrapper;\n\t }\n\t return func;\n\t },\n\t\n\t injection: {\n\t /**\n\t * @param {function} measure\n\t */\n\t injectMeasure: function (measure) {\n\t ReactPerf.storedMeasure = measure;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Simply passes through the measured function, without measuring it.\n\t *\n\t * @param {string} objName\n\t * @param {string} fnName\n\t * @param {function} func\n\t * @return {function}\n\t */\n\tfunction _noMeasure(objName, fnName, func) {\n\t return func;\n\t}\n\t\n\tmodule.exports = ReactPerf;\n\n/***/ },\n/* 18 */\n/*!*************************************!*\\\n !*** ./~/react/lib/setInnerHTML.js ***!\n \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule setInnerHTML\n\t */\n\t\n\t/* globals MSApp */\n\t\n\t'use strict';\n\t\n\tvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 8);\n\t\n\tvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\n\tvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\t\n\t/**\n\t * Set the innerHTML property of a node, ensuring that whitespace is preserved\n\t * even in IE8.\n\t *\n\t * @param {DOMElement} node\n\t * @param {string} html\n\t * @internal\n\t */\n\tvar setInnerHTML = function (node, html) {\n\t node.innerHTML = html;\n\t};\n\t\n\t// Win8 apps: Allow all html to be inserted\n\tif (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n\t setInnerHTML = function (node, html) {\n\t MSApp.execUnsafeLocalFunction(function () {\n\t node.innerHTML = html;\n\t });\n\t };\n\t}\n\t\n\tif (ExecutionEnvironment.canUseDOM) {\n\t // IE8: When updating a just created node with innerHTML only leading\n\t // whitespace is removed. When updating an existing node with innerHTML\n\t // whitespace in root TextNodes is also collapsed.\n\t // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\t\n\t // Feature detection; only IE8 is known to behave improperly like this.\n\t var testElement = document.createElement('div');\n\t testElement.innerHTML = ' ';\n\t if (testElement.innerHTML === '') {\n\t setInnerHTML = function (node, html) {\n\t // Magic theory: IE8 supposedly differentiates between added and updated\n\t // nodes when processing innerHTML, innerHTML on updated nodes suffers\n\t // from worse whitespace behavior. Re-adding a node like this triggers\n\t // the initial and more favorable whitespace behavior.\n\t // TODO: What to do on a detached node?\n\t if (node.parentNode) {\n\t node.parentNode.replaceChild(node, node);\n\t }\n\t\n\t // We also implement a workaround for non-visible tags disappearing into\n\t // thin air on IE8, this only happens if there is no visible text\n\t // in-front of the non-visible tags. Piggyback on the whitespace fix\n\t // and simply check if any non-visible tags appear in the source.\n\t if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n\t // Recover leading whitespace by temporarily prepending any character.\n\t // \\uFEFF has the potential advantage of being zero-width/invisible.\n\t // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n\t // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n\t // the actual Unicode character (by Babel, for example).\n\t // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n\t node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\t\n\t // deleteData leaves an empty `TextNode` which offsets the index of all\n\t // children. Definitely want to avoid this.\n\t var textNode = node.firstChild;\n\t if (textNode.data.length === 1) {\n\t node.removeChild(textNode);\n\t } else {\n\t textNode.deleteData(0, 1);\n\t }\n\t } else {\n\t node.innerHTML = html;\n\t }\n\t };\n\t }\n\t}\n\t\n\tmodule.exports = setInnerHTML;\n\n/***/ },\n/* 19 */\n/*!***************************************!*\\\n !*** ./~/react/lib/setTextContent.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule setTextContent\n\t */\n\t\n\t'use strict';\n\t\n\tvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 8);\n\tvar escapeTextContentForBrowser = __webpack_require__(/*! ./escapeTextContentForBrowser */ 20);\n\tvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 18);\n\t\n\t/**\n\t * Set the textContent property of a node, ensuring that whitespace is preserved\n\t * even in IE8. innerText is a poor substitute for textContent and, among many\n\t * issues, inserts
instead of the literal newline chars. innerHTML behaves\n\t * as it should.\n\t *\n\t * @param {DOMElement} node\n\t * @param {string} text\n\t * @internal\n\t */\n\tvar setTextContent = function (node, text) {\n\t node.textContent = text;\n\t};\n\t\n\tif (ExecutionEnvironment.canUseDOM) {\n\t if (!('textContent' in document.documentElement)) {\n\t setTextContent = function (node, text) {\n\t setInnerHTML(node, escapeTextContentForBrowser(text));\n\t };\n\t }\n\t}\n\t\n\tmodule.exports = setTextContent;\n\n/***/ },\n/* 20 */\n/*!****************************************************!*\\\n !*** ./~/react/lib/escapeTextContentForBrowser.js ***!\n \\****************************************************/\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule escapeTextContentForBrowser\n\t */\n\t\n\t'use strict';\n\t\n\tvar ESCAPE_LOOKUP = {\n\t '&': '&',\n\t '>': '>',\n\t '<': '<',\n\t '\"': '"',\n\t '\\'': '''\n\t};\n\t\n\tvar ESCAPE_REGEX = /[&><\"']/g;\n\t\n\tfunction escaper(match) {\n\t return ESCAPE_LOOKUP[match];\n\t}\n\t\n\t/**\n\t * Escapes text to prevent scripting attacks.\n\t *\n\t * @param {*} text Text value to escape.\n\t * @return {string} An escaped string.\n\t */\n\tfunction escapeTextContentForBrowser(text) {\n\t return ('' + text).replace(ESCAPE_REGEX, escaper);\n\t}\n\t\n\tmodule.exports = escapeTextContentForBrowser;\n\n/***/ },\n/* 21 */\n/*!**********************************************!*\\\n !*** ./~/react/lib/DOMPropertyOperations.js ***!\n \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule DOMPropertyOperations\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\tvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 22);\n\tvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 17);\n\t\n\tvar quoteAttributeValueForBrowser = __webpack_require__(/*! ./quoteAttributeValueForBrowser */ 23);\n\tvar warning = __webpack_require__(/*! fbjs/lib/warning */ 24);\n\t\n\t// Simplified subset\n\tvar VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\\w\\.\\-]*$/;\n\tvar illegalAttributeNameCache = {};\n\tvar validatedAttributeNameCache = {};\n\t\n\tfunction isAttributeNameSafe(attributeName) {\n\t if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n\t return true;\n\t }\n\t if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n\t return false;\n\t }\n\t if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n\t validatedAttributeNameCache[attributeName] = true;\n\t return true;\n\t }\n\t illegalAttributeNameCache[attributeName] = true;\n\t false ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined;\n\t return false;\n\t}\n\t\n\tfunction shouldIgnoreValue(propertyInfo, value) {\n\t return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n\t}\n\t\n\tif (false) {\n\t var reactProps = {\n\t children: true,\n\t dangerouslySetInnerHTML: true,\n\t key: true,\n\t ref: true\n\t };\n\t var warnedProperties = {};\n\t\n\t var warnUnknownProperty = function (name) {\n\t if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\n\t return;\n\t }\n\t\n\t warnedProperties[name] = true;\n\t var lowerCasedName = name.toLowerCase();\n\t\n\t // data-* attributes should be lowercase; suggest the lowercase version\n\t var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\n\t\n\t // For now, only warn when we have a suggested correction. This prevents\n\t // logging too much when using transferPropsTo.\n\t process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined;\n\t };\n\t}\n\t\n\t/**\n\t * Operations for dealing with DOM properties.\n\t */\n\tvar DOMPropertyOperations = {\n\t\n\t /**\n\t * Creates markup for the ID property.\n\t *\n\t * @param {string} id Unescaped ID.\n\t * @return {string} Markup string.\n\t */\n\t createMarkupForID: function (id) {\n\t return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n\t },\n\t\n\t setAttributeForID: function (node, id) {\n\t node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n\t },\n\t\n\t /**\n\t * Creates markup for a property.\n\t *\n\t * @param {string} name\n\t * @param {*} value\n\t * @return {?string} Markup string, or null if the property was invalid.\n\t */\n\t createMarkupForProperty: function (name, value) {\n\t var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n\t if (propertyInfo) {\n\t if (shouldIgnoreValue(propertyInfo, value)) {\n\t return '';\n\t }\n\t var attributeName = propertyInfo.attributeName;\n\t if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n\t return attributeName + '=\"\"';\n\t }\n\t return attributeName + '=' + quoteAttributeValueForBrowser(value);\n\t } else if (DOMProperty.isCustomAttribute(name)) {\n\t if (value == null) {\n\t return '';\n\t }\n\t return name + '=' + quoteAttributeValueForBrowser(value);\n\t } else if (false) {\n\t warnUnknownProperty(name);\n\t }\n\t return null;\n\t },\n\t\n\t /**\n\t * Creates markup for a custom property.\n\t *\n\t * @param {string} name\n\t * @param {*} value\n\t * @return {string} Markup string, or empty string if the property was invalid.\n\t */\n\t createMarkupForCustomAttribute: function (name, value) {\n\t if (!isAttributeNameSafe(name) || value == null) {\n\t return '';\n\t }\n\t return name + '=' + quoteAttributeValueForBrowser(value);\n\t },\n\t\n\t /**\n\t * Sets the value for a property on a node.\n\t *\n\t * @param {DOMElement} node\n\t * @param {string} name\n\t * @param {*} value\n\t */\n\t setValueForProperty: function (node, name, value) {\n\t var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n\t if (propertyInfo) {\n\t var mutationMethod = propertyInfo.mutationMethod;\n\t if (mutationMethod) {\n\t mutationMethod(node, value);\n\t } else if (shouldIgnoreValue(propertyInfo, value)) {\n\t this.deleteValueForProperty(node, name);\n\t } else if (propertyInfo.mustUseAttribute) {\n\t var attributeName = propertyInfo.attributeName;\n\t var namespace = propertyInfo.attributeNamespace;\n\t // `setAttribute` with objects becomes only `[object]` in IE8/9,\n\t // ('' + value) makes it output the correct toString()-value.\n\t if (namespace) {\n\t node.setAttributeNS(namespace, attributeName, '' + value);\n\t } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n\t node.setAttribute(attributeName, '');\n\t } else {\n\t node.setAttribute(attributeName, '' + value);\n\t }\n\t } else {\n\t var propName = propertyInfo.propertyName;\n\t // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\n\t // property type before comparing; only `value` does and is string.\n\t if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {\n\t // Contrary to `setAttribute`, object properties are properly\n\t // `toString`ed by IE8/9.\n\t node[propName] = value;\n\t }\n\t }\n\t } else if (DOMProperty.isCustomAttribute(name)) {\n\t DOMPropertyOperations.setValueForAttribute(node, name, value);\n\t } else if (false) {\n\t warnUnknownProperty(name);\n\t }\n\t },\n\t\n\t setValueForAttribute: function (node, name, value) {\n\t if (!isAttributeNameSafe(name)) {\n\t return;\n\t }\n\t if (value == null) {\n\t node.removeAttribute(name);\n\t } else {\n\t node.setAttribute(name, '' + value);\n\t }\n\t },\n\t\n\t /**\n\t * Deletes the value for a property on a node.\n\t *\n\t * @param {DOMElement} node\n\t * @param {string} name\n\t */\n\t deleteValueForProperty: function (node, name) {\n\t var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n\t if (propertyInfo) {\n\t var mutationMethod = propertyInfo.mutationMethod;\n\t if (mutationMethod) {\n\t mutationMethod(node, undefined);\n\t } else if (propertyInfo.mustUseAttribute) {\n\t node.removeAttribute(propertyInfo.attributeName);\n\t } else {\n\t var propName = propertyInfo.propertyName;\n\t var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);\n\t if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) {\n\t node[propName] = defaultValue;\n\t }\n\t }\n\t } else if (DOMProperty.isCustomAttribute(name)) {\n\t node.removeAttribute(name);\n\t } else if (false) {\n\t warnUnknownProperty(name);\n\t }\n\t }\n\t\n\t};\n\t\n\tReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {\n\t setValueForProperty: 'setValueForProperty',\n\t setValueForAttribute: 'setValueForAttribute',\n\t deleteValueForProperty: 'deleteValueForProperty'\n\t});\n\t\n\tmodule.exports = DOMPropertyOperations;\n\n/***/ },\n/* 22 */\n/*!************************************!*\\\n !*** ./~/react/lib/DOMProperty.js ***!\n \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule DOMProperty\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\tvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 12);\n\t\n\tfunction checkMask(value, bitmask) {\n\t return (value & bitmask) === bitmask;\n\t}\n\t\n\tvar DOMPropertyInjection = {\n\t /**\n\t * Mapping from normalized, camelcased property names to a configuration that\n\t * specifies how the associated DOM property should be accessed or rendered.\n\t */\n\t MUST_USE_ATTRIBUTE: 0x1,\n\t MUST_USE_PROPERTY: 0x2,\n\t HAS_SIDE_EFFECTS: 0x4,\n\t HAS_BOOLEAN_VALUE: 0x8,\n\t HAS_NUMERIC_VALUE: 0x10,\n\t HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,\n\t HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,\n\t\n\t /**\n\t * Inject some specialized knowledge about the DOM. This takes a config object\n\t * with the following properties:\n\t *\n\t * isCustomAttribute: function that given an attribute name will return true\n\t * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n\t * attributes where it's impossible to enumerate all of the possible\n\t * attribute names,\n\t *\n\t * Properties: object mapping DOM property name to one of the\n\t * DOMPropertyInjection constants or null. If your attribute isn't in here,\n\t * it won't get written to the DOM.\n\t *\n\t * DOMAttributeNames: object mapping React attribute name to the DOM\n\t * attribute name. Attribute names not specified use the **lowercase**\n\t * normalized name.\n\t *\n\t * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n\t * attribute namespace URL. (Attribute names not specified use no namespace.)\n\t *\n\t * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n\t * Property names not specified use the normalized name.\n\t *\n\t * DOMMutationMethods: Properties that require special mutation methods. If\n\t * `value` is undefined, the mutation method should unset the property.\n\t *\n\t * @param {object} domPropertyConfig the config as described above.\n\t */\n\t injectDOMPropertyConfig: function (domPropertyConfig) {\n\t var Injection = DOMPropertyInjection;\n\t var Properties = domPropertyConfig.Properties || {};\n\t var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n\t var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n\t var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n\t var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\t\n\t if (domPropertyConfig.isCustomAttribute) {\n\t DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n\t }\n\t\n\t for (var propName in Properties) {\n\t !!DOMProperty.properties.hasOwnProperty(propName) ? false ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property ' + '\\'%s\\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined;\n\t\n\t var lowerCased = propName.toLowerCase();\n\t var propConfig = Properties[propName];\n\t\n\t var propertyInfo = {\n\t attributeName: lowerCased,\n\t attributeNamespace: null,\n\t propertyName: propName,\n\t mutationMethod: null,\n\t\n\t mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE),\n\t mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n\t hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),\n\t hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n\t hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n\t hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n\t hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n\t };\n\t\n\t !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? false ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined;\n\t !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? false ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined;\n\t !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? false ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined;\n\t\n\t if (false) {\n\t DOMProperty.getPossibleStandardName[lowerCased] = propName;\n\t }\n\t\n\t if (DOMAttributeNames.hasOwnProperty(propName)) {\n\t var attributeName = DOMAttributeNames[propName];\n\t propertyInfo.attributeName = attributeName;\n\t if (false) {\n\t DOMProperty.getPossibleStandardName[attributeName] = propName;\n\t }\n\t }\n\t\n\t if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n\t propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n\t }\n\t\n\t if (DOMPropertyNames.hasOwnProperty(propName)) {\n\t propertyInfo.propertyName = DOMPropertyNames[propName];\n\t }\n\t\n\t if (DOMMutationMethods.hasOwnProperty(propName)) {\n\t propertyInfo.mutationMethod = DOMMutationMethods[propName];\n\t }\n\t\n\t DOMProperty.properties[propName] = propertyInfo;\n\t }\n\t }\n\t};\n\tvar defaultValueCache = {};\n\t\n\t/**\n\t * DOMProperty exports lookup objects that can be used like functions:\n\t *\n\t * > DOMProperty.isValid['id']\n\t * true\n\t * > DOMProperty.isValid['foobar']\n\t * undefined\n\t *\n\t * Although this may be confusing, it performs better in general.\n\t *\n\t * @see http://jsperf.com/key-exists\n\t * @see http://jsperf.com/key-missing\n\t */\n\tvar DOMProperty = {\n\t\n\t ID_ATTRIBUTE_NAME: 'data-reactid',\n\t\n\t /**\n\t * Map from property \"standard name\" to an object with info about how to set\n\t * the property in the DOM. Each object contains:\n\t *\n\t * attributeName:\n\t * Used when rendering markup or with `*Attribute()`.\n\t * attributeNamespace\n\t * propertyName:\n\t * Used on DOM node instances. (This includes properties that mutate due to\n\t * external factors.)\n\t * mutationMethod:\n\t * If non-null, used instead of the property or `setAttribute()` after\n\t * initial render.\n\t * mustUseAttribute:\n\t * Whether the property must be accessed and mutated using `*Attribute()`.\n\t * (This includes anything that fails ` in `.)\n\t * mustUseProperty:\n\t * Whether the property must be accessed and mutated as an object property.\n\t * hasSideEffects:\n\t * Whether or not setting a value causes side effects such as triggering\n\t * resources to be loaded or text selection changes. If true, we read from\n\t * the DOM before updating to ensure that the value is only set if it has\n\t * changed.\n\t * hasBooleanValue:\n\t * Whether the property should be removed when set to a falsey value.\n\t * hasNumericValue:\n\t * Whether the property must be numeric or parse as a numeric and should be\n\t * removed when set to a falsey value.\n\t * hasPositiveNumericValue:\n\t * Whether the property must be positive numeric or parse as a positive\n\t * numeric and should be removed when set to a falsey value.\n\t * hasOverloadedBooleanValue:\n\t * Whether the property can be used as a flag as well as with a value.\n\t * Removed when strictly equal to false; present without a value when\n\t * strictly equal to true; present with a value otherwise.\n\t */\n\t properties: {},\n\t\n\t /**\n\t * Mapping from lowercase property names to the properly cased version, used\n\t * to warn in the case of missing properties. Available only in __DEV__.\n\t * @type {Object}\n\t */\n\t getPossibleStandardName: false ? {} : null,\n\t\n\t /**\n\t * All of the isCustomAttribute() functions that have been injected.\n\t */\n\t _isCustomAttributeFunctions: [],\n\t\n\t /**\n\t * Checks whether a property name is a custom attribute.\n\t * @method\n\t */\n\t isCustomAttribute: function (attributeName) {\n\t for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n\t var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n\t if (isCustomAttributeFn(attributeName)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t },\n\t\n\t /**\n\t * Returns the default property value for a DOM property (i.e., not an\n\t * attribute). Most default values are '' or false, but not all. Worse yet,\n\t * some (in particular, `type`) vary depending on the type of element.\n\t *\n\t * TODO: Is it better to grab all the possible properties when creating an\n\t * element to avoid having to create the same element twice?\n\t */\n\t getDefaultValueForProperty: function (nodeName, prop) {\n\t var nodeDefaults = defaultValueCache[nodeName];\n\t var testElement;\n\t if (!nodeDefaults) {\n\t defaultValueCache[nodeName] = nodeDefaults = {};\n\t }\n\t if (!(prop in nodeDefaults)) {\n\t testElement = document.createElement(nodeName);\n\t nodeDefaults[prop] = testElement[prop];\n\t }\n\t return nodeDefaults[prop];\n\t },\n\t\n\t injection: DOMPropertyInjection\n\t};\n\t\n\tmodule.exports = DOMProperty;\n\n/***/ },\n/* 23 */\n/*!******************************************************!*\\\n !*** ./~/react/lib/quoteAttributeValueForBrowser.js ***!\n \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule quoteAttributeValueForBrowser\n\t */\n\t\n\t'use strict';\n\t\n\tvar escapeTextContentForBrowser = __webpack_require__(/*! ./escapeTextContentForBrowser */ 20);\n\t\n\t/**\n\t * Escapes attribute value to prevent scripting attacks.\n\t *\n\t * @param {*} value Value to escape.\n\t * @return {string} An escaped string.\n\t */\n\tfunction quoteAttributeValueForBrowser(value) {\n\t return '\"' + escapeTextContentForBrowser(value) + '\"';\n\t}\n\t\n\tmodule.exports = quoteAttributeValueForBrowser;\n\n/***/ },\n/* 24 */\n/*!***************************************!*\\\n !*** ./~/react/~/fbjs/lib/warning.js ***!\n \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2014-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule warning\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 14);\n\t\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\t\n\tvar warning = emptyFunction;\n\t\n\tif (false) {\n\t warning = function (condition, format) {\n\t for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n\t args[_key - 2] = arguments[_key];\n\t }\n\t\n\t if (format === undefined) {\n\t throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n\t }\n\t\n\t if (format.indexOf('Failed Composite propType: ') === 0) {\n\t return; // Ignore CompositeComponent proptype check.\n\t }\n\t\n\t if (!condition) {\n\t var argIndex = 0;\n\t var message = 'Warning: ' + format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // --- Welcome to debugging React ---\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch (x) {}\n\t }\n\t };\n\t}\n\t\n\tmodule.exports = warning;\n\n/***/ },\n/* 25 */\n/*!*********************************************************!*\\\n !*** ./~/react/lib/ReactComponentBrowserEnvironment.js ***!\n \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactComponentBrowserEnvironment\n\t */\n\t\n\t'use strict';\n\t\n\tvar ReactDOMIDOperations = __webpack_require__(/*! ./ReactDOMIDOperations */ 26);\n\tvar ReactMount = __webpack_require__(/*! ./ReactMount */ 27);\n\t\n\t/**\n\t * Abstracts away all functionality of the reconciler that requires knowledge of\n\t * the browser context. TODO: These callers should be refactored to avoid the\n\t * need for this injection.\n\t */\n\tvar ReactComponentBrowserEnvironment = {\n\t\n\t processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\t\n\t replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,\n\t\n\t /**\n\t * If a particular environment requires that some resources be cleaned up,\n\t * specify this in the injected Mixin. In the DOM, we would likely want to\n\t * purge any cached node ID lookups.\n\t *\n\t * @private\n\t */\n\t unmountIDFromEnvironment: function (rootNodeID) {\n\t ReactMount.purgeID(rootNodeID);\n\t }\n\t\n\t};\n\t\n\tmodule.exports = ReactComponentBrowserEnvironment;\n\n/***/ },\n/* 26 */\n/*!*********************************************!*\\\n !*** ./~/react/lib/ReactDOMIDOperations.js ***!\n \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactDOMIDOperations\n\t * @typechecks static-only\n\t */\n\t\n\t'use strict';\n\t\n\tvar DOMChildrenOperations = __webpack_require__(/*! ./DOMChildrenOperations */ 6);\n\tvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 21);\n\tvar ReactMount = __webpack_require__(/*! ./ReactMount */ 27);\n\tvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 17);\n\t\n\tvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 12);\n\t\n\t/**\n\t * Errors for properties that should not be updated with `updatePropertyByID()`.\n\t *\n\t * @type {object}\n\t * @private\n\t */\n\tvar INVALID_PROPERTY_ERRORS = {\n\t dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',\n\t style: '`style` must be set using `updateStylesByID()`.'\n\t};\n\t\n\t/**\n\t * Operations used to process updates to DOM nodes.\n\t */\n\tvar ReactDOMIDOperations = {\n\t\n\t /**\n\t * Updates a DOM node with new property values. This should only be used to\n\t * update DOM properties in `DOMProperty`.\n\t *\n\t * @param {string} id ID of the node to update.\n\t * @param {string} name A valid property name, see `DOMProperty`.\n\t * @param {*} value New value of the property.\n\t * @internal\n\t */\n\t updatePropertyByID: function (id, name, value) {\n\t var node = ReactMount.getNode(id);\n\t !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? false ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined;\n\t\n\t // If we're updating to null or undefined, we should remove the property\n\t // from the DOM node instead of inadvertantly setting to a string. This\n\t // brings us in line with the same behavior we have on initial render.\n\t if (value != null) {\n\t DOMPropertyOperations.setValueForProperty(node, name, value);\n\t } else {\n\t DOMPropertyOperations.deleteValueForProperty(node, name);\n\t }\n\t },\n\t\n\t /**\n\t * Replaces a DOM node that exists in the document with markup.\n\t *\n\t * @param {string} id ID of child to be replaced.\n\t * @param {string} markup Dangerous markup to inject in place of child.\n\t * @internal\n\t * @see {Danger.dangerouslyReplaceNodeWithMarkup}\n\t */\n\t dangerouslyReplaceNodeWithMarkupByID: function (id, markup) {\n\t var node = ReactMount.getNode(id);\n\t DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);\n\t },\n\t\n\t /**\n\t * Updates a component's children by processing a series of updates.\n\t *\n\t * @param {array} updates List of update configurations.\n\t * @param {array} markup List of markup strings.\n\t * @internal\n\t */\n\t dangerouslyProcessChildrenUpdates: function (updates, markup) {\n\t for (var i = 0; i < updates.length; i++) {\n\t updates[i].parentNode = ReactMount.getNode(updates[i].parentID);\n\t }\n\t DOMChildrenOperations.processUpdates(updates, markup);\n\t }\n\t};\n\t\n\tReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {\n\t dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',\n\t dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'\n\t});\n\t\n\tmodule.exports = ReactDOMIDOperations;\n\n/***/ },\n/* 27 */\n/*!***********************************!*\\\n !*** ./~/react/lib/ReactMount.js ***!\n \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t *\n\t * @providesModule ReactMount\n\t */\n\t\n\t'use strict';\n\t\n\tvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 22);\n\tvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 28);\n\tvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 4);\n\tvar ReactDOMFeatureFlags = __webpack_require__(/*! ./ReactDOMFeatureFlags */ 40);\n\tvar ReactElement = __webpack_require__(/*! ./ReactElement */ 41);\n\tvar ReactEmptyComponentRegistry = __webpack_require__(/*! ./ReactEmptyComponentRegistry */ 43);\n\tvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 44);\n\tvar ReactInstanceMap = __webpack_require__(/*! ./ReactInstanceMap */ 46);\n\tvar ReactMarkupChecksum = __webpack_require__(/*! ./ReactMarkupChecksum */ 47);\n\tvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 17);\n\tvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 49);\n\tvar ReactUpdateQueue = __webpack_require__(/*! ./ReactUpdateQueue */ 52);\n\tvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 53);\n\t\n\tvar assign = __webpack_require__(/*! ./Object.assign */ 38);\n\tvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 57);\n\tvar containsNode = __webpack_require__(/*! fbjs/lib/containsNode */ 58);\n\tvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 61);\n\tvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 12);\n\tvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 18);\n\tvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 66);\n\tvar validateDOMNesting = __webpack_require__(/*! ./validateDOMNesting */ 69);\n\tvar warning = __webpack_require__(/*! fbjs/lib/warning */ 24);\n\t\n\tvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\n\tvar nodeCache = {};\n\t\n\tvar ELEMENT_NODE_TYPE = 1;\n\tvar DOC_NODE_TYPE = 9;\n\tvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\t\n\tvar ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2);\n\t\n\t/** Mapping from reactRootID to React component instance. */\n\tvar instancesByReactRootID = {};\n\t\n\t/** Mapping from reactRootID to `container` nodes. */\n\tvar containersByReactRootID = {};\n\t\n\tif (false) {\n\t /** __DEV__-only mapping from reactRootID to root elements. */\n\t var rootElementsByReactRootID = {};\n\t}\n\t\n\t// Used to store breadth-first search state in findComponentRoot.\n\tvar findComponentRootReusableArray = [];\n\t\n\t/**\n\t * Finds the index of the first character\n\t * that's not common between the two given strings.\n\t *\n\t * @return {number} the index of the character where the strings diverge\n\t */\n\tfunction firstDifferenceIndex(string1, string2) {\n\t var minLen = Math.min(string1.length, string2.length);\n\t for (var i = 0; i < minLen; i++) {\n\t if (string1.charAt(i) !== string2.charAt(i)) {\n\t return i;\n\t }\n\t }\n\t return string1.length === string2.length ? -1 : minLen;\n\t}\n\t\n\t/**\n\t * @param {DOMElement|DOMDocument} container DOM element that may contain\n\t * a React component\n\t * @return {?*} DOM element that may have the reactRoot ID, or null.\n\t */\n\tfunction getReactRootElementInContainer(container) {\n\t if (!container) {\n\t return null;\n\t }\n\t\n\t if (container.nodeType === DOC_NODE_TYPE) {\n\t return container.documentElement;\n\t } else {\n\t return container.firstChild;\n\t }\n\t}\n\t\n\t/**\n\t * @param {DOMElement} container DOM element that may contain a React component.\n\t * @return {?string} A \"reactRoot\" ID, if a React component is rendered.\n\t */\n\tfunction getReactRootID(container) {\n\t var rootElement = getReactRootElementInContainer(container);\n\t return rootElement && ReactMount.getID(rootElement);\n\t}\n\t\n\t/**\n\t * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form\n\t * element can return its control whose name or ID equals ATTR_NAME. All\n\t * DOM nodes support `getAttributeNode` but this can also get called on\n\t * other objects so just return '' if we're given something other than a\n\t * DOM node (such as window).\n\t *\n\t * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.\n\t * @return {string} ID of the supplied `domNode`.\n\t */\n\tfunction getID(node) {\n\t var id = internalGetID(node);\n\t if (id) {\n\t if (nodeCache.hasOwnProperty(id)) {\n\t var cached = nodeCache[id];\n\t if (cached !== node) {\n\t !!isValid(cached, id) ? false ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined;\n\t\n\t nodeCache[id] = node;\n\t }\n\t } else {\n\t nodeCache[id] = node;\n\t }\n\t }\n\t\n\t return id;\n\t}\n\t\n\tfunction internalGetID(node) {\n\t // If node is something like a window, document, or text node, none of\n\t // which support attributes or a .getAttribute method, gracefully return\n\t // the empty string, as if the attribute were missing.\n\t return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n\t}\n\t\n\t/**\n\t * Sets the React-specific ID of the given node.\n\t *\n\t * @param {DOMElement} node The DOM node whose ID will be set.\n\t * @param {string} id The value of the ID attribute.\n\t */\n\tfunction setID(node, id) {\n\t var oldID = internalGetID(node);\n\t if (oldID !== id) {\n\t delete nodeCache[oldID];\n\t }\n\t node.setAttribute(ATTR_NAME, id);\n\t nodeCache[id] = node;\n\t}\n\t\n\t/**\n\t * Finds the node with the supplied React-generated DOM ID.\n\t *\n\t * @param {string} id A React-generated DOM ID.\n\t * @return {DOMElement} DOM node with the suppled `id`.\n\t * @internal\n\t */\n\tfunction getNode(id) {\n\t if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n\t nodeCache[id] = ReactMount.findReactNodeByID(id);\n\t }\n\t return nodeCache[id];\n\t}\n\t\n\t/**\n\t * Finds the node with the supplied public React instance.\n\t *\n\t * @param {*} instance A public React instance.\n\t * @return {?DOMElement} DOM node with the suppled `id`.\n\t * @internal\n\t */\n\tfunction getNodeFromInstance(instance) {\n\t var id = ReactInstanceMap.get(instance)._rootNodeID;\n\t if (ReactEmptyComponentRegistry.isNullComponentID(id)) {\n\t return null;\n\t }\n\t if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n\t nodeCache[id] = ReactMount.findReactNodeByID(id);\n\t }\n\t return nodeCache[id];\n\t}\n\t\n\t/**\n\t * A node is \"valid\" if it is contained by a currently mounted container.\n\t *\n\t * This means that the node does not have to be contained by a document in\n\t * order to be considered valid.\n\t *\n\t * @param {?DOMElement} node The candidate DOM node.\n\t * @param {string} id The expected ID of the node.\n\t * @return {boolean} Whether the node is contained by a mounted container.\n\t */\n\tfunction isValid(node, id) {\n\t if (node) {\n\t !(internalGetID(node) === id) ? false ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined;\n\t\n\t var container = ReactMount.findReactContainerForID(id);\n\t if (container && containsNode(container, node)) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\t/**\n\t * Causes the cache to forget about one React-specific ID.\n\t *\n\t * @param {string} id The ID to forget.\n\t */\n\tfunction purgeID(id) {\n\t delete nodeCache[id];\n\t}\n\t\n\tvar deepestNodeSoFar = null;\n\tfunction findDeepestCachedAncestorImpl(ancestorID) {\n\t var ancestor = nodeCache[ancestorID];\n\t if (ancestor && isValid(ancestor, ancestorID)) {\n\t deepestNodeSoFar = ancestor;\n\t } else {\n\t // This node isn't populated in the cache, so presumably none of its\n\t // descendants are. Break out of the loop.\n\t return false;\n\t }\n\t}\n\t\n\t/**\n\t * Return the deepest cached node whose ID is a prefix of `targetID`.\n\t */\n\tfunction findDeepestCachedAncestor(targetID) {\n\t deepestNodeSoFar = null;\n\t ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);\n\t\n\t var foundNode = deepestNodeSoFar;\n\t deepestNodeSoFar = null;\n\t return foundNode;\n\t}\n\t\n\t/**\n\t * Mounts this component and inserts it into the DOM.\n\t *\n\t * @param {ReactComponent} componentInstance The instance to mount.\n\t * @param {string} rootID DOM ID of the root node.\n\t * @param {DOMElement} container DOM element to mount into.\n\t * @param {ReactReconcileTransaction} transaction\n\t * @param {boolean} shouldReuseMarkup If true, do not insert markup\n\t */\n\tfunction mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) {\n\t if (ReactDOMFeatureFlags.useCreateElement) {\n\t context = assign({}, context);\n\t if (container.nodeType === DOC_NODE_TYPE) {\n\t context[ownerDocumentContextKey] = container;\n\t } else {\n\t context[ownerDocumentContextKey] = container.ownerDocument;\n\t }\n\t }\n\t if (false) {\n\t if (context === emptyObject) {\n\t context = {};\n\t }\n\t var tag = container.nodeName.toLowerCase();\n\t context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null);\n\t }\n\t var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context);\n\t componentInstance._renderedComponent._topLevelWrapper = componentInstance;\n\t ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction);\n\t}\n\t\n\t/**\n\t * Batched mount.\n\t *\n\t * @param {ReactComponent} componentInstance The instance to mount.\n\t * @param {string} rootID DOM ID of the root node.\n\t * @param {DOMElement} container DOM element to mount into.\n\t * @param {boolean} shouldReuseMarkup If true, do not insert markup\n\t */\n\tfunction batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) {\n\t var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n\t /* forceHTML */shouldReuseMarkup);\n\t transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context);\n\t ReactUpdates.ReactReconcileTransaction.release(transaction);\n\t}\n\t\n\t/**\n\t * Unmounts a component and removes it from the DOM.\n\t *\n\t * @param {ReactComponent} instance React component instance.\n\t * @param {DOMElement} container DOM element to unmount from.\n\t * @final\n\t * @internal\n\t * @see {ReactMount.unmountComponentAtNode}\n\t */\n\tfunction unmountComponentFromNode(instance, container) {\n\t ReactReconciler.unmountComponent(instance);\n\t\n\t if (container.nodeType === DOC_NODE_TYPE) {\n\t container = container.documentElement;\n\t }\n\t\n\t // http://jsperf.com/emptying-a-node\n\t while (container.lastChild) {\n\t container.removeChild(container.lastChild);\n\t }\n\t}\n\t\n\t/**\n\t * True if the supplied DOM node has a direct React-rendered child that is\n\t * not a React root element. Useful for warning in `render`,\n\t * `unmountComponentAtNode`, etc.\n\t *\n\t * @param {?DOMElement} node The candidate DOM node.\n\t * @return {boolean} True if the DOM element contains a direct child that was\n\t * rendered by React but is not a root element.\n\t * @internal\n\t */\n\tfunction hasNonRootReactChild(node) {\n\t var reactRootID = getReactRootID(node);\n\t return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false;\n\t}\n\t\n\t/**\n\t * Returns the first (deepest) ancestor of a node which is rendered by this copy\n\t * of React.\n\t */\n\tfunction findFirstReactDOMImpl(node) {\n\t // This node might be from another React instance, so we make sure not to\n\t // examine the node cache here\n\t for (; node && node.parentNode !== node; node = node.parentNode) {\n\t if (node.nodeType !== 1) {\n\t // Not a DOMElement, therefore not a React component\n\t continue;\n\t }\n\t var nodeID = internalGetID(node);\n\t if (!nodeID) {\n\t continue;\n\t }\n\t var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n\t\n\t // If containersByReactRootID contains the container we find by crawling up\n\t // the tree, we know that this instance of React rendered the node.\n\t // nb. isValid's strategy (with containsNode) does not work because render\n\t // trees may be nested and we don't want a false positive in that case.\n\t var current = node;\n\t var lastID;\n\t do {\n\t lastID = internalGetID(current);\n\t current = current.parentNode;\n\t if (current == null) {\n\t // The passed-in node has been detached from the container it was\n\t // originally rendered into.\n\t return null;\n\t }\n\t } while (lastID !== reactRootID);\n\t\n\t if (current === containersByReactRootID[reactRootID]) {\n\t return node;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\t/**\n\t * Temporary (?) hack so that we can store all top-level pending updates on\n\t * composites instead of having to worry about different types of components\n\t * here.\n\t */\n\tvar TopLevelWrapper = function () {};\n\tTopLevelWrapper.prototype.isReactComponent = {};\n\tif (false) {\n\t TopLevelWrapper.displayName = 'TopLevelWrapper';\n\t}\n\tTopLevelWrapper.prototype.render = function () {\n\t // this.props is actually a ReactElement\n\t return this.props;\n\t};\n\t\n\t/**\n\t * Mounting is the process of initializing a React component by creating its\n\t * representative DOM elements and inserting them into a supplied `container`.\n\t * Any prior content inside `container` is destroyed in the process.\n\t *\n\t * ReactMount.render(\n\t * component,\n\t * document.getElementById('container')\n\t * );\n\t *\n\t *
<-- Supplied `container`.\n\t *
<-- Rendered reactRoot of React\n\t * // ... component.\n\t *
\n\t *
\n\t *\n\t * Inside of `container`, the first element rendered is the \"reactRoot\".\n\t */\n\tvar ReactMount = {\n\t\n\t TopLevelWrapper: TopLevelWrapper,\n\t\n\t /** Exposed for debugging purposes **/\n\t _instancesByReactRootID: instancesByReactRootID,\n\t\n\t /**\n\t * This is a hook provided to support rendering React components while\n\t * ensuring that the apparent scroll position of its `container` does not\n\t * change.\n\t *\n\t * @param {DOMElement} container The `container` being rendered into.\n\t * @param {function} renderCallback This must be called once to do the render.\n\t */\n\t scrollMonitor: function (container, renderCallback) {\n\t renderCallback();\n\t },\n\t\n\t /**\n\t * Take a component that's already mounted into the DOM and replace its props\n\t * @param {ReactComponent} prevComponent component instance already in the DOM\n\t * @param {ReactElement} nextElement component instance to render\n\t * @param {DOMElement} container container to render into\n\t * @param {?function} callback function triggered on completion\n\t */\n\t _updateRootComponent: function (prevComponent, nextElement, container, callback) {\n\t ReactMount.scrollMonitor(container, function () {\n\t ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);\n\t if (callback) {\n\t ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n\t }\n\t });\n\t\n\t if (false) {\n\t // Record the root element in case it later gets transplanted.\n\t rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);\n\t }\n\t\n\t return prevComponent;\n\t },\n\t\n\t /**\n\t * Register a component into the instance map and starts scroll value\n\t * monitoring\n\t * @param {ReactComponent} nextComponent component instance to render\n\t * @param {DOMElement} container container to render into\n\t * @return {string} reactRoot ID prefix\n\t */\n\t _registerComponent: function (nextComponent, container) {\n\t !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? false ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\t\n\t ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n\t\n\t var reactRootID = ReactMount.registerContainer(container);\n\t instancesByReactRootID[reactRootID] = nextComponent;\n\t return reactRootID;\n\t },\n\t\n\t /**\n\t * Render a new component into the DOM.\n\t * @param {ReactElement} nextElement element to render\n\t * @param {DOMElement} container container to render into\n\t * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n\t * @return {ReactComponent} nextComponent\n\t */\n\t _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n\t // Various parts of our code (such as ReactCompositeComponent's\n\t // _renderValidatedComponent) assume that calls to render aren't nested;\n\t // verify that that's the case.\n\t false ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\t\n\t var componentInstance = instantiateReactComponent(nextElement, null);\n\t var reactRootID = ReactMount._registerComponent(componentInstance, container);\n\t\n\t // The initial render is synchronous but any updates that happen during\n\t // rendering, in componentWillMount or componentDidMount, will be batched\n\t // according to the current batching strategy.\n\t\n\t ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context);\n\t\n\t if (false) {\n\t // Record the root element in case it later gets transplanted.\n\t rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);\n\t }\n\t\n\t return componentInstance;\n\t },\n\t\n\t /**\n\t * Renders a React component into the DOM in the supplied `container`.\n\t *\n\t * If the React component was previously rendered into `container`, this will\n\t * perform an update on it and only mutate the DOM as necessary to reflect the\n\t * latest React component.\n\t *\n\t * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n\t * @param {ReactElement} nextElement Component element to render.\n\t * @param {DOMElement} container DOM element to render into.\n\t * @param {?function} callback function triggered on completion\n\t * @return {ReactComponent} Component instance rendered in `container`.\n\t */\n\t renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n\t !(parentComponent != null && parentComponent._reactInternalInstance != null) ? false ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined;\n\t return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n\t },\n\t\n\t _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n\t !ReactElement.isValidElement(nextElement) ? false ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :\n\t // Check if it quacks like an element\n\t nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined;\n\t\n\t false ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined;\n\t\n\t var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\t\n\t var prevComponent = instancesByReactRootID[getReactRootID(container)];\n\t\n\t if (prevComponent) {\n\t var prevWrappedElement = prevComponent._currentElement;\n\t var prevElement = prevWrappedElement.props;\n\t if (shouldUpdateReactComponent(prevElement, nextElement)) {\n\t var publicInst = prevComponent._renderedComponent.getPublicInstance();\n\t var updatedCallback = callback && function () {\n\t callback.call(publicInst);\n\t };\n\t ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);\n\t return publicInst;\n\t } else {\n\t ReactMount.unmountComponentAtNode(container);\n\t }\n\t }\n\t\n\t var reactRootElement = getReactRootElementInContainer(container);\n\t var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n\t var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\t\n\t if (false) {\n\t process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined;\n\t\n\t if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n\t var rootElementSibling = reactRootElement;\n\t while (rootElementSibling) {\n\t if (internalGetID(rootElementSibling)) {\n\t process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined;\n\t break;\n\t }\n\t rootElementSibling = rootElementSibling.nextSibling;\n\t }\n\t }\n\t }\n\t\n\t var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n\t var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();\n\t if (callback) {\n\t callback.call(component);\n\t }\n\t return component;\n\t },\n\t\n\t /**\n\t * Renders a React component into the DOM in the supplied `container`.\n\t *\n\t * If the React component was previously rendered into `container`, this will\n\t * perform an update on it and only mutate the DOM as necessary to reflect the\n\t * latest React component.\n\t *\n\t * @param {ReactElement} nextElement Component element to render.\n\t * @param {DOMElement} container DOM element to render into.\n\t * @param {?function} callback function triggered on completion\n\t * @return {ReactComponent} Component instance rendered in `container`.\n\t */\n\t render: function (nextElement, container, callback) {\n\t return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n\t },\n\t\n\t /**\n\t * Registers a container node into which React components will be rendered.\n\t * This also creates the \"reactRoot\" ID that will be assigned to the element\n\t * rendered within.\n\t *\n\t * @param {DOMElement} container DOM element to register as a container.\n\t * @return {string} The \"reactRoot\" ID of elements rendered within.\n\t */\n\t registerContainer: function (container) {\n\t var reactRootID = getReactRootID(container);\n\t if (reactRootID) {\n\t // If one exists, make sure it is a valid \"reactRoot\" ID.\n\t reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);\n\t }\n\t if (!reactRootID) {\n\t // No valid \"reactRoot\" ID found, create one.\n\t reactRootID = ReactInstanceHandles.createReactRootID();\n\t }\n\t containersByReactRootID[reactRootID] = container;\n\t return reactRootID;\n\t },\n\t\n\t /**\n\t * Unmounts and destroys the React component rendered in the `container`.\n\t *\n\t * @param {DOMElement} container DOM element containing a React component.\n\t * @return {boolean} True if a component was found in and unmounted from\n\t * `container`\n\t */\n\t unmountComponentAtNode: function (container) {\n\t // Various parts of our code (such as ReactCompositeComponent's\n\t // _renderValidatedComponent) assume that calls to render aren't nested;\n\t // verify that that's the case. (Strictly speaking, unmounting won't cause a\n\t // render but we still don't expect to be in a render call here.)\n\t false ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\t\n\t !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? false ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\t\n\t var reactRootID = getReactRootID(container);\n\t var component = instancesByReactRootID[reactRootID];\n\t if (!component) {\n\t // Check if the node being unmounted was rendered by React, but isn't a\n\t // root node.\n\t var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\t\n\t // Check if the container itself is a React root node.\n\t var containerID = internalGetID(container);\n\t var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID);\n\t\n\t if (false) {\n\t process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined;\n\t }\n\t\n\t return false;\n\t }\n\t ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container);\n\t delete instancesByReactRootID[reactRootID];\n\t delete containersByReactRootID[reactRootID];\n\t if (false) {\n\t delete rootElementsByReactRootID[reactRootID];\n\t }\n\t return true;\n\t },\n\t\n\t /**\n\t * Finds the container DOM element that contains React component to which the\n\t * supplied DOM `id` belongs.\n\t *\n\t * @param {string} id The ID of an element rendered by a React component.\n\t * @return {?DOMElement} DOM element that contains the `id`.\n\t */\n\t findReactContainerForID: function (id) {\n\t var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);\n\t var container = containersByReactRootID[reactRootID];\n\t\n\t if (false) {\n\t var rootElement = rootElementsByReactRootID[reactRootID];\n\t if (rootElement && rootElement.parentNode !== container) {\n\t process.env.NODE_ENV !== 'production' ? warning(\n\t // Call internalGetID here because getID calls isValid which calls\n\t // findReactContainerForID (this function).\n\t internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined;\n\t var containerChild = container.firstChild;\n\t if (containerChild && reactRootID === internalGetID(containerChild)) {\n\t // If the container has a new child with the same ID as the old\n\t // root element, then rootElementsByReactRootID[reactRootID] is\n\t // just stale and needs to be updated. The case that deserves a\n\t // warning is when the container is empty.\n\t rootElementsByReactRootID[reactRootID] = containerChild;\n\t } else {\n\t process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined;\n\t }\n\t }\n\t }\n\t\n\t return container;\n\t },\n\t\n\t /**\n\t * Finds an element rendered by React with the supplied ID.\n\t *\n\t * @param {string} id ID of a DOM node in the React component.\n\t * @return {DOMElement} Root DOM node of the React component.\n\t */\n\t findReactNodeByID: function (id) {\n\t var reactRoot = ReactMount.findReactContainerForID(id);\n\t return ReactMount.findComponentRoot(reactRoot, id);\n\t },\n\t\n\t /**\n\t * Traverses up the ancestors of the supplied node to find a node that is a\n\t * DOM representation of a React component rendered by this copy of React.\n\t *\n\t * @param {*} node\n\t * @return {?DOMEventTarget}\n\t * @internal\n\t */\n\t getFirstReactDOM: function (node) {\n\t return findFirstReactDOMImpl(node);\n\t },\n\t\n\t /**\n\t * Finds a node with the supplied `targetID` inside of the supplied\n\t * `ancestorNode`. Exploits the ID naming scheme to perform the search\n\t * quickly.\n\t *\n\t * @param {DOMEventTarget} ancestorNode Search from this root.\n\t * @pararm {string} targetID ID of the DOM representation of the component.\n\t * @return {DOMEventTarget} DOM node with the supplied `targetID`.\n\t * @internal\n\t */\n\t findComponentRoot: function (ancestorNode, targetID) {\n\t var firstChildren = findComponentRootReusableArray;\n\t var childIndex = 0;\n\t\n\t var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;\n\t\n\t if (false) {\n\t // This will throw on the next line; give an early warning\n\t process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\\'t find the root component node for data-reactid value ' + '`%s`. If you\\'re seeing this message, it probably means that ' + 'you\\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined;\n\t }\n\t\n\t firstChildren[0] = deepestAncestor.firstChild;\n\t firstChildren.length = 1;\n\t\n\t while (childIndex < firstChildren.length) {\n\t var child = firstChildren[childIndex++];\n\t var targetChild;\n\t\n\t while (child) {\n\t var childID = ReactMount.getID(child);\n\t if (childID) {\n\t // Even if we find the node we're looking for, we finish looping\n\t // through its siblings to ensure they're cached so that we don't have\n\t // to revisit this node again. Otherwise, we make n^2 calls to getID\n\t // when visiting the many children of a single node in order.\n\t\n\t if (targetID === childID) {\n\t targetChild = child;\n\t } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {\n\t // If we find a child whose ID is an ancestor of the given ID,\n\t // then we can be sure that we only want to search the subtree\n\t // rooted at this child, so we can throw out the rest of the\n\t // search state.\n\t firstChildren.length = childIndex = 0;\n\t firstChildren.push(child.firstChild);\n\t }\n\t } else {\n\t // If this child had no ID, then there's a chance that it was\n\t // injected automatically by the browser, as when a ``\n\t // element sprouts an extra `` child as a side effect of\n\t // `.innerHTML` parsing. Optimistically continue down this\n\t // branch, but not before examining the other siblings.\n\t firstChildren.push(child.firstChild);\n\t }\n\t\n\t child = child.nextSibling;\n\t }\n\t\n\t if (targetChild) {\n\t // Emptying firstChildren/findComponentRootReusableArray is\n\t // not necessary for correctness, but it helps the GC reclaim\n\t // any nodes that were left at the end of the search.\n\t firstChildren.length = 0;\n\t\n\t return targetChild;\n\t }\n\t }\n\t\n\t firstChildren.length = 0;\n\t\n\t true ? false ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a when using tables, nesting tags ' + 'like ,

, or , or using non-SVG elements in an ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined;\n\t },\n\t\n\t _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) {\n\t !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? false ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined;\n\t\n\t if (shouldReuseMarkup) {\n\t var rootElement = getReactRootElementInContainer(container);\n\t if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n\t return;\n\t } else {\n\t var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\t rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\t\n\t var rootMarkup = rootElement.outerHTML;\n\t rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\t\n\t var normalizedMarkup = markup;\n\t if (false) {\n\t // because rootMarkup is retrieved from the DOM, various normalizations\n\t // will have occurred which will not be present in `markup`. Here,\n\t // insert markup into a

or