// ============================================================================ // // 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.jobsettings; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.gef.commands.CommandStack; import org.eclipse.jface.preference.IPreferenceStore; import org.talend.commons.exception.PersistenceException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.core.language.ECodeLanguage; import org.talend.core.language.LanguageManager; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.metadata.designerproperties.RepositoryToComponentProperty; import org.talend.core.model.process.Element; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.process.IProcess2; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.properties.Item; 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.repository.model.ProxyRepositoryFactory; 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.process.jobsettings.JobSettingsConstants; import org.talend.designer.core.ui.AbstractMultiPageTalendEditor; import org.talend.designer.core.ui.editor.cmd.ChangeValuesFromRepository; import org.talend.designer.core.ui.views.statsandlogs.StatsAndLogsViewHelper; import org.talend.repository.UpdateRepositoryUtils; import org.talend.repository.model.IProxyRepositoryFactory; /** * DOC hcw class global comment. Detailled comment */ public class ImplicitContextLoadHelper { private static final IPreferenceStore PREFERENCE_STORE = DesignerPlugin.getDefault().getPreferenceStore(); public static String getRepositoryTypeLabel(ConnectionItem connectionItem) { if (connectionItem == null) { return ""; //$NON-NLS-1$ } ERepositoryObjectType repositoryObjectType = ERepositoryObjectType.getItemType(connectionItem); String aliasName = repositoryObjectType.getAlias(); org.talend.core.model.metadata.builder.connection.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 + ":" + connectionItem.getProperty().getLabel(); //$NON-NLS-1$ } public static Object getPreferenceValue(String prefix, EParameterName param, Class type) { String name = prefix + getExtraParameterName(param); if (type == Boolean.class) { return PREFERENCE_STORE.getBoolean(name); } else if (type == String.class) { return PREFERENCE_STORE.getString(name); } return ""; //$NON-NLS-1$ } /** * DOC hcw Comment method "reloadValuesFromPreferencePage". * * @param elem * @param extraComposite */ public static void reloadValuesFromPreferencePage(Element element, ExtraComposite extraComposite) { ECodeLanguage language = LanguageManager.getCurrentLanguage(); String languagePrefix = language.toString() + "_"; //$NON-NLS-1$ Map values = loadPreferenceValues(); List<? extends IElementParameter> elementParameters = element.getElementParameters(); for (IElementParameter elementParameter : elementParameters) { String name = elementParameter.getName(); if (name.equals(getExtraParameterName(EParameterName.PROPERTY_TYPE))) { loadPropertyTypeFromPreference(element, extraComposite, languagePrefix, elementParameter); } else { Object value = values.get(name); if (value != null) { elementParameter.setValue(value); } } } } /** * DOC hcw Comment method "reloadPropertyType". * * @param element * @param extraComposite * @param languagePrefix * @param elementParameter */ private static void loadPropertyTypeFromPreference(Element element, ExtraComposite extraComposite, String languagePrefix, IElementParameter elementParameter) { String propertyType = (String) getPreferenceValue(languagePrefix, EParameterName.PROPERTY_TYPE, String.class); String id = (String) getPreferenceValue(languagePrefix, EParameterName.REPOSITORY_PROPERTY_TYPE, String.class); Connection repositoryConnection = null; IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance(); Item item = null; try { IRepositoryViewObject repobj = factory.getLastVersion(id); if (repobj != null) { Property tmpproperty = repobj.getProperty(); if (tmpproperty != null) { item = tmpproperty.getItem(); } } } catch (PersistenceException e) { ExceptionHandler.process(e); } if (item != null && item instanceof ConnectionItem) { repositoryConnection = ((ConnectionItem) item).getConnection(); } else { repositoryConnection = null; } ChangeValuesFromRepository cmd1 = new ChangeValuesFromRepository(element, repositoryConnection, getExtraParameterName(EParameterName.PROPERTY_TYPE) + ":" + EParameterName.PROPERTY_TYPE.getName(), propertyType); //$NON-NLS-1$ ChangeValuesFromRepository cmd2 = new ChangeValuesFromRepository(element, repositoryConnection, getExtraParameterName(EParameterName.PROPERTY_TYPE) + ":" + EParameterName.REPOSITORY_PROPERTY_TYPE.getName(), id); //$NON-NLS-1$ AbstractMultiPageTalendEditor part = (AbstractMultiPageTalendEditor) ((IProcess2) element).getEditor(); if (part instanceof AbstractMultiPageTalendEditor) { Object adapter = (part).getTalendEditor().getAdapter(CommandStack.class); if (adapter != null) { CommandStack commandStack = ((CommandStack) adapter); commandStack.execute(cmd1); commandStack.execute(cmd2); } } } /* * add quote. */ private static String addQuote(String value) { if (value == null) { return TalendTextUtils.addQuotes(""); //$NON-NLS-1$ } value = value.trim(); return value; } private static String removeQuote(String value) { if (value == null) { return ""; //$NON-NLS-1$ } value = value.trim(); return value; } /** * DOC hcw Comment method "loadPreferenceValues". * * @return */ @SuppressWarnings("unchecked") private static Map loadPreferenceValues() { Map values = new HashMap(); ECodeLanguage language = LanguageManager.getCurrentLanguage(); String languagePrefix = language.toString() + "_"; //$NON-NLS-1$ EParameterName[] params = { EParameterName.IMPLICIT_TCONTEXTLOAD, EParameterName.FROM_FILE_FLAG, EParameterName.FROM_DATABASE_FLAG, EParameterName.PRINT_OPERATIONS, EParameterName.DISABLE_WARNINGS, EParameterName.DISABLE_ERROR, EParameterName.DISABLE_INFO }; putValuesToMap(values, languagePrefix, params, Boolean.class); params = new EParameterName[] { EParameterName.IMPLICIT_TCONTEXTLOAD_FILE, EParameterName.FIELDSEPARATOR, EParameterName.DB_TYPE, EParameterName.LOAD_NEW_VARIABLE, EParameterName.NOT_LOAD_OLD_VARIABLE }; putValuesToMap(values, languagePrefix, params, String.class); String propertyType = (String) getPreferenceValue(languagePrefix, EParameterName.PROPERTY_TYPE, String.class); if (!propertyType.equals(EmfComponent.BUILTIN)) { params = new EParameterName[] { EParameterName.HOST, EParameterName.PORT, EParameterName.DBNAME, EParameterName.SCHEMA_DB, EParameterName.USER, EParameterName.PASS, EParameterName.DBFILE, EParameterName.DBTABLE, EParameterName.QUERY_CONDITION }; putValuesToMap(values, languagePrefix, params, String.class); } return values; } /** * DOC hcw Comment method "putValuesToMap". * * @param values * @param languagePrefix * @param params * @param type */ private static void putValuesToMap(Map values, String languagePrefix, EParameterName[] params, Class type) { if (type == Boolean.class) { for (EParameterName param : params) { values.put(getExtraParameterName(param), getPreferenceValue(languagePrefix, param, Boolean.class)); } } else if (type == String.class) { for (EParameterName param : params) { values.put(getExtraParameterName(param), addQuote((String) getPreferenceValue(languagePrefix, param, String.class))); } } } /** * DOC hcw Comment method "saveValuesToPreferencePage". * * @param elem * @param extraComposite */ public static void saveValuesToPreferencePage(Element element, ExtraComposite extraComposite) { ECodeLanguage language = LanguageManager.getCurrentLanguage(); String languagePrefix = language.toString() + "_"; //$NON-NLS-1$ EParameterName[] params = { EParameterName.IMPLICIT_TCONTEXTLOAD, EParameterName.FROM_FILE_FLAG, EParameterName.FROM_DATABASE_FLAG, EParameterName.IMPLICIT_TCONTEXTLOAD_FILE, EParameterName.FIELDSEPARATOR, EParameterName.DB_TYPE, EParameterName.HOST, EParameterName.PORT, EParameterName.DBNAME, EParameterName.SCHEMA_DB, EParameterName.USER, EParameterName.PASS, EParameterName.DBFILE, EParameterName.DBTABLE, EParameterName.QUERY_CONDITION, EParameterName.LOAD_NEW_VARIABLE, EParameterName.NOT_LOAD_OLD_VARIABLE, EParameterName.PRINT_OPERATIONS, EParameterName.DISABLE_WARNINGS, EParameterName.DISABLE_ERROR, EParameterName.DISABLE_INFO }; Map<String, EParameterName> extraParams = new HashMap<String, EParameterName>(); for (EParameterName param : params) { extraParams.put(getExtraParameterName(param), param); } List<? extends IElementParameter> elementParameters = element.getElementParameters(); for (IElementParameter elementParameter : elementParameters) { String name = elementParameter.getName(); Object value = elementParameter.getValue(); if (name.equals(getExtraParameterName(EParameterName.PROPERTY_TYPE))) { savePropertyTypeToPreference(extraComposite, languagePrefix, elementParameter); } else if (extraParams.containsKey(name)) { if (value instanceof String) { PREFERENCE_STORE.setValue(languagePrefix + getExtraParameterName(extraParams.get(name)), removeQuote((String) value)); } else if (value instanceof Boolean) { PREFERENCE_STORE.setValue(languagePrefix + getExtraParameterName(extraParams.get(name)), (Boolean) value); } } } } /** * DOC hcw Comment method "savePropertyType". * * @param extraComposite * @param languagePrefix * @param elementParameter */ private static void savePropertyTypeToPreference(ExtraComposite extraComposite, String languagePrefix, IElementParameter elementParameter) { String itemId = (String) elementParameter.getChildParameters().get("REPOSITORY_PROPERTY_TYPE").getValue(); //$NON-NLS-1$ String propertyType = (String) elementParameter.getChildParameters().get("PROPERTY_TYPE").getValue(); //$NON-NLS-1$ Item item = UpdateRepositoryUtils.getConnectionItemByItemId(itemId); PREFERENCE_STORE.setValue(languagePrefix + getExtraParameterName(EParameterName.PROPERTY_TYPE), propertyType); PREFERENCE_STORE.setValue(languagePrefix + getExtraParameterName(EParameterName.REPOSITORY_PROPERTY_TYPE), itemId); if (item != null) { PREFERENCE_STORE.setValue(languagePrefix + getExtraParameterName(EParameterName.REPOSITORY_PROPERTY_TYPE) + StatsAndLogsViewHelper.CONNECTION_ITEM_LABEL, item.getProperty().getLabel()); } } public static String getExtraParameterName(EParameterName param) { switch (param) { case IMPLICIT_TCONTEXTLOAD: case FIELDSEPARATOR: case IMPLICIT_TCONTEXTLOAD_FILE: case LOAD_NEW_VARIABLE: // java only case NOT_LOAD_OLD_VARIABLE: // java only case PRINT_OPERATIONS: case DISABLE_ERROR: // java only case DISABLE_WARNINGS: case DISABLE_INFO: // java only return param.getName(); default: return JobSettingsConstants.getExtraParameterName(param.getName()); } } }