/*
* 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.core.metamodel.aspect.sql;
import org.eclipse.emf.ecore.EObject;
import org.teiid.designer.core.index.IndexConstants;
import org.teiid.designer.core.metamodel.aspect.AspectManager;
import org.teiid.designer.core.metamodel.aspect.MetamodelAspect;
/**
* @since 8.0
*/
public class SqlAspectHelper {
/**
* Get the SqlAspect given an EObject
* @param eObject the EObject
* @return the SqlAspect for the supplied EObject
*/
public static SqlAspect getSqlAspect(final EObject eObject) {
return AspectManager.getSqlAspect(eObject);
}
/**
* Determine if the supplied EObject has a SqlColumnAspect
* @param eObject the EObject
* @return 'true' if has SqlColumnAspect, 'false' if not.
*/
public static boolean isColumn(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlColumnAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlTableAspect
* @param eObject the EObject
* @return 'true' if has SqlTableAspect, 'false' if not.
*/
public static boolean isTable(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlTableAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlTableAspect
* and is a XML document
* @param eObject the EObject
* @return 'true' if has SqlTableAspect and XML doc, 'false' if not.
*/
public static boolean isXmlDocument(EObject eObject ) {
if(isValidTreeTransformationTarget(eObject)) {
return true;
}
return false;
}
/**
* Determine if the supplied EObject has a SqlTableAspect
* and is a XML document
* @param eObject the EObject
* @return 'true' if has SqlTableAspect and XML doc, 'false' if not.
*/
public static boolean isXmlFragment(EObject eObject ) {
if(isValidTreeTransformationTarget(eObject)) {
return true;
}
return false;
}
/**
* Determine if the supplied EObject has a SqlTableAspect
* @param eObject the EObject
* @return 'true' if has SqlTableAspect, 'false' if not.
*/
public static boolean isUpdatableGroup(EObject eObject ) {
MetamodelAspect sqlAspect = getSqlAspect(eObject);
if(sqlAspect != null) {
if ( sqlAspect instanceof SqlTableAspect ) {
SqlTableAspect tableAspect = (SqlTableAspect) sqlAspect;
return tableAspect.supportsUpdate(eObject);
}
if ( sqlAspect instanceof SqlProcedureAspect ) {
// Virtual procedures allow only select SQL, not insert, update or delete SQL
return false;
}
}
return false;
}
/**
* Determine if the supplied EObject is a valid Sql transformation target
* @param eObject the EObject
* @return 'true' if valid target, 'false' if not.
*/
public static boolean isValidSqlTransformationTarget(EObject eObject ) {
boolean isValid = false;
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null ) {
if(aspect instanceof SqlTableAspect ) {
isValid = ((SqlTableAspect)aspect).isMappable(eObject,SqlTableAspect.MAPPINGS.SQL_TRANSFORM);
} else if(aspect instanceof SqlProcedureAspect) {
isValid = ((SqlProcedureAspect)aspect).isMappable(eObject,SqlProcedureAspect.MAPPINGS.SQL_TRANSFORM);
}
}
return isValid;
}
/**
* Determine if the supplied EObject is a valid tree transformation target
* @param eObject the EObject
* @return 'true' if valid target, 'false' if not.
*/
public static boolean isValidTreeTransformationTarget(EObject eObject ) {
boolean isValid = false;
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null ) {
if(aspect instanceof SqlTableAspect ) {
isValid = ((SqlTableAspect)aspect).isMappable(eObject,SqlTableAspect.MAPPINGS.TREE_TRANSFORM);
}
}
return isValid;
}
/**
* Determine if the supplied EObject is a valid transformation target
* @param eObject the EObject
* @return 'true' if valid target, 'false' if not.
*/
public static boolean isValidTransformationTarget(EObject eObject ) {
boolean isValid = isValidSqlTransformationTarget(eObject);
if(!isValid) {
isValid = isValidTreeTransformationTarget(eObject);
}
return isValid;
}
/**
* Determine if the supplied EObject has a SqlColumnSetAspect
* @param eObject the EObject
* @return 'true' if has SqlColumnSetAspect, 'false' if not.
*/
public static boolean isColumnSet(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlColumnSetAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlForeignKeyAspect
* @param eObject the EObject
* @return 'true' if has SqlForeignKeyAspect, 'false' if not.
*/
public static boolean isForeignKey(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlForeignKeyAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlTransformationAspect
* @param eObject the EObject
* @return 'true' if has SqlTransformationAspect, 'false' if not.
*/
public static boolean isTransformation(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlTransformationAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlDatatypeAspect
* @param eObject the EObject
* @return 'true' if has SqlDatatypeAspect, 'false' if not.
*/
public static boolean isDatatype(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlDatatypeAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlAnnotationAspect
* @param eObject the EObject
* @return 'true' if has SqlAnnotationAspect, 'false' if not.
*/
public static boolean isAnnotation(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlAnnotationAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlVdbAspect
* @param eObject the EObject
* @return 'true' if has SqlVdbAspect, 'false' if not.
*/
public static boolean isVdb(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlVdbAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlProcedureAspect
* @param eObject the EObject
* @return 'true' if has SqlProcedureAspect, 'false' if not.
*/
public static boolean isProcedure(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlProcedureAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlProcedureParameterAspect
* @param eObject the EObject
* @return 'true' if has SqlProcedureParameterAspect, 'false' if not.
*/
public static boolean isProcedureParameter(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlProcedureParameterAspect )
return true;
return false;
}
/**
* Determine if the supplied EObject has a SqlTableAspect
* and the aspect has a resultType() == ResultSet
* @param eObject the EObject
* @return 'true' if has SqlTableAspect and is correct result set record type, 'false' if not.
*/
public static boolean isProcedureResultSet(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlResultSetAspect ) {
if( ((SqlResultSetAspect)aspect).isRecordType(IndexConstants.RECORD_TYPE.RESULT_SET) )
return true;
}
return false;
}
/**
* Determine if the supplied EObject has a SqlModelAspect
* @param eObject the EObject
* @return 'true' if has SqlModelAspect, 'false' if not.
*/
public static boolean isModel(EObject eObject ) {
MetamodelAspect aspect = getSqlAspect(eObject);
if( aspect != null && aspect instanceof SqlModelAspect )
return true;
return false;
}
}