[ https://issues.apache.org/jira/browse/IBATIS-569?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12659221#action_12659221 ]
Jeff Butler commented on IBATIS-569: ------------------------------------ The initialized method currently has the opportunity to override the default rules (setRules()). However, when I mentioned the proxy class, I really hadn't thought it through completely. IbatorRules as it stands would be difficult to proxy. I'll definitely fix that. My first thought is to do something very simple - turn IbatorRules into an Interface, rework the three supplied implementations, and supply a basic rules proxy class. Then each plugin could easily override one or more rules from the default calculated rules. Pseudo code like this: public class MyPlugin extends IbatorPluginAdapter { public void initialized(IntrospectedTable introspectedTable) { IbatorRule rules = introspectedTable.getRules(); MyRules myRules = new MyRules(rules); introspectedTable.setRules(myRules); } } public class MyRules extends IbatorRulesProxy { public MyRules (IbatorRules ibatorRules) { super(ibatorRules); } @Override public boolean generateInsert() { return false; } } This way you could chain rules implementations together in different plugins if required, but we wouldn't have to do anything too complex. I think this is a fairly rare use case so I don't want to overdesign. > Simulate mode for Ibator Plugins > -------------------------------- > > Key: IBATIS-569 > URL: https://issues.apache.org/jira/browse/IBATIS-569 > Project: iBatis for Java > Issue Type: Wish > Components: Tools > Affects Versions: 2.3.3 > Reporter: Dan Turkenkopf > > As I'm playing with creating Ibator plugins for various purposes, I'm running > into the issue of conflicting actions. > For example, I have one plugin that optionally removes the insert method from > the DAO class, but I have another one that creates a new method that calls > the insert method. When running the two of them on the same table, my > generated DAO has compile errors. > Since the plugins shouldn't know anything about each other, I need some way > to know whether the DAO's insert method is actually generated or not. > I played around with a way of tracking generation state at the > IbatorPluginAggregator level, but the timing of component creation doesn't > appear to be in the right order for what I'm doing (the > daoImplementationGenerated method is called before the > daoInsertMethodGenerated method). > My suggestion is to run through the generation process twice - once to > determine which components should be generated, and a second time to actually > generate them. Granted, this would slow down generation, but since it's an > out-of-band process anyway, speed should be less important. And this would > allow plugins to be independent but still react to whether another plugin > changes the generated output. > I'm willing to continue working on this and submit a patch, but wanted to get > some feedback before going too much further. > Thanks, > Dan Turkenkopf -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.