Every good framework must support output handling. Output handling is essential because it helps you during debugging and lets you find out information about the control flow of your program. You alse need a way to get output when you are not in the Flash environment and trace() thus won’t work.
The as2lib’s output handling offers support for this and is highly extensible. It is possible to replace almost every class with your custom one also this is hopefully not necessary. All the classes needed to handle output are located in the org.as2lib.env.out package. The base class is the Out class.
The most important operations in this class are setLevel(OutLevel), addHandler(OutHandler) and of cource the operations to actually print something out: log(String), debug(String), info(String), warning(String), error(Throwable) and fatal(Throwable). As you can see there exist several different output levels. The ones that are provided by us are: Out.ALL, Out.DEBUG, Out.INFO, Out.WARNING, Out.FATAL and Out.NONE. You can of course expand this list as you need it. If you set the OutLevel to for example Out.ERROR, error and fatal output wll be made. That means all output that is logically located under the set OutLevel will be made including the set OutLevel.
Another thing you can do is setting different OutHandlers. OutHandlers are responsible for printing the messages out in a well formatted way. An OutHandler can for example be the TraceHandler that just uses trace() to print out the information. But you can of course also add more complex OutHandlers that write the information into a text file or something like that.
When you now use for example the operation Out.log(String) what happens is that an OutWriteInfo (org.as2lib.env.out.info.OutWriteInfo) containing the String as well as the level will be passed to the write(OutWriteInfo) operation of all registered OutHandlers. In case of using fatal(Throwable) or error(Throwable) to write out Throwables an OutErrorInfo (org.as2lib.env.out.info.OutErrorInfo) containing the Throwable as well as the level will be passed to the error(OutErrorInfo) operation of all OutHandlers. The OutHandler is now responsible for stringifying the passed OutWriteInfo or OutErrorInfo. There already exist two Stringifier that do exactly this job. They reside in the org.as2lib.env.out.string package and are called WriteStringifier or ErrorStringifier respectively.
Click the following link for an UML diagram depicting the relationships between the various out classes: Output Handling: Class Diagram.
Read on for an example of how to use the as2lib’s out classes.
(more…)
Archive for May, 2004
as2lib: Output Handling
as2lib: Exception Handling
The as2lib’s exception handling is pretty similar to the Java way of handling exceptions. All basic exception classes reside in the org.as2lib.env.except package. There exists an interface called Throwable. This interface specifies all the operations every throwable/exception should have. Two concrete implementations of this interface are the Exception and FatalException classes. The only difference between these two is the level of fatality. They could be compared with the Exception and Error class respectively in the Java programming language.
One significant difference between the as2lib’s exception handling compared with the default Error class of Flash is the quantity of information offered. The as2lib’s exception handling provides information about the operation that threw the exception as well as information about the cause of the exception. The two operations to get hold of this information are Throwable.getStackTrace() and Throwable.getCause(). The stack trace offers right now only information about the operation that threw the exception and not about all the operations that were executed before the exception has been thrown. This is because arguments.caller.arguments… is not possible. But we are looking forward to offer a full stack trace in future releases.
Read on to see an example of how to write your own custom exception.
(more…)
as2lib: Reflections
The ones that are coming from a Java background probably know what Reflections are. For the others here’s a little explanation:
Reflections offer support to find out information about every kind of member inside a programming environment. Members are for example Classes, Interfaces, Packages, Methods, Properties and so on. As you probably have already imagined the as2lib offers such a Reflection API. It is located in the org.as2lib.env.reflect package. Click the following link to see a little class diagram that shows how all these classes are related to each other: Reflections: Class Diagram.
To obtain a ClassInfo instance representing a specific class you use the org.as2lib.env.util.ReflectUtil’s getClassInfo(Function/Object) operation. The operation for packages is respectively called getPackageInfo(Object). You can now work with this ClassInfo or PackageInfo instance to find out more information like the name of the class, the class’s methods an so on. The above diagram shows all the available operations. [It is that simple to work with that I will not show an example. Just play a little bit around with it.]
Edit: Read on to see the power of the Reflections API.
(more…)
as2lib: 0.1 Alpha Release
Today was the day….;) The as2lib had its first release during the Flashforum conference here in Duesseldorf, Germany. You can download the release on www.as2lib.org. The release contains support for event-handling, exception-handling, output/log-handling, reflections, data holders, iterators and speed and unit tests.
Whereby the unit tests are currently reworked and not that major yet. We are planning to release a console for debugging and logging as well as a bunch of IO classes for Local Connections, Flash Remoting and Web Services in about two weeks.
I’m a little sad that my AOP framwork didn’t make it right in time for the first release. The reason is that I need RegExp to polish it. It will hopefully be part of the 0.2 alpha release.
Flashforum Conference 2004
I’m going to be at the Flashforum Conference 2004 in Duesseldorf. It is starting tomorrow and will last 2 days. It’s the first german conference I’m attending and I hope it to be as much fun as FlashInTheCan 2004. All the geeks from the as2lib are also going to be there. It will be a great time. If you are also attending and see me somewhere around come over and say hi. I’m wearing an as2lib T-Shirt with my name on it.
I’m looking forward to André Michelle’s session on Physical Simulations in Flash (”Physikalische Simulationen in Flash”).
By the way: I’m currently working on an aop framework for Flash. And by now it’s worken superb. I have already built an extensible logging aspect with it as a base that logs all calls, executions you specify as well as set and get access to properties with correct indentation, return values, passed arguments and so on. I’ll release the code soon. ![]()
