// ============================================================================
//
// 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.editor.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.core.runtime.IPath;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.commands.CommandStackEvent;
import org.eclipse.gef.commands.CommandStackEventListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.views.properties.tabbed.view.TabbedPropertyComposite;
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.ui.swt.advanced.dataeditor.commands.IExtendedTableCommand;
import org.talend.commons.utils.data.container.Content;
import org.talend.commons.utils.data.container.ContentList;
import org.talend.commons.utils.data.container.RootContainer;
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.HeaderFooterConnection;
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.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.IConnection;
import org.talend.core.model.process.IElementParameter;
import org.talend.core.model.process.INode;
import org.talend.core.model.process.IProcess2;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.utils.TalendTextUtils;
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.model.components.EmfComponent;
import org.talend.designer.core.model.utils.emf.talendfile.ContextType;
import org.talend.designer.core.ui.AbstractMultiPageTalendEditor;
import org.talend.designer.core.ui.editor.AbstractTalendEditor;
import org.talend.designer.core.ui.editor.cmd.ChangeMetadataCommand;
import org.talend.designer.core.ui.editor.connections.ConnectionLabel;
import org.talend.designer.core.ui.editor.nodecontainer.NodeContainerPart;
import org.talend.designer.core.ui.editor.nodes.Node;
import org.talend.designer.core.ui.editor.nodes.NodeLabel;
import org.talend.designer.core.ui.editor.outline.NodeReturnsTreeEditPart;
import org.talend.designer.core.ui.editor.outline.NodeTreeEditPart;
import org.talend.designer.core.ui.editor.properties.controllers.AbstractElementPropertySectionController;
import org.talend.designer.core.ui.views.properties.DynamicPropertyGenerator;
import org.talend.repository.model.ERepositoryStatus;
import org.talend.repository.model.IProxyRepositoryFactory;
/**
* yzhang class global comment. Detailled comment <br/>
*
* $Id: DynamicTabbedPropertySection.java 77219 2012-01-24 01:14:15Z mhirt $
*
* @deprecated use MultipleThreadDynamicComposite instead.
*/
public class DynamicTabbedPropertySection extends AbstractPropertySection implements IDynamicProperty {
protected AbstractMultiPageTalendEditor part;
protected Element elem;
protected Composite composite;
protected BidiMap hashCurControls;
protected String currentComponent;
protected EComponentCategory section;
protected int curRowSize;
protected DynamicPropertyGenerator generator = new DynamicPropertyGenerator();
private String oldProcessType;
private final Map<String, IMetadataTable> repositoryTableMap;
private final Map<String, ConnectionItem> repositoryConnectionItemMap;
private Map<String, IRepositoryViewObject> processMap;
private String oldPropertyType;
private final Map<String, Query> repositoryQueryStoreMap;
private String oldQueryStoreType;
private static CommandStackEventListener commandStackEventListener;
private Map<String, String> tableIdAndDbTypeMap;
private Map<String, String> tableIdAndDbSchemaMap;
private boolean forceRedraw;
private static DynamicTabbedPropertySection lastPropertyUsed;
private int lastCompositeSize = 0;
private boolean propertyResized;
public static final boolean DEBUG_TIME = false;
// private final String extraPropertyTypeName;
// private final String extraRepositoryPropertyTypeName;
//
private final String updataComponentParamName;
/**
* ftang Comment method "showQueryStoreRepositoryList".
*
* @param show
*/
private void showQueryStoreRepositoryList(boolean show) {
for (int i = 0; i < elem.getElementParameters().size(); i++) {
IElementParameter param = elem.getElementParameters().get(i);
if (param.getName().equals(EParameterName.REPOSITORY_QUERYSTORE_TYPE.getName())) {
param.setShow(show);
}
}
}
/**
* ftang Comment method "showPropertyRepositoryList".
*
* @param show boolean
*/
private void showPropertyRepositoryList(boolean show, boolean extra) {
// for (int i = 0; i < elem.getElementParameters().size(); i++) {
// IElementParameter param = elem.getElementParameters().get(i);
// if (extra && param.getName().equals(extraRepositoryPropertyTypeName)) {
// param.setShow(show);
//
// } else if (!extra && param.getName().equals(EParameterName.REPOSITORY_PROPERTY_TYPE.getName())) {
// param.setShow(show);
// }
// }
}
/**
* ftang Comment method "updateProcessList".
*/
private void updateProcessList() {
List<String> processNameList = new ArrayList<String>();
List<String> processValueList = new ArrayList<String>();
processMap = new HashMap<String, IRepositoryViewObject>();
IProxyRepositoryFactory factory = DesignerPlugin.getDefault().getProxyRepositoryFactory();
try {
RootContainer<String, IRepositoryViewObject> processContainer = factory.getMetadata(ERepositoryObjectType.PROCESS);
ContentList<String, IRepositoryViewObject> processAbsoluteMembers = processContainer.getAbsoluteMembers();
String currentProcess = part.getTalendEditor().getProcess().getLabel();
for (Content<String, IRepositoryViewObject> object : processAbsoluteMembers.values()) {
IRepositoryViewObject 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();
ExceptionHandler.process(e);
}
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) { //$NON-NLS-1$
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) {
IRepositoryViewObject 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".
*/
private void updateContextList() {
List<String> contextNameList = new ArrayList<String>();
List<String> contextValueList = new ArrayList<String>();
IProxyRepositoryFactory factory = DesignerPlugin.getDefault().getProxyRepositoryFactory();
String selectedProcess = null;
for (int i = 0; (i < elem.getElementParameters().size()) && (selectedProcess == null); i++) {
IElementParameter param = elem.getElementParameters().get(i);
if (param.getName().equals(EParameterName.PROCESS_TYPE_PROCESS.getName())) {
selectedProcess = (String) param.getValue();
}
}
if (selectedProcess == null) {
return;
}
try {
List<IRepositoryViewObject> list = factory.getAll(ERepositoryObjectType.PROCESS);
for (IRepositoryViewObject process : list) {
String id = process.getLabel();
if (selectedProcess.equals(id)) {
if (process.getProperty().getItem() instanceof ProcessItem) {
ProcessItem processItem = (ProcessItem) process.getProperty().getItem();
for (Object o : processItem.getProcess().getContext()) {
if (o instanceof ContextType) {
ContextType context = (ContextType) o;
contextNameList.add(context.getName());
contextValueList.add(context.getName()); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
}
}
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
String[] contextTableNameList = contextNameList.toArray(new String[0]);
String[] contextTableValueList = contextValueList.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_CONTEXT.getName())) {
param.setListItemsDisplayName(contextTableNameList);
param.setListItemsValue(contextTableValueList);
if (!contextValueList.contains(param.getValue())) {
if (contextTableNameList.length > 0) {
elem.setPropertyValue(EParameterName.PROCESS_TYPE_CONTEXT.getName(), contextTableValueList[0]);
}
} else {
// force to store the value again to activate the code
// generation in Node.setPropertyValue
elem.setPropertyValue(EParameterName.PROCESS_TYPE_CONTEXT.getName(), param.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$
public 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 = factory.getMetadataConnectionsItem();
} 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 repositorySchemaType = param.getChildParameters().get(
EParameterName.REPOSITORY_SCHEMA_TYPE.getName());
repositorySchemaType.setListItemsDisplayName(repositoryTableNameList);
repositorySchemaType.setListItemsValue(repositoryTableValueList);
if (!repositoryTableMap.keySet().contains(repositorySchemaType.getValue())) {
List<String> list2 = tablesMap.get(elem.getPropertyValue(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()));
boolean isNeeded = list2 != null && !list2.isEmpty();
if (repositoryTableNameList.length > 0 && repositoryConnectionValueList.length > 0 && isNeeded) {
repositorySchemaType.setValue(getDefaultRepository(param, true, repositoryConnectionValueList[0]));
// elem.setPropertyValue(EParameterName.REPOSITORY_SCHEMA_TYPE.getName(),
// getDefaultRepository(
// true, repositoryConnectionValueList[0]));
}
}
}
if (param.getName().equals(EParameterName.REPOSITORY_QUERYSTORE_TYPE.getName())) {
param.setListItemsDisplayName(repositoryQueryNameList);
param.setListItemsValue(repositoryQueryValueList);
if (!repositoryQueryStoreMap.keySet().contains(param.getValue())) {
List<String> list2 = queriesMap.get(elem.getPropertyValue(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()));
boolean isNeeded = list2 != null && !list2.isEmpty();
if (repositoryQueryNameList.length > 0 && repositoryConnectionValueList.length > 0 && isNeeded) {
elem.setPropertyValue(
EParameterName.REPOSITORY_QUERYSTORE_TYPE.getName(),
getDefaultRepository(elem.getElementParameterFromField(EParameterFieldType.SCHEMA_TYPE), false,
repositoryConnectionValueList[0]));
}
}
}
if (param.getName().equals(EParameterName.REPOSITORY_PROPERTY_TYPE.getName())) {
updateRepositoryListExtra(param, repositoryConnectionNameList, repositoryConnectionValueList, false);
}
// // for job settings extra (feature 2710)
// if (param.getName().equals(extraRepositoryPropertyTypeName)) {
// updateRepositoryListExtra(param, repositoryConnectionNameList, repositoryConnectionValueList, true);
// }
}
updateQuery();
}
private void updateRepositoryListExtra(IElementParameter param, String[] repositoryConnectionNameList,
String[] repositoryConnectionValueList, boolean extra) {
String paramName = EParameterName.PROPERTY_TYPE.getName();
// if (extra) {
// paramName = extraPropertyTypeName;
// }
String repositoryValue = elem.getElementParameter(paramName).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 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);
}
}
if ((connection instanceof HeaderFooterConnection)
&& (repositoryValue.equals(ERepositoryCategoryType.HEADERFOOTER.getName()))) {
addOrderDisplayNames(connectionValuesList, connectionNamesList, key, name);
}
}
repositoryConnectionNameList = connectionNamesList.toArray(new String[0]);
repositoryConnectionValueList = connectionValuesList.toArray(new String[0]);
} 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 = connectionStringList.toArray(new String[0]);
repositoryConnectionValueList = connectionValuesList.toArray(new String[0]);
}
param.setListItemsDisplayName(repositoryConnectionNameList);
param.setListItemsValue(repositoryConnectionValueList);
if (!repositoryConnectionItemMap.keySet().contains(param.getValue())) {
if (repositoryConnectionNameList.length > 0) {
// paramName = EParameterName.REPOSITORY_PROPERTY_TYPE.getName();
// if (extra) {
// paramName = extraRepositoryPropertyTypeName;
// }
elem.setPropertyValue(paramName, repositoryConnectionValueList[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);
}
/**
* Initialize all components for the defined section for this node.
*/
public void addComponents(boolean forceRedraw, boolean reInitialize) {
registerListenerForRefreshingSection();
checkErrorsWhenViewRefreshed = true;
int heightSize = 0, maxRowSize = 0, nbInRow, numInRow;
int maxRow;
List<? extends IElementParameter> listParam = elem.getElementParameters();
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();
}
}
}
if (!forceRedraw) {
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 = this.hashCurControls.get(elementParameter.getName());
} else {
control = this.hashCurControls.get(elementParameter.getParentParameter().getName() + ":" //$NON-NLS-1$
+ elementParameter.getName());
}
if ((control == null && show) || (control != null && !show)) {
needRedraw = true;
break;
// System.out.println(elementParameter.getName() + "
// need redraw");
}
}
}
if (!needRedraw) {
// System.out.println("no need redraw");
return;
}
}
Control lastControl = null;
if (reInitialize) {
if (currentComponent != null && composite != null) {
Control[] ct = composite.getChildren();
for (int i = 0; i < ct.length; i++) {
ct[i].dispose();
}
}
} else {
// Control[] ct = composite.getChildren();
// int curY = 0, maxY = 0;
// for (int i = 0; i < ct.length; i++) {
// curY = ct[i].getLocation().y + ct[i].computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
// if (curY > maxY) {
// maxY = curY;
// }
// }
heightSize = curRowSize;
}
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();
}
}
}
generator.initController(this);
// System.out.println("********************** NEW ADDCOMPONENTS
// **********************");
TabbedPropertyComposite tabbedPropertyComposite = this.getTabbedPropertyComposite();
int additionalHeightSize = 0;
if (tabbedPropertyComposite != null && (!(elem instanceof org.talend.designer.core.ui.editor.connections.Connection))) {
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, tabbedPropertyComposite);
}
}
long lastTime = TimeMeasure.timeSinceBegin("DTP:refresh:" + getCurrentComponent()); //$NON-NLS-1$
curRowSize = 0;
for (int curRow = 1; curRow <= maxRow; curRow++) {
maxRowSize = 0;
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;
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);
}
lastControl = controller.createControl(composite, curParam, numInRow, nbInRow, heightSize,
lastControl);
lastTime = TimeMeasure.timeSinceBegin("DTP:refresh:" + getCurrentComponent()) - lastTime; //$NON-NLS-1$
if ((DynamicTabbedPropertySection.DEBUG_TIME) && !getCurrentComponent().equals("Job")) { //$NON-NLS-1$
System.out
.println("DTP;create:" + curParam.getFieldType().getName() + ";" + getCurrentComponent() //$NON-NLS-1$ //$NON-NLS-2$
+ ";" + lastTime); //$NON-NLS-1$
}
// System.out.println("param:" + curParam.getName()
// + " - curRowSize:" + curRowSize);
if (curRowSize > maxRowSize) {
maxRowSize = curRowSize;
}
}
}
}
}
heightSize += maxRowSize;
}
resizeScrolledComposite();
}
/**
* DOC nrousseau Comment method "estimatePropertyHeightSize".
*
* @param maxRow
* @param listParam
* @param tabbedPropertyComposite
*/
private int estimatePropertyHeightSize(int maxRow, List<? extends IElementParameter> listParam,
TabbedPropertyComposite tabbedPropertyComposite) {
int estimatedHeightSize = 0, estimatedMaxRowSize = 0;
int additionalHeightSize = 0;
int compositeHeight = tabbedPropertyComposite.getClientArea().height
- tabbedPropertyComposite.getTitle().computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
// 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 TabbedPropertyComposite getTabbedPropertyComposite() {
TabbedPropertyComposite tabbedPropertyComposite = null;
Composite tmpComposite = composite;
while (tabbedPropertyComposite == null) { // to retrieve the main
// composite of the TabbedProperties
if (tmpComposite == null || tmpComposite.isDisposed() || tmpComposite.getParent() == null
|| tmpComposite.getParent().isDisposed()) {
return null;
}
if (tmpComposite.getParent() instanceof TabbedPropertyComposite) {
tabbedPropertyComposite = (TabbedPropertyComposite) tmpComposite.getParent();
} else {
tmpComposite = tmpComposite.getParent();
}
}
return tabbedPropertyComposite;
}
/**
* added to fix the bugs 1107 & 1434. This code is added because the function resizeScrolledComposite is set as
* private in TabbedPropertySheetPage. So the code bellow will do the same operation but will access to specific
* eclipse functions.
*/
private void resizeScrolledComposite() {
Point compositeSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
TabbedPropertyComposite tabbedPropertyComposite = getTabbedPropertyComposite();
if (tabbedPropertyComposite != null) {
tabbedPropertyComposite.getScrolledComposite().setExpandHorizontal(true);
lastCompositeSize = tabbedPropertyComposite.getClientArea().height;
compositeSize.y += tabbedPropertyComposite.getTitle().computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
tabbedPropertyComposite.getScrolledComposite().setMinSize(compositeSize);
tabbedPropertyComposite.getScrolledComposite().setExpandHorizontal(false);
}
propertyResized = true;
}
/*
* (non-Java)
*
* @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#
* createControls(org.eclipse.swt.widgets.Composite, org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage)
*/
@Override
public void createControls(final Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage) {
super.createControls(parent, aTabbedPropertySheetPage);
composite = parent;
FormLayout layout = new FormLayout();
layout.marginWidth = ITabbedPropertyConstants.HSPACE + 2;
layout.marginHeight = ITabbedPropertyConstants.VSPACE;
layout.spacing = ITabbedPropertyConstants.VMARGIN + 1;
composite.setLayout(layout);
}
@Override
public void refresh() {
TimeMeasure.display = false;
TimeMeasure.measureActive = true;
TimeMeasure.begin("DTP:refresh:" + getCurrentComponent()); //$NON-NLS-1$
if (elem == null) {
return;
}
List<? extends IElementParameter> listParam = elem.getElementParameters();
if (oldProcessType != null) {
String newProcessType = (String) elem.getPropertyValue(EParameterName.PROCESS_TYPE_PROCESS.getName());
if (!oldProcessType.equals(newProcessType)) {
updateProcessList();
updateContextList();
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) {
composite.getParent().layout(true, true);
propertyResized = false;
}
checkErrorsWhenViewRefreshed = false;
long time = TimeMeasure.timeSinceBegin("DTP:refresh:" + getCurrentComponent()); //$NON-NLS-1$
TimeMeasure.end("DTP:refresh:" + getCurrentComponent()); //$NON-NLS-1$
if ((DEBUG_TIME) && !getCurrentComponent().equals("Job")) { //$NON-NLS-1$
System.out.println("DTP;total;" + getCurrentComponent() + ";" + time); //$NON-NLS-1$ //$NON-NLS-2$
}
}
// private ISelection lastSelection;
/*
* @Override (non-Java)
*
* @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection# setInput(org.eclipse.ui.IWorkbenchPart,
* org.eclipse.jface.viewers.ISelection)
*/
@Override
public void setInput(final IWorkbenchPart workbenchPart, final ISelection selection) {
if (!(selection instanceof IStructuredSelection)) {
return;
}
curRowSize = 0;
Object input = ((IStructuredSelection) selection).getFirstElement();
if (input instanceof NodeContainerPart) {
NodeContainerPart nContainer = (NodeContainerPart) input;
elem = (Element) nContainer.getParent().getModel();
} else if (input instanceof NodeTreeEditPart) {
NodeTreeEditPart nTreePart = (NodeTreeEditPart) input;
elem = (Element) nTreePart.getModel();
} else if (!(input instanceof NodeReturnsTreeEditPart)) {
EditPart editPart = (EditPart) input;
elem = (Element) editPart.getModel();
}
if (elem instanceof NodeLabel) {
elem = ((NodeLabel) elem).getNode();
}
if (elem instanceof ConnectionLabel) {
elem = ((ConnectionLabel) elem).getConnection();
}
if (workbenchPart instanceof AbstractMultiPageTalendEditor) {
part = (AbstractMultiPageTalendEditor) workbenchPart;
} else {
if (elem instanceof INode) {
part = (AbstractMultiPageTalendEditor) ((IProcess2) ((INode) elem).getProcess()).getEditor();
} else if (elem instanceof IConnection) {
IConnection conn;
conn = (IConnection) elem;
part = (AbstractMultiPageTalendEditor) ((IProcess2) conn.getSource().getProcess()).getEditor();
} else {
part = (AbstractMultiPageTalendEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.getActiveEditor();
}
}
super.setInput(part, selection);
commandStackEventListener = null;
if ((currentComponent == null) || (!currentComponent.equals(elem.getElementName()))) {
forceRedraw = true;
elem.setPropertyValue(updataComponentParamName, Boolean.TRUE);
}
currentComponent = elem.getElementName();
}
private static final Listener REFRESH_LISTENER = new Listener() {
public void handleEvent(Event event) {
REFRESH_LIMITER.resetTimer();
REFRESH_LIMITER.startIfExecutable(true, null);
}
};
private static final ExecutionLimiter REFRESH_LIMITER = new ExecutionLimiter(250, true) {
@Override
public void execute(final boolean isFinalExecution, Object data) {
Composite currentComposite = lastPropertyUsed.getComposite();
if (currentComposite.isDisposed()) {
return;
}
currentComposite.getDisplay().asyncExec(new Runnable() {
public void run() {
TabbedPropertyComposite tabbedComposite = lastPropertyUsed.getTabbedPropertyComposite();
if (tabbedComposite != null) {
int currentSize = tabbedComposite.getClientArea().height;
if (lastPropertyUsed.getLastCompositeSize() != currentSize) {
lastPropertyUsed.addComponents(true);
lastPropertyUsed.refresh();
}
}
}
});
}
};
/**
* Set the section of the tabbed property.
*
* @param section
*/
public DynamicTabbedPropertySection(final EComponentCategory section) {
super();
this.section = section;
repositoryQueryStoreMap = new HashMap<String, Query>();
repositoryConnectionItemMap = new HashMap<String, ConnectionItem>();
repositoryTableMap = new HashMap<String, IMetadataTable>();
hashCurControls = new DualHashBidiMap();
// // for job settings extra (feature 2710)
// extraPropertyTypeName = JobSettingsConstants.getExtraParameterName(EParameterName.PROPERTY_TYPE.getName());
// extraRepositoryPropertyTypeName =
// JobSettingsConstants.getExtraParameterName(EParameterName.REPOSITORY_PROPERTY_TYPE
// .getName());
// if (section == EComponentCategory.EXTRA) {
// updataComponentParamName =
// JobSettingsConstants.getExtraParameterName(EParameterName.UPDATE_COMPONENTS.getName());
// } else {
updataComponentParamName = EParameterName.UPDATE_COMPONENTS.getName();
// }
}
/**
* 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() {
return this.repositoryConnectionItemMap;
}
/**
* Getter for composite.
*
* @return the composite
*/
public Composite getComposite() {
return this.composite;
}
/**
* 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
*/
@Override
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() {
return repositoryQueryStoreMap;
}
/**
* Get the command stack of the Gef editor.
*
* @return
*/
protected CommandStack getCommandStack() {
AbstractTalendEditor talendEditor = part.getTalendEditor();
Object adapter = talendEditor.getAdapter(CommandStack.class);
return (CommandStack) adapter;
}
/**
* amaumont Comment method "registerListenerForRefreshingSection".
*/
public void registerListenerForRefreshingSection() {
if (commandStackEventListener == null) {
DynamicTabbedPropertySection.commandStackEventListener = new CommandStackEventListener() {
public void stackChanged(CommandStackEvent event) {
int detail = event.getDetail();
if (lastPropertyUsed != null) {
if ((lastPropertyUsed.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))) {
lastPropertyUsed.addComponents(true);
lastPropertyUsed.refresh();
}
if (0 != (detail & CommandStack.POST_UNDO) || 0 != (detail & CommandStack.POST_REDO)) {
if (event.getCommand() instanceof IExtendedTableCommand) {
lastPropertyUsed.refresh();
}
}
}
}
};
getCommandStack().addCommandStackEventListener(DynamicTabbedPropertySection.commandStackEventListener);
}
}
@SuppressWarnings("unchecked")
private void updateQuery() {
Object propertyValue = elem.getPropertyValue(EParameterName.REPOSITORY_QUERYSTORE_TYPE.getName());
if (propertyValue == null || !(propertyValue instanceof String) || "".equals(propertyValue) //$NON-NLS-1$
|| elem.getPropertyValue(EParameterName.QUERYSTORE_TYPE.getName()).equals(EmfComponent.BUILTIN)) {
return;
}
if (repositoryQueryStoreMap.containsKey(propertyValue)) {
Query query = repositoryQueryStoreMap.get(propertyValue);
for (IElementParameter param : (List<IElementParameter>) elem.getElementParameters()) {
if (param.getFieldType() == EParameterFieldType.MEMO_SQL) {
elem.setPropertyValue(param.getName(), convertSQL(query.getValue()));
param.setRepositoryValueUsed(true);
}
}
}
}
private String convertSQL(String sql) {
if (sql.startsWith("'") || sql.startsWith("\"")) { //$NON-NLS-1$ //$NON-NLS-2$
return sql;
}
return TalendTextUtils.addQuotes(sql); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* 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.eclipse.ui.views.properties.tabbed.AbstractPropertySection#aboutToBeShown()
*/
@Override
public void aboutToBeShown() {
lastPropertyUsed = this;
TabbedPropertyComposite tabbedPropertyComposite = getTabbedPropertyComposite();
if (tabbedPropertyComposite != null) {
tabbedPropertyComposite.getScrolledComposite().setAlwaysShowScrollBars(true);
// tabbedPropertyComposite.getScrolledComposite().getHorizontalBar().setVisible(false);
tabbedPropertyComposite.getScrolledComposite().setExpandHorizontal(true);
tabbedPropertyComposite.removeListener(SWT.Resize, REFRESH_LISTENER);
tabbedPropertyComposite.addListener(SWT.Resize, REFRESH_LISTENER);
}
super.aboutToBeShown();
}
/**
* Getter for lastPropertyUsed.
*
* @return the lastPropertyUsed
*/
public static DynamicTabbedPropertySection getLastPropertyUsed() {
return lastPropertyUsed;
}
public void setComposite(Composite composite) {
this.composite = composite;
}
}