/* * 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.core.runtime.IStatus; import org.eclipse.emf.ecore.EObject; 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.SqlAspect; import org.teiid.designer.core.metamodel.aspect.sql.SqlAspectHelper; import org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect; import org.teiid.designer.core.metamodel.aspect.sql.SqlTableAspect; import org.teiid.designer.metamodels.core.ModelAnnotation; import org.teiid.designer.metamodels.core.ModelType; import org.teiid.designer.metamodels.relational.Procedure; import org.teiid.designer.metamodels.relational.RelationalPlugin; /** * ProcedureAspect * * @since 8.0 */ public class ProcedureAspect extends RelationalEntityAspect implements SqlProcedureAspect { public ProcedureAspect(final MetamodelEntity entity) { super(entity); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect#isVirtual(org.eclipse.emf.ecore.EObject) */ @Override public boolean isVirtual(final EObject eObject) { CoreArgCheck.isInstanceOf(Procedure.class, eObject); Procedure procedure = (Procedure) eObject; try { ModelAnnotation ma = ModelerCore.getModelEditor().getModelAnnotation(procedure); return (ma != null && ma.getModelType().getValue() == ModelType.VIRTUAL); } catch(Exception e) { RelationalPlugin.Util.log(IStatus.ERROR, e, e.getMessage()); } return false; } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect#isFunction(org.eclipse.emf.ecore.EObject) */ @Override public boolean isFunction(final EObject eObject) { CoreArgCheck.isInstanceOf(Procedure.class, eObject); Procedure proc = (Procedure) eObject; return proc.isFunction(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect#getParameters(org.eclipse.emf.ecore.EObject) */ @Override public List getParameters(final EObject eObject) { CoreArgCheck.isInstanceOf(Procedure.class, eObject); Procedure proc = (Procedure) eObject; return proc.getParameters(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect#getResult(org.eclipse.emf.ecore.EObject) */ @Override public Object getResult(final EObject eObject) { CoreArgCheck.isInstanceOf(Procedure.class, eObject); Procedure proc = (Procedure) eObject; return proc.getResult(); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect#getUpdateCount(org.eclipse.emf.ecore.EObject) * @since 5.5.3 */ @Override public int getUpdateCount(EObject eObject) { CoreArgCheck.isInstanceOf(Procedure.class, eObject); return ((Procedure)eObject).getUpdateCount().getValue(); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#isRecordType(char) */ @Override public boolean isRecordType(final char recordType) { return (recordType == IndexConstants.RECORD_TYPE.CALLABLE); } /* * @See org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect#isMappable(org.eclipse.emf.ecore.EObject, int) */ @Override public boolean isMappable(final EObject eObject, final int mappingType) { if(isVirtual(eObject)) { return (mappingType == SqlProcedureAspect.MAPPINGS.SQL_TRANSFORM); } return false; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlTableAspect#canAcceptTransformationSource(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EObject) * @since 4.3 */ @Override public boolean canAcceptTransformationSource(EObject target, EObject source) { CoreArgCheck.isInstanceOf(Procedure.class, target); CoreArgCheck.isNotNull(source); // no object should be source of itself if(source == target) { return false; } if(isVirtual(target)) { SqlAspect sourceAspect = SqlAspectHelper.getSqlAspect(source); if(sourceAspect instanceof SqlTableAspect || sourceAspect instanceof SqlProcedureAspect) { return true; } } return false; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlTableAspect#canBeTransformationSource(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EObject) * @since 4.3 */ @Override public boolean canBeTransformationSource(EObject source, EObject target) { CoreArgCheck.isInstanceOf(Procedure.class, source); CoreArgCheck.isNotNull(target); // no object should be source of itself if(source == target) { return false; } SqlAspect targetAspect = SqlAspectHelper.getSqlAspect(target); if(targetAspect instanceof SqlTableAspect) { return ((SqlTableAspect) targetAspect).isVirtual(target); } else if(targetAspect instanceof SqlProcedureAspect) { return ((SqlProcedureAspect) targetAspect).isVirtual(target); } 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(final EObject targetObject, final EObject sourceObject) { } }