/* * 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 org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.ModelEditor; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.metamodel.aspect.AbstractMetamodelAspect; import org.teiid.designer.core.metamodel.aspect.MetamodelEntity; import org.teiid.designer.core.metamodel.aspect.sql.SqlAspect; import org.teiid.designer.metadata.runtime.MetadataConstants; import org.teiid.designer.metamodels.relational.DirectionKind; import org.teiid.designer.metamodels.relational.NullableType; import org.teiid.designer.metamodels.relational.RelationalEntity; import org.teiid.designer.metamodels.relational.SearchabilityType; /** * RelationalEntityAspect * * @since 8.0 */ public abstract class RelationalEntityAspect extends AbstractMetamodelAspect implements SqlAspect { public static final String ASPECT_ID = ModelerCore.EXTENSION_POINT.SQL_ASPECT.ID; protected RelationalEntityAspect( MetamodelEntity entity ) { super.setMetamodelEntity(entity); super.setID(ASPECT_ID); } /** * Get the value of the given feature by looking up the EClass of the EObejct. * * @param featureID The ID of the feature to lookup. * @param The EObejct whose feature is lookedup. * @return The value of the feature */ protected Object getFeatureValue( EObject eObject, // NO_UCD int featureID ) { // NO_UCD EClass eClass = eObject.eClass(); EStructuralFeature feature = eClass.getEStructuralFeature(featureID); return eObject.eGet(feature); } /* (non-Javadoc) * @See org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#getName(org.eclipse.emf.ecore.EObject) */ @Override public String getName( EObject eObject ) { CoreArgCheck.isInstanceOf(RelationalEntity.class, eObject); RelationalEntity entity = (RelationalEntity)eObject; return entity.getName(); } /* (non-Javadoc) * @See org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#getNameInSource(org.eclipse.emf.ecore.EObject) */ @Override public String getNameInSource( EObject eObject ) { CoreArgCheck.isInstanceOf(RelationalEntity.class, eObject); RelationalEntity entity = (RelationalEntity)eObject; return entity.getNameInSource(); } /* (non-Javadoc) * @See org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#getObjectID(org.eclipse.emf.ecore.EObject) */ @Override public Object getObjectID( EObject eObject ) { return super.getObjectID(eObject); } /** * Return the relative path to the EObject within its model. The path includes the name of the model that contains this * object. * * @param eObject * @return */ @Override public IPath getPath( final EObject eObject ) { String pathString = getFullName(eObject).replace(DELIMITER_CHAR, IPath.SEPARATOR); return new Path(pathString); } /** * Return the fully qualified name of the metamodel entity. * * @param eObject * @return The fully qualified name of the entity. */ @Override public String getFullName( final EObject eObject ) { ModelEditor editor = ModelerCore.getModelEditor(); String modelName = editor.getModelName(eObject); String name = getName(eObject); EObject container = eObject.eContainer(); // append parent information in front of the eObject name while (container != null) { String partName = getName(container); name = partName + DELIMITER_CHAR + name; container = container.eContainer(); } // return the fully qualified name with model name appended return modelName + DELIMITER_CHAR + name; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#isQueryable(org.eclipse.emf.ecore.EObject) */ @Override public boolean isQueryable( final EObject eObject ) { return true; } // ================================================================================== // P R O T E C T E D M E T H O D S // ================================================================================== protected int convertDirectionKindToMetadataConstant( final DirectionKind kind ) { switch (kind.getValue()) { case DirectionKind.IN: return MetadataConstants.PARAMETER_TYPES.IN_PARM; case DirectionKind.OUT: return MetadataConstants.PARAMETER_TYPES.OUT_PARM; case DirectionKind.INOUT: return MetadataConstants.PARAMETER_TYPES.INOUT_PARM; case DirectionKind.RETURN: return MetadataConstants.PARAMETER_TYPES.RETURN_VALUE; case DirectionKind.UNKNOWN: return MetadataConstants.PARAMETER_TYPES.RESULT_SET; default: return -1; } } protected DirectionKind convertMetadataContantToDirectionKind( final int direction ) { switch (direction) { case MetadataConstants.PARAMETER_TYPES.IN_PARM: return DirectionKind.IN_LITERAL; case MetadataConstants.PARAMETER_TYPES.OUT_PARM: return DirectionKind.OUT_LITERAL; case MetadataConstants.PARAMETER_TYPES.INOUT_PARM: return DirectionKind.INOUT_LITERAL; case MetadataConstants.PARAMETER_TYPES.RETURN_VALUE: return DirectionKind.RETURN_LITERAL; default: case MetadataConstants.PARAMETER_TYPES.RESULT_SET: return DirectionKind.UNKNOWN_LITERAL; } } protected int convertNullableTypeToMetadataConstant( final NullableType type ) { switch (type.getValue()) { case NullableType.NO_NULLS: return MetadataConstants.NULL_TYPES.NOT_NULL; case NullableType.NULLABLE: return MetadataConstants.NULL_TYPES.NULLABLE; case NullableType.NULLABLE_UNKNOWN: return MetadataConstants.NULL_TYPES.UNKNOWN; default: return -1; } } protected NullableType convertMetadataConstantToNullableType( final int nullType ) { switch (nullType) { case MetadataConstants.NULL_TYPES.NOT_NULL: return NullableType.NO_NULLS_LITERAL; case MetadataConstants.NULL_TYPES.NULLABLE: return NullableType.NULLABLE_LITERAL; case MetadataConstants.NULL_TYPES.UNKNOWN: return NullableType.NULLABLE_UNKNOWN_LITERAL; default: return NullableType.NULLABLE_UNKNOWN_LITERAL; } } protected int convertSearchabilityTypeToMetadataConstant( final SearchabilityType type ) { switch (type.getValue()) { case SearchabilityType.SEARCHABLE: return MetadataConstants.SEARCH_TYPES.SEARCHABLE; case SearchabilityType.ALL_EXCEPT_LIKE: return MetadataConstants.SEARCH_TYPES.ALLEXCEPTLIKE; case SearchabilityType.LIKE_ONLY: return MetadataConstants.SEARCH_TYPES.LIKE_ONLY; case SearchabilityType.UNSEARCHABLE: return MetadataConstants.SEARCH_TYPES.UNSEARCHABLE; default: return -1; } } protected SearchabilityType convertMetadataConstantToSearchabilityType( final int searchabilityType ) { switch (searchabilityType) { case MetadataConstants.SEARCH_TYPES.SEARCHABLE: return SearchabilityType.SEARCHABLE_LITERAL; case MetadataConstants.SEARCH_TYPES.ALLEXCEPTLIKE: return SearchabilityType.ALL_EXCEPT_LIKE_LITERAL; case MetadataConstants.SEARCH_TYPES.LIKE_ONLY: return SearchabilityType.LIKE_ONLY_LITERAL; case MetadataConstants.SEARCH_TYPES.UNSEARCHABLE: return SearchabilityType.UNSEARCHABLE_LITERAL; default: return SearchabilityType.SEARCHABLE_LITERAL; } } }