IDEMPIERE-1347 2Pack: ColumnElementHandler should ensure column exists in database when IsSyncDatabase=Y.

This commit is contained in:
Heng Sin Low 2013-09-10 14:44:18 +08:00
parent b2061ea8ef
commit 53731cbfff
1 changed files with 26 additions and 16 deletions

View File

@ -51,7 +51,6 @@ public class ColumnElementHandler extends AbstractElementHandler {
public void startElement(PIPOContext ctx, Element element)
throws SAXException {
int success = 0;
String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentDefer(element, I_AD_Table.Table_Name)) {
@ -78,8 +77,13 @@ public class ColumnElementHandler extends AbstractElementHandler {
return;
}
if (!mColumn.is_new() && !mColumn.is_Changed())
if (!mColumn.is_new() && !mColumn.is_Changed()) {
boolean syncDatabase = "Y".equalsIgnoreCase(getStringValue(element, "IsSyncDatabase"));
if (syncDatabase) {
syncColumn(ctx, mColumn, "Sync", false);
}
return;
}
X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, X_AD_Column.Table_Name, X_AD_Column.Table_ID);
String action = null;
@ -156,26 +160,32 @@ public class ColumnElementHandler extends AbstractElementHandler {
}
if (recreateColumn || syncDatabase) {
MTable table = new MTable(ctx.ctx, mColumn.getAD_Table_ID(), getTrxName(ctx));
if (!table.isView() && !mColumn.isVirtualColumn()) {
success = createColumn(ctx, table, mColumn, recreateColumn);
X_AD_Package_Imp_Detail dbDetail = createImportDetail(ctx, "dbColumn", X_AD_Column.Table_Name, X_AD_Column.Table_ID);
if (success == 1) {
logImportDetail(ctx, dbDetail, 1, mColumn.getColumnName(),
mColumn.get_ID(), action);
} else {
logImportDetail(ctx, dbDetail, 0, mColumn.getColumnName(),
mColumn.get_ID(), action);
throw new DatabaseAccessException("Failed to create column or related constraint for " + mColumn.getColumnName());
}
}
syncColumn(ctx, mColumn, action, recreateColumn);
}
} else {
element.skip = true;
}
}
private void syncColumn(PIPOContext ctx, MColumn mColumn, String action,
boolean recreateColumn) throws SAXException {
int success = 0;
MTable table = new MTable(ctx.ctx, mColumn.getAD_Table_ID(), getTrxName(ctx));
if (!table.isView() && !mColumn.isVirtualColumn()) {
success = createColumn(ctx, table, mColumn, recreateColumn);
X_AD_Package_Imp_Detail dbDetail = createImportDetail(ctx, "dbColumn", X_AD_Column.Table_Name, X_AD_Column.Table_ID);
if (success == 1) {
logImportDetail(ctx, dbDetail, 1, mColumn.getColumnName(),
mColumn.get_ID(), action);
} else {
logImportDetail(ctx, dbDetail, 0, mColumn.getColumnName(),
mColumn.get_ID(), action);
throw new DatabaseAccessException("Failed to create column or related constraint for " + mColumn.getColumnName());
}
}
}
/**
* Check if column exists in database and modify. If not create column.
*