/* * 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.aspects.sql; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.index.IndexConstants; import org.teiid.designer.core.metamodel.aspect.MetamodelEntity; import org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect; import org.teiid.designer.core.types.DatatypeManager; import org.teiid.designer.metamodels.relational.DirectionKind; import org.teiid.designer.metamodels.relational.NullableType; import org.teiid.designer.metamodels.relational.ProcedureParameter; import org.teiid.designer.metamodels.relational.RelationalPackage; /** * ProcedureParameterAspect * * @since 8.0 */ public class ProcedureParameterAspect extends RelationalEntityAspect implements SqlProcedureParameterAspect { public ProcedureParameterAspect(MetamodelEntity entity) { super(entity); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDatatypeName(org.eclipse.emf.ecore.EObject) */ @Override public String getDatatypeName(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; final EObject dataType = proc.getType(); final DatatypeManager dtMgr = ModelerCore.getDatatypeManager(proc,true); final String dtName = dtMgr.getName(dataType); return dtName == null ? "" : dtMgr.getName(dataType); //$NON-NLS-1$ } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDatatype(org.eclipse.emf.ecore.EObject) */ @Override public EObject getDatatype(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; return proc.getType(); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getRuntimeType(org.eclipse.emf.ecore.EObject) */ @Override public String getRuntimeType(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; final EObject datatype = proc.getType(); return datatype == null ? "" : ModelerCore.getDatatypeManager(eObject,true).getRuntimeTypeName(datatype); //$NON-NLS-1$ } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDefaultValue(org.eclipse.emf.ecore.EObject) */ @Override public String getDefaultValue(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; return proc.getDefaultValue(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getType(org.eclipse.emf.ecore.EObject) */ @Override public int getType(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; DirectionKind direction = proc.getDirection(); return convertDirectionKindToMetadataConstant(direction); //return direction.getValue(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getLength(org.eclipse.emf.ecore.EObject) */ @Override public int getLength(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; return proc.getLength(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getPrecision(org.eclipse.emf.ecore.EObject) */ @Override public int getPrecision(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; return proc.getPrecision(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getRadix(org.eclipse.emf.ecore.EObject) */ @Override public int getRadix(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; return proc.getRadix(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getPosition(org.eclipse.emf.ecore.EObject) */ @Override public int getPosition(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; List params = proc.getProcedure().getParameters(); // correct from '0' to '1' based position return params.indexOf(eObject) + 1; } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getScale(org.eclipse.emf.ecore.EObject) */ @Override public int getScale(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; return proc.getScale(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getNullType(org.eclipse.emf.ecore.EObject) */ @Override public int getNullType(EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; NullableType nullType = proc.getNullable(); return convertNullableTypeToMetadataConstant(nullType); //return nullType.getValue(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#isRecordType(char) */ @Override public boolean isRecordType(char recordType) { return (recordType == IndexConstants.RECORD_TYPE.CALLABLE_PARAMETER); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDatatypeObjectID(org.eclipse.emf.ecore.EObject) */ @Override public String getDatatypeObjectID(EObject eObject) { final EObject datatype = getDatatype(eObject); final DatatypeManager dtMgr = ModelerCore.getDatatypeManager(eObject,true); return dtMgr.getUuidString(datatype); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#isOptional() */ @Override public boolean isOptional(EObject eObject) { return false; } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#updateObject(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EObject) */ @Override public void updateObject(EObject targetObject, EObject sourceObject) { } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlColumnAspect#isDatatypeFeature(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature) */ @Override public boolean isDatatypeFeature(final EObject eObject, final EStructuralFeature eFeature) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); final EObjectImpl eObjectImpl = super.getEObjectImpl(eObject); if (eObjectImpl != null) { switch (eObjectImpl.eDerivedStructuralFeatureID(eFeature)) { case RelationalPackage.PROCEDURE_PARAMETER__TYPE: return true; } } return false; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#canSetDatatype() * @since 4.2 */ @Override public boolean canSetDatatype() { return true; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#setDatatype(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EObject) * @since 4.2 */ @Override public void setDatatype(EObject eObject, EObject datatype) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter procParam = (ProcedureParameter) eObject; procParam.setType(datatype); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#canSetLength() * @since 4.2 */ @Override public boolean canSetLength() { return true; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#setLength(org.eclipse.emf.ecore.EObject, int) * @since 4.2 */ @Override public void setLength(EObject eObject, int length) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter procParam = (ProcedureParameter) eObject; procParam.setLength(length); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#canSetNullType() * @since 4.2 */ @Override public boolean canSetNullType() { return true; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#setNullType(org.eclipse.emf.ecore.EObject, int) * @since 4.2 */ @Override public void setNullType(EObject eObject, int nullType) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter procParam = (ProcedureParameter) eObject; procParam.setNullable(convertMetadataConstantToNullableType(nullType)); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#isInputParam() * @since 4.3 */ @Override public boolean isInputParam(final EObject eObject) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter procParam = (ProcedureParameter) eObject; final DirectionKind dir = procParam.getDirection(); return DirectionKind.IN_LITERAL == dir || DirectionKind.INOUT_LITERAL == dir; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#setDirection(org.eclipse.emf.ecore.EObject, int) * @since 4.3 */ @Override public void setDirection(EObject eObject, int dir) { CoreArgCheck.isInstanceOf(ProcedureParameter.class, eObject); ProcedureParameter proc = (ProcedureParameter) eObject; proc.setDirection(convertMetadataContantToDirectionKind(dir)); } }