DOM guide: Error handling

From COLLADA Public Wiki
Revision as of 01:15, 19 April 2007 by Elf (talk | contribs) (catg: tutorial)
Jump to navigation Jump to search

The COLLADA DOM provides an interface, daeErrorHandler, that handles the printing of error messages.

Overview

The daeErrorHandler is an abstract singleton class. That is, the functionality must be implemented in a subclass (abstract) but only one instance of any subclass will be active and available (singleton) through the daeErrorHandler interface.

The COLLADA DOM provides a default daeErrorHandler implementation, daeStdErrPlugin. The daeStdErrPlugin class implements daeErrorHandler and routes string error messages to the C standard error stream.

Creating Your Own Error Handler

It may be desirable to route error messages for special handling or because the C standard error stream is unavailable, such as in GUI programs. You can create your own error-handling code by implementing a class that inherits from daeErrorHandler.

The daeErrorHandler interface declares two functions that need to be implemented to handle messages:

  • handleError( daeString );
  • handleWarning( daeString );

Implement these functions to parse or route the messages in whatever way you want. An example would be to create a pop-up window with the error message.

After implementing your error-handling class, you must pass an object of your class to the daeErrorHandler class to notify the DOM to use it for error handling. Use the daeErrorHandler::setErrorHandler method to do this. For example:

DAE *daeObject = new DAE();
myErrorHandlerClass *myEH = new myErrorHandlerClass();
daeErrorHandler::setErrorHandler( myEH );
daeObject->load( myFileToLoad );
...
delete daeObject;
delete myEH;

Note that the daeErrorHandler does not destroy or free any memory used by custom error handlers. You are responsible for destroying the error handler yourself.

Sending Error Messages to daeErrorHandler

A client application is free to call the daeErrorHandler code to route its error messages.

To send a message, you need to obtain a pointer to the active error handler by calling daeErrorHandler::get(). You can then call the appropriate error handling method. For example:

daeErrorHandler::get()->handleError( "The data you are loading is broken. Go fix it and try again!" );

Template:DOM tutorial