// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.core.ui.views.properties;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.BidiMap;
import org.apache.commons.collections.bidimap.DualHashBidiMap;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.commands.CommandStackEvent;
import org.eclipse.gef.commands.CommandStackEventListener;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.utils.threading.ExecutionLimiter;
import org.talend.commons.utils.time.TimeMeasure;
import org.talend.core.model.metadata.IMetadataTable;
import org.talend.core.model.metadata.builder.ConvertionHelper;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
import org.talend.core.model.metadata.builder.connection.DelimitedFileConnection;
import org.talend.core.model.metadata.builder.connection.FileExcelConnection;
import org.talend.core.model.metadata.builder.connection.GenericSchemaConnection;
import org.talend.core.model.metadata.builder.connection.LDAPSchemaConnection;
import org.talend.core.model.metadata.builder.connection.PositionalFileConnection;
import org.talend.core.model.metadata.builder.connection.QueriesConnection;
import org.talend.core.model.metadata.builder.connection.Query;
import org.talend.core.model.metadata.builder.connection.RegexpFileConnection;
import org.talend.core.model.metadata.builder.connection.SalesforceSchemaConnection;
import org.talend.core.model.metadata.builder.connection.WSDLSchemaConnection;
import org.talend.core.model.metadata.builder.connection.XmlFileConnection;
import org.talend.core.model.metadata.designerproperties.RepositoryToComponentProperty;
import org.talend.core.model.param.ERepositoryCategoryType;
import org.talend.core.model.process.EComponentCategory;
import org.talend.core.model.process.EConnectionType;
import org.talend.core.model.process.EParameterFieldType;
import org.talend.core.model.process.Element;
import org.talend.core.model.process.IElementParameter;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.FolderItem;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.utils.RepositoryManagerHelper;
import org.talend.core.properties.tab.IDynamicProperty;
import org.talend.cwm.helper.ConnectionHelper;
import org.talend.designer.core.DesignerPlugin;
import org.talend.designer.core.model.components.EParameterName;
import org.talend.designer.core.ui.AbstractMultiPageTalendEditor;
import org.talend.designer.core.ui.editor.cmd.ChangeMetadataCommand;
import org.talend.designer.core.ui.editor.nodes.Node;
import org.talend.designer.core.ui.editor.process.Process;
import org.talend.designer.core.ui.editor.properties.DynamicTabbedPropertySection;
import org.talend.designer.core.ui.editor.properties.controllers.AbstractElementPropertySectionController;
import org.talend.designer.core.ui.editor.properties.controllers.GroupController;
import org.talend.repository.model.ERepositoryStatus;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.RepositoryNode;
import org.talend.repository.ui.views.IRepositoryView;
import org.talend.repository.viewer.ui.provider.RepositoryContentProvider;
/**
* yzhang class global comment. Detailled comment <br/>
*
* $Id: DynamicComposite.java 6579 2007-10-26 10:33:01Z ftang $
*
* @deprecated use MultipleThreadDynamicComposite instead.
*/
public class DynamicComposite extends ScrolledComposite implements IDynamicProperty {
protected AbstractMultiPageTalendEditor part;
protected Element elem;
protected Composite parent;
protected BidiMap hashCurControls;
protected String currentComponent;
protected EComponentCategory section;
protected int curRowSize;
protected DynamicPropertyGenerator generator;
private final Map<String, IMetadataTable> repositoryTableMap;
private final Map<String, ConnectionItem> repositoryConnectionItemMap;
private final Map<String, Query> repositoryQueryStoreMap;
private Map<String, String> tableIdAndDbTypeMap;
private Map<String, String> tableIdAndDbSchemaMap;
private boolean forceRedraw;
private int lastCompositeSize = 0;
private Process process;
private boolean propertyResized;
protected Composite composite;
private boolean isCompactView;
WidgetFactory widgetFactory = new WidgetFactory();
// private final String extraPropertyTypeName;
//
// private final String extraRepositoryPropertyTypeName;
private final String updataComponentParamName;
// /**
// * ftang Comment method "updateProcessList".
// */
// private void updateProcessList_renamed() {
// List<String> processNameList = new ArrayList<String>();
// List<String> processValueList = new ArrayList<String>();
// processMap = new HashMap<String, IRepositoryObject>();
//
// IProxyRepositoryFactory factory = DesignerPlugin.getDefault().getProxyRepositoryFactory();
// try {
// RootContainer<String, IRepositoryObject> processContainer = factory.getProcess();
// ContentList<String, IRepositoryObject> processAbsoluteMembers = processContainer.getAbsoluteMembers();
//
// String currentProcess = process.getLabel();
// for (Content<String, IRepositoryObject> object : processAbsoluteMembers.values()) {
// IRepositoryObject process = object.getContent();
// if (factory.getStatus(process) != ERepositoryStatus.DELETED && !currentProcess.equals(process.getLabel())) {
// String path = object.getParent().getPath().toString();
// String name;
// if (path.equals("")) { //$NON-NLS-1$
// name = IPath.SEPARATOR + process.getLabel();
// } else {
// name = IPath.SEPARATOR + path + IPath.SEPARATOR + process.getLabel();
// }
// processNameList.add(name);
// processMap.put(name, process);
// }
// }
// } catch (PersistenceException e) {
// e.printStackTrace();
// }
//
// List<String> tempFolderList = new ArrayList<String>();
// List<String> tempProcessNameList = new ArrayList<String>();
// tempProcessNameList.addAll(processNameList);
//
// for (String string : tempProcessNameList) {
// // Put jobs which in a folder into a new list.s
// if (string.lastIndexOf("/") != 0) {
// tempFolderList.add(string);
// processNameList.remove(string);
// }
// }
//
// sortList(processNameList);
// sortList(tempFolderList);
//
// // Always put the jobs which in a folder on the top of the job list
// tempFolderList.addAll(processNameList);
//
// processNameList = tempFolderList;
//
// for (String name : processNameList) {
// IRepositoryObject process = processMap.get(name);
// processValueList.add(process.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$
// }
// String[] processTableNameList = processNameList.toArray(new String[0]);
// String[] processTableValueList = processValueList.toArray(new String[0]);
//
// for (int i = 0; i < elem.getElementParameters().size(); i++) {
// IElementParameter param = elem.getElementParameters().get(i);
// if (param.getName().equals(EParameterName.PROCESS_TYPE_PROCESS.getName())) {
// param.setListItemsDisplayName(processTableNameList);
// param.setListItemsValue(processTableValueList);
// if (elem instanceof Node) {
// ((Node) elem).checkAndRefreshNode();
// }
// }
// }
// }
/**
* Sort the element order of the inputed list.
*
* @param compareList
*/
private void sortList(List<String> compareList) {
Collections.sort(compareList, new Comparator<String>() {
public int compare(String str1, String str2) {
// For example: avoid job name "a_b_c" before "a_b" in the job
// list.
String newStr1 = str1.replaceAll("_", " "); //$NON-NLS-1$ //$NON-NLS-2$
String newStr2 = str2.replaceAll("_", " "); //$NON-NLS-1$ //$NON-NLS-2$
return newStr1.compareToIgnoreCase(newStr2);
}
});
}
// /**
// * ftang Comment method "updateContextList".
// */
// public void updateContextList(IElementParameter jobParam) {
// if (jobParam == null || jobParam.getField() != EParameterFieldType.PROCESS_TYPE) {
// return;
// }
// // for context type
// List<String> contextNameList = new ArrayList<String>();
// List<String> contextValueList = new ArrayList<String>();
//
// IElementParameter jobNameParam =
// jobParam.getChildParameters().get(EParameterName.PROCESS_TYPE_PROCESS.getName());
//
// Item item = jobNameParam.getLinkedRepositoryItem();
// final String jobValue = (String) jobNameParam.getValue();
// if (jobValue != null) {
// if (item == null || (item != null && !item.getProperty().getId().equals(jobValue))) {
// item = ProcessorUtilities.getProcessItemById(jobValue);
// }
// } else {
// item = null;
// }
// if (item != null) {
// if (item instanceof ProcessItem) {
// for (Object o : ((ProcessItem) item).getProcess().getContext()) {
// if (o instanceof ContextType) {
// ContextType context = (ContextType) o;
// contextNameList.add(context.getName());
// contextValueList.add(context.getName());
// }
// }
// }
// jobNameParam.setLabelFromRepository(item.getProperty().getLabel());
// }
// jobNameParam.setLinkedRepositoryItem(item);
// // set default context
// String defalutValue = null;
// if (item != null && item instanceof ProcessItem) {
// defalutValue = ((ProcessItem) item).getProcess().getDefaultContext();
// }
// setProcessTypeRelatedValues(jobParam, contextNameList, contextValueList,
// EParameterName.PROCESS_TYPE_CONTEXT.getName(),
// defalutValue);
//
// // for version type
// List<String> versionNameList = new ArrayList<String>();
// List<String> versionValueList = new ArrayList<String>();
//
// if (item != null) { // existed item
// List<IRepositoryObject> allVersion = ProcessorUtilities.getAllRepositoryObjectById(item.getProperty().getId());
// for (IRepositoryObject obj : allVersion) {
// String version = obj.getVersion();
// versionNameList.add(version);
// versionValueList.add(version);
// }
// }
// setProcessTypeRelatedValues(jobParam, versionNameList, versionValueList,
// EParameterName.PROCESS_TYPE_VERSION.getName(),
// null);
//
// }
//
// /**
// *
// * ggu Comment method "setProcessTypeRelatedValues".
// *
// *
// */
// private void setProcessTypeRelatedValues(IElementParameter parentParam, List<String> nameList, List<String>
// valueList,
// final String childName, final String defaultValue) {
// if (parentParam == null || childName == null) {
// return;
// }
// final String fullChildName = parentParam.getName() + ":" + childName;
// IElementParameter childParam = parentParam.getChildParameters().get(childName);
// if (nameList == null) {
// childParam.setListItemsDisplayName(new String[0]);
// } else {
// childParam.setListItemsDisplayName(nameList.toArray(new String[0]));
// }
// if (valueList == null) {
// childParam.setListItemsValue(new String[0]);
// } else {
// childParam.setListItemsValue(valueList.toArray(new String[0]));
// }
// // set default value
// if (defaultValue != null) {
// childParam.setValue(defaultValue);
// }
// if (elem != null) {
// if (valueList != null && !valueList.contains(childParam.getValue())) {
// if (nameList != null && nameList.size() > 0) {
// elem.setPropertyValue(fullChildName, valueList.get(valueList.size() - 1));
// }
// } else {
// // force to store the value again to activate the code
// // generation in Node.setPropertyValue
// elem.setPropertyValue(fullChildName, childParam.getValue());
// }
// }
// }
public String getRepositoryAliasName(ConnectionItem connectionItem) {
ERepositoryObjectType repositoryObjectType = ERepositoryObjectType.getItemType(connectionItem);
String aliasName = repositoryObjectType.getAlias();
Connection connection = connectionItem.getConnection();
if (connection instanceof DatabaseConnection) {
String currentDbType = (String) RepositoryToComponentProperty.getValue(connection, "TYPE", null); //$NON-NLS-1$
aliasName += " (" + currentDbType + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
return aliasName;
}
private final Map<String, List<String>> tablesMap = new HashMap<String, List<String>>();
private final Map<String, List<String>> queriesMap = new HashMap<String, List<String>>();
/**
* ftang Comment method "updateRepositoryList".
*/
@SuppressWarnings("unchecked")//$NON-NLS-1$
private void updateRepositoryList() {
IProxyRepositoryFactory factory = DesignerPlugin.getDefault().getProxyRepositoryFactory();
tableIdAndDbTypeMap = new HashMap<String, String>();
tableIdAndDbSchemaMap = new HashMap<String, String>();
List<ConnectionItem> metadataConnectionsItem = null;
String[] repositoryTableNameList = new String[] {};
String[] repositoryTableValueList = new String[] {};
String[] repositoryConnectionNameList = new String[] {};
String[] repositoryConnectionValueList = new String[] {};
String[] repositoryQueryNameList = new String[] {};
String[] repositoryQueryValueList = new String[] {};
try {
metadataConnectionsItem = getConnectionItems();
} catch (PersistenceException e) {
throw new RuntimeException(e);
}
if (metadataConnectionsItem != null) {
repositoryTableMap.clear();
repositoryQueryStoreMap.clear();
repositoryConnectionItemMap.clear();
tablesMap.clear();
queriesMap.clear();
List<String> tableNamesList = new ArrayList<String>();
List<String> tableValuesList = new ArrayList<String>();
List<String> queryStoreNameList = new ArrayList<String>();
List<String> queryStoreValuesList = new ArrayList<String>();
for (ConnectionItem connectionItem : metadataConnectionsItem) {
Connection connection = connectionItem.getConnection();
if (!connection.isReadOnly()) {
repositoryConnectionItemMap.put(connectionItem.getProperty().getId() + "", connectionItem); //$NON-NLS-1$
for (Object tableObj : ConnectionHelper.getTables(connection)) {
org.talend.core.model.metadata.builder.connection.MetadataTable table;
table = (org.talend.core.model.metadata.builder.connection.MetadataTable) tableObj;
if (factory.getStatus(connectionItem) != ERepositoryStatus.DELETED) {
if (!factory.isDeleted(table)) {
String name = getRepositoryAliasName(connectionItem) + ":" //$NON-NLS-1$
+ connectionItem.getProperty().getLabel() + " - " + table.getLabel(); //$NON-NLS-1$
String value = connectionItem.getProperty().getId() + " - " + table.getLabel(); //$NON-NLS-1$
IMetadataTable newTable = ConvertionHelper.convert(table);
repositoryTableMap.put(value, newTable);
if (connection instanceof DatabaseConnection) {
String dbType = ((DatabaseConnection) connection).getDatabaseType();
String schema = ((DatabaseConnection) connection).getUiSchema();
tableIdAndDbTypeMap.put(newTable.getId(), dbType);
if (schema != null && !schema.equals("")) { //$NON-NLS-1$
tableIdAndDbSchemaMap.put(newTable.getId(), schema);
}
}
addOrderDisplayNames(tableValuesList, tableNamesList, value, name);
// tableNamesList.add(name);
// tableValuesList.add(value);
}
}
}
}
tablesMap.put(connectionItem.getProperty().getId(), tableValuesList);
if (connection instanceof DatabaseConnection && !connection.isReadOnly()) {
DatabaseConnection dbConnection = (DatabaseConnection) connection;
QueriesConnection queriesConnection = dbConnection.getQueries();
if (queriesConnection != null) {
List<Query> qs = queriesConnection.getQuery();
for (Query query : qs) {
String name = getRepositoryAliasName(connectionItem) + ":" //$NON-NLS-1$
+ connectionItem.getProperty().getLabel() + " - " + query.getLabel(); //$NON-NLS-1$
String value = connectionItem.getProperty().getId() + " - " + query.getLabel(); //$NON-NLS-1$
repositoryQueryStoreMap.put(value, query);
addOrderDisplayNames(queryStoreValuesList, queryStoreNameList, value, name);
// queryStoreNameList.add(name);
// queryStoreValuesList.add(value);
}
}
}
queriesMap.put(connectionItem.getProperty().getId(), queryStoreValuesList);
}
repositoryTableNameList = tableNamesList.toArray(new String[0]);
repositoryTableValueList = tableValuesList.toArray(new String[0]);
repositoryQueryNameList = queryStoreNameList.toArray(new String[0]);
repositoryQueryValueList = queryStoreValuesList.toArray(new String[0]);
}
initMaps();
for (int i = 0; i < elem.getElementParameters().size(); i++) {
IElementParameter param = elem.getElementParameters().get(i);
if (param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE)) {
IElementParameter repositoryType = param.getChildParameters()
.get(EParameterName.REPOSITORY_SCHEMA_TYPE.getName());
repositoryType.setListItemsDisplayName(repositoryTableNameList);
repositoryType.setListItemsValue(repositoryTableValueList);
if (!repositoryTableMap.keySet().contains(repositoryType.getValue())) {
IElementParameter repositoryPropertyType = elem.getElementParameterFromField(
EParameterFieldType.PROPERTY_TYPE, param.getCategory());
if (repositoryPropertyType != null) {
List<String> list2 = tablesMap.get(repositoryPropertyType.getChildParameters()
.get(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()).getValue());
boolean isNeeded = list2 != null && !list2.isEmpty();
if (repositoryTableNameList.length > 0 && repositoryConnectionValueList.length > 0 && isNeeded) {
repositoryType.setValue(getDefaultRepository(param, true, repositoryConnectionValueList[0]));
}
}
}
}
if (param.getFieldType().equals(EParameterFieldType.QUERYSTORE_TYPE)) {
IElementParameter repositoryType = param.getChildParameters().get(
EParameterName.REPOSITORY_QUERYSTORE_TYPE.getName());
repositoryType.setListItemsDisplayName(repositoryQueryNameList);
repositoryType.setListItemsValue(repositoryQueryValueList);
if (!repositoryQueryStoreMap.keySet().contains(repositoryType.getValue())) {
IElementParameter repositoryPropertyType = elem.getElementParameterFromField(
EParameterFieldType.PROPERTY_TYPE, param.getCategory());
if (repositoryPropertyType != null) {
List<String> list2 = queriesMap.get(repositoryPropertyType.getChildParameters()
.get(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()).getValue());
boolean isNeeded = list2 != null && !list2.isEmpty();
if (repositoryQueryNameList.length > 0 && repositoryConnectionValueList.length > 0 && isNeeded) {
repositoryType.setValue(getDefaultRepository(
elem.getElementParameterFromField(EParameterFieldType.SCHEMA_TYPE), false,
repositoryConnectionValueList[0]));
}
}
}
}
if (param.getFieldType().equals(EParameterFieldType.PROPERTY_TYPE)) {
IElementParameter repositoryType = param.getChildParameters().get(
EParameterName.REPOSITORY_PROPERTY_TYPE.getName());
List<String> nameList = new ArrayList<String>();
List<String> valueList = new ArrayList<String>();
updateRepositoryListExtra(repositoryType, nameList, valueList, false);
repositoryConnectionNameList = nameList.toArray(new String[0]);
repositoryConnectionValueList = valueList.toArray(new String[0]);
}
}
}
/**
* DOC qzhang Comment method "getConnectionItems".
*
* @return
* @throws PersistenceException
*/
private List<ConnectionItem> getConnectionItems() throws PersistenceException {
List<ConnectionItem> list = new ArrayList<ConnectionItem>();
IRepositoryView repositoryView = RepositoryManagerHelper.findRepositoryView();
if (repositoryView != null) {
TreeViewer viewer = (TreeViewer) repositoryView.getViewer();
IContentProvider contentProvider = viewer.getContentProvider();
if (contentProvider instanceof RepositoryContentProvider) {
RepositoryContentProvider provider = (RepositoryContentProvider) contentProvider;
RepositoryNode metadataConNode = provider.getRootRepositoryNode(ERepositoryObjectType.METADATA);
for (IRepositoryNode connectionItem : metadataConNode.getChildren()) {
if (viewer.isExpandable(connectionItem)) {
provider.getChildren(connectionItem);
}
for (IRepositoryNode node : connectionItem.getChildren()) {
addConnectionItem(viewer, provider, list, (RepositoryNode) node);
}
}
}
}
return list;
}
/**
* DOC qzhang Comment method "addConnectionItem".
*
* @param provider
* @param viewer
*
* @param list
* @param repositoryNode3
*/
private void addConnectionItem(TreeViewer viewer, RepositoryContentProvider provider, List<ConnectionItem> list,
RepositoryNode repositoryNode3) {
IRepositoryViewObject object = repositoryNode3.getObject();
if (object != null) {
Item item = object.getProperty().getItem();
if (item instanceof ConnectionItem) {
list.add((ConnectionItem) item);
} else if (item instanceof FolderItem) {
for (IRepositoryNode node : repositoryNode3.getChildren()) {
addConnectionItem(viewer, provider, list, (RepositoryNode) node);
}
}
} else {
if (viewer.isExpandable(repositoryNode3)) {
provider.getChildren(repositoryNode3);
}
for (IRepositoryNode node : repositoryNode3.getChildren()) {
addConnectionItem(viewer, provider, list, (RepositoryNode) node);
}
}
}
/**
* for job settings extra (feature 2710).
*
*/
private void updateRepositoryListExtra(IElementParameter param, List<String> repositoryConnectionNameList,
List<String> repositoryConnectionValueList, boolean extra) {
String repositoryValue = param.getParentParameter().getRepositoryValue();
if (repositoryValue != null) {
List<String> connectionNamesList = new ArrayList<String>();
List<String> connectionValuesList = new ArrayList<String>();
for (String key : repositoryConnectionItemMap.keySet()) {
ConnectionItem connectionItem = repositoryConnectionItemMap.get(key);
Connection connection = connectionItem.getConnection();
String name = getRepositoryAliasName(connectionItem) + ":" //$NON-NLS-1$
+ connectionItem.getProperty().getLabel();
if ((connection instanceof DelimitedFileConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.DELIMITED.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof PositionalFileConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.POSITIONAL.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof RegexpFileConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.REGEX.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof XmlFileConnection) && (repositoryValue.equals(ERepositoryCategoryType.XML.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof FileExcelConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.EXCEL.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof GenericSchemaConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.GENERIC.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof LDAPSchemaConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.LDAP.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof SalesforceSchemaConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.SALESFORCE.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof WSDLSchemaConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.WSDL.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
if ((connection instanceof DatabaseConnection)
&& (repositoryValue.startsWith(ERepositoryCategoryType.DATABASE.getName()))) {
String currentDbType = (String) RepositoryToComponentProperty.getValue(connection, "TYPE", null); //$NON-NLS-1$
if (repositoryValue.contains(":")) { // database //$NON-NLS-1$
// is
// specified
// //$NON-NLS-1$
String neededDbType = repositoryValue.substring(repositoryValue.indexOf(":") + 1); //$NON-NLS-1$
if (neededDbType.equals(currentDbType)) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
} else {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
}
}
repositoryConnectionNameList.addAll(connectionNamesList);
repositoryConnectionValueList.addAll(connectionValuesList);
} else {
List<String> connectionValuesList = new ArrayList<String>();
List<String> connectionStringList = new ArrayList<String>();
for (String key : repositoryConnectionItemMap.keySet()) {
ConnectionItem connectionItem = repositoryConnectionItemMap.get(key);
String name = connectionItem.getProperty().getLabel();
addOrderDisplayNames(connectionValuesList, connectionStringList, key, name);
}
repositoryConnectionNameList.addAll(connectionStringList);
repositoryConnectionValueList.addAll(connectionValuesList);
}
param.setListItemsDisplayName(repositoryConnectionNameList.toArray(new String[0]));
param.setListItemsValue(repositoryConnectionValueList.toArray(new String[0]));
if (!repositoryConnectionItemMap.keySet().contains(param.getValue())) {
if (repositoryConnectionNameList.size() > 0) {
param.setValue(repositoryConnectionValueList.get(0));
}
}
}
/**
* qzhang Comment method "addOrderDisplayNames".
*
* @param connectionValuesList
* @param connectionStringList
* @param key
* @param name
*/
private void addOrderDisplayNames(List<String> connectionValuesList, List<String> connectionStringList, String key,
String name) {
int i = 0;
for (; i < connectionStringList.size(); i++) {
String string = connectionStringList.get(i);
if (name.compareTo(string) < 0) {
connectionStringList.add(i, name);
connectionValuesList.add(i, key);
break;
}
}
if (connectionStringList.size() == 0 || i == connectionStringList.size()) {
connectionStringList.add(name);
connectionValuesList.add(key);
}
}
/**
* ftang Comment method "getElement".
*
* @return an instance of Element
*/
public Element getElement() {
return elem;
}
/**
*
*/
private boolean checkErrorsWhenViewRefreshed;
public void addComponents(boolean forceRedraw) {
addComponents(forceRedraw, true, 0);
}
/**
* yzhang Comment method "addcomponents".
*
* @param forceRedraw
* @param reInitialize
*/
public void addComponents(boolean forceRedraw, boolean reInitialize) {
addComponents(forceRedraw, reInitialize, 0);
}
protected void disposeChildren() {
if (composite != null && !composite.isDisposed()) {
// Empty the composite before use (kinda refresh) :
Control[] ct = composite.getChildren();
for (int i = 0; i < ct.length; i++) {
ct[i].dispose();
}
}
}
private static final int DEFAULT_GROUP_HEIGHT = 20;
/**
* Initialize all components for the defined section for this node.
*/
public void addComponents(boolean forceRedraw, boolean reInitialize, int height) {
checkErrorsWhenViewRefreshed = true;
int heightSize = 0, maxRowSize = 0, nbInRow, numInRow;
int maxRow;
boolean isCompute = false;
Map<String, Integer> groupPosition = new HashMap<String, Integer>();
List<? extends IElementParameter> listParam = elem.getElementParametersWithChildrens();
// updateMainParameters();
if (!forceRedraw) {
boolean needRedraw = isNeedRedraw();
if (!needRedraw) {
// System.out.println("no need redraw");
return;
}
}
Control lastControl = null;
if (reInitialize) {
if (currentComponent != null) {
disposeChildren();
}
} else {
heightSize = height;
}
hashCurControls = new DualHashBidiMap();
maxRow = 0;
for (int i = 0; i < listParam.size(); i++) {
if (listParam.get(i).getCategory() == section) {
if (listParam.get(i).getNumRow() > maxRow && listParam.get(i).isShow(listParam)) {
maxRow = listParam.get(i).getNumRow();
}
}
}
IElementParameter synchronizeSchemaParam = elem.getElementParameter(EParameterName.NOT_SYNCHRONIZED_SCHEMA.getName());
if (synchronizeSchemaParam != null) {
// if the node don't contains a schema type and accept an input flow and is not synchronized
// display a schema on the first line just the type to synchronize the schema
synchronizeSchemaParam.setShow(!((Node) elem).isSchemaSynchronized());
}
generator.initController(this);
// System.out.println("********************** NEW ADDCOMPONENTS
// **********************");
// TabbedPropertyComposite tabbedPropertyComposite = this.getTabbedPropertyComposite();
int additionalHeightSize = 0;
boolean hasDynamicRow = false;
for (int i = 0; i < listParam.size(); i++) {
IElementParameter curParam = listParam.get(i);
if (curParam.getCategory() == section) {
if (curParam.getFieldType() != EParameterFieldType.TECHNICAL) {
if (curParam.isShow(listParam)) {
AbstractElementPropertySectionController controller = generator.getController(curParam.getFieldType(),
this);
if (controller == null) {
continue;
}
if (controller.hasDynamicRowSize()) {
hasDynamicRow = true;
break;
}
}
}
}
}
if (hasDynamicRow) {
additionalHeightSize = estimatePropertyHeightSize(maxRow, listParam);
}
long lastTime = TimeMeasure.timeSinceBegin("DC:refresh:" + getCurrentComponent()); //$NON-NLS-1$
for (int curRow = 1; curRow <= maxRow; curRow++) {
nbInRow = 0;
for (int i = 0; i < listParam.size(); i++) {
IElementParameter curParam = listParam.get(i);
if (curParam.getCategory() == section) {
if (curParam.getNumRow() == curRow && curParam.isShow(listParam)
&& (curParam.getFieldType() != EParameterFieldType.TECHNICAL)) {
nbInRow++;
}
}
}
numInRow = 0;
lastControl = null;
curRowSize = 0;
for (int i = 0; i < listParam.size(); i++) {
IElementParameter curParam = listParam.get(i);
if (curParam.getCategory() == section) {
if (curParam.getNumRow() == curRow && (curParam.getFieldType() != EParameterFieldType.TECHNICAL)) {
// System.out.println("test:" + curParam.getName() + "
// field:"+curParam.getField());
if (curParam.isShow(listParam)) {
// System.out.println("show:" + curParam.getName()+
// " field:"+curParam.getField());
numInRow++;
AbstractElementPropertySectionController controller = generator.getController(
curParam.getFieldType(), this);
if (controller == null) {
continue;
}
if (controller.hasDynamicRowSize()) {
controller.setAdditionalHeightSize(additionalHeightSize);
}
String groupName = curParam.getGroup();
Composite subComposite = null;
if (groupName != null) {
if (!hashCurControls.containsKey(groupName)) {
if (groupPosition.size() > 0) {
heightSize += DEFAULT_GROUP_HEIGHT;
}
new GroupController(this).createControl(composite, curParam, numInRow, nbInRow, heightSize,
lastControl);
groupPosition.put(groupName, heightSize);
}
subComposite = (Composite) hashCurControls.get(groupName);
int h2 = heightSize - groupPosition.get(groupName);
lastControl = controller
.createControl(subComposite, curParam, numInRow, nbInRow, h2, lastControl);
} else {
if (isCompactView()) {
int h3 = DEFAULT_GROUP_HEIGHT * (groupPosition.size() > 0 ? 1 : 0) + heightSize;
lastControl = controller.createControl(composite, curParam, numInRow, nbInRow, h3,
lastControl);
} else {
if (numInRow > 1 && nbInRow > 1) {
heightSize += maxRowSize;
}
int h3 = DEFAULT_GROUP_HEIGHT * (groupPosition.size() > 0 ? 1 : 0) + heightSize;
lastControl = controller.createControl(composite, curParam, 1, 1, h3, null);
}
}
lastTime = TimeMeasure.timeSinceBegin("DC:refresh:" + getCurrentComponent()) - lastTime; //$NON-NLS-1$
if (DynamicTabbedPropertySection.DEBUG_TIME) {
System.out.println("DC;create:" + curParam.getFieldType().getName() + ";" + getCurrentComponent() //$NON-NLS-1$ //$NON-NLS-2$
+ ";" + lastTime); //$NON-NLS-1$
}
// System.out.println("param:" + curParam.getName()
// + " - curRowSize:" + curRowSize);
maxRowSize = 0;
if (curRowSize > maxRowSize) {
maxRowSize = curRowSize;
isCompute = true;
}
}
}
}
}
if (isCompute) {
heightSize += maxRowSize;
isCompute = false;
}
}
if (synchronizeSchemaParam != null) {
synchronizeSchemaParam.setShow(false);
}
resizeScrolledComposite();
}
// /**
// * DOC Administrator Comment method "updateMainParameters".
// */
// protected void updateMainParameters() {
// oldQueryStoreType = (String) elem.getPropertyValue(EParameterName.QUERYSTORE_TYPE.getName());
// if (oldQueryStoreType != null) {
// if (oldQueryStoreType.equals(EmfComponent.REPOSITORY)) {
// showQueryStoreRepositoryList(true);
// updateRepositoryList();
// } else {
// showQueryStoreRepositoryList(false);
// }
// }
//
// IElementParameter param = elem.getElementParameter(EParameterName.PROPERTY_TYPE.getName());
// if (param != null) {
// oldPropertyType = (String) param.getValue();
// if (param.isShow(elem.getElementParameters())) {
// if (oldPropertyType.equals(EmfComponent.REPOSITORY)) {
// showPropertyRepositoryList(true, false);
// updateRepositoryList();
// } else {
// showPropertyRepositoryList(false, false);
// }
// } else {
// showPropertyRepositoryList(false, false);
// }
// }
// // for job settings extra (feature 2710)
// param = elem.getElementParameter(extraPropertyTypeName);
// if (param != null) {
// oldPropertyType = (String) param.getValue();
// if (param.isShow(elem.getElementParameters())) {
// if (oldPropertyType.equals(EmfComponent.REPOSITORY)) {
// showPropertyRepositoryList(true, true);
// updateRepositoryList();
// } else {
// showPropertyRepositoryList(false, true);
// }
// } else {
// showPropertyRepositoryList(false, true);
// }
// }
// oldProcessType = (String) elem.getPropertyValue(EParameterName.PROCESS_TYPE_PROCESS.getName());
// if (oldProcessType != null) {
// String[] list =
// elem.getElementParameter(EParameterName.PROCESS_TYPE_PROCESS.getName()).getListItemsDisplayName();
// if ((oldProcessType.equals("NO_PROCESS") || (list.length == 0))) { //$NON-NLS-1$
// updateProcessList();
// updateContextList();
// if (elem instanceof Node) {
// ((Node) elem).checkAndRefreshNode();
// }
// }
// }
// }
/**
* DOC Administrator Comment method "isNeedRedraw".
*
* @return
*/
protected boolean isNeedRedraw() {
boolean needRedraw = false;
for (IElementParameter elementParameter : elem.getElementParametersWithChildrens()) {
if (elementParameter.getCategory().equals(section)
&& (elementParameter.getFieldType() != EParameterFieldType.SCHEMA_TYPE)
&& (elementParameter.getFieldType() != EParameterFieldType.QUERYSTORE_TYPE)) {
// if the component must be displayed, then check if the
// control exists or not.
boolean show = elementParameter.isShow(elem.getElementParameters());
Object control;
if (elementParameter.getParentParameter() == null) {
control = hashCurControls.get(elementParameter.getName());
} else {
control = hashCurControls.get(elementParameter.getParentParameter().getName() + ":" //$NON-NLS-1$
+ elementParameter.getName());
}
if ((control == null && show) || (control != null && !show)) {
needRedraw = true;
break;
}
}
}
return needRedraw;
}
/**
* DOC nrousseau Comment method "estimatePropertyHeightSize".
*
* @param maxRow
* @param listParam
* @param tabbedPropertyComposite
*/
private int estimatePropertyHeightSize(int maxRow, List<? extends IElementParameter> listParam) {
int estimatedHeightSize = 0, estimatedMaxRowSize = 0;
int additionalHeightSize = 0;
int compositeHeight = getParent().getBounds().height;
// System.out.println("size composite:" + compositeHeight);
int nbDynamic = 0;
for (int curRow = 1; curRow <= maxRow; curRow++) {
estimatedMaxRowSize = 0;
for (int i = 0; i < listParam.size(); i++) {
IElementParameter curParam = listParam.get(i);
if (curParam.getCategory() == section) {
if (curParam.getNumRow() == curRow && (curParam.getFieldType() != EParameterFieldType.TECHNICAL)) {
// System.out.println("test:" + curParam.getName() + "
// field:"+curParam.getField());
if (curParam.isShow(listParam)) {
// System.out.println("show:" + curParam.getName()+
// " field:"+curParam.getField());
AbstractElementPropertySectionController controller = generator.getController(
curParam.getFieldType(), this);
if (controller == null) {
break;
}
int estimatedSize = controller.estimateRowSize(composite, curParam);
if (controller.hasDynamicRowSize()) {
nbDynamic++;
}
// System.out.println("param:" + curParam.getName()
// + " - estimatedSize:" + estimatedSize);
if (estimatedSize > estimatedMaxRowSize) {
estimatedMaxRowSize = estimatedSize;
}
}
}
}
}
estimatedHeightSize += estimatedMaxRowSize;
}
// System.out.println("*** ESTIMATED SIZE:" + estimatedHeightSize + "
// ***");
int emptySpace = compositeHeight - estimatedHeightSize;
// System.out.println("--- EMPTY SPACE:" + emptySpace);
if (emptySpace > 0 && nbDynamic > 0) {
additionalHeightSize = emptySpace / nbDynamic;
// System.out.println("--- DIVIDED ADDITIONAL HEIGHT (for each
// dynamic):" + additionalHeightSize);
}
return additionalHeightSize;
}
private void resizeScrolledComposite() {
// Point compositeSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
//
// Point parentSize = getParent().getSize();
//
// System.out.println("compositeSize:" + compositeSize + " / parentSize:" + parentSize);
lastCompositeSize = getParent().getClientArea().height;
// setMinSize(compositeSize);
propertyResized = true;
}
public void refresh() {
TimeMeasure.display = false;
TimeMeasure.measureActive = true;
TimeMeasure.begin("DC:refresh:" + getCurrentComponent()); //$NON-NLS-1$
if (elem == null) {
return;
}
List<? extends IElementParameter> listParam = elem.getElementParameters();
// IElementParameter jobParam = elem.getElementParameterFromField(EParameterFieldType.PROCESS_TYPE);
// if (jobParam != null) {
// updateContextList(jobParam);
// if (elem instanceof Node) {
// ((Node) elem).checkAndRefreshNode();
// }
// }
Boolean updateNeeded = (Boolean) elem.getPropertyValue(updataComponentParamName);
if (updateNeeded != null) {
if (updateNeeded) {
addComponents(forceRedraw);
elem.setPropertyValue(updataComponentParamName, new Boolean(false));
}
}
forceRedraw = false;
for (int i = 0; i < listParam.size(); i++) {
if (listParam.get(i).getCategory() == section) {
if (listParam.get(i).isShow(listParam)) {
AbstractElementPropertySectionController controller = generator.getController(
listParam.get(i).getFieldType(), this);
if (controller != null) {
controller.refresh(listParam.get(i), checkErrorsWhenViewRefreshed);
}
}
}
}
if (propertyResized) {
removeListener(SWT.Resize, resizeListener);
composite.pack();
getParent().layout();
propertyResized = false;
addListener(SWT.Resize, resizeListener);
}
checkErrorsWhenViewRefreshed = false;
long time = TimeMeasure.timeSinceBegin("DC:refresh:" + getCurrentComponent()); //$NON-NLS-1$
TimeMeasure.end("DC:refresh:" + getCurrentComponent()); //$NON-NLS-1$
if (DynamicTabbedPropertySection.DEBUG_TIME) {
System.out.println("DC;total;" + getCurrentComponent() + ";" + time); //$NON-NLS-1$ //$NON-NLS-2$
}
}
private final Listener resizeListener = new Listener() {
public void handleEvent(Event event) {
resizeLimiter.resetTimer();
resizeLimiter.startIfExecutable(true, null);
}
};
private final ExecutionLimiter resizeLimiter = new ExecutionLimiter(250, true) {
@Override
public void execute(final boolean isFinalExecution, Object data) {
if (!isDisposed()) {
getDisplay().asyncExec(new Runnable() {
public void run() {
if (!isDisposed() && !getParent().isDisposed()) {
int currentSize = getParent().getClientArea().height;
if (getLastCompositeSize() != currentSize) {
addComponents(true);
refresh();
}
}
}
});
}
}
};
/**
* Set the section of the tabbed property.
*
* @param section
*/
public DynamicComposite(Composite parentComposite, int styles, final EComponentCategory section, Element element,
boolean isCompactView) {
super(parentComposite, styles);
setCompactView(isCompactView);
// for job settings extra (feature 2710)
// if (section == EComponentCategory.EXTRA) {
// updataComponentParamName =
// JobSettingsConstants.getExtraParameterName(EParameterName.UPDATE_COMPONENTS.getName());
// } else {
updataComponentParamName = EParameterName.UPDATE_COMPONENTS.getName();
// }
FormData d = new FormData();
d.left = new FormAttachment(0, 0);
d.right = new FormAttachment(100, 0);
d.top = new FormAttachment(0, 0);
d.bottom = new FormAttachment(100, 0);
setLayoutData(d);
setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
setExpandHorizontal(true);
// setExpandVertical(true);
composite = widgetFactory.createComposite(this, SWT.NO_FOCUS);
setContent(composite);
generator = new DynamicPropertyGenerator();
this.section = section;
this.elem = element;
if (elem instanceof Node) {
process = (Process) ((Node) elem).getProcess();
}
if (elem instanceof org.talend.designer.core.ui.editor.connections.Connection) {
org.talend.designer.core.ui.editor.connections.Connection connection;
connection = (org.talend.designer.core.ui.editor.connections.Connection) elem;
process = (Process) connection.getSource().getProcess();
}
if (elem instanceof Process) {
process = (Process) elem;
}
if (process != null) {
part = (AbstractMultiPageTalendEditor) process.getEditor();
}
FormLayout layout = new FormLayout();
layout.marginWidth = ITabbedPropertyConstants.HSPACE + 2;
layout.marginHeight = ITabbedPropertyConstants.VSPACE;
layout.spacing = ITabbedPropertyConstants.VMARGIN + 1;
composite.setLayout(layout);
repositoryQueryStoreMap = new HashMap<String, Query>();
repositoryConnectionItemMap = new HashMap<String, ConnectionItem>();
repositoryTableMap = new HashMap<String, IMetadataTable>();
hashCurControls = new DualHashBidiMap();
if ((currentComponent == null) || (!currentComponent.equals(elem.getElementName()))) {
forceRedraw = true;
elem.setPropertyValue(updataComponentParamName, Boolean.TRUE);
}
currentComponent = elem.getElementName();
addListener(SWT.Resize, resizeListener);
addListener(SWT.FocusOut, new Listener() {
public void handleEvent(Event event) {
// if the focus is lost reinitialise all information from repository
repositoryTableMap.clear();
repositoryQueryStoreMap.clear();
repositoryConnectionItemMap.clear();
}
});
if (getCommandStack() != null) {
getCommandStack().addCommandStackEventListener(commandStackEventListener);
}
// for job settings extra (feature 2710)
// extraPropertyTypeName = JobSettingsConstants.getExtraParameterName(EParameterName.PROPERTY_TYPE.getName());
// extraRepositoryPropertyTypeName =
// JobSettingsConstants.getExtraParameterName(EParameterName.REPOSITORY_PROPERTY_TYPE
// .getName());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.widgets.Widget#dispose()
*/
@Override
public void dispose() {
CommandStack cmdStack = getCommandStack();
if (cmdStack != null) {
cmdStack.removeCommandStackEventListener(commandStackEventListener);
}
if (widgetFactory != null)
widgetFactory.dispose();
super.dispose();
process = null;
elem = null;
part = null;
generator.dispose();
generator = null;
hashCurControls.clear();
}
CommandStackEventListener commandStackEventListener = new CommandStackEventListener() {
public void stackChanged(CommandStackEvent event) {
int detail = event.getDetail();
if ((getElement() instanceof org.talend.designer.core.ui.editor.connections.Connection)
&& (event.getCommand() instanceof ChangeMetadataCommand)
&& (0 != (detail & CommandStack.POST_EXECUTE) || 0 != (detail & CommandStack.POST_REDO) //
|| 0 != (detail & CommandStack.POST_REDO))) {
addComponents(true);
refresh();
}
if (0 != (detail & CommandStack.POST_EXECUTE) || 0 != (detail & CommandStack.POST_UNDO)
|| 0 != (detail & CommandStack.POST_REDO)) {
Boolean updateNeeded = (Boolean) elem.getPropertyValue(updataComponentParamName);
// System.out.println("elem:" + elem.getElementName() + "(" + section + ") --- update needed:" +
// updateNeeded);
if (updateNeeded) {
refresh();
}
}
}
};
/**
* yzhang Comment method "setCurRowSize" Sets the curRowSize.
*
* @param curRowSize int
*/
public void setCurRowSize(int curRowSize) {
this.curRowSize = curRowSize;
}
/**
* dev Comment method "getRepositoryTableMap".
*
* @return Map
*/
public Map<String, IMetadataTable> getRepositoryTableMap() {
if (this.repositoryTableMap.keySet().isEmpty()) {
updateRepositoryList();
}
return this.repositoryTableMap;
}
/**
* dev Comment method "getRepositoryConnectionItemMap".
*
* @return Map
*/
public Map<String, ConnectionItem> getRepositoryConnectionItemMap() {
if (this.repositoryConnectionItemMap.keySet().isEmpty()) {
updateRepositoryList();
}
return this.repositoryConnectionItemMap;
}
/**
* Getter for currentComponent.
*
* @return the currentComponent
*/
public String getCurrentComponent() {
return this.currentComponent;
}
/**
* Getter for curRowSize.
*
* @return the curRowSize
*/
public int getCurRowSize() {
return this.curRowSize;
}
/**
* Getter for hashCurControls.
*
* @return the hashCurControls
*/
public BidiMap getHashCurControls() {
return this.hashCurControls;
}
/**
* Getter for part.
*
* @return the part
*/
public AbstractMultiPageTalendEditor getPart() {
return this.part;
}
/**
* Getter for section.
*
* @return the section
*/
public EComponentCategory getSection() {
return this.section;
}
/**
* Getter for repositoryQueryStoreMap.
*
* @return the repositoryQueryStoreMap
*/
public Map<String, Query> getRepositoryQueryStoreMap() {
if (this.repositoryQueryStoreMap.keySet().isEmpty()) {
updateRepositoryList();
}
return repositoryQueryStoreMap;
}
/**
* Get the command stack of the Gef editor.
*
* @return
*/
protected CommandStack getCommandStack() {
if (part != null && part.getTalendEditor() != null) {
Object adapter = part.getTalendEditor().getAdapter(CommandStack.class);
return (CommandStack) adapter;
} else {
return null;
}
}
/**
* qzhang Comment method "getDefaultRepository".
*
* @return
*/
private String getDefaultRepository(IElementParameter baseParam, boolean istable, String defaultPropertyValue) {
boolean metadataInput = false;
if (((Node) elem).getCurrentActiveLinksNbInput(EConnectionType.FLOW_MAIN) > 0
|| ((Node) elem).getCurrentActiveLinksNbInput(EConnectionType.FLOW_REF) > 0
|| ((Node) elem).getCurrentActiveLinksNbInput(EConnectionType.TABLE) > 0) {
metadataInput = true;
}
if (metadataInput && istable) {
return (String) baseParam.getChildParameters().get(EParameterName.REPOSITORY_SCHEMA_TYPE.getName()).getValue();
}
Object propertyValue = elem.getPropertyValue(EParameterName.REPOSITORY_PROPERTY_TYPE.getName());
if ((propertyValue == null || !(propertyValue instanceof String)) && defaultPropertyValue != null) {
propertyValue = defaultPropertyValue;
}
if (propertyValue == null || propertyValue.equals("")) { //$NON-NLS-1$
return ""; //$NON-NLS-1$
}
if (istable) {
List<String> list = tablesMap.get(propertyValue);
if (list != null) {
if (list.size() > 0) {
return tablesMap.get(propertyValue).get(0);
}
}
} else {
List<String> list = queriesMap.get(propertyValue);
if (list != null) {
if (queriesMap.get(propertyValue).size() > 0) {
return queriesMap.get(propertyValue).get(0);
}
}
}
return ""; //$NON-NLS-1$
}
/**
* qzhang Comment method "initMaps".
*/
private void initMaps() {
for (String key : tablesMap.keySet()) {
List<String> tablesName = new ArrayList<String>();
List<String> queriesName = new ArrayList<String>();
queriesName.addAll(queriesMap.get(key));
tablesName.addAll(tablesMap.get(key));
for (String string : tablesMap.get(key)) {
if (!string.startsWith(key)) {
tablesName.remove(string);
}
}
for (String string : queriesMap.get(key)) {
if (!string.startsWith(key)) {
queriesName.remove(string);
}
}
tablesMap.put(key, tablesName);
queriesMap.put(key, queriesName);
}
}
/**
* Getter for tablesMap.
*
* @return the tablesMap
*/
public Map<String, List<String>> getTablesMap() {
initMaps();
return this.tablesMap;
}
/**
* Getter for queriesMap.
*
* @return the queriesMap
*/
public Map<String, List<String>> getQueriesMap() {
initMaps();
return this.queriesMap;
}
/**
* Getter for tableIdAndDbTypeMap.
*
* @return the tableIdAndDbTypeMap
*/
public Map<String, String> getTableIdAndDbTypeMap() {
return this.tableIdAndDbTypeMap;
}
/**
* Getter for tableIdAndDbSchemaMap.
*
* @return the tableIdAndDbSchemaMap
*/
public Map<String, String> getTableIdAndDbSchemaMap() {
return this.tableIdAndDbSchemaMap;
}
/**
* Getter for lastCompositeSize.
*
* @return the lastCompositeSize
*/
public int getLastCompositeSize() {
return this.lastCompositeSize;
}
/*
* (non-Javadoc)
*
* @see org.talend.designer.core.ui.editor.properties.controllers.generator.IDynamicProperty#getComposite()
*/
public Composite getComposite() {
return composite;
}
/**
* Getter for isCompactView.
*
* @return the isCompactView
*/
public boolean isCompactView() {
return this.isCompactView;
}
/**
* Sets the isCompactView.
*
* @param isCompactView the isCompactView to set
*/
public void setCompactView(boolean isCompactView) {
this.isCompactView = isCompactView;
}
}