The present application is related to United States Patent Application, entitled “Method and Apparatus for Administering Configuration Information in a Private Branch Exchange Switch,” and United States Patent Application, entitled “Method and Apparatus for Validation and Error Resolution of Configuration Data in a Private Branch Exchange Switch,” each filed May 21, 2004 and incorporated by reference herein.
The present invention relates generally to data management tools, and more particularly, to methods and apparatus for automatically generating a data handling framework to manage public data structures.
With the explosive growth of the Internet, there has been a growing trend towards Internet Protocol (IP) telephony. IP telephony allows various devices, often referred to as end-points, such as dedicated IP phones or specially configured personal computers, to initiate and receive telephone calls over the Internet or private data networks. Generally, the voice signal is compressed and translated into IP packets for transmission over the network(s).
IP telephony offers many benefits to both carriers and users that have contributed to its rapid deployment. Eventually, IP telephony technologies may replace traditional circuit switched telephony technologies, such as the Public Switch Telephone Network (PSTN). In the meantime, however, there is a substantial installed base of traditional telephone systems served by the PSTN and IP telephony must co-exist with traditional telephone systems.
A number of products are available that allow enterprises to integrate their traditional telephone systems, such as private branch exchange (PBX) switches with IP telephony features. The IP Office™ product, commercially available from Avaya, Inc., of Basking Ridge, N.J., supports voice and data communications. IP Office™ can be set up as a traditional PBX, an IP telephony server, or a combination of both. Thus, the IP Office™ product allows an enterprise to immediately implement traditional telephony, and evolve to IP over time, or to immediately implement a full IP solution.
While these emerging IP telephony products effectively allow enterprises to transition to IP telephony communications, some of the products have been difficult to administer. A number of early administration tools for such switches required specific user training and provided little, if any, assistance with the entry of configuration information. In addition, once the configuration information was entered, such administration tools allowed the configuration information to be changed without ensuring the accuracy of such changes or without providing a mechanism to resolve any errors created by the changes.
A need therefore exists for an administration tool for an enterprise telephone switch that provides improved installation and administration, with increased efficiency and reliability.
Generally, methods and apparatus are disclosed for automatically generating a data handling framework to manage public data structures. A customizable framework is automatically generated to manage public data structures. The customizable framework is based on one or more parameters of the public data structures. A data model architecture is disclosed that features a data model for wrapping public data structures, handling the public data structures and various elements of the public data structures, including validation capabilities for the data. The data model architecture includes an automatically generated module, referred to as the data-handling framework. The data-handling framework wraps public data structures and provides, for example, creation, accessor and modification functions. In addition, the data-handling framework provides mechanisms for tracking changes and a skeleton framework for validation routines. In addition, the data model architecture includes a set of custom, rules-based, validation classes (custom or hand written) that overlay on top of the automatically generated data model classes.
A more complete understanding of the present invention, as well as further features and advantages of the present invention, will be obtained by reference to the following detailed description and drawings.
The present invention provides methods and apparatus for automatically generating a data handling framework to manage public data structures. In an exemplary embodiment, an administration tool 200 administers a switch 150, such as a Private Branch Exchange (PBX) switch that optionally provides an IP Telephony feature. The administration tool 200 employs a data model architecture that features a data model for wrapping raw data classes, handling the raw data and its various elements in various ways, including validation capabilities for the data. As discussed hereinafter, the data model architecture includes an automatically generated module, referred to as the data-handling framework. The data-handling framework wraps raw data classes and provides creation, accessor and modification functions, ability to track changes and puts in a skeleton framework for validation routines. In addition, the data model architecture includes a set of custom, rules-based, validation classes (custom or hand written) that overlay on top of the automatically generated data model classes.
Generally, the data-handling module is useful in any software architecture where validation is performed alongside maintaining synchronization with changing raw data classes, as would be apparent to a person of ordinary skill in the art. Raw data needs to be encapsulated often with creation accessor, modification, copy, and deep clone methods. Also, the ability to track if any object has changed and percolate that information to its containers is also desired. The ability to put hooks in for validation is necessary in any system where there are syntax and value constraints in a system. To put hooks in for any action to be done after a delete, modification or add is also part of the framework. This is useful to post changes or propagate changes whenever any object is changed and has been referred to from other endpoints in the system. Furthermore, having the data-handling module work off the raw data classes allows the raw data classes to be available and be exported using, for example, XML through various technologies. The custom rules that are hand written fill in the actual validation that needs to be field-specific and object specific. This is done in a non-automated part of the data model architecture that derives all the benefits of the automatically generated data-handling framework due to inheritance. The present invention thus provides a data model architecture where all the non-custom parts of data handling have been automated.
The switch 150 may be embodied, for example, as the IP Office™ switch. The switch 150 can be set up, for example, as a traditional PBX, an IP telephony server, or a combination of both. The switch 150 connects one or more endpoints 1 through endpoint n. It is noted that the endpoints can be directly connected to the switch 150, as shown in
For example, the memory 220 may store configuration data 250. In addition, the memory 220 may store an automatic generation process 400, as discussed further below in conjunction with
A number of the architecture features and sub-modules are discussed further below in a section entitled “Data Model Architecture/Sub-Modules.”
The automatic generation process 400 then invokes a subroutine, Create Validating Class For Current Raw Data Class, discussed further below in conjunction with
A raw data class is checked during step 460 to see if it is the Configuration (Root) class. During step 465 the following features unique to the Configuration Class are added:
Steps 470 through 485 are performed for each raw data class. During step 470, a validating class is created for the current raw data class with basic elements. In particular, for each raw data class, its position is fixed in the hierarchy tree for configuration by setting the following parameters:
Steps 475-485 enhance each class with functions appropriate to its contained elements. Many of the functions need to be iterated over the contained elements. This recursive procedure has also been abstracted to be a common procedure that gets called to do any particular function iteratively with the aid of the types reference table 1000 generated during step 455.
The class specific data and functions are created during step 470. In an exemplary implementation, the following class specific data and functions are created:
The accessor methods are established for current raw data class during step 475. Depending on type of each element contained in the raw data class (by looking at types reference hash table 1000), the following are created:
Custom functions and constructors for the current raw data class are added during step 480. For each raw data class, any extensions specified for that class are added to the generated class and if the extension is a constructor, then the constructor is made available to the factory.
During step 485, the current raw data class constructors are added to the factory. As each class needs to be instantiated to create objects, all the different constructors are all automatically compiled and made available through a factory that can be used from anywhere else.
The configuration of the exemplary administration tool 200 is mapped into three C# assemblies under the namespaces Configuration, Configuration.Validating, and Configuration.Validating.Full. Configuration is a C# version of the configuration files suitable to serialize to XML allowing it to be sent over a Web Service interface. The Configuration module contains the raw data classes 320 (
Configuration.Validating provides the configuration access for the Graphical User Interface. Configuration.Validating also adds the validation structure. Both Configuration and Configuration.Validating are automatically generated from the C++ classes via perl scripts, discussed below. This minimizes the work keeping the application synchronized with the source for the raw data. Configuration.Validating.Full classes inherit from their Configuration.Validating counterparts, filling in the meat of the validation (that is, providing application specific defaults, and all the data manipulation functions) of the raw dataConfiguration Module
The exemplary configuration classes allow the configuration to be easily converted to/from XML using NET's standard System.Xml.Serialization.XmlSerializer. This constraint forces classes to consist of only public data, and not methods. This also forces the configuration to be contained within one object, so instead of having global lists containing users as core_conf.h has, there is one Configuration (Root) object that contains arrays of each object of each configuration type. The XML serializer cannot serialize ArrayLists, so groups of objects are all represented as arrays.
Having the configuration serializable to XML allows the option of sending them over a web service.
Configuration.Validating Module
As previously indicated, the validating module gets automatically generated using, for example, Perl Scripts, discussed below, and contains classes that are built using the raw data. The Configuration classes are structures. Thus, there is a need for a more abstract interface to the configuration for the rest of the administration tool 200. This interface is provided by the Configuration.Validating classes. Each Configuration class has a corresponding Configuration.Validating class, and it is this Validating class that the administration tool 200 uses to access the configuration.
Distributed software environments and web services typically pass data as simple public structures. This limits the number of function calls across the network. The weakness with this is that the application using the data uses it at its raw level.
In the Configuration.Validating classes, Configuration namespace public attributes become Properties (with set and get functions), Configuration namespace arrays become ArrayLists, and the whole validation structure is added. Each Property has a corresponding validate function, which is called during each Properties set. Each arrayList has a validate function that validates whether adding an element to an ArrayList is valid. Each class also has a Validate( ) function that recursively calls Validate( ) on all of its members. Calling Validate( ) on the configuration object itself will Validate( ) on all the objects of the entire configuration.
Configuration.Validating classes also include a constructor that initialized the data the same way that core_conf.cpp does, and adds a Clone function that implements a Deep Clone.
These classes are automatically generated by the perl script “configToValidating” from their Configuration classes. (The Configuration namespace classes themselves are generated by the perl script “coreToCSharp” from the core switch configuration c++source: “core_conf.h” and “core_conf.cpp,” each discussed below in the Section entitled “Scripts.”
Framework Details
The Scripts, discussed further below, create a framework referred to as a ValidatingConfig, to access the data. The framework adds:
In addition, when the object is a Configuration object (i.e., the Rootobject that contains the whole hierarchy), the object also contains the following fields:
ConfigsOidHash: Hash Table of each object in this config, keyed by Oid
ModifiedList: List of objects that have been modified. This can be set at any time by the application so that it can track modification over certain intervals.
The administration tool 200 employs scripts to take a configuration header file, such as en exemplary file, “core_conf.h,” and generate C# classes in the Configuration namepace for both the WebService and it's client. The classes for the client (Configruation.Validating namespace) extend the web service classes with things that are useful for the administration tool 200 (for example, adding hooks for validation, making get's and set's, following copy semantics instead of reference semantics and converting arrays to ArrayLists).
Configuration.Validating.Full
The Configuration.Validating.Full namespace contains classes that are representative of endpoints in the system as well as virtual entities represented by the administration tool 200. These classes are derived from those in Configuration.Validating. These classes have the additional capability of populating the default values as appropriate to the administration tool 200. In addition, these classes validate the fields within each class and generate the appropriate errors.
These classes each inherit from their corresponding Configuration.Validating class and add any customization that cannot be done by the Perl scripts. This includes any substance, e.g., specific validation rules and generation of errors to the Validating functions and any initialization that differs from the core_conf.cpp file.
These classes are not intended to be an interface to the configuration for the code of the administration tool 200. The code of the administration tool 200 should interface using the Configuration.Validating classes. The actual objects that they refer to may be of type Configuration.Validating.Full (whose functionality is achieved through dynamic binding) if the administration tool 200 has a need to extend the implementation.
Since Configuration.Validating classes have no notion of their Configuration.Validating.Full counterparts, the Configuration.Validating namespace contains a Factory class (ConfigFactory) that is used to create all objects. Config.Factory is an instance of this factory. The administration tool 200 will set Config.Factory to an Configuration.Validating.Full version at the very beginning, forcing Configuration.Validating.Full versions of the classes to be created when necessary.
Validation Rules
The Configuration.Validating.Full namespace contains classes that are representative of endpoints in the system as well as virtual entities represented by the Configuration Assistant. These classes are derived from those in Configuration.Validating. These classes have the additional capability of populating the default values as appropriate to the administration tool 200. In addition, these classes validate the fields within each class and generate the appropriate errors. For a more detailed discussion of the validation and error resolution aspects of the administration tool 200, see United States Patent Application, entitled “Method and Apparatus for Validation and Error Resolution of Configuration Data in a Private Branch Exchange Switch,” filed May 21, 2004 and incorporated by reference herein.
The class diagrams in
In addition, each class, such as the classes 810, 820, 830 and 840, include one or more functions applicable to the object in the third class section. For example, the configuration class 810 includes a validate function that, when called, invokes the validate functions in each of the contained objects. When the validate function in a contained object is called, such as the validate function for the short code class 820, the additional validation functions within the contained object's class (validate code, validate feature and validate telephone number) are also invoked in an iterative fashion and the results of the validation at each level of each endpoint re aggregated.
As shown in
An aggregated result class object 930 contains a collection of the validation results for a given configuration as it contains the different endpoints. In this manner, an error tree can be constructed with the class/object hierarchy. A resolution generator class 940 contains a method that facilitates the correction of errors. The resolution generator class generates the error resolution message with a list of ways to fix an error and associated actions corresponding to each selection.
System and Article of Manufacture Details
As is known in the art, the methods and apparatus discussed herein may be distributed as an article of manufacture that itself comprises a computer readable medium having computer readable code means embodied thereon. The computer readable program code means is operable, in conjunction with a computer system, to carry out all or some of the steps to perform the methods or create the apparatuses discussed herein. The computer readable medium may be a recordable medium (e.g., floppy disks, hard drives, compact disks, or memory cards) or may be a transmission medium (e.g., a network comprising fiber-optics, the world-wide web, cables, or a wireless channel using time-division multiple access, code-division multiple access, or other radio-frequency channel). Any medium known or developed that can store information suitable for use with a computer system may be used. The computer-readable code means is any mechanism for allowing a computer to read instructions and data, such as magnetic variations on a magnetic media or height variations on the surface of a compact disk.
The computer systems and servers described herein each contain a memory that will configure associated processors to implement the methods, steps, and functions disclosed herein. The memories could be distributed or local and the processors could be distributed or singular. The memories could be implemented as an electrical, magnetic or optical memory, or any combination of these or other types of storage devices. Moreover, the term “memory” should be construed broadly enough to encompass any information able to be read from or written to an address in the addressable space accessed by an associated processor. With this definition, information on a network is still within a memory because the associated processor can retrieve the information from the network.
It is to be understood that the embodiments and variations shown and described herein are merely illustrative of the principles of this invention and that various modifications may be implemented by those skilled in the art without departing from the scope and spirit of the invention.