public String getSqlOutputString(ModelResource modelResource) throws ModelWorkspaceException { List transformations = modelResource.getModelTransformations().getTransformations(); int nTransforms = transformations.size(); int initBufferSize = nTransforms * 200; StringBuffer sb = new StringBuffer(initBufferSize); String relativeTablePath = null; boolean hasMissingSelects = false; boolean hasMissingInserts = false; boolean hasMissingUpdates = false; boolean hasMissingDeletes = false; for (Iterator iter = transformations.iterator(); iter.hasNext(); ) { Object obj = iter.next(); String rowString = null; if (obj instanceof SqlTransformationMappingRoot) { EObject table = ((SqlTransformationMappingRoot) obj).getTarget(); relativeTablePath = ModelerCore.getModelEditor().getModelRelativePath(table).toString(); String userString = TransformationHelper.getSelectSqlString(obj); if (userString != null && relativeTablePath != null) { rowString = createRowForFile(QueryValidator.SELECT_TRNS, relativeTablePath, userString); if (rowString != null && rowString.length() > 0) { sb.append(rowString); } } else { hasMissingSelects = true; } // Now check if updates allowed boolean tableSupportsUpdates = TransformationHelper.tableSupportsUpdate(table); if (tableSupportsUpdates) { if (TransformationHelper.supportsInsert((EObject) obj, null)) { userString = TransformationHelper.getInsertSqlString(obj); if (userString != null && relativeTablePath != null) { rowString = createRowForFile(QueryValidator.INSERT_TRNS, relativeTablePath, userString); if (rowString != null && rowString.length() > 0) { sb.append(rowString); } } else { hasMissingInserts = true; } } if (TransformationHelper.supportsUpdate((EObject) obj, null)) { userString = TransformationHelper.getUpdateSqlString(obj); if (userString != null && relativeTablePath != null) { rowString = createRowForFile(QueryValidator.UPDATE_TRNS, relativeTablePath, userString); if (rowString != null && rowString.length() > 0) { sb.append(rowString); } } else { hasMissingUpdates = true; } } if (TransformationHelper.supportsDelete((EObject) obj, null)) { userString = TransformationHelper.getDeleteSqlString(obj); if (userString != null && relativeTablePath != null) { rowString = createRowForFile(QueryValidator.DELETE_TRNS, relativeTablePath, userString); if (rowString != null && rowString.length() > 0) { sb.append(rowString); } } else { hasMissingDeletes = true; } } } } } // If operations are missing, specify in the error message if (hasMissingSelects || hasMissingInserts || hasMissingUpdates || hasMissingDeletes) { int count = 0; StringBuffer msgBuff = new StringBuffer( UiConstants.Util.getString( "ExportTransformationSqlToTextAction.exportQueryProblem", modelResource.getItemName())); // $NON-NLS-1$ msgBuff.append(SPACE + LEFT_BRACKET); if (hasMissingSelects) { msgBuff.append(ISQLConstants.SQL_TYPE_SELECT_STRING); count++; } if (hasMissingInserts) { if (count > 0) msgBuff.append(SPACE + DELIMETER + SPACE); msgBuff.append(ISQLConstants.SQL_TYPE_INSERT_STRING); count++; } if (hasMissingUpdates) { if (count > 0) msgBuff.append(SPACE + DELIMETER + SPACE); msgBuff.append(ISQLConstants.SQL_TYPE_UPDATE_STRING); count++; } if (hasMissingDeletes) { if (count > 0) msgBuff.append(SPACE + DELIMETER + SPACE); msgBuff.append(ISQLConstants.SQL_TYPE_DELETE_STRING); count++; } msgBuff.append(RIGHT_BRACKET); UiConstants.Util.log(IStatus.ERROR, msgBuff.toString()); } return sb.toString(); }