XMLUtil.forEachChildElement(columnsElement, "Column",
getHelper().new ElementHandler("column")
{
public void handleElement(Element columnElement, String sColumnName)
{
ColumnOutline outline = new ColumnOutline();
loadColumnOutline(columnElement, outline, true);
create.addColumnOutline(outline);
}
});
}
});
XMLUtil.withFirstChildElement(stepElement, "Indexes", false, new ElementHandler()
{
public void handleElement(Element indexesElement)
{
XMLUtil.forEachChildElement(indexesElement, "Index",
getHelper().new ElementHandler("index")
{
public void handleElement(Element indexElement, String sIndexName)
{
IndexOutline outline = new IndexOutline();
loadIndexOutline(indexElement, outline);
create.addIndexOutline(outline);
}
});
}
});
XMLUtil.withFirstChildElement(stepElement, "View", false, new ElementHandler()
{
public void handleElement(Element viewElement)
{
final SQLScript script = new SQLScript();
loadSQLScript(viewElement, script);
create.setViewScript(script);
create.setViewAutoUpdated(
XMLUtil.getBooleanAttr(
viewElement, "autoupdated", create.isViewAutoUpdated()));
}
});
String sHints = XMLUtil.getStringAttr(stepElement, "hints");
if (sHints != null)
{
for (StringTokenizer tokenizer = new StringTokenizer(sHints);
tokenizer.hasMoreTokens();)
{
create.addHint(tokenizer.nextToken());
}
}
create.setPrimaryKeyName((create.getType() == Table.ASPECT) ?
XMLUtil.getStringAttr(stepElement, "primaryKey") :
XMLUtil.getReqStringAttr(stepElement, "primaryKey"));
upgrade.addStep(create);
}
else if (sElement.equals("AlterTable"))
{
final AlterTableStep alter = new AlterTableStep();
alter.setType(parseTableType(XMLUtil.getStringAttr(stepElement, "type"), alter.getType()));
alter.setName(XMLMetadataHelper.getNameAttr(stepElement, "name", XMLMetadataHelper.NAME_DOT));
alter.setAlias(XMLUtil.getStringAttr(stepElement, "alias"));
alter.setPrimaryKeyName(XMLUtil.getStringAttr(stepElement, "primaryKey"));
XMLMetadataLoader.parsePatterns(
XMLUtil.getStringAttr(stepElement, "hints"),
new XMLMetadataLoader.PatternHandler()
{
public void handlePattern(String sName, boolean bEnabled)
{
alter.setHint(sName, bEnabled);
}
});
upgrade.addStep(alter);
}
else if (sElement.equals("RenameTable"))
{
RenameTableStep ren = new RenameTableStep();
ren.setOldName(XMLMetadataHelper.getNameAttr(stepElement, "name", XMLMetadataHelper.NAME_DOT));
ren.setNewName(XMLMetadataHelper.getNameAttr(stepElement, "to", XMLMetadataHelper.NAME_DOT));
upgrade.addStep(ren);
}
else if (sElement.equals("DropTable"))
{
DropTableStep drop = new DropTableStep();
drop.setName(XMLMetadataHelper.getNameAttr(stepElement, "name", XMLMetadataHelper.NAME_DOT));
upgrade.addStep(drop);
}
else if (sElement.equals("ApplyTableAspect"))
{
final ApplyTableAspectStep apply = new ApplyTableAspectStep();
apply.setAspectName(XMLMetadataHelper.getNameAttr(stepElement, "name", XMLMetadataHelper.NAME_DOT));
apply.setOverride(XMLUtil.getBooleanAttr(stepElement, "override", apply.isOverride()));
XMLMetadataLoader.parsePatterns(XMLUtil.getStringAttr(stepElement, "pointcuts"),
new XMLMetadataLoader.PatternHandler()
{
public void handlePattern(String sPattern, boolean bInclusive)
{
apply.addPointcutPattern(sPattern, bInclusive);
}
});
loadSQLScripts(stepElement, apply.getScriptHolder());
upgrade.addStep(apply);
}
else if (sElement.equals("RemoveTableAspect"))
{
final RemoveTableAspectStep remove = new RemoveTableAspectStep();
remove.setAspectName(XMLMetadataHelper.getNameAttr(stepElement, "name", XMLMetadataHelper.NAME_DOT));
remove.setOverride(XMLUtil.getBooleanAttr(stepElement, "override", remove.isOverride()));
XMLMetadataLoader.parsePatterns(XMLUtil.getStringAttr(stepElement, "pointcuts"),
new XMLMetadataLoader.PatternHandler()
{
public void handlePattern(String sPattern, boolean bInclusive)
{
remove.addPointcutPattern(sPattern, bInclusive);
}
});
upgrade.addStep(remove);
}
else if (sElement.equals("CreateColumn"))
{
CreateColumnStep create = new CreateColumnStep();
create.setTableName(XMLMetadataHelper.getNameAttr(stepElement, "table", XMLMetadataHelper.NAME_DOT));
ColumnOutline outline = new ColumnOutline();
loadColumnOutline(stepElement, outline, true);
create.setOutline(outline);
loadSQLScripts(stepElement, create.getScriptHolder());
upgrade.addStep(create);
}
else if (sElement.equals("AlterColumn"))
{
AlterColumnStep alter = new AlterColumnStep();
alter.setTableName(XMLMetadataHelper.getNameAttr(stepElement, "table", XMLMetadataHelper.NAME_DOT));
ColumnOutline outline = new ColumnOutline();
loadColumnOutline(stepElement, outline, false);
alter.setOutline(outline);
upgrade.addStep(alter);