Extend Changeset

Hello


I am saving changelog.xml in database, then parsing back to objects and working with them on my web application.


But I got a demand that needs to flag each change with a boolean to verify it will be generated on final sql script.


As far as I know, I could extend each Change adding something like shouldBeProcessed attribute, but it demands modifying all Changes. 


Since I am using 1 Change with one Changeset, it could be better to adding that attribute to Changeset. 


How could I do that?



It would probably make most sense to put on the changeSet. You would have to create a subclass of ChangeSet that is created by your ChangeLogParser. Are you using a standard changelog parser class? Or did you write your own?

Alternately, you could create a custom shouldBeProcessed precondition that you could add to all applicable changeSets. That would probably be less intrusive code-wise than a changeSet subclass but would result in a larger changelog file.


Nathan

Actually I didn’t know that I could write my own ChangeLogParser. But I found another way:


  • created an enum called something like Process with atributes “process” and “dont_process”


  • when I create a new changeset, I use that flag as a context value


  • then when I generate my sql file, I just process changesets with contexts that have “process” value


Is it a good approach?

If it is working for you, that is the main thing. Seems like a reasonable approach.


Nathan

Nathan,


Just to clarify in my next changes, how are the steps to create my own tags inside a ChangeSet?

  • extend ChangeSet class adding needed attributes;
  • create my own implementation of ChangeLogParser
  • create my own handler by extending org.xml.sax.helpers.DefaultHandler (since XMLChangeLogSAXHandler is default package) - what about dbchangelog.xsd?

Those steps sound about right. You probably don’t want to try to modify dbchangelog.xsd but instead use a separate XSD/namespace for your new attributes.


Nathan