/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tuscany.sdo.model.impl;
import commonj.sdo.Sequence;
import commonj.sdo.helper.TypeHelper;
import java.util.Collection;
import java.util.List;
import org.apache.tuscany.sdo.impl.DataObjectBase;
import org.apache.tuscany.sdo.model.ModelFactory;
import org.apache.tuscany.sdo.model.Property;
import org.apache.tuscany.sdo.model.Type;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.BasicExtendedMetaData;
/**
*
* An implementation of the model object 'Type'.
*
*
* The following features are implemented:
*
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#getBaseType Base Type}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#getProperty Property}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#getAliasName Alias Name}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#getAny Any}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#getName Name}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#getUri Uri}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#isDataType Data Type}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#isOpen Open}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#isSequenced Sequenced}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#isAbstract Abstract}
* - {@link org.apache.tuscany.sdo.model.impl.TypeImpl#getAnyAttribute Any Attribute}
*
*
*
* @generated
*/
public class TypeImpl extends DataObjectBase implements Type
{
public final static int BASE_TYPE = 0;
public final static int PROPERTY = 1;
public final static int ALIAS_NAME = 2;
public final static int ANY = -1;
public final static int NAME = 3;
public final static int URI = 4;
public final static int DATA_TYPE = 5;
public final static int OPEN = 6;
public final static int SEQUENCED = 7;
public final static int ABSTRACT = 8;
public final static int ANY_ATTRIBUTE = -2;
public final static int SDO_PROPERTY_COUNT = 9;
public final static int EXTENDED_PROPERTY_COUNT = -2;
/**
* The internal feature id for the 'Base Type' reference list.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_BASE_TYPE = 0;
/**
* The internal feature id for the 'Property' containment reference list.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_PROPERTY = 1;
/**
* The internal feature id for the 'Alias Name' attribute list.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_ALIAS_NAME = 2;
/**
* The internal feature id for the 'Any' attribute list.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_ANY = 3;
/**
* The internal feature id for the 'Name' attribute.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_NAME = 4;
/**
* The internal feature id for the 'Uri' attribute.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_URI = 5;
/**
* The internal feature id for the 'Data Type' attribute.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_DATA_TYPE = 6;
/**
* The internal feature id for the 'Open' attribute.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_OPEN = 7;
/**
* The internal feature id for the 'Sequenced' attribute.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_SEQUENCED = 8;
/**
* The internal feature id for the 'Abstract' attribute.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_ABSTRACT = 9;
/**
* The internal feature id for the 'Any Attribute' attribute list.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_ANY_ATTRIBUTE = 10;
/**
* The number of properties for this type.
*
*
* @generated
* @ordered
*/
public final static int INTERNAL_PROPERTY_COUNT = 11;
protected int internalConvertIndex(int internalIndex)
{
switch (internalIndex)
{
case INTERNAL_BASE_TYPE: return BASE_TYPE;
case INTERNAL_PROPERTY: return PROPERTY;
case INTERNAL_ALIAS_NAME: return ALIAS_NAME;
case INTERNAL_ANY: return ANY;
case INTERNAL_NAME: return NAME;
case INTERNAL_URI: return URI;
case INTERNAL_DATA_TYPE: return DATA_TYPE;
case INTERNAL_OPEN: return OPEN;
case INTERNAL_SEQUENCED: return SEQUENCED;
case INTERNAL_ABSTRACT: return ABSTRACT;
case INTERNAL_ANY_ATTRIBUTE: return ANY_ATTRIBUTE;
}
return super.internalConvertIndex(internalIndex);
}
/**
* The cached value of the '{@link #getBaseType() Base Type}' reference list.
*
*
* @see #getBaseType()
* @generated
* @ordered
*/
protected List baseType = null;
/**
* The cached value of the '{@link #getProperty() Property}' containment reference list.
*
*
* @see #getProperty()
* @generated
* @ordered
*/
protected List property = null;
/**
* The cached value of the '{@link #getAliasName() Alias Name}' attribute list.
*
*
* @see #getAliasName()
* @generated
* @ordered
*/
protected List aliasName = null;
/**
* The cached value of the '{@link #getAny() Any}' attribute list.
*
*
* @see #getAny()
* @generated
* @ordered
*/
protected Sequence any = null;
/**
* The default value of the '{@link #getName() Name}' attribute.
*
*
* @see #getName()
* @generated
* @ordered
*/
protected static final String NAME_DEFAULT_ = null;
/**
* The cached value of the '{@link #getName() Name}' attribute.
*
*
* @see #getName()
* @generated
* @ordered
*/
protected String name = NAME_DEFAULT_;
/**
* This is true if the Name attribute has been set.
*
*
* @generated
* @ordered
*/
protected boolean name_set_ = false;
/**
* The default value of the '{@link #getUri() Uri}' attribute.
*
*
* @see #getUri()
* @generated
* @ordered
*/
protected static final String URI_DEFAULT_ = null;
/**
* The cached value of the '{@link #getUri() Uri}' attribute.
*
*
* @see #getUri()
* @generated
* @ordered
*/
protected String uri = URI_DEFAULT_;
/**
* This is true if the Uri attribute has been set.
*
*
* @generated
* @ordered
*/
protected boolean uri_set_ = false;
/**
* The default value of the '{@link #isDataType() Data Type}' attribute.
*
*
* @see #isDataType()
* @generated
* @ordered
*/
protected static final boolean DATA_TYPE_DEFAULT_ = false;
/**
* The cached value of the '{@link #isDataType() Data Type}' attribute.
*
*
* @see #isDataType()
* @generated
* @ordered
*/
protected boolean dataType = DATA_TYPE_DEFAULT_;
/**
* This is true if the Data Type attribute has been set.
*
*
* @generated
* @ordered
*/
protected boolean dataType_set_ = false;
/**
* The default value of the '{@link #isOpen() Open}' attribute.
*
*
* @see #isOpen()
* @generated
* @ordered
*/
protected static final boolean OPEN_DEFAULT_ = false;
/**
* The cached value of the '{@link #isOpen() Open}' attribute.
*
*
* @see #isOpen()
* @generated
* @ordered
*/
protected boolean open = OPEN_DEFAULT_;
/**
* This is true if the Open attribute has been set.
*
*
* @generated
* @ordered
*/
protected boolean open_set_ = false;
/**
* The default value of the '{@link #isSequenced() Sequenced}' attribute.
*
*
* @see #isSequenced()
* @generated
* @ordered
*/
protected static final boolean SEQUENCED_DEFAULT_ = false;
/**
* The cached value of the '{@link #isSequenced() Sequenced}' attribute.
*
*
* @see #isSequenced()
* @generated
* @ordered
*/
protected boolean sequenced = SEQUENCED_DEFAULT_;
/**
* This is true if the Sequenced attribute has been set.
*
*
* @generated
* @ordered
*/
protected boolean sequenced_set_ = false;
/**
* The default value of the '{@link #isAbstract() Abstract}' attribute.
*
*
* @see #isAbstract()
* @generated
* @ordered
*/
protected static final boolean ABSTRACT_DEFAULT_ = false;
/**
* The cached value of the '{@link #isAbstract() Abstract}' attribute.
*
*
* @see #isAbstract()
* @generated
* @ordered
*/
protected boolean abstract_ = ABSTRACT_DEFAULT_;
/**
* This is true if the Abstract attribute has been set.
*
*
* @generated
* @ordered
*/
protected boolean abstract_set_ = false;
/**
* The cached value of the '{@link #getAnyAttribute() Any Attribute}' attribute list.
*
*
* @see #getAnyAttribute()
* @generated
* @ordered
*/
protected Sequence anyAttribute = null;
/**
*
*
* @generated
*/
public TypeImpl()
{
super();
}
/**
*
*
* @generated
*/
public commonj.sdo.Type getStaticType()
{
return ((ModelFactoryImpl)ModelFactory.INSTANCE).getType();
}
/**
*
*
* @generated
*/
public List getBaseType()
{
if (baseType == null)
{
baseType = createPropertyList(ListKind.NONCONTAINMENT_RESOLVING, Type.class, BASE_TYPE, 0);
}
return baseType;
}
/**
*
*
* @generated
*/
public List getProperty()
{
if (property == null)
{
property = createPropertyList(ListKind.CONTAINMENT, Property.class, PROPERTY, 0);
}
return property;
}
/**
*
*
* @generated
*/
public List getAliasName()
{
if (aliasName == null)
{
aliasName = createPropertyList(ListKind.DATATYPE, String.class, ALIAS_NAME, 0);
}
return aliasName;
}
/**
*
*
* @generated
*/
public Sequence getAny()
{
if (any == null)
{
any = createSequence(INTERNAL_ANY);
}
return any;
}
/**
*
*
* @generated
*/
public String getName()
{
return name;
}
/**
*
*
* @generated
*/
public void setName(String newName)
{
String oldName = name;
name = newName;
boolean oldName_set_ = name_set_;
name_set_ = true;
if (isNotifying())
notify(ChangeKind.SET, INTERNAL_NAME, oldName, name, !oldName_set_);
}
/**
*
*
* @generated
*/
public void unsetName()
{
String oldName = name;
boolean oldName_set_ = name_set_;
name = NAME_DEFAULT_;
name_set_ = false;
if (isNotifying())
notify(ChangeKind.UNSET, INTERNAL_NAME, oldName, NAME_DEFAULT_, oldName_set_);
}
/**
*
*
* @generated
*/
public boolean isSetName()
{
return name_set_;
}
/**
*
*
* @generated
*/
public String getUri()
{
return uri;
}
/**
*
*
* @generated
*/
public void setUri(String newUri)
{
String oldUri = uri;
uri = newUri;
boolean oldUri_set_ = uri_set_;
uri_set_ = true;
if (isNotifying())
notify(ChangeKind.SET, INTERNAL_URI, oldUri, uri, !oldUri_set_);
}
/**
*
*
* @generated
*/
public void unsetUri()
{
String oldUri = uri;
boolean oldUri_set_ = uri_set_;
uri = URI_DEFAULT_;
uri_set_ = false;
if (isNotifying())
notify(ChangeKind.UNSET, INTERNAL_URI, oldUri, URI_DEFAULT_, oldUri_set_);
}
/**
*
*
* @generated
*/
public boolean isSetUri()
{
return uri_set_;
}
/**
*
*
* @generated
*/
public boolean isDataType()
{
return dataType;
}
/**
*
*
* @generated
*/
public void setDataType(boolean newDataType)
{
boolean oldDataType = dataType;
dataType = newDataType;
boolean oldDataType_set_ = dataType_set_;
dataType_set_ = true;
if (isNotifying())
notify(ChangeKind.SET, INTERNAL_DATA_TYPE, oldDataType, dataType, !oldDataType_set_);
}
/**
*
*
* @generated
*/
public void unsetDataType()
{
boolean oldDataType = dataType;
boolean oldDataType_set_ = dataType_set_;
dataType = DATA_TYPE_DEFAULT_;
dataType_set_ = false;
if (isNotifying())
notify(ChangeKind.UNSET, INTERNAL_DATA_TYPE, oldDataType, DATA_TYPE_DEFAULT_, oldDataType_set_);
}
/**
*
*
* @generated
*/
public boolean isSetDataType()
{
return dataType_set_;
}
/**
*
*
* @generated
*/
public boolean isOpen()
{
return open;
}
/**
*
*
* @generated
*/
public void setOpen(boolean newOpen)
{
boolean oldOpen = open;
open = newOpen;
boolean oldOpen_set_ = open_set_;
open_set_ = true;
if (isNotifying())
notify(ChangeKind.SET, INTERNAL_OPEN, oldOpen, open, !oldOpen_set_);
}
/**
*
*
* @generated
*/
public void unsetOpen()
{
boolean oldOpen = open;
boolean oldOpen_set_ = open_set_;
open = OPEN_DEFAULT_;
open_set_ = false;
if (isNotifying())
notify(ChangeKind.UNSET, INTERNAL_OPEN, oldOpen, OPEN_DEFAULT_, oldOpen_set_);
}
/**
*
*
* @generated
*/
public boolean isSetOpen()
{
return open_set_;
}
/**
*
*
* @generated
*/
public boolean isSequenced()
{
return sequenced;
}
/**
*
*
* @generated
*/
public void setSequenced(boolean newSequenced)
{
boolean oldSequenced = sequenced;
sequenced = newSequenced;
boolean oldSequenced_set_ = sequenced_set_;
sequenced_set_ = true;
if (isNotifying())
notify(ChangeKind.SET, INTERNAL_SEQUENCED, oldSequenced, sequenced, !oldSequenced_set_);
}
/**
*
*
* @generated
*/
public void unsetSequenced()
{
boolean oldSequenced = sequenced;
boolean oldSequenced_set_ = sequenced_set_;
sequenced = SEQUENCED_DEFAULT_;
sequenced_set_ = false;
if (isNotifying())
notify(ChangeKind.UNSET, INTERNAL_SEQUENCED, oldSequenced, SEQUENCED_DEFAULT_, oldSequenced_set_);
}
/**
*
*
* @generated
*/
public boolean isSetSequenced()
{
return sequenced_set_;
}
/**
*
*
* @generated
*/
public boolean isAbstract()
{
return abstract_;
}
/**
*
*
* @generated
*/
public void setAbstract(boolean newAbstract)
{
boolean oldAbstract = abstract_;
abstract_ = newAbstract;
boolean oldAbstract_set_ = abstract_set_;
abstract_set_ = true;
if (isNotifying())
notify(ChangeKind.SET, INTERNAL_ABSTRACT, oldAbstract, abstract_, !oldAbstract_set_);
}
/**
*
*
* @generated
*/
public void unsetAbstract()
{
boolean oldAbstract = abstract_;
boolean oldAbstract_set_ = abstract_set_;
abstract_ = ABSTRACT_DEFAULT_;
abstract_set_ = false;
if (isNotifying())
notify(ChangeKind.UNSET, INTERNAL_ABSTRACT, oldAbstract, ABSTRACT_DEFAULT_, oldAbstract_set_);
}
/**
*
*
* @generated
*/
public boolean isSetAbstract()
{
return abstract_set_;
}
/**
*
*
* @generated
*/
public Sequence getAnyAttribute()
{
if (anyAttribute == null)
{
anyAttribute = createSequence(INTERNAL_ANY_ATTRIBUTE);
}
return anyAttribute;
}
/**
*
*
* @generated
*/
public ChangeContext inverseRemove(Object otherEnd, int propertyIndex, ChangeContext changeContext)
{
switch (propertyIndex)
{
case PROPERTY:
return removeFromList(getProperty(), otherEnd, changeContext);
case ANY:
return removeFromSequence(getAny(), otherEnd, changeContext);
case ANY_ATTRIBUTE:
return removeFromSequence(getAnyAttribute(), otherEnd, changeContext);
}
return super.inverseRemove(otherEnd, propertyIndex, changeContext);
}
/**
*
*
* @generated
*/
public Object get(int propertyIndex, boolean resolve)
{
switch (propertyIndex)
{
case BASE_TYPE:
return getBaseType();
case PROPERTY:
return getProperty();
case ALIAS_NAME:
return getAliasName();
case ANY:
// XXX query introduce coreType as an argument? -- semantic = if true -- coreType - return the core EMF object if value is a non-EMF wrapper/view
//if (coreType)
return getAny();
case NAME:
return getName();
case URI:
return getUri();
case DATA_TYPE:
return isDataType() ? Boolean.TRUE : Boolean.FALSE;
case OPEN:
return isOpen() ? Boolean.TRUE : Boolean.FALSE;
case SEQUENCED:
return isSequenced() ? Boolean.TRUE : Boolean.FALSE;
case ABSTRACT:
return isAbstract() ? Boolean.TRUE : Boolean.FALSE;
case ANY_ATTRIBUTE:
// XXX query introduce coreType as an argument? -- semantic = if true -- coreType - return the core EMF object if value is a non-EMF wrapper/view
//if (coreType)
return getAnyAttribute();
}
return super.get(propertyIndex, resolve);
}
/**
*
*
* @generated
*/
public void set(int propertyIndex, Object newValue)
{
switch (propertyIndex)
{
case BASE_TYPE:
getBaseType().clear();
getBaseType().addAll((Collection)newValue);
return;
case PROPERTY:
getProperty().clear();
getProperty().addAll((Collection)newValue);
return;
case ALIAS_NAME:
getAliasName().clear();
getAliasName().addAll((Collection)newValue);
return;
case ANY:
setSequence(getAny(), newValue);
return;
case NAME:
setName((String)newValue);
return;
case URI:
setUri((String)newValue);
return;
case DATA_TYPE:
setDataType(((Boolean)newValue).booleanValue());
return;
case OPEN:
setOpen(((Boolean)newValue).booleanValue());
return;
case SEQUENCED:
setSequenced(((Boolean)newValue).booleanValue());
return;
case ABSTRACT:
setAbstract(((Boolean)newValue).booleanValue());
return;
case ANY_ATTRIBUTE:
setSequence(getAnyAttribute(), newValue);
return;
}
super.set(propertyIndex, newValue);
}
/**
*
*
* @generated
*/
public void unset(int propertyIndex)
{
switch (propertyIndex)
{
case BASE_TYPE:
getBaseType().clear();
return;
case PROPERTY:
getProperty().clear();
return;
case ALIAS_NAME:
getAliasName().clear();
return;
case ANY:
unsetSequence(getAny());
return;
case NAME:
unsetName();
return;
case URI:
unsetUri();
return;
case DATA_TYPE:
unsetDataType();
return;
case OPEN:
unsetOpen();
return;
case SEQUENCED:
unsetSequenced();
return;
case ABSTRACT:
unsetAbstract();
return;
case ANY_ATTRIBUTE:
unsetSequence(getAnyAttribute());
return;
}
super.unset(propertyIndex);
}
/**
*
*
* @generated
*/
public boolean isSet(int propertyIndex)
{
switch (propertyIndex)
{
case BASE_TYPE:
return baseType != null && !baseType.isEmpty();
case PROPERTY:
return property != null && !property.isEmpty();
case ALIAS_NAME:
return aliasName != null && !aliasName.isEmpty();
case ANY:
return any != null && !isSequenceEmpty(getAny());
case NAME:
return isSetName();
case URI:
return isSetUri();
case DATA_TYPE:
return isSetDataType();
case OPEN:
return isSetOpen();
case SEQUENCED:
return isSetSequenced();
case ABSTRACT:
return isSetAbstract();
case ANY_ATTRIBUTE:
return anyAttribute != null && !isSequenceEmpty(getAnyAttribute());
}
return super.isSet(propertyIndex);
}
/**
*
*
* @generated
*/
public String toString()
{
if (isProxy(this)) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (aliasName: ");
result.append(aliasName);
result.append(", any: ");
result.append(any);
result.append(", name: ");
if (name_set_) result.append(name); else result.append("");
result.append(", uri: ");
if (uri_set_) result.append(uri); else result.append("");
result.append(", dataType: ");
if (dataType_set_) result.append(dataType); else result.append("");
result.append(", open: ");
if (open_set_) result.append(open); else result.append("");
result.append(", sequenced: ");
if (sequenced_set_) result.append(sequenced); else result.append("");
result.append(", abstract: ");
if (abstract_set_) result.append(abstract_); else result.append("");
result.append(", anyAttribute: ");
result.append(anyAttribute);
result.append(')');
return result.toString();
}
EStructuralFeature javaClassFeature = null;
public String getInstanceClassName()
{
if (javaClassFeature == null)
{
//FB TODO figure out what helper to use
javaClassFeature = (EStructuralFeature)TypeHelper.INSTANCE.getOpenContentProperty("commonj.sdo/java", "javaClass");
}
Sequence anyAttribute = getAnyAttribute();
int count = anyAttribute.size();
for (int i = 0; i < count; i++)
{
EStructuralFeature eFeature = (EStructuralFeature)anyAttribute.getProperty(i);
if (eFeature == javaClassFeature)
{
return (String)anyAttribute.getValue(i);
}
}
return null;
}
} //TypeImpl