use of org.talend.core.model.metadata.IMetadataConnection in project tdi-studio-se by Talend.
the class MetadataColumnComparator method saveEMFMetadataColumn.
@SuppressWarnings("unchecked")
private static void saveEMFMetadataColumn(String id, List<MetadataColumn> columnNodes) {
DatabaseConnectionItem item = getEMFItem(id);
final DatabaseConnection connection = (DatabaseConnection) item.getConnection();
IMetadataConnection iMetadataConnection = ConvertionHelper.convert(connection);
Set<MetadataTable> tableset = ConnectionHelper.getTables(connection);
List<MetadataTable> tables = new ArrayList<MetadataTable>();
tables.addAll(tableset);
List<MetadataColumn> emfCols = new ArrayList<MetadataColumn>();
List<MetadataColumn> dbCols = new ArrayList<MetadataColumn>();
for (MetadataColumn col : columnNodes) {
for (MetadataTable table : tables) {
if (table.getLabel().equals(col.getTable().getLabel())) {
List<TdColumn> returnCols = ExtractMetaDataFromDataBase.returnMetadataColumnsFormTable(iMetadataConnection, table.getSourceName());
for (MetadataColumn emfcolumn : table.getColumns()) {
for (MetadataColumn column : returnCols) {
if (emfcolumn.getLabel().equals(col.getLabel()) && column.getLabel().equals(col.getOriginalField())) {
emfCols.add(emfcolumn);
dbCols.add(column);
}
}
}
}
}
}
saveOneMetadataColumn(emfCols, columnNodes, dbCols);
saveMetaData(item);
}
use of org.talend.core.model.metadata.IMetadataConnection in project tdi-studio-se by Talend.
the class MetadataColumnComparator method getRepositoryNodeFromDB.
/**
* method "getRepositoryNodeFromDB".
*
* @param oldNode
* @return
*/
@SuppressWarnings("unchecked")
public RepositoryNode getRepositoryNodeFromDB(RepositoryNode oldNode, String selectedContext) {
DatabaseConnectionItem item = getItem(getRoot(oldNode));
DatabaseConnection connection = (DatabaseConnection) item.getConnection();
IMetadataConnection iMetadataConnection = ConvertionHelper.convert(connection, false, selectedContext);
try {
modifyOldRepositoryNode(connection, iMetadataConnection, oldNode);
} catch (Exception e) {
ExceptionHandler.process(e);
}
return oldNode;
}
use of org.talend.core.model.metadata.IMetadataConnection in project tdi-studio-se by Talend.
the class ColumnListController method updateColumnsOnElement.
private static void updateColumnsOnElement(IElement element, List<ColumnNameChanged> columnsChanged, boolean synWidthWithMetadataColumn, String[] prevColumnNameList, String[] curColumnNameList, String[] curColumnValueList, List<String> refColumnListNamesTmpWithSourceName, List<String> refColumnListValuesTmp, String[] refColumnListNames, String[] refColumnListValues, boolean isSCDComponent, boolean isEdifactComponent, Map<String, Boolean> customColMap) {
List<String> columnList;
String[] columnNameList;
String edifactId = null;
if (isEdifactComponent) {
for (IElementParameter par : element.getElementParametersWithChildrens()) {
if (par.getName().equals("REPOSITORY_PROPERTY_TYPE")) {
edifactId = par.getValue().toString();
break;
}
}
}
for (int i = 0; i < element.getElementParameters().size(); i++) {
IElementParameter param = element.getElementParameters().get(i);
columnList = getColumnList(element, param.getContext(), null);
columnNameList = columnList.toArray(new String[0]);
if (param.getFieldType() == EParameterFieldType.COLUMN_LIST && !isSCDComponent) {
curColumnNameList = columnNameList;
curColumnValueList = columnNameList;
}
if (param.getFieldType() == EParameterFieldType.PREV_COLUMN_LIST) {
curColumnNameList = prevColumnNameList;
curColumnValueList = prevColumnNameList;
}
if (param.getFieldType() == EParameterFieldType.LOOKUP_COLUMN_LIST) {
curColumnNameList = refColumnListNames;
curColumnValueList = refColumnListValues;
}
if ((param.getFieldType() == EParameterFieldType.COLUMN_LIST && !isSCDComponent) || param.getFieldType() == EParameterFieldType.PREV_COLUMN_LIST || param.getFieldType() == EParameterFieldType.LOOKUP_COLUMN_LIST) {
param.setListItemsDisplayName(curColumnNameList);
param.setListItemsValue(curColumnValueList);
// for bug 10945
// 10155
boolean currentColumnStillExist = ArrayUtils.contains(curColumnValueList, param.getValue());
if (!currentColumnStillExist) {
for (int j = 0; j < refColumnListNamesTmpWithSourceName.size(); j++) {
if (param.getValue().equals(refColumnListNamesTmpWithSourceName.get(j))) {
param.setValue(refColumnListValuesTmp.get(j));
break;
}
}
currentColumnStillExist = ArrayUtils.contains(curColumnValueList, param.getValue());
}
if (curColumnNameList.length > 0 && !currentColumnStillExist) {
param.setValue(curColumnValueList[0]);
} else if (!currentColumnStillExist) {
//$NON-NLS-1$
param.setValue("");
}
syncNodePropertiesColumns(param, columnsChanged, curColumnNameList);
}
if (param.getFieldType() == EParameterFieldType.TABLE) {
Object[] itemsValue = param.getListItemsValue();
for (Object element2 : itemsValue) {
if (element2 instanceof IElementParameter) {
IElementParameter tmpParam = (IElementParameter) element2;
columnList = getColumnList(element, tmpParam.getContext(), customColMap);
String[] tableColumnNameList = columnList.toArray(new String[0]);
if (tmpParam.getFieldType() == EParameterFieldType.COLUMN_LIST) {
curColumnNameList = tableColumnNameList;
curColumnValueList = tableColumnNameList;
}
if (tmpParam.getFieldType() == EParameterFieldType.PREV_COLUMN_LIST && element instanceof INode) {
curColumnNameList = prevColumnNameList;
curColumnValueList = prevColumnNameList;
}
// needed for traces with breakpoint, feature:
if (tmpParam.getFieldType() == EParameterFieldType.PREV_COLUMN_LIST && element instanceof IConnection) {
curColumnNameList = tableColumnNameList;
curColumnValueList = tableColumnNameList;
}
if (tmpParam.getFieldType() == EParameterFieldType.LOOKUP_COLUMN_LIST) {
curColumnNameList = refColumnListNames;
curColumnValueList = refColumnListValues;
}
if (tmpParam.getFieldType() == EParameterFieldType.COLUMN_LIST || tmpParam.getFieldType() == EParameterFieldType.PREV_COLUMN_LIST || tmpParam.getFieldType() == EParameterFieldType.LOOKUP_COLUMN_LIST) {
List<String[]> filterColumns = filterColumns(tmpParam, curColumnNameList, curColumnValueList, customColMap);
curColumnNameList = filterColumns.get(0);
curColumnValueList = filterColumns.get(1);
tmpParam.setListItemsDisplayCodeName(curColumnNameList);
tmpParam.setListItemsDisplayName(curColumnNameList);
tmpParam.setListItemsValue(curColumnValueList);
if (curColumnValueList.length > 0) {
tmpParam.setDefaultClosedListValue(curColumnValueList[0]);
} else {
//$NON-NLS-1$
tmpParam.setDefaultClosedListValue("");
}
syncNodePropertiesTableColumns(param, columnsChanged, curColumnNameList, tmpParam);
}
}
}
}
if (param.isBasedOnSchema()) {
List<Map<String, Object>> paramValues = (List<Map<String, Object>>) param.getValue();
List<Map<String, Object>> newParamValues = new ArrayList<Map<String, Object>>();
for (int j = 0; j < columnNameList.length; j++) {
String columnName = columnNameList[j];
String[] codes = param.getListItemsDisplayCodeName();
Map<String, Object> newLine = null;
boolean found = false;
ColumnNameChanged colChanged = null;
if (columnsChanged != null) {
for (int k = 0; k < columnsChanged.size() && !found; k++) {
colChanged = columnsChanged.get(k);
if (colChanged.getNewName().equals(columnName)) {
found = true;
}
}
}
if (found) {
found = false;
for (int k = 0; k < paramValues.size() && !found; k++) {
Map<String, Object> currentLine = paramValues.get(k);
if (currentLine.get(codes[0]).equals(colChanged.getOldName())) {
currentLine.put(codes[0], colChanged.getNewName());
found = true;
}
}
}
found = false;
for (int k = 0; k < paramValues.size() && !found; k++) {
Map<String, Object> currentLine = paramValues.get(k);
if (currentLine.get(codes[0]) == null) {
currentLine.put(codes[0], columnName);
}
if (currentLine.get(codes[0]).equals(columnName)) {
found = true;
newLine = currentLine;
}
}
if (!found) {
newLine = TableController.createNewLine(param);
newLine.put(codes[0], columnName);
reUsedColumnFunctionArrayCheck(newLine, element, codes);
if (!StringUtils.isEmpty(edifactId)) {
org.talend.core.model.metadata.builder.connection.Connection connection = MetadataToolHelper.getConnectionFromRepository(edifactId);
if (connection != null && connection instanceof EDIFACTConnection) {
List<org.talend.core.model.metadata.builder.connection.MetadataTable> tables = ConnectionHelper.getTablesWithOrders(connection);
for (MetadataColumn col : tables.get(0).getColumns()) {
if (col.getLabel().equals(columnName)) {
if (col instanceof EDIFACTColumn) {
EDIFACTColumn edicolumn = (EDIFACTColumn) col;
String ediXpath = edicolumn.getEDIXpath();
newLine.put(codes[0], columnName);
newLine.put(codes[1], ediXpath);
break;
}
}
}
}
}
if (element instanceof Node) {
Node node = (Node) element;
String familyName = node.getComponent().getOriginalFamilyName();
/** need add second parameter for hbase input/output component **/
if (familyName != null && familyName.equals("Databases/HBase")) {
for (IElementParameter par : node.getElementParametersWithChildrens()) {
if (par.getName().equals("REPOSITORY_PROPERTY_TYPE")) {
String hbaseConnectionId = par.getValue().toString();
String columnFamily = null;
org.talend.core.model.metadata.builder.connection.Connection connection = MetadataToolHelper.getConnectionFromRepository(hbaseConnectionId);
if (connection != null && connection instanceof DatabaseConnection) {
/* use imetadataconnection because maybe it's in context model */
IMetadataConnection metadataConnection = ConvertionHelper.convert(connection);
List<org.talend.core.model.metadata.builder.connection.MetadataTable> tables = ConnectionHelper.getTablesWithOrders(connection);
boolean find = false;
for (org.talend.core.model.metadata.builder.connection.MetadataTable table : tables) {
for (MetadataColumn column : table.getColumns()) {
if (column.getLabel() != null && column.getLabel().equals(columnName)) {
for (TaggedValue tv : column.getTaggedValue()) {
String tag = tv.getTag();
if (tag != null && tag.equals("COLUMN FAMILY")) {
String value = tv.getValue();
if (value != null) {
columnFamily = value;
break;
}
}
}
}
if (find) {
break;
}
}
if (find) {
break;
}
}
}
if (columnFamily != null) {
newLine.put(codes[1], TalendTextUtils.addQuotes(columnFamily));
break;
}
}
}
}
}
/* should put other attribute for edi mapping */
}
if (synWidthWithMetadataColumn) {
setColumnSize(newLine, element, codes, param);
}
newParamValues.add(j, newLine);
}
paramValues.clear();
paramValues.addAll(newParamValues);
} else if (param.isColumnsBasedOnSchema()) {
List<Map<String, Object>> paramValues = (List<Map<String, Object>>) param.getValue();
List<Map<String, Object>> newParamValues = new ArrayList<Map<String, Object>>();
String[] listRepositoryItem = new String[columnNameList.length];
String[] listItemsDisplayValue = new String[columnNameList.length];
String[] listItemsDisplayCodeValue = new String[columnNameList.length];
Object[] listItemsValue = new Object[columnNameList.length];
String[] listItemsShowIf = new String[columnNameList.length];
String[] listItemsNotShowIf = new String[columnNameList.length];
ElementParameter newParam;
for (int j = 0; j < columnNameList.length; j++) {
String columnName = columnNameList[j];
listItemsDisplayCodeValue[j] = columnName;
listItemsDisplayValue[j] = columnName;
//$NON-NLS-1$
listRepositoryItem[j] = "";
listItemsShowIf[j] = null;
listItemsNotShowIf[j] = null;
newParam = new ElementParameter(element);
newParam.setName(columnName);
//$NON-NLS-1$
newParam.setDisplayName("");
newParam.setFieldType(EParameterFieldType.TEXT);
//$NON-NLS-1$
newParam.setValue("");
listItemsValue[j] = newParam;
boolean found = false;
ColumnNameChanged colChanged = null;
if (columnsChanged != null) {
for (int k = 0; k < columnsChanged.size() && !found; k++) {
colChanged = columnsChanged.get(k);
if (colChanged.getNewName().equals(columnName)) {
found = true;
}
}
}
for (int k = 0; k < paramValues.size(); k++) {
Map<String, Object> line = paramValues.get(k);
Map<String, Object> newline = new HashMap<String, Object>();
if (found) {
Object object = line.get(colChanged.getOldName());
if (object != null) {
newline.put(colChanged.getNewName(), object);
line.remove(colChanged.getOldName());
line.putAll(newline);
}
}
}
}
param.setListItemsDisplayName(listItemsDisplayValue);
param.setListItemsDisplayCodeName(listItemsDisplayCodeValue);
param.setListItemsValue(listItemsValue);
param.setListRepositoryItems(listRepositoryItem);
param.setListItemsShowIf(listItemsShowIf);
param.setListItemsNotShowIf(listItemsNotShowIf);
}
}
}
use of org.talend.core.model.metadata.IMetadataConnection in project tdi-studio-se by Talend.
the class AbstractElementPropertySectionController method checkExistConnections.
protected boolean checkExistConnections(IMetadataConnection metadataConnection) {
java.sql.Connection connection = null;
try {
List list = new ArrayList();
list = ExtractMetaDataUtils.getInstance().connect(metadataConnection.getDbType(), metadataConnection.getUrl(), metadataConnection.getUsername(), metadataConnection.getPassword(), metadataConnection.getDriverClass(), metadataConnection.getDriverJarPath(), metadataConnection.getDbVersionString(), metadataConnection.getAdditionalParams());
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) instanceof Connection) {
connection = (java.sql.Connection) list.get(i);
}
}
}
} catch (SQLException e) {
return false;
} catch (Exception e) {
return false;
} finally {
try {
if (connection != null && !connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
//
}
}
return true;
}
use of org.talend.core.model.metadata.IMetadataConnection in project tdi-studio-se by Talend.
the class GuessSchemaController method runShadowProcessForPerl.
private void runShadowProcessForPerl() {
final ProgressMonitorDialog pmd = new ProgressMonitorDialog(this.composite.getShell());
try {
pmd.run(true, true, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
if (columns != null) {
columns.clear();
}
//$NON-NLS-1$
monitor.beginTask(Messages.getString("GuessSchemaController.waitOpenDatabase"), IProgressMonitor.UNKNOWN);
if (connParameters == null) {
initConnectionParameters();
}
ISQLBuilderService service = (ISQLBuilderService) GlobalServiceRegister.getDefault().getService(ISQLBuilderService.class);
DatabaseConnection connt = service.createConnection(connParameters);
IMetadataConnection iMetadataConnection = null;
boolean isStatus = false;
ExtractMetaDataUtils extractMeta = ExtractMetaDataUtils.getInstance();
if (connt != null) {
iMetadataConnection = ConvertionHelper.convert(connt);
isStatus = checkConnection(iMetadataConnection);
}
if (!monitor.isCanceled()) {
try {
if (isStatus) {
extractMeta.getConnection(iMetadataConnection.getDbType(), iMetadataConnection.getUrl(), iMetadataConnection.getUsername(), iMetadataConnection.getPassword(), iMetadataConnection.getDatabase(), iMetadataConnection.getSchema(), iMetadataConnection.getDriverClass(), iMetadataConnection.getDriverJarPath(), iMetadataConnection.getDbVersionString(), iMetadataConnection.getAdditionalParams());
if (extractMeta.getConn() != null) {
Statement smst = extractMeta.getConn().createStatement();
extractMeta.setQueryStatementTimeout(smst);
ResultSet rs = smst.executeQuery(memoSQL);
ResultSetMetaData rsmd = rs.getMetaData();
int numbOfColumn = rsmd.getColumnCount();
int count = 0;
List<String[]> cvsArrays = new ArrayList<String[]>();
while (rs.next() && count < 50) {
String[] dataOneRow = new String[numbOfColumn];
for (int i = 1; i <= numbOfColumn; i++) {
String tempStr = rs.getString(i);
dataOneRow[i - 1] = tempStr;
}
cvsArrays.add(dataOneRow);
count++;
}
refreshMetaDataTable(rsmd, cvsArrays);
extractMeta.closeConnection();
}
} else {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
//$NON-NLS-1$
String pid = "org.talend.sqlbuilder";
//$NON-NLS-1$
String mainMsg = "Database connection is failed. ";
ErrorDialogWithDetailAreaAndContinueButton dialog = new ErrorDialogWithDetailAreaAndContinueButton(composite.getShell(), pid, mainMsg, connParameters.getConnectionComment());
if (dialog.getCodeOfButton() == Window.OK) {
openParamemerDialog(composite.getShell(), part.getProcess().getContextManager());
}
}
});
}
} catch (Exception e) {
extractMeta.closeConnection();
ExceptionHandler.process(e);
final String strExcepton = "Connect to DB error ,or some errors in SQL query string, or 'Guess Schema' not compatible with current SQL query string." + System.getProperty("line.separator");
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageDialog.openWarning(composite.getShell(), Messages.getString("GuessSchemaController.connError"), //$NON-NLS-1$
strExcepton);
}
});
}
}
}
});
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
Aggregations