/* * 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.xml.aspects.sql; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.ecore.EObject; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.metamodel.aspect.AbstractMetamodelAspect; import org.teiid.designer.core.metamodel.aspect.AspectManager; 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.SqlColumnAspect; import org.teiid.designer.core.metamodel.aspect.sql.SqlTableAspect; /** * AbstractXmlDocumentEntitySqlAspect * * @since 8.0 */ public abstract class AbstractXmlDocumentEntitySqlAspect extends AbstractMetamodelAspect implements SqlAspect { public static final String ASPECT_ID = ModelerCore.EXTENSION_POINT.SQL_ASPECT.ID; public static final String FULL_NAME_DELIMITER = "."; //$NON-NLS-1$ /** * Construct an instance of AbstractXmlDocumentEntitySqlAspect. */ public AbstractXmlDocumentEntitySqlAspect(final MetamodelEntity entity) { super.setMetamodelEntity(entity); super.setID(ASPECT_ID); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#isQueryable(org.eclipse.emf.ecore.EObject) */ @Override public boolean isQueryable(final EObject eObject) { return true; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#getParentObjectID(org.eclipse.emf.ecore.EObject) */ @Override public Object getParentObjectID(EObject eObject) { final SqlAspect childAspect = AspectManager.getSqlAspect(eObject); // If we are trying to get the ObjectID associated with the parent // of a SqlColumnAspect then navigate up the parent hierarchy until // we reach a SqlTableAspect if (childAspect instanceof SqlColumnAspect) { EObject parent = eObject.eContainer(); SqlAspect parentAspect = AspectManager.getSqlAspect(parent); while ( parentAspect != null && !(parentAspect instanceof SqlTableAspect) ) { parent = parent.eContainer(); parentAspect = AspectManager.getSqlAspect(parent); } if (parentAspect != null && (parentAspect instanceof SqlTableAspect)) { return parentAspect.getObjectID(parent); } } // Else return the ObjectID of the parent aspect final EObject parent = eObject.eContainer(); if ( parent != null ) { SqlAspect parentAspect = AspectManager.getSqlAspect(parent); if ( parentAspect != null ) { return parentAspect.getObjectID(parent); } } return null; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#getNameInSource(org.eclipse.emf.ecore.EObject) */ @Override public String getNameInSource(EObject eObject) { return null; } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#getFullName(org.eclipse.emf.ecore.EObject) */ @Override public String getFullName(final EObject eObject) { // Else simply append the entity name onto the parent fullname final String parentFullName = getParentFullName(eObject); final String name = getName(eObject); if ( parentFullName != null ) { return parentFullName + FULL_NAME_DELIMITER + name; } return name; } protected String getShortName(final EObject eObject) { return getName(eObject); } /** * @see org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#getPath(org.eclipse.emf.ecore.EObject) */ @Override public IPath getPath(final EObject eObject) { final IPath parentPath = getParentPath(eObject); final String name = getName(eObject); if ( parentPath != null && name != null) { return parentPath.append(name); } else if(name == null) { return null; } return new Path(name); } protected String getParentFullName(EObject eObject) { final EObject parent = eObject.eContainer(); if ( parent != null ) { final SqlAspect parentAspect = AspectManager.getSqlAspect(parent); if ( parentAspect != null ) { final String parentFullName = parentAspect.getFullName(parent); return parentFullName; } } return null; } protected IPath getParentPath(EObject eObject) { final EObject parent = eObject.eContainer(); if ( parent != null ) { final SqlAspect parentAspect = AspectManager.getSqlAspect(parent); if ( parentAspect != null ) { final IPath parentPath = parentAspect.getPath(parent); return parentPath; } } return null; } protected String getModelName(EObject eObject) { IPath parentPath = getParentPath(eObject); return parentPath.segment(0); } }