Santiago Basulto wrote: > Hello everybody. > > First of all, let me apologize if i'm doing something wrong. I've been > reading the Contributors Guide and the Volunteering note > (http://commons.apache.org/volunteering.html) wrote by Mr. Craig, then > i decided to use this way.
Welcome to Commons! > > My name is Santiago Basulto, i'm from Argentina. I've been using > Commons Chain for a while, and has been really useful to me. It helped > to organize my code, and make it a lot more scalable. > > But, time to time, i came with some problems that Chain did not > address. Some situations when i needed more specialization and > robustness. > > That's why i decided to extend this project, and build some other > classes to help me out. I'm helping a teacher at my University, in an > OOP Course, and after talking a little about it, he told me that it > was a good idea. After that i propose these changes to some friends, > and tell them to try to use it. It appears like they did like it and > started using it. > > After getting some courage, i decided to write this mail. Please, > sorry if i'm wrong. I understand that a lot of really smart people are > working on Apache Projects, and maybe what i'm doing is a little > stupid. So, if this is the case, please let me know. > > I'll comment a little about my changes. It needs a lot of refactoring > and documenting, but i'd like to comment the main idea behind it, so > you can give your opinion. I have faced some problems with names. I > did not want to rename commons.chain classes, as a matter of respect, > so some names can seem weird, it can change. > > First of all, i needed more "control" over my commands. I like to have > everything logged, and several commands were used in GUI apps, so i > needed more User interaction. Then, i decide to provide the main > Interface (Command) some other methods, just to can track what is it > doing. I made a new interface called Action (i use the other name > given to this pattern). I extend it from Command, just becouse i > didn't want to change everything, and can keep using my old Commands. > > This new Interface, Action, has two new methods: > > void registerHandler(ActionHandler c); > > boolean removeHandler(ActionHandler c); //true if the handler was > present, false otherwise > > The main idea behind this was to have a Handler object that can track > the "moves and states" of the Action (or Command) class. It's > something similar to the Observer Pattern. An action "can" > (optionally, if doesn't want to register a handler, it's a simple > Command) register a Handler, and comunicate things about itself. So, i > have an Interface called ActionHandler. It has three methods: > > void start(Action a); > > void done(Action a); > > void fail(Action a,Exception e); > > Then, for example, the action "can" invoke start method from its > handler, to comunicate it that has started executing. It's really > simple, but helped me big time. > > Something great about the Action Interface, is that it only sais that > you can register a handler, not the number of handlers. So, a Class > implementing Action can register a number of handlers (file logger > handler, GUI tool for comunicating the user, console logger, etc) and > inform about the progress to all of them. If it's not needed to > comunicate, this class can just execute silently. > > So, this is the main change, but with this little change i needed to > do something with the chain. So i just made the Chain interface extend > the Action interface. Of course, can be another class, something like > ActionChain that implements the Action Interface, and let Chain > untouched. > > I've attached a simpler version of my source code. With just the basic > classes and a package for test it. I've developed some other classes, > for example, Action implementations that register several > ActionHandlers. I'm currently working on a "BlockingQueueChain", it's > a chain that can execute all its Commands (or Actions) in parallel. > Obviusly, there are not so many cases when this Chain can be used. If > someone is interested i will can send the source code. > > Ok, i think that's all. Hope you can tell me if this is a good idea, > or not. Or simply, whether i should start a new "branch" of the > project to no interfere with Commons Chain. What you are proposing looks to me like a good enhancement to Commons Chain. We can discuss class structure and naming further. To get things going, it would be best to open a JIRA ticket and attach your code, following the instructions here: http://commons.apache.org/patches.html [chain] has not been very active lately, so it may take a little while to get responses; but please don't be discouraged by that. We welcome your contributions! > > Thanks for this great project, and all your disinterested work. > > Best Regards. > > SourceCode at: > http://www.santiagobasulto.com.ar/projects/Actions/actions-src.rar > > PS: Sorry for my english! I'm trying to improve it. Your English is fine. Thank YOU for your interest in Commons! Phil --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org