536cd135cc
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
202 lines
5.5 KiB
C#
202 lines
5.5 KiB
C#
//-------------------------------------------------------------
|
||
// <copyright company=’Microsoft Corporation’>
|
||
// Copyright © Microsoft Corporation. All Rights Reserved.
|
||
// </copyright>
|
||
//-------------------------------------------------------------
|
||
// @owner=alexgor, deliant
|
||
//=================================================================
|
||
// File: FormulaRegistry.cs
|
||
//
|
||
// Namespace: System.Web.UI.WebControls[Windows.Forms].Charting.Formulas
|
||
//
|
||
// Classes: FormulaRegistry
|
||
//
|
||
// Purpose: Keep track of all registered formula module types.
|
||
//
|
||
// Reviewed: GS - August 6, 2002
|
||
// AG - August 7, 2002
|
||
//
|
||
//===================================================================
|
||
|
||
|
||
#region Used namespace
|
||
|
||
using System;
|
||
using System.Collections;
|
||
using System.ComponentModel;
|
||
using System.ComponentModel.Design;
|
||
|
||
#endregion
|
||
|
||
|
||
|
||
#if Microsoft_CONTROL
|
||
namespace System.Windows.Forms.DataVisualization.Charting.Formulas
|
||
#else
|
||
namespace System.Web.UI.DataVisualization.Charting.Formulas
|
||
#endif
|
||
{
|
||
/// <summary>
|
||
/// Keep track of all registered formula modules types.
|
||
/// </summary>
|
||
internal class FormulaRegistry : IServiceProvider
|
||
{
|
||
#region Fields
|
||
|
||
// Storage for all registered formula modules
|
||
internal Hashtable registeredModules = new Hashtable(StringComparer.OrdinalIgnoreCase);
|
||
private Hashtable _createdModules = new Hashtable(StringComparer.OrdinalIgnoreCase);
|
||
private ArrayList _modulesNames = new ArrayList();
|
||
|
||
#endregion
|
||
|
||
#region Methods
|
||
|
||
/// <summary>
|
||
/// Formula Registry public constructor
|
||
/// </summary>
|
||
public FormulaRegistry()
|
||
{
|
||
}
|
||
|
||
/// <summary>
|
||
/// Adds modules into the registry.
|
||
/// </summary>
|
||
/// <param name="name">Module name.</param>
|
||
/// <param name="moduleType">Module class type.</param>
|
||
public void Register(string name, Type moduleType)
|
||
{
|
||
// First check if module with specified name already registered
|
||
if(registeredModules.Contains(name))
|
||
{
|
||
// If same type provided - ignore
|
||
if(registeredModules[name].GetType() == moduleType)
|
||
{
|
||
return;
|
||
}
|
||
|
||
// Error - throw exception
|
||
throw( new ArgumentException( SR.ExceptionFormulaModuleNameIsNotUnique( name ) ) );
|
||
}
|
||
|
||
// Add Module Name
|
||
_modulesNames.Add(name);
|
||
|
||
// Make sure that specified class support IFormula interface
|
||
bool found = false;
|
||
Type[] interfaces = moduleType.GetInterfaces();
|
||
foreach(Type type in interfaces)
|
||
{
|
||
if(type == typeof(IFormula))
|
||
{
|
||
found = true;
|
||
break;
|
||
}
|
||
}
|
||
if(!found)
|
||
{
|
||
throw( new ArgumentException( SR.ExceptionFormulaModuleHasNoInterface));
|
||
}
|
||
|
||
// Add formula module to the hash table
|
||
registeredModules[name] = moduleType;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Returns formula module registry service object.
|
||
/// </summary>
|
||
/// <param name="serviceType">Service AxisName.</param>
|
||
/// <returns>Service object.</returns>
|
||
[EditorBrowsableAttribute(EditorBrowsableState.Never)]
|
||
object IServiceProvider.GetService(Type serviceType)
|
||
{
|
||
if(serviceType == typeof(FormulaRegistry))
|
||
{
|
||
return this;
|
||
}
|
||
throw (new ArgumentException( SR.ExceptionFormulaModuleRegistryUnsupportedType( serviceType.ToString())));
|
||
}
|
||
|
||
/// <summary>
|
||
/// Returns formula module object by name.
|
||
/// </summary>
|
||
/// <param name="name">Formula Module name.</param>
|
||
/// <returns>Formula module object derived from IFormula.</returns>
|
||
public IFormula GetFormulaModule(string name)
|
||
{
|
||
// First check if formula module with specified name registered
|
||
if(!registeredModules.Contains(name))
|
||
{
|
||
throw( new ArgumentException( SR.ExceptionFormulaModuleNameUnknown( name ) ) );
|
||
}
|
||
|
||
// Check if the formula module object is already created
|
||
if(!_createdModules.Contains(name))
|
||
{
|
||
// Create formula module object
|
||
_createdModules[name] =
|
||
((Type)registeredModules[name]).Assembly.
|
||
CreateInstance(((Type)registeredModules[name]).ToString());
|
||
}
|
||
|
||
return (IFormula)_createdModules[name];
|
||
}
|
||
|
||
/// <summary>
|
||
/// Returns the name of the module.
|
||
/// </summary>
|
||
/// <param name="index">Module index.</param>
|
||
/// <returns>Module Name.</returns>
|
||
public string GetModuleName( int index )
|
||
{
|
||
return (string)_modulesNames[index];
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region Properties
|
||
|
||
/// <summary>
|
||
/// Return the number of registered modules.
|
||
/// </summary>
|
||
public int Count
|
||
{
|
||
get
|
||
{
|
||
return _modulesNames.Count;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
|
||
/// <summary>
|
||
/// Interface which defines the set of standard methods and
|
||
/// properties for each formula module
|
||
/// </summary>
|
||
internal interface IFormula
|
||
{
|
||
#region IFormula Properties and Methods
|
||
|
||
/// <summary>
|
||
/// Formula Module name
|
||
/// </summary>
|
||
string Name { get; }
|
||
|
||
/// <summary>
|
||
/// The first method in the module, which converts a formula
|
||
/// name to the corresponding private method.
|
||
/// </summary>
|
||
/// <param name="formulaName">String which represent a formula name</param>
|
||
/// <param name="inputValues">Arrays of doubles - Input values</param>
|
||
/// <param name="outputValues">Arrays of doubles - Output values</param>
|
||
/// <param name="parameterList">Array of strings - Formula parameters</param>
|
||
/// <param name="extraParameterList">Array of strings - Extra Formula parameters from DataManipulator object</param>
|
||
/// <param name="outLabels">Array of strings - Used for Labels. Description for output results.</param>
|
||
void Formula(string formulaName, double [][] inputValues, out double [][] outputValues, string [] parameterList, string [] extraParameterList, out string [][] outLabels );
|
||
|
||
#endregion
|
||
}
|
||
}
|
||
|