/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.metamodels.relational.util; import java.util.Iterator; import org.eclipse.emf.ecore.EObject; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.types.DatatypeManager; import org.teiid.designer.metamodels.relational.DirectionKind; import org.teiid.designer.metamodels.relational.Procedure; import org.teiid.designer.metamodels.relational.ProcedureParameter; /** * PushdownFunctionUtil * @since 8.0 */ public class PushdownFunctionUtil { private PushdownFunctionUtil() { super(); } public static String getSignature( final Procedure proc ) { final String name = proc.getName(); final StringBuffer sb = new StringBuffer(); sb.append(name); // Add the parameters ... sb.append('('); boolean isFirst = true; Iterator iter = proc.getParameters().iterator(); while (iter.hasNext()) { final ProcedureParameter param = (ProcedureParameter)iter.next(); DirectionKind direction = param.getDirection(); int directionKind = direction.getValue(); if (directionKind == DirectionKind.IN || directionKind == DirectionKind.INOUT) { if (!isFirst) { sb.append(','); } final String paramSig = getSignature(param); sb.append(paramSig); isFirst = false; } } sb.append(')'); // Add the return parameter ... iter = proc.getParameters().iterator(); while (iter.hasNext()) { final ProcedureParameter param = (ProcedureParameter)iter.next(); DirectionKind direction = param.getDirection(); int directionKind = direction.getValue(); if (directionKind == DirectionKind.RETURN) { sb.append(':'); final String paramSig = getSignature(param); sb.append(paramSig); } } return sb.toString(); } public static String getSignature( final ProcedureParameter param ) { EObject type = param.getType(); final DatatypeManager dtMgr = ModelerCore.getDatatypeManager(param, true); final String typeName = dtMgr.getName(type); return typeName; } }