/*
* 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.xsd.aspects.uml;
import java.util.Collection;
import java.util.Collections;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xsd.XSDLengthFacet;
import org.eclipse.xsd.XSDNamedComponent;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import org.teiid.core.designer.TeiidDesignerRuntimeException;
import org.teiid.core.designer.util.CoreStringUtil;
import org.teiid.core.designer.util.I18nUtil;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.metamodel.aspect.MetamodelEntity;
import org.teiid.designer.core.metamodel.aspect.uml.UmlClassifier;
import org.teiid.designer.core.metamodel.aspect.uml.UmlProperty;
import org.teiid.designer.core.types.DatatypeManager;
import org.teiid.designer.xsd.PluginConstants;
import org.teiid.designer.xsd.util.ModelerXsdUtils;
/**
* ViewAspect
*
* @since 8.0
*/
public class EnumeratedTypeAspect extends AbstractXsdEntityAspect
implements PluginConstants,
UmlClassifier {
///////////////////////////////////////////////////////////////////////////////////////////////
// CONSTRUCTORS
///////////////////////////////////////////////////////////////////////////////////////////////
public EnumeratedTypeAspect(MetamodelEntity theEntity) {
super(theEntity);
}
///////////////////////////////////////////////////////////////////////////////////////////////
// METHODS
///////////////////////////////////////////////////////////////////////////////////////////////
private XSDSimpleTypeDefinition assertEnumeratedType(Object theObject) {
if ((theObject != null) && (theObject instanceof EObject) && ModelerXsdUtils.isEnumeratedType((EObject)theObject)) {
return (XSDSimpleTypeDefinition)theObject;
}
String msg = Util.getString(I18nUtil.getPropertyPrefix(EnumeratedTypeAspect.class) + "nullOrWrongType"); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
}
/**
* @see org.teiid.designer.xsd.aspects.uml.AbstractXsdEntityAspect#getEditableSignature(java.lang.Object)
* @since 5.0.2
*/
@Override
public String getEditableSignature(Object theObject) {
return getSignature(theObject, UmlClassifier.SIGNATURE_NAME);
}
/**
* @see org.teiid.designer.core.metamodel.aspect.uml.UmlClassifier#getRelationships(java.lang.Object)
* @since 5.0.2
*/
@Override
public Collection getRelationships(Object theObject) {
return Collections.EMPTY_LIST;
}
/**
* @see org.teiid.designer.xsd.aspects.uml.AbstractXsdEntityAspect#getSignature(java.lang.Object, int)
* @since 5.0.2
*/
@Override
public String getSignature(Object theObject,
int theShowMask) {
XSDSimpleTypeDefinition type = assertEnumeratedType(theObject);
StringBuffer result = new StringBuffer();
switch (theShowMask) {
case UmlProperty.SIGNATURE_NAME: {
// Name
String name = type.getName();
if (CoreStringUtil.isEmpty(name)) {
EObject parent = type.eContainer();
if (parent instanceof XSDNamedComponent) {
name = ((XSDNamedComponent)parent).getName();
}
}
result.append(name);
break;
} case UmlProperty.SIGNATURE_STEROTYPE: {
// Stereotype
result.append("<<"); //$NON-NLS-1$
result.append(getStereotype(theObject));
result.append(">>"); //$NON-NLS-1$
break;
} case 3: {
// Name and Stereotype
result.append("<<"); //$NON-NLS-1$
result.append(getStereotype(theObject));
result.append(">> "); //$NON-NLS-1$
result.append(getSignature(theObject, UmlProperty.SIGNATURE_NAME));
break;
} default: {
String msg = Util.getString(I18nUtil.getPropertyPrefix(EnumeratedTypeAspect.class) + "invalidShowMask", new Integer(theShowMask)); //$NON-NLS-1$
throw new TeiidDesignerRuntimeException(msg);
}
}
return result.toString();
}
/**
* @see org.teiid.designer.xsd.aspects.uml.AbstractXsdEntityAspect#getStereotype(java.lang.Object)
* @since 5.0.2
*/
@Override
public String getStereotype(Object theObject) {
final String PREFIX = I18nUtil.getPropertyPrefix(EnumeratedTypeAspect.class);
XSDSimpleTypeDefinition type = assertEnumeratedType(theObject);
DatatypeManager dm = ModelerCore.getDatatypeManager(type);
type = (XSDSimpleTypeDefinition)dm.getBuiltInPrimitiveType(type);
String result = null;
XSDLengthFacet lengthFacet = type.getLengthFacet();
if (lengthFacet == null) {
result = Util.getString(PREFIX + "stereoType", type.getName()); //$NON-NLS-1$
} else {
result = Util.getString(PREFIX + "stereoTypeWithLength", new Object[] {type.getName(), lengthFacet.getEffectiveValue()}); //$NON-NLS-1$
}
return result;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.uml.UmlClassifier#getSupertypes(java.lang.Object)
* @since 5.0.2
*/
@Override
public Collection getSupertypes(Object theObject) {
return Collections.EMPTY_LIST;
}
/**
* @see org.teiid.designer.core.metamodel.aspect.uml.UmlClassifier#isAbstract(java.lang.Object)
* @since 5.0.2
*/
@Override
public boolean isAbstract(Object theObject) {
return false;
}
/**
* @see org.teiid.designer.xsd.aspects.uml.AbstractXsdEntityAspect#setSignature(java.lang.Object, java.lang.String)
* @since 5.0.2
*/
@Override
public IStatus setSignature(Object theObject,
String theNewSignature) {
// cannot change a type name
return Status.OK_STATUS;
}
}