/*
* 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.webservice.aspects.sql;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.teiid.core.designer.ModelerCoreException;
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.DatatypeConstants;
import org.teiid.designer.core.types.DatatypeManager;
import org.teiid.designer.metadata.runtime.MetadataConstants;
import org.teiid.designer.metamodels.webservice.Input;
import org.teiid.designer.metamodels.webservice.WebServiceMetamodelPlugin;
import org.teiid.designer.metamodels.webservice.WebServicePackage;
/**
* @since 8.0
*/
public class InputAspect extends WebServiceComponentAspect implements SqlProcedureParameterAspect {
private final static String DEFAULT_VALUE = null;
private final static int LENGTH = 0;
private final static int SCALE = 0;
private final static int NULL_TYPE = MetadataConstants.NULL_TYPES.NULLABLE; // nullable
private final static int PRECISION = 0;
private final static int POSITION = 0;
private final static int RADIX = 0;
private final static String DATATYPE_NAME = DatatypeConstants.BuiltInNames.XML_LITERAL;
private final static String RUNTIME_TYPE = DatatypeConstants.RuntimeTypeNames.XML;
protected InputAspect(final MetamodelEntity entity) {
super(entity);
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDatatype(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public EObject getDatatype(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
try {
final DatatypeManager dtMgr = ModelerCore.getDatatypeManager(eObject,true);
return dtMgr.getBuiltInDatatype(DATATYPE_NAME);
} catch(ModelerCoreException e) {
WebServiceMetamodelPlugin.Util.log(e);
// ignore
}
return null;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDatatypeName(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public String getDatatypeName(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return DATATYPE_NAME;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDatatypeObjectID(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public String getDatatypeObjectID(final EObject eObject) {
EObject datatype = getDatatype(eObject);
if(datatype == null) {
return null;
}
final DatatypeManager dtMgr = ModelerCore.getDatatypeManager(eObject,true);
return dtMgr.getUuidString(datatype) == null ? "" : dtMgr.getUuidString(datatype); //$NON-NLS-1$
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getRuntimeType(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public String getRuntimeType(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return RUNTIME_TYPE;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getDefaultValue(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public String getDefaultValue(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return DEFAULT_VALUE;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getNullType(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public int getNullType(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return NULL_TYPE;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getLength(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public int getLength(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return LENGTH;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getPosition(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public int getPosition(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return POSITION;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getRadix(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public int getRadix(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return RADIX;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getScale(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public int getScale(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return SCALE;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getPrecision(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public int getPrecision(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return PRECISION;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#getType(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public int getType(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return MetadataConstants.PARAMETER_TYPES.IN_PARM;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#isOptional(org.eclipse.emf.ecore.EObject)
* @since 4.2
*/
@Override
public boolean isOptional(final EObject eObject) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
return false;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#isDatatypeFeature(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature)
* @since 4.2
*/
@Override
public boolean isDatatypeFeature(final EObject eObject,
final EStructuralFeature eFeature) {
CoreArgCheck.isInstanceOf(Input.class, eObject);
final EObjectImpl eObjectImpl = super.getEObjectImpl(eObject);
if (eObjectImpl != null) {
switch (eObjectImpl.eDerivedStructuralFeatureID(eFeature)) {
case WebServicePackage.INPUT__CONTENT_SIMPLE_TYPE:
return true;
}
}
return false;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlAspect#isRecordType(char)
* @since 4.2
*/
@Override
public boolean isRecordType(final char recordType) {
return (recordType == IndexConstants.RECORD_TYPE.CALLABLE_PARAMETER);
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#canSetDatatype()
* @since 4.2
*/
@Override
public boolean canSetDatatype() {
return false;
}
/**
* @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(Input.class, eObject);
final String msg = WebServiceMetamodelPlugin.Util.getString("InputAspect.setDatatypeNotSupported"); //$NON-NLS-1$
throw new UnsupportedOperationException(msg);
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#canSetLength()
* @since 4.2
*/
@Override
public boolean canSetLength() {
return false;
}
/**
* @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(Input.class, eObject);
final String msg = WebServiceMetamodelPlugin.Util.getString("InputAspect.setLengthNotSupported"); //$NON-NLS-1$
throw new UnsupportedOperationException(msg);
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#canSetNullType()
* @since 4.2
*/
@Override
public boolean canSetNullType() {
return false;
}
/**
* @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(Input.class, eObject);
final String msg = WebServiceMetamodelPlugin.Util.getString("InputAspect.setNullTypeNotSupported"); //$NON-NLS-1$
throw new UnsupportedOperationException(msg);
}
/**
* @see org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureParameterAspect#isInputParam(org.eclipse.emf.ecore.EObject)
* @since 4.3
*/
@Override
public boolean isInputParam(EObject eObject) {
return true;
}
/**
* @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(Input.class, eObject);
final String msg = WebServiceMetamodelPlugin.Util.getString("InputAspect.setDirectionNotSupported"); //$NON-NLS-1$
throw new UnsupportedOperationException(msg);
}
}