Abstract:
Handling data at one of a plurality of components, wherein the plurality of components includes at least a sink component and a source component. The source component transfers data to the sink component, and the sink component accesses an obtained data type handler object to invoke an interface implemented by the handler object. The invoked type handler interface includes source-specific instructions that are executed by the sink component regardless of whether the data is a format that the sink natively understands.

Description:
FIELD OF THE INVENTION 
     This invention relates generally to communication methods and systems, and, more particularly, to a method and system for handling data at one of a plurality of arbitrary components from another one of the plurality of components using a data type handler object. 
     BACKGROUND OF THE INVENTION 
     In a networked setting, components, such as devices, services and/or applications, may need to exchange data. A few of these components may be able to essentially accept and provide arbitrary types of data without restriction. For example, a file server might accept data in any format for storage in a file, since it does need to understand/parse/use the actual contents to store them. 
     However, many components must be able to understand the data types they receive in order to function properly. For example, a printer may only understand a Postscript data type format, or a projector may only understand .GIF data type formats. But, if the printer does not receive data in a Postscript format, or the projector does not receive data in a .GIF format, then the printer can not print and the projector can not display the received data. 
     As a result, compatibility is limited to a set of fixed data types that a particular sender can provide and a particular receiver can understand and use. Typically, changing this fixed set of data types for the senders and receivers of data requires rewriting the components to be able to process the new data types. For example, the printer would need to be reprogrammed to handle a new type of data, such as PDF, or the data sender would need a filter or translation mechanism installed ahead of time that can convert the data before sending it to the printer. These conversions will work, but unfortunately the data sender, such as a computer, or the data recipient, such as the printer, will have to be preprogrammed as described above or the data transfer will fail. 
     SUMMARY OF THE INVENTION 
     A method and computer readable medium in accordance with embodiments of the present invention includes receiving data at a sink component, where the data sent is from a source component, invoking at least one interface included in a data type handler object accessible to the sink component, executing at least one instruction associated with the invoked interface, and handling the received data based upon the executed instruction. 
     A system in accordance with embodiments of the present invention includes a sink component in communication with a source component. The sink component has a data type handler object with at least one interface. Further the interface has at least one instruction which when executed enables the sink component to handle data received from the source component. 
     The present invention uses mobile code to transparently and dynamically extend the behavior of components to allow them to use new types of data on the fly without requiring explicit, prior programming. In particular, the present invention provides a data type handler object that includes a sender-specific implementation of at least one interface that the sink component can execute to handle an unfamiliar data type received from a source component. As a result, compatibility of components is no longer limited to the set of fixed data types that a particular source component can provide and a particular sink component can use. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a perspective view of a system for handling data at one of a plurality of components in accordance with embodiments of the present invention; 
         FIG. 2  is a flow chart of a method for handling data at one of a plurality of components in accordance with embodiments of the present invention; and 
         FIGS. 3-4  are functional block diagrams of a method for handling data at one of a plurality of components in accordance with embodiments of the present invention. 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     A system  10  and method for handling data at one of a plurality of components in accordance with embodiments of the present invention are illustrated in  FIGS. 1 and 2 . The system  10  includes a data source component, such as a server component  12 , coupled via a network  16  to a data sink component, such as a projector component  14 , which uses an obtained data type handler object  20 ( 2 ) to handle a new type of data. The present invention transparently and dynamically extends the behavior of components to allow them to use new data types on the fly without requiring explicit, prior programming. 
     In embodiments of the present invention, server component  12  performs functions, such as data storage, file management and network  16  routing, although server component  12  could have other functions. Server component  12  includes a processor, an input/output (“I/O”) unit and a memory, which are coupled together by one or more bus systems or other communication links, although the server component  12  can comprise other elements in other arrangements. The processor executes at least a portion of the programmed instructions for handling data at one of a plurality of components in accordance with embodiments of the present invention as described herein and as set forth in  FIGS. 2-4 . 
     These programmed instructions for handling data at one of a plurality of components are stored in the memory for execution by the processor. A variety of different types of devices can be used for the memory, such as a random access memory (“RAM”) or a read only memory (“ROM”) in the system, or a floppy disk, hard disk, or CD ROM, which is read from and/or written to by a magnetic or optical reading and/or writing system that is coupled to the processor. The memory is used to store these programmed instructions as well as other information, although the instructions may be stored elsewhere. The I/O unit is used by the server component  12  to operatively couple and communicate with other components, such as the projector component  14 , over the network  16  using a line based medium such as an Ethernet™, although other types of networks  16  can be used including a wireless network  16 , such as Bluetooth™. 
     The projector component  14  can project images, such as text and/or graphics, onto a fixed medium, such as a projection screen, although the projector component  14  could have other functions. The projector component  14  includes a projection system and a control system with a processor, I/O unit and a memory, which are coupled together by one or more bus systems or other communication links, although the projector component  14  can comprise other elements in other arrangements, such as having the control system external to the projector component  14 . The processor executes at least a portion of the programmed instructions for handling data at one of a plurality of components in accordance with embodiments of the present invention as described herein and as set forth in  FIGS. 2-4 . 
     These programmed instructions for handling data at one of a plurality of components are stored in the memory for execution by the processor. A variety of different types of devices can be used for the memory, such as a RAM or a ROM in the system, or a floppy disk, hard disk, or CD ROM which is read from and/or written to by a magnetic or optical reading and/or writing system that is coupled to the processor. The memory can be used to store these programmed instructions as well as other information, although the instructions may be stored elsewhere. The I/O unit is used by the projector component  14  to operatively couple and communicate with other components, such as the server component  12 , over the network  16  using a line based medium such as an Ethernet™, although other types of networks  16  can be used including a wireless network  16  such as Bluetooth™. 
     Components, such as server component  12  and projector component  14 , are provided for exemplary purposes only. In embodiments of the present invention, the components may comprise any type of device or system that can store, process and execute instructions for performing one or more methods of the present invention as will be described in further detail herein, although the components may also comprise executable programs or other types of software entities that may be executed by or reside in a memory of a device or system. By way of example only, the components shown in  FIG. 1  may also comprise scanners, lap-top computers, cellular telephones, display devices, video input/output devices, audio input/output devices, copier devices, printer devices, remote control devices, appliances and file systems or databases residing in a computer system. 
     The network  16  enables the server component  12  and the projector component  14  to communicate with each other and any other components with access to network  16  at least at a basic level using a TCP/IP protocol, although other protocols may be used. In embodiments of the present invention, the network  16  comprises the Internet, although other types of networks  16  may be used, such as a local area network  16  (“LAN”), a wide area network  16  (“WAN”), a telephone line network  16 , a coaxial cable network  16 , and/or a wireless network  16 . 
     The operation of the system  10  for handling data at one of a plurality of components in accordance with embodiments of the present invention will now be described with reference to  FIGS. 1-4 . The term “component” means one or more applications or programs executing on the server component  12  or the projector component  14 , such as a slide show program, although components may refer to the actual hardware devices executing those applications. For ease of discussion and illustration, reference will be made generally to the server component  12  and projector component  14  throughout embodiments of the present invention. 
     By way of example only, a user at a client of the server component  12  may desire presenting slides stored in files for a slide show presentation. But the client may not have sufficient processing and memory capacities to store and operate an entire slide show program, such as MS PowerPoint™. Further, the client display may hinder presenting the show to a group of users because of a limited display area. Thus, the client user may desire accessing a slide show program component or other component programs stored elsewhere, such as the server component  12 , to display the stored slides using a suitable device, such as the projector component  14 . Moreover, a user of projector component  14  may desire to participate in the data transfer, such as viewing and controlling the slides as they are presented. 
     Accordingly, at step  100 , server component  12  performs a discovery process to determine which components are present on the network  16 , what their data transfer capabilities are, and what their native data types are. Server component  12  is programmed to automatically perform the discovery process upon the user expressing a desire to establish a particular type of communication, such as data transfer where a client of server component  12  desires transferring stored slides to a projector component  14  for display, although the server component  12  may be programmed in other manners, such as to allow the user to manually initiate the discovery process. 
     In embodiments of the present invention, server component  12  discovers projector component  14  using a Jini system discovery protocol system, although a number of other discovery protocols may be used, such as Bluetooth™ SLP, UDDI or a look-up process as disclosed in co-pending U.S. patent application Ser. No. 10/058,268 to Edwards et al., titled “SYSTEM AND METHOD FOR ENABLING ARBITRARY COMPONENTS TO TRANSFER DATA BETWEEN EACH OTHER,” filed Jan. 29,2002, which is hereby incorporated by reference in its entirety. 
     Server component  12  may display the discovered components (not illustrated), as disclosed in co-pending U.S. patent application Ser. No. 10/212,377 to Edwards et al., titled “SYSTEM AND METHOD FOR ENABLING COMPONENTS ON ARBITRARY NETWORKS TO COMMUNICATE,” filed concurrently herewith, which is hereby incorporated by reference in its entirety, and the user may select the components desired to be involved in the data transfer, although server component  12  may be programmed to automatically select the components based upon a number of criteria, such as component availability or the physical location of the components in network  16 . 
     At step  200 , the projector component  14  returns a projector proxy object to the server component  12 , which is stored in the memory of server component  12 . The proxy object can provide a list of the data types in which it can receive data. The list is provided in a MIME format, although other formats may be used, such as generic text strings. The proxy object also provides a list of one or more data type handler interfaces associated with the projector component  14  and that the projector  14  may accept and execute. Further, the proxy object also implements one or more universal interfaces associated with the projector component  14 , which are accessible to the server component  12 , such as a data sink interface, as disclosed in U.S. Pat. No. 7,296,042 by Edwards et al., titled “SYSTEM AND METHOD FOR ENABLING COMMUNICATION AMONG ARBITRARY COMPONENTS.” 
     In embodiments of the present invention, the proxy object, its associated operations, instructions and interfaces, as well as any other interfaces, operations and instructions that may be subsequently described herein, comprise mobile code, such as JAVA, although other languages may be used, such as Smalltalk, CLOS, Ada or Object Pascal. Mobile code is executable data, such as object oriented code, which can be transmitted to server component  12  or projector component  14  where it is executed as described herein, although other types of programming methodologies may be used such as procedural-oriented, logic-oriented, rule-oriented or constraint oriented. 
     In embodiments of the present invention, the server component  12  and the projector component  14  each have stored in their respective memories programming to understand the semantics of a basic set of universal interfaces associated with the proxy objects and their associated operations, instructions and data, which will be described in further detail herein. The particular universal interfaces used are responsive to the needs of applications for particular services, such as printing a file being operated on by a word processing program. However, the basic semantic programming does not need to include the particulars of the specific services involved, only the semantics of the universal interfaces used in embodiments of the present invention as described further herein below. 
     In embodiments of the present invention, server component  12  has stored in its memory and implements, or otherwise has access to (“associated with”), a data source interface, although the server component  12  may also implement a variety of other interfaces, such as a contextual interface, a notification interface and a user interface, as disclosed in co-pending U.S. patent application Ser. No. 10/058,268 to Edwards et al., titled “SYSTEM AND METHOD FOR ENABLING ARBITRARY COMPONENTS TO TRANSFER DATA BETWEEN EACH OTHER,” filed Jan. 29, 2002, which has already been incorporated by reference in its entirety. In embodiments of the present invention, the projector component  14  is associated with a data sink interface, although the projector component  14  can also be associated with a variety of other interfaces, in the same manner described above with respect to the server component  12 . 
     At step  300 , the server component  12  inspects the proxy object to determine which data type handler interfaces and data types can be accepted and understood by the projector component  14 . By way of example only, the server component  12  examines the list of data type handler interfaces and data types provided in the proxy object by the projector component  14 , described above in connection with step  200 . The server component  12  determines that the projector component  14  has been programmed to understand the semantics of a viewer interface. Thus, the projector component  14  may accept, understand and execute mobile code instructions that may be provided by another component, such as server component  12 , that implements the viewer interface. Moreover, the server component  12  determines that in addition to the type handler interface “Viewer,” the projector component  14  can also understand data provided in a JPEG data type format. 
     Further in this example, the server component  12  can provide mobile code that implements the viewer interface, and can also provide data in an MS PowerPoint™ data type format. Although a viewer interface is used in this example, the server component  12  can provide, and the projector component  14  can accept and implement, other types of interfaces, such as an editor interface that can modify received data in certain formats, a printer interface that can be used by a component to render a data type on a printer, and a converter interface that changes data from one data type to another. 
     The server component  12  also determines that the projector component  14  is associated with at least a data sink interface, as described in U.S. Pat. No. 7,296,042 to Edwards et al., titled “SYSTEM AND METHOD FOR ENABLING COMMUNICATION AMONG ARBITRARY COMPONENTS,” which is hereby incorporated by reference in its entirety. Thus, the projector component  14  at least has the capability to receive data provided by a component having access to its data sink interface. The server component  12  in this example understands the semantics of data sink interfaces, such as the data sink interface associated with the projector component  14 , and thus can invoke the interface to provide the projector  14  with data. 
     Accordingly, at step  400 , the server component  12  creates a data transfer session object  18 ( 1 ) and invokes the data sink interface associated with the projector component  14 , passing the session object  18 ( 1 ) into the interface call. The projector component  14  receives a data transfer session object  18 ( 2 ) from the server component  12 , which is a copy of the data transfer session object  18 ( 1 ) as shown in  FIG. 3 . The data transfer session objects  18 ( 2 ) includes instructions, operations and data that are specific to the server component  12 , yet may be understood and executed by the projector component  14 . 
     The projector component  14  executes an operation or operations in the session object  18 ( 2 ) to enable the projector component  14  to retrieve the data from the server component  12 . The instructions included in the data transfer session object  18 ( 2 ) may also include instructions that when executed by the projector component  14  instruct the component  14  to request a copy of the data type handler object  20 ( 1 ) to handle the data. Thus, in this example the projector component  14  requests a copy of the data type handler object  20 ( 1 ). 
     Accordingly, at step  500  and referring to  FIG. 4 , the projector component  14  obtains data type handler object  20 ( 2 ), which is associated with the data transfer session object  18 ( 2 ) and thus accessible to the projector component  14 , although the projector component  14  could obtain the data type handler object  20 ( 2 ) from other sources, such as another component coupled to the network  16  or from memory in the projector component  14 . The data type handler objects  20 ( 1 )- 20 ( 2 ) are expressed in the data transfer session object  18 ( 2 ) as tuples in the format “[native data type, interface]”. In this example, the data transfer session object  18 ( 2 ) may include the tuple “[application/powerpoint, com.PARC.Viewer],” which indicates that the data type handler objects  20 ( 1 )- 20 ( 2 ) provide a specific implementation of the viewer interface that can be executed to view MS PowerPoint™ files. 
     Thus at step  600 , the projector component  14  begins receiving the MS PowerPoint™ data from the server component  12 . The viewer interface that is accessible to the projector component  14  through the data type handler object  20 ( 2 ) includes data type handling instructions that enable the projector component  14  to handle data types that are not native to the projector component  14  during the data transfer. In this example, the type handler object  20 ( 2 ) includes instructions that are particular to the server component  12 , but that projector component  14  may retrieve and execute for viewing MS PowerPoint™ slide data from the server component  12  to be projected. The projector component  14  invokes the interface to handle the data, such as for projecting the images represented by the data. 
     As a result, even though the projector component  14  in this example is initially programmed to understand only JPEG data types, with the data type handler object  20 ( 2 ) the projector component  14  may implement the viewer interface and execute the instructions to be able to interact with and process MS PowerPoint™ data to project the images represented by the data. Moreover, the data type handler object  20 ( 2 ) may include instructions that cause the projector component  14  to request controller objects from the server component  12  to control one or more aspects of the data transfer, as disclosed in co-pending U.S. patent application Ser. No. 10/212,376 to Edwards et al., titled “SYSTEM AND METHOD FOR CONTROLLING COMMUNICATION,” filed concurrently herewith, which is hereby incorporated by reference in its entirety. 
     An alternative embodiment of the system  10  will now be described. In this embodiment, steps  100 - 400  and  700  are performed as described above, but steps  500 - 600  are not performed. Instead of the projector component  14  receiving a data type handler object  20 ( 2 ) from the server component  12  as described above at step  600 , the data type handler object  20 ( 2 ) is pre-installed in the projector component  14 , although the data type handler object  20 ( 2 ) may be downloaded from another component on the network  16 , or the data type handler object  20 ( 2 ) may be pre-installed in the server component  12 . For instance, a system administrator (“SA”) of the network  16  may remotely install the data type handler object  20 ( 2 ) on the memory of the projector component  14 , and the data type handler object  20 ( 2 ) is used as described above in connection with step  700 , although the data type handler object  20 ( 2 ) may be stored on a portable memory medium, such as a CD-ROM or a floppy disk. In this case, the portable memory medium may be read by the projector component  14  to retrieve the data type handler object  20 ( 2 ), which is then stored on a fixed memory medium of the component  14  to be used as described above in connection with step  700 . 
     The present invention transparently and dynamically extends the behavior of the projector component  14 , in this example, to allow the project component  14  to receive the MS PowerPoint™ file data transferred to it from the server component  12 . The present invention advantageously uses the data type handler objects  20 ( 1 )- 20 ( 2 ), which include mobile code, to interact with and process the MS PowerPoint™ data sent from the server component  12 . Therefore, the projector component  14  does not require explicit, prior programming to be able to handle the MS PowerPoint™ data. 
     As a result, compatibility of components, such as the server component  12  and the projector component  14 , is no longer limited to the set of fixed data types each component is initially programmed to understand and that both components agree on. Furthermore, the mobile code associated with the data type handler objects  20 ( 1 )- 20 ( 2 ) provides substantial benefits in that only a set amount of code needs to be provided for enabling the projector component  14  to understand the MS PowerPoint™ data sent to it from the server component  12 , rather than requiring that the entire MS PowerPoint™ program package be installed in a memory of the projector component  14 . 
     Other modifications of the present invention may occur to those skilled in the art subsequent to a review of the present application, and these modifications, including equivalents thereof, are intended to be included within the scope of the present invention. Further, the recited order of processing elements or sequences, or the use of numbers, letters, or other designations therefor, is not intended to limit the claimed processes to any order except as may be specified in the claims.