// ============================================================================ // // 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 org.eclipse.gef.commands.Command; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.widgets.Button; import org.talend.commons.exception.PersistenceException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.process.EParameterFieldType; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.properties.ConnectionItem; 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.properties.tab.IDynamicProperty; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.model.components.EmfComponent; import org.talend.designer.core.ui.editor.cmd.ChangeValuesFromRepository; import org.talend.designer.core.ui.editor.cmd.PropertyChangeCommand; import org.talend.designer.core.utils.ValidationRulesUtil; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.RepositoryNode; import org.talend.repository.ui.dialog.RepositoryReviewDialog; /** * DOC ycbai class global comment. Detailled comment */ public class ValidationRuleTypeController extends AbstractRepositoryController { public ValidationRuleTypeController(IDynamicProperty dp) { super(dp); } protected Command createButtonCommand(Button button) { IElementParameter switchParam = elem.getElementParameter(EParameterName.REPOSITORY_ALLOW_AUTO_SWITCH.getName()); String paramName = (String) button.getData(PARAMETER_NAME); IElementParameter param = elem.getElementParameter(paramName); Object data = button.getData(NAME); if (data != null && data.equals(REPOSITORY_CHOICE)) { String propertyType = (String) elem.getPropertyValue(EParameterName.SCHEMA_TYPE.getName()); if (EmfComponent.BUILTIN.equals(propertyType)) { MessageDialog .openWarning( button.getShell(), "Warning", "The schema type of component has been setted to 'Built-In', please set it to 'Repository' if you want to use the validation rule."); return null; } ERepositoryObjectType type = ERepositoryObjectType.METADATA_VALIDATION_RULES; RepositoryReviewDialog dialog = new RepositoryReviewDialog(button.getShell(), type, param.getRepositoryValue(), new ViewerFilter[] { new ValidationRuleFilter() }); if (dialog.open() == RepositoryReviewDialog.OK) { RepositoryNode node = dialog.getResult(); while (node.getObject().getProperty().getItem() == null || (!(node.getObject().getProperty().getItem() instanceof ConnectionItem))) { node = node.getParent(); } if (switchParam != null) { switchParam.setValue(Boolean.FALSE); } String id = dialog.getResult().getObject().getProperty().getId(); if (id.equals(elem.getPropertyValue(paramName))) { return null; } return new PropertyChangeCommand(elem, EParameterName.REPOSITORY_VALIDATION_RULE_TYPE.getName(), id); } } return null; } /* * (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; 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; } ChangeValuesFromRepository changeValuesFromRepository = new ChangeValuesFromRepository(elem, repositoryConnection, paramName, value); return changeValuesFromRepository; } protected void fastInitializeRepositoryNames() { super.fastInitializeRepositoryNames(); fastRepositoryUpdateValidationRule(); } private void fastRepositoryUpdateValidationRule() { IElementParameter param = elem.getElementParameter(EParameterFieldType.VALIDATION_RULE_TYPE.getName()); if (param == null) { return; } param = param.getChildParameters().get(EParameterName.REPOSITORY_VALIDATION_RULE_TYPE.getName()); if (param != null && param.getValue() != null) { IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance(); String linkedRepository = (String) param.getValue(); Item item; String displayName = ""; try { IRepositoryViewObject object = factory.getLastVersion(linkedRepository); if (object == null) { return; } item = object.getProperty().getItem(); if (item instanceof ConnectionItem) { lastItemUsed = (ConnectionItem) item; displayName = dynamicProperty.getRepositoryAliasName(lastItemUsed) + ":" //$NON-NLS-1$ + lastItemUsed.getProperty().getLabel(); } } catch (PersistenceException e) { ExceptionHandler.process(e); } param.setListItemsDisplayName(new String[] { displayName }); param.setListItemsValue(new String[] { (String) param.getValue() }); } } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.AbstractRepositoryController#getRepositoryChoiceParamName * () */ @Override protected String getRepositoryChoiceParamName() { return EParameterName.REPOSITORY_VALIDATION_RULE_TYPE.getName(); } /* * (non-Javadoc) * * @see * org.talend.designer.core.ui.editor.properties.controllers.AbstractRepositoryController#getRepositoryTypeParamName * () */ @Override protected String getRepositoryTypeParamName() { return EParameterName.VALIDATION_RULE_TYPE.getName(); } class ValidationRuleFilter extends ViewerFilter { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { RepositoryNode node = (RepositoryNode) element; if (node.getObjectType() == ERepositoryObjectType.METADATA_VALIDATION_RULES) { List<IRepositoryViewObject> objs = ValidationRulesUtil.getRelatedValidationRuleObjs(elem); if (objs == null || objs.size() < 1) { return false; } for (IRepositoryViewObject obj : objs) { IRepositoryViewObject repObj = node.getObject(); if (repObj != null && repObj.getId() != null && repObj.getId().equals(obj.getId())) { return true; } } return false; } return true; } } }