// ============================================================================ // // 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.utils; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.process.EParameterFieldType; import org.talend.core.model.process.Element; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.process.INode; import org.talend.core.model.process.IProcess2; import org.talend.core.model.properties.ConnectionItem; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.model.components.EmfComponent; import org.talend.repository.UpdateRepositoryUtils; import org.talend.repository.ui.utils.ConnectionContextHelper; /** * ggu class global comment. Detailled comment */ public final class DetectContextVarsUtils { private DetectContextVarsUtils() { } /** * * ggu Comment method "detectByPropertyType". * * type is the EParameterFieldType.PROPERTY_TYPE */ public static Map<String, Set<String>> detectByPropertyType(Element element, boolean show) { Map<String, Set<String>> varsMap = new HashMap<String, Set<String>>(); // PTODO List<IElementParameter> elementParameters = element.getElementParametersFromField(EParameterFieldType.PROPERTY_TYPE); if (elementParameters != null) { for (IElementParameter ptParam : elementParameters) { IElementParameter rParam = ptParam.getChildParameters().get(EParameterName.PROPERTY_TYPE.getName()); IElementParameter idParam = ptParam.getChildParameters().get(EParameterName.REPOSITORY_PROPERTY_TYPE.getName()); if (rParam != null && idParam != null && EmfComponent.REPOSITORY.equals(rParam.getValue())) { String id = (String) idParam.getValue(); ConnectionItem connItem = UpdateRepositoryUtils.getConnectionItemByItemId(id); if (connItem != null) { ConnectionContextHelper.checkContextMode(connItem); Connection connection = connItem.getConnection(); if (connection.isContextMode() && (!show || (show && ptParam.isShow(element.getElementParameters())))) { Set<String> neededVars = ConnectionContextHelper.retrieveContextVar(element.getElementParameters(), connection, null); if (neededVars != null && !neededVars.isEmpty()) { Set<String> varsSet = varsMap.get(id); if (varsSet == null) { varsMap.put(id, neededVars); } else { varsSet.addAll(neededVars); } } } } } } } return varsMap; } public static Map<String, Set<String>> detectProcess(IProcess2 process2, boolean withNodes) { Map<String, Set<String>> varsMap = new HashMap<String, Set<String>>(); if (process2 instanceof Element) { varsMap.putAll(detectByPropertyType((Element) process2, true)); } if (withNodes) { for (INode node : process2.getGraphicalNodes()) { varsMap.putAll(detectNode(node)); } } return varsMap; } public static Map<String, Set<String>> detectNode(INode node) { if (node instanceof Element) { return detectByPropertyType((Element) node, true); } return Collections.emptyMap(); } }