// ============================================================================ // // 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.controllers; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.common.util.EList; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CompoundCommand; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants; import org.talend.commons.exception.PersistenceException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.commons.ui.runtime.image.EImage; import org.talend.commons.ui.runtime.image.ImageProvider; import org.talend.core.CorePlugin; import org.talend.core.GlobalServiceRegister; import org.talend.core.IESBService; import org.talend.core.database.EDatabaseTypeName; import org.talend.core.model.metadata.builder.connection.CDCConnection; import org.talend.core.model.metadata.builder.connection.CDCType; 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.database.ExtractMetaDataUtils; import org.talend.core.model.metadata.designerproperties.PropertyConstants.CDCTypeMode; import org.talend.core.model.param.ERepositoryCategoryType; import org.talend.core.model.process.EParameterFieldType; 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.DatabaseConnectionItem; import org.talend.core.model.properties.FileItem; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.LinkRulesItem; import org.talend.core.model.properties.Property; 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.core.repository.RepositoryComponentManager; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.designer.core.i18n.Messages; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.model.components.EmfComponent; import org.talend.designer.core.model.process.jobsettings.JobSettingsConstants; import org.talend.designer.core.ui.editor.cmd.ChangeValuesFromRepository; import org.talend.designer.core.ui.editor.cmd.PropertyChangeCommand; import org.talend.designer.core.ui.editor.nodes.Node; import org.talend.designer.core.ui.projectsetting.ImplicitContextLoadElement; import org.talend.designer.core.ui.projectsetting.StatsAndLogsElement; import org.talend.designer.core.ui.views.properties.MultipleThreadDynamicComposite; import org.talend.repository.RepositoryPlugin; import org.talend.repository.model.IMetadataService; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.IRepositoryService; import org.talend.repository.model.RepositoryNode; import org.talend.repository.ui.dialog.RepositoryReviewDialog; /** * DOC nrousseau class global comment. Detailled comment */ public class PropertyTypeController extends AbstractRepositoryController { public PropertyTypeController(IDynamicProperty dp) { super(dp); } /* * add by wzhang * * @see * org.talend.designer.core.ui.editor.properties.controllers.AbstractRepositoryController#createControl(org.eclipse * .swt.widgets.Composite, org.talend.core.model.process.IElementParameter, int, int, int, * org.eclipse.swt.widgets.Control) */ @Override public Control createControl(Composite subComposite, IElementParameter param, int numInRow, int nbInRow, int top, Control lastControl) { Control lastControlUsed = lastControl; lastControlUsed = super.createControl(subComposite, param, numInRow, nbInRow, top, lastControl); // add a button if the value is Built-In if (EmfComponent.BUILTIN.equals(param.getChildParameters().get("PROPERTY_TYPE").getValue())) { //$NON-NLS-1$ if (param.getElement() instanceof INode) { if (canSaveProperty(param)) { lastControlUsed = addButton(subComposite, param, lastControlUsed, numInRow, top); } } } return lastControlUsed; } /** * DOC wzhang Comment method "canSaveProperty". * * @param param * @return */ private boolean canSaveProperty(IElementParameter param) { INode node = (INode) param.getElement(); // String componentName = node.getComponent().getName(); return RepositoryComponentManager.validComponent(componentName); // for (EDatabaseComponentName eComponent : EDatabaseComponentName.values()) { // if (componentName.equals(eComponent.getInputComponentName()) // || componentName.equals(eComponent.getOutPutComponentName())) { // canSaved = true; // break; // } // // Teradata // /** // * @author wzhang. For the property in EdatabaseComponentName class is "tELTTeradataInput" and // * "tELTTeradataOutput". So define the String variable custom. // */ // if (componentName.equals("tTeradataInput") || componentName.equals("tTeradataOutput")) { //$NON-NLS-1$ //$NON-NLS-2$ // canSaved = true; // } // } // return canSaved; } /** * * DOC wzhang Comment method "addButton". * * @param subComposite * @param param * @param lastControl * @param numInRow * @param top * @return */ private Control addButton(Composite subComposite, final IElementParameter param, Control lastControl, int numInRow, int top) { Button button; Button resetBtn = null; Control lastControlUsed = lastControl; Point buttonSize; FormData data; // if (!createFile) { button = getWidgetFactory().createButton(subComposite, "", SWT.PUSH); //$NON-NLS-1$ buttonSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT); button.setImage(ImageProvider.getImage(EImage.SAVE_ICON)); button.setToolTipText(Messages.getString("PropertyTypeController.saveToMetadata")); //$NON-NLS-1$ button.setData(PARAMETER_NAME, param.getName()); if (param.getFieldType() == EParameterFieldType.PROPERTY_TYPE) { button.setEnabled(ExtractMetaDataUtils.haveLoadMetadataNode()); } lastControlUsed = button; button.addSelectionListener(listenerSelection); CLabel labelLabel = getWidgetFactory().createCLabel(subComposite, ""); //$NON-NLS-1$ data = new FormData(); data.left = new FormAttachment(lastControl, 0); data.right = new FormAttachment(lastControl, labelLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT).x + (ITabbedPropertyConstants.HSPACE * 2), SWT.RIGHT); if (resetBtn != null) { data.top = new FormAttachment(resetBtn, 0, SWT.CENTER); } else { data.top = new FormAttachment(0, top); } labelLabel.setLayoutData(data); if (numInRow != 1) { labelLabel.setAlignment(SWT.RIGHT); } data = new FormData(); data.left = new FormAttachment(labelLabel, -1); data.right = new FormAttachment(labelLabel, STANDARD_BUTTON_WIDTH, SWT.RIGHT); if (resetBtn != null) { data.top = new FormAttachment(resetBtn, 0, SWT.CENTER); } else { data.top = new FormAttachment(0, top); } data.height = STANDARD_HEIGHT - 2; button.setLayoutData(data); dynamicProperty.setCurRowSize(buttonSize.y + ITabbedPropertyConstants.VSPACE); // } else { // button = getWidgetFactory().createButton(subComposite, "", SWT.NONE); //$NON-NLS-1$ // button.setText("select file"); //$NON-NLS-N$ // buttonSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT); // button.setToolTipText("select a drl file"); //$NON-NLS-1$ // button.setData(PARAMETER_NAME, param.getName()); // // lastControlUsed = button; // // button.addSelectionListener(new SelectionListener() { // // public void widgetDefaultSelected(SelectionEvent e) { // // TODO Auto-generated method stub // // } // // public void widgetSelected(SelectionEvent e) { // // TODO Auto-generated method stub // FileDialog fd = new FileDialog(new Shell()); // String fileName = fd.open(); // } // // }); // // CLabel labelLabel = getWidgetFactory().createCLabel(subComposite, ""); //$NON-NLS-1$ // data = new FormData(); // data.left = new FormAttachment(lastControl, 0); // data.right = new FormAttachment(lastControl, labelLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT).x // + (ITabbedPropertyConstants.HSPACE * 2), SWT.RIGHT); // if (resetBtn != null) { // data.top = new FormAttachment(resetBtn, 0, SWT.CENTER); // } else { // data.top = new FormAttachment(0, top); // } // labelLabel.setLayoutData(data); // if (numInRow != 1) { // labelLabel.setAlignment(SWT.RIGHT); // } // // data = new FormData(); // data.left = new FormAttachment(labelLabel, -1); // data.right = new FormAttachment(labelLabel, STANDARD_BUTTON_WIDTH, SWT.RIGHT); // // if (resetBtn != null) { // data.top = new FormAttachment(resetBtn, 0, SWT.CENTER); // } else { // data.top = new FormAttachment(0, top); // } // data.height = STANDARD_HEIGHT - 2; // button.setLayoutData(data); // // dynamicProperty.setCurRowSize(buttonSize.y + ITabbedPropertyConstants.VSPACE); // } return lastControlUsed; } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.AbstractRepositoryController#createControl(org.eclipse * .swt.widgets.Composite, org.talend.core.model.process.IElementParameter, int, int, int, * org.eclipse.swt.widgets.Control) */ @Override protected Command createButtonCommand(Button button) { FileItem repositoryFileItem = null; // hwang add for feature 6484 LinkRulesItem linkItem = null; Map<String, FileItem> repositoryFileItemMap = null; Map<String, LinkRulesItem> repositoryLinkRulesItemMap = null; String paramName = (String) button.getData(PARAMETER_NAME); IElementParameter param = elem.getElementParameter(paramName); Object data = button.getData(NAME); if (data != null && data.equals(REPOSITORY_CHOICE)) { IElementParameter dbTypeParam = null; if (elem instanceof org.talend.designer.core.ui.editor.process.Process || elem instanceof StatsAndLogsElement || elem instanceof ImplicitContextLoadElement) { if (EParameterName.PROPERTY_TYPE.getName().equals(paramName)) { dbTypeParam = elem.getElementParameter(EParameterName.DB_TYPE.getName()); } else if (JobSettingsConstants.getExtraParameterName(EParameterName.PROPERTY_TYPE.getName()).equals(paramName)) { dbTypeParam = elem.getElementParameter(JobSettingsConstants.getExtraParameterName(EParameterName.DB_TYPE .getName())); } } RepositoryReviewDialog dialog = null; if (dbTypeParam != null) { String[] listRepositoryItems = dbTypeParam.getListRepositoryItems(); dialog = new RepositoryReviewDialog(Display.getCurrent().getActiveShell(), ERepositoryObjectType.METADATA, param.getRepositoryValue(), listRepositoryItems); } else { dialog = new RepositoryReviewDialog(Display.getCurrent().getActiveShell(), ERepositoryObjectType.METADATA, param.getRepositoryValue()); } if (dialog.open() == RepositoryReviewDialog.OK) { String id = dialog.getResult().getObject().getId(); IElementParameter repositoryParam = param.getChildParameters().get( EParameterName.REPOSITORY_PROPERTY_TYPE.getName()); String fullParamName = paramName + ":" + getRepositoryChoiceParamName(); //$NON-NLS-1$ Connection repositoryConnection = null; // Map<String, ConnectionItem> repositoryConnectionItemMap = // dynamicProperty.getRepositoryConnectionItemMap(); IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance(); Item item = null; try { IRepositoryViewObject repobj = factory.getLastVersion(id); if (repobj != null) { Property property = repobj.getProperty(); if (property != null) { item = property.getItem(); } } } catch (PersistenceException e) { ExceptionHandler.process(e); } if (item != null) { if (item instanceof ConnectionItem) { repositoryConnection = ((ConnectionItem) item).getConnection(); } } else { repositoryConnection = null; if (repositoryParam != null) { item = dialog.getResult().getObject().getProperty().getItem(); if (item instanceof ConnectionItem) { repositoryConnection = ((ConnectionItem) item).getConnection(); } } } // if (repositoryConnectionItemMap.containsKey(id)) { // repositoryConnection = repositoryConnectionItemMap.get(id).getConnection(); // } else { // repositoryConnection = null; // if (repositoryParam != null) { // Item item = dialog.getResult().getObject().getProperty().getItem(); // if (item instanceof ConnectionItem) { // repositoryConnection = ((ConnectionItem) item).getConnection(); // } // } // } if (repositoryConnection != null) { CompoundCommand compoundCommand = new CompoundCommand(); RepositoryNode selectNode = dialog.getResult(); ChangeValuesFromRepository changeValuesFromRepository = null; if (selectNode.getObjectType() == ERepositoryObjectType.SERVICESOPERATION) { String serviceId = item.getProperty().getId(); String portId = selectNode.getParent().getObject().getId(); String operationId = selectNode.getObject().getId(); changeValuesFromRepository = new ChangeValuesFromRepository( elem, repositoryConnection, param.getName() + ":" + EParameterName.REPOSITORY_PROPERTY_TYPE.getName(), serviceId + " - " + portId + " - " + operationId); //$NON-NLS-1$ if (GlobalServiceRegister.getDefault().isServiceRegistered(IESBService.class)) { IESBService service = (IESBService) GlobalServiceRegister.getDefault().getService(IESBService.class); boolean foundInOpen = false; IProcess2 process = null; IEditorReference[] reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getEditorReferences(); process = (IProcess2) RepositoryPlugin.getDefault().getDesignerCoreService().getCurrentProcess(); String jobID = process.getProperty().getId(); service.deleteOldRelation(jobID); service.updateOperation((INode) elem, serviceId + " - " + portId + " - " + operationId, selectNode); } } else { changeValuesFromRepository = new ChangeValuesFromRepository(elem, repositoryConnection, fullParamName, id); } if (changeValuesFromRepository != null) { compoundCommand.add(changeValuesFromRepository); } updateDBType(compoundCommand, repositoryConnection); return compoundCommand; } // for ruleItem,hywang add if (dynamicProperty instanceof MultipleThreadDynamicComposite) { repositoryFileItemMap = ((MultipleThreadDynamicComposite) dynamicProperty).getRepositoryFileItemMap(); repositoryLinkRulesItemMap = ((MultipleThreadDynamicComposite) dynamicProperty) .getRepositoryLinkRulesItemMap(); } if (repositoryFileItemMap.containsKey(id)) { repositoryFileItem = repositoryFileItemMap.get(id); } else if (repositoryLinkRulesItemMap.containsKey(id)) { linkItem = repositoryLinkRulesItemMap.get(id); } else { if (!repositoryFileItemMap.isEmpty()) { repositoryFileItem = repositoryFileItemMap.values().iterator().next(); } else { repositoryFileItem = null; } } if (repositoryFileItem != null) { CompoundCommand compoundCommand = new CompoundCommand(); final String showId = repositoryFileItem.getProperty().getId(); Command command = new PropertyChangeCommand(elem, EParameterName.REPOSITORY_PROPERTY_TYPE.getName(), showId); compoundCommand.add(command); return compoundCommand; } if (linkItem != null) { CompoundCommand compoundCommand = new CompoundCommand(); final String showId = linkItem.getProperty().getId(); Command command = new PropertyChangeCommand(elem, EParameterName.REPOSITORY_PROPERTY_TYPE.getName(), showId); compoundCommand.add(command); return compoundCommand; } } } else { /** * add by wzhang. When click the icon at the right side of Built-In. The corresponding wizard open. */ // 1. open wizard if (elem instanceof INode) { INode node = (INode) elem; final IRepositoryService repositoryService = CorePlugin.getDefault().getRepositoryService(); if (param != null) { RepositoryNode realNode = null; String repositoryValue = param.getRepositoryValue(); if (repositoryValue != null && repositoryValue.startsWith(ERepositoryCategoryType.DATABASE.getName())) { realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_CONNECTIONS); } else // file delimited if (ERepositoryCategoryType.DELIMITED.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_DELIMITED); } // file positional if (ERepositoryCategoryType.POSITIONAL.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_POSITIONAL); } // file regexp if (ERepositoryCategoryType.REGEX.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_REGEXP); } // file xml if (ERepositoryCategoryType.XML.getName().equals(repositoryValue) // bug 18012 || repositoryValue.startsWith(ERepositoryCategoryType.XML.getName())) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_XML); } // file ldif if (ERepositoryCategoryType.LDIF.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_LDIF); } // excel if (ERepositoryCategoryType.EXCEL.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_EXCEL); } // generic schema if (ERepositoryCategoryType.GENERIC.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_GENERIC_SCHEMA); } // ldap if (ERepositoryCategoryType.LDAP.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_LDAP_SCHEMA); } // wsdl if (ERepositoryCategoryType.WSDL.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_WSDL_SCHEMA); } if (ERepositoryCategoryType.WEBSERVICE.getName().equals(repositoryValue)) { realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_WSDL_SCHEMA); } // salesforce if (ERepositoryCategoryType.SALESFORCE.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_SALESFORCE_SCHEMA); } // ebcdic if (ERepositoryCategoryType.EBCDIC.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_EBCDIC); } // mdm if (ERepositoryCategoryType.MDM.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_MDMCONNECTION); } // sap if (ERepositoryCategoryType.SAP.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_SAPCONNECTIONS); } // sapIDoc if (ERepositoryCategoryType.SAPIDOC.getName().equals(repositoryValue)) { realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_SAP_IDOC); } if (ERepositoryCategoryType.HEADERFOOTER.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_HEADER_FOOTER); } // brms if (ERepositoryCategoryType.BRMS.getName().equals(repositoryValue)) { //$NON-NLS-1$ realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_BRMS); } // hl7 if (ERepositoryCategoryType.HL7.getName().equals(repositoryValue)) { realNode = (RepositoryNode) repositoryService .getRootRepositoryNode(ERepositoryObjectType.METADATA_FILE_HL7); } if (realNode != null) { final IMetadataService metadataService = CorePlugin.getDefault().getMetadataService(); if (metadataService != null) { ConnectionItem connItem = metadataService.openMetadataConnection(true, realNode, node); if (connItem != null) { IElementParameter propertyParam = elem .getElementParameterFromField(EParameterFieldType.PROPERTY_TYPE); propertyParam.getChildParameters().get(EParameterName.PROPERTY_TYPE.getName()) .setValue(EmfComponent.REPOSITORY); // 2. commnd Command cmd = new ChangeValuesFromRepository( node, connItem.getConnection(), propertyParam.getName() + ":" + EParameterName.REPOSITORY_PROPERTY_TYPE.getName(), connItem.getProperty().getId()); //$NON-NLS-1$ executeCommand(cmd); // see bug in feature 5998.refresh repositoryList. if (dynamicProperty instanceof MultipleThreadDynamicComposite) { ((MultipleThreadDynamicComposite) dynamicProperty).updateRepositoryList(); } } } } } } } return null; } // see bug 0004305 private void updateDBType(CompoundCommand compoundCommand, Connection repositoryConnection) { if (repositoryConnection == null) { return; } if (!(repositoryConnection instanceof DatabaseConnection)) { return; } final String property = "DBTYPE"; //$NON-NLS-1$ if (elem.getElementParameter(property) == null) { return; } String currentDbType = ((DatabaseConnection) repositoryConnection).getDatabaseType(); EDatabaseTypeName typeName = EDatabaseTypeName.getTypeFromDbType(currentDbType); Command command = new PropertyChangeCommand(elem, property, typeName.getXMLType()); compoundCommand.add(command); } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.AbstractRepositoryController#createComboCommand(org * .eclipse.swt.custom.CCombo) */ @Override protected Command createComboCommand(CCombo combo) { Connection repositoryConnection = null; ConnectionItem repositoryConnectionItem = null; FileItem repositoryFileItem = null; // hwang add String paramName = (String) combo.getData(PARAMETER_NAME); IElementParameter param = elem.getElementParameter(paramName); String value = combo.getText(); for (int j = 0; j < param.getListItemsValue().length; j++) { if (combo.getText().equals(param.getListItemsDisplayName()[j])) { value = (String) param.getListItemsValue()[j]; } } if (value.equals(param.getValue())) { return null; } // Map<String, ConnectionItem> repositoryConnectionItemMap = null; IElementParameter repositoryParam = null; Map<String, FileItem> repositoryFileItemMap = null; // hywang add for feature 6484 if (value.equals(EmfComponent.REPOSITORY)) { IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance(); // repositoryConnectionItemMap = dynamicProperty.getRepositoryConnectionItemMap(); if (dynamicProperty instanceof MultipleThreadDynamicComposite) { repositoryFileItemMap = ((MultipleThreadDynamicComposite) dynamicProperty).getRepositoryFileItemMap(); } repositoryParam = param.getParentParameter().getChildParameters() .get(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()); String connectionSelected = (String) repositoryParam.getValue(); /* bug 16969 */ // if (repositoryConnectionItemMap.containsKey(connectionSelected)) { try { Item item = null; if (!StringUtils.isEmpty(connectionSelected)) { IRepositoryViewObject repobj = factory.getLastVersion(connectionSelected); if (repobj != null) { Property property = repobj.getProperty(); if (property != null) { item = property.getItem(); } } if (item != null && item instanceof ConnectionItem) { repositoryConnectionItem = (ConnectionItem) factory.getLastVersion(connectionSelected).getProperty() .getItem(); repositoryConnection = repositoryConnectionItem.getConnection(); } else { repositoryConnection = null; } } } catch (PersistenceException e) { ExceptionHandler.process(e); } // } else { // if (!repositoryConnectionItemMap.isEmpty()) { // Iterator<ConnectionItem> iterator = repositoryConnectionItemMap.values().iterator(); // IElementParameter dbTypeParam = null; // if (elem instanceof org.talend.designer.core.ui.editor.process.Process || elem instanceof // StatsAndLogsElement // || elem instanceof ImplicitContextLoadElement) { // String[] split = paramName.split(":"); // String name = ""; // if (split.length == 2) { // name = split[0]; // } // if (EParameterName.PROPERTY_TYPE.getName().equals(name)) { // dbTypeParam = elem.getElementParameter(EParameterName.DB_TYPE.getName()); // } else if // (JobSettingsConstants.getExtraParameterName(EParameterName.PROPERTY_TYPE.getName()).equals(name)) { // dbTypeParam = elem.getElementParameter(JobSettingsConstants.getExtraParameterName(EParameterName.DB_TYPE // .getName())); // } // if (dbTypeParam != null) { // boolean asBefore = false; // while (iterator.hasNext()) { // ConnectionItem nextItem = iterator.next(); // if (nextItem instanceof DatabaseConnectionItem // && ((DatabaseConnectionItem) nextItem).getConnection() instanceof DatabaseConnection) { // List<String> asList = Arrays.asList(dbTypeParam.getListRepositoryItems()); // DatabaseConnection connection = (DatabaseConnection) ((DatabaseConnectionItem) nextItem) // .getConnection(); // if (isValidDbConnection(asList, connection)) { // repositoryConnectionItem = nextItem; // repositoryConnection = repositoryConnectionItem.getConnection(); // break; // } // } else { // asBefore = true; // break; // } // } // if (asBefore) { // repositoryConnectionItem = iterator.next(); // repositoryConnection = repositoryConnectionItem.getConnection(); // } // } else { // repositoryConnectionItem = iterator.next(); // repositoryConnection = repositoryConnectionItem.getConnection(); // } // } else { // repositoryConnectionItem = iterator.next(); // repositoryConnection = repositoryConnectionItem.getConnection(); // } // // } else { // repositoryConnection = null; // } // } // // for ruleItem,hywang add if (repositoryFileItemMap.containsKey(connectionSelected)) { repositoryFileItem = repositoryFileItemMap.get(connectionSelected); } else { if (!repositoryFileItemMap.isEmpty()) { repositoryFileItem = repositoryFileItemMap.values().iterator().next(); } else { repositoryFileItem = null; } } } CompoundCommand cc = new CompoundCommand(); if (repositoryConnectionItem != null) { initCDC(cc, repositoryConnectionItem); } ChangeValuesFromRepository changeValuesFromRepository1 = new ChangeValuesFromRepository(elem, repositoryConnection, paramName, value); cc.add(changeValuesFromRepository1); if (repositoryConnection != null) { ChangeValuesFromRepository changeValuesFromRepository2 = new ChangeValuesFromRepository(elem, repositoryConnection, repositoryParam.getParentParameter().getName() + ":" + repositoryParam.getName(), repositoryConnectionItem //$NON-NLS-1$ .getProperty().getId()); cc.add(changeValuesFromRepository2); } // hywang add for feature 6484 if (repositoryFileItem != null) { final String id = repositoryFileItem.getProperty().getId(); cc.add(new Command() { @Override public void execute() { IElementParameter elementParameter = elem.getElementParameter(EParameterName.PROPERTY_TYPE.getName()); if (elementParameter != null) { elementParameter = elementParameter.getChildParameters().get( EParameterName.REPOSITORY_PROPERTY_TYPE.getName()); if (elementParameter != null) { elementParameter.setValue(id); } } } }); } if (value.equals(EmfComponent.REPOSITORY)) { updateDBType(cc, repositoryConnection); } return cc; } // for stats and log , return false if stats log and implicit don't support private boolean isValidDbConnection(List supportedItems, DatabaseConnection connection) { if (connection != null) { String databaseType = connection.getDatabaseType(); if (databaseType.equals(EDatabaseTypeName.ORACLEFORSID.getDisplayName())) { databaseType = EDatabaseTypeName.ORACLEFORSID.getXmlName(); } else if (databaseType.equals(EDatabaseTypeName.ORACLESN.getDisplayName())) { databaseType = EDatabaseTypeName.ORACLESN.getXmlName(); } else if (databaseType.equals(EDatabaseTypeName.ORACLE_OCI.getDisplayName())) { databaseType = EDatabaseTypeName.ORACLE_OCI.getXmlName(); } else if (databaseType.equals(EDatabaseTypeName.MSSQL.getDisplayName())) { databaseType = EDatabaseTypeName.MSSQL.getXmlName(); } else { databaseType = EDatabaseTypeName.getTypeFromDbType(databaseType).getProduct(); } if (supportedItems.contains(databaseType)) { return true; } } return false; } private void initCDC(CompoundCommand cc, ConnectionItem originalConnectionItem) { if (!(elem instanceof Node)) { return; } Node node = (Node) elem; // ConnectionItem originalConnectionItem = repositoryConnectionItem; ConnectionItem connectionItem = originalConnectionItem; Connection originalConnection = connectionItem.getConnection(); Connection connection = connectionItem.getConnection(); if (node.getComponent().getName().contains("CDC")) { // to replace by a flag CDC in component? //$NON-NLS-1$ if (originalConnectionItem instanceof DatabaseConnectionItem) { final DatabaseConnection databaseConnection = (DatabaseConnection) connection; CDCConnection cdcConn = databaseConnection.getCdcConns(); if (cdcConn != null) { EList cdcTypes = cdcConn.getCdcTypes(); if (cdcTypes != null && !cdcTypes.isEmpty()) { CDCType cdcType = (CDCType) cdcTypes.get(0); // replace property by CDC property. String propertyId = cdcType.getLinkDB(); try { IRepositoryViewObject object = ProxyRepositoryFactory.getInstance().getLastVersion(propertyId); if (object != null) { if (object.getProperty().getItem() instanceof DatabaseConnectionItem) { DatabaseConnectionItem dbConnItem = (DatabaseConnectionItem) object.getProperty().getItem(); // replace connection by CDC connection connectionItem = dbConnItem; connection = dbConnItem.getConnection(); } } } catch (PersistenceException e) { ExceptionHandler.process(e); } // set cdc type mode. IElementParameter logModeParam = node.getElementParameter(EParameterName.CDC_TYPE_MODE.getName()); if (logModeParam != null) { String cdcTypeMode = ((DatabaseConnection) originalConnection).getCdcTypeMode(); Command logModeCmd = new PropertyChangeCommand(node, EParameterName.CDC_TYPE_MODE.getName(), CDCTypeMode.LOG_MODE.getName().equals(cdcTypeMode)); cc.add(logModeCmd); } // set lib for as400 so far. final String name = "SOURCE_LIB"; //$NON-NLS-1$ IElementParameter libParam = node.getElementParameter(name); if (libParam != null) { Command libSettingCmd = new PropertyChangeCommand(node, name, TalendTextUtils.addQuotes(databaseConnection.getSID())); cc.add(libSettingCmd); } } } } } } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.AbstractRepositoryController#getRepositoryChoiceParamName * () */ @Override protected String getRepositoryChoiceParamName() { return EParameterName.REPOSITORY_PROPERTY_TYPE.getName(); } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.AbstractRepositoryController#getRepositoryTypeParamName * () */ @Override protected String getRepositoryTypeParamName() { return EParameterName.PROPERTY_TYPE.getName(); } // @Override // protected String getDisplayNameFromValue(IElementParameter param, String value) { // if (param == null || value == null || value.equals("")) { //$NON-NLS-1$ // return null; // } // if (!param.getName().equals(getRepositoryChoiceParamName())) { // return null; // } // Item item = param.getLinkedRepositoryItem(); // if (item == null || (item != null && !item.getProperty().getId().equals(value))) { // Map<String, ConnectionItem> itemMap = dynamicProperty.getRepositoryConnectionItemMap(); // item = itemMap.get(value); // if (item == null) { // item = UpdateRepositoryUtils.getConnectionItemByItemId(value); // if (item != null) { // // set in map // itemMap.put(value, (ConnectionItem) item); // } // } // } // if (item != null && item instanceof ConnectionItem) { // return dynamicProperty.getRepositoryAliasName((ConnectionItem) item) + ":" + item.getProperty().getLabel(); // //$NON-NLS-1$ // } // return null; // } }