SpringManageableEntityLogic.java

// license-header java merge-point
//
// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
//
package org.andromda.cartridges.spring.metafacades;

import java.util.Collection;
import java.util.List;
import org.andromda.core.common.Introspector;
import org.andromda.core.metafacade.MetafacadeBase;
import org.andromda.core.metafacade.MetafacadeFactory;
import org.andromda.core.metafacade.ModelValidationMessage;
import org.andromda.metafacades.uml.ActorFacade;
import org.andromda.metafacades.uml.AssociationEndFacade;
import org.andromda.metafacades.uml.AttributeFacade;
import org.andromda.metafacades.uml.ClassifierFacade;
import org.andromda.metafacades.uml.ConstraintFacade;
import org.andromda.metafacades.uml.DependencyFacade;
import org.andromda.metafacades.uml.EntityAssociationEnd;
import org.andromda.metafacades.uml.EntityQueryOperation;
import org.andromda.metafacades.uml.GeneralizableElementFacade;
import org.andromda.metafacades.uml.GeneralizationFacade;
import org.andromda.metafacades.uml.ManageableEntity;
import org.andromda.metafacades.uml.ManageableEntityAssociationEnd;
import org.andromda.metafacades.uml.ManageableEntityAttribute;
import org.andromda.metafacades.uml.ModelElementFacade;
import org.andromda.metafacades.uml.ModelFacade;
import org.andromda.metafacades.uml.OperationFacade;
import org.andromda.metafacades.uml.PackageFacade;
import org.andromda.metafacades.uml.StateMachineFacade;
import org.andromda.metafacades.uml.StereotypeFacade;
import org.andromda.metafacades.uml.TaggedValueFacade;
import org.andromda.metafacades.uml.TemplateParameterFacade;
import org.andromda.metafacades.uml.TypeMappings;

/**
 * TODO: Model Documentation for org.andromda.cartridges.spring.metafacades.SpringManageableEntity
 * MetafacadeLogic for SpringManageableEntity
 *
 * @see SpringManageableEntity
 */
public abstract class SpringManageableEntityLogic
    extends MetafacadeBase
    implements SpringManageableEntity
{
    /**
     * The underlying UML object
     * @see Object
     */
    protected Object metaObject;

    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
     * @param metaObjectIn
     * @param context
     */
    protected SpringManageableEntityLogic(Object metaObjectIn, String context)
    {
        super(metaObjectIn, getContext(context));
        this.superSpringEntity =
           (SpringEntity)
            MetafacadeFactory.getInstance().createFacadeImpl(
                    "org.andromda.cartridges.spring.metafacades.SpringEntity",
                    metaObjectIn,
                    getContext(context));
        this.superManageableEntity =
           (ManageableEntity)
            MetafacadeFactory.getInstance().createFacadeImpl(
                    "org.andromda.metafacades.uml.ManageableEntity",
                    metaObjectIn,
                    getContext(context));
        this.metaObject = metaObjectIn;
    }

    /**
     * Gets the context for this metafacade logic instance.
     * @param context String. Set to SpringManageableEntity if null
     * @return context String
     */
    private static String getContext(String context)
    {
        if (context == null)
        {
            context = "org.andromda.cartridges.spring.metafacades.SpringManageableEntity";
        }
        return context;
    }

    private SpringEntity superSpringEntity;
    private boolean superSpringEntityInitialized = false;

    /**
     * Gets the SpringEntity parent instance.
     * @return this.superSpringEntity SpringEntity
     */
    protected SpringEntity getSuperSpringEntity()
    {
        if (!this.superSpringEntityInitialized)
        {
            ((MetafacadeBase)this.superSpringEntity).setMetafacadeContext(this.getMetafacadeContext());
            this.superSpringEntityInitialized = true;
        }
        return this.superSpringEntity;
    }

    private ManageableEntity superManageableEntity;
    private boolean superManageableEntityInitialized = false;

    /**
     * Gets the ManageableEntity parent instance.
     * @return this.superManageableEntity ManageableEntity
     */
    protected ManageableEntity getSuperManageableEntity()
    {
        if (!this.superManageableEntityInitialized)
        {
            ((MetafacadeBase)this.superManageableEntity).setMetafacadeContext(this.getMetafacadeContext());
            this.superManageableEntityInitialized = true;
        }
        return this.superManageableEntity;
    }

    /** Reset context only for non-root metafacades
     * @param context
     * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
     */
    @Override
    public void resetMetafacadeContext(String context)
    {
        if (!this.contextRoot) // reset context only for non-root metafacades
        {
            context = getContext(context);  // to have same value as in original constructor call
            setMetafacadeContext (context);
            if (this.superSpringEntityInitialized)
            {
                ((MetafacadeBase)this.superSpringEntity).resetMetafacadeContext(context);
            }
            if (this.superManageableEntityInitialized)
            {
                ((MetafacadeBase)this.superManageableEntity).resetMetafacadeContext(context);
            }
        }
    }

    /**
     * @return boolean true always
     * @see SpringManageableEntity
     */
    public boolean isSpringManageableEntityMetaType()
    {
        return true;
    }

    // --------------- attributes ---------------------

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getFullyQualifiedManageableDaoName()
    * @return String
    */
    protected abstract String handleGetFullyQualifiedManageableDaoName();

    private String __fullyQualifiedManageableDaoName1a;
    private boolean __fullyQualifiedManageableDaoName1aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.fullyQualifiedManageableDaoName
     * @return (String)handleGetFullyQualifiedManageableDaoName()
     */
    public final String getFullyQualifiedManageableDaoName()
    {
        String fullyQualifiedManageableDaoName1a = this.__fullyQualifiedManageableDaoName1a;
        if (!this.__fullyQualifiedManageableDaoName1aSet)
        {
            // fullyQualifiedManageableDaoName has no pre constraints
            fullyQualifiedManageableDaoName1a = handleGetFullyQualifiedManageableDaoName();
            // fullyQualifiedManageableDaoName has no post constraints
            this.__fullyQualifiedManageableDaoName1a = fullyQualifiedManageableDaoName1a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullyQualifiedManageableDaoName1aSet = true;
            }
        }
        return fullyQualifiedManageableDaoName1a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableDaoName()
    * @return String
    */
    protected abstract String handleGetManageableDaoName();

    private String __manageableDaoName2a;
    private boolean __manageableDaoName2aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableDaoName
     * @return (String)handleGetManageableDaoName()
     */
    public final String getManageableDaoName()
    {
        String manageableDaoName2a = this.__manageableDaoName2a;
        if (!this.__manageableDaoName2aSet)
        {
            // manageableDaoName has no pre constraints
            manageableDaoName2a = handleGetManageableDaoName();
            // manageableDaoName has no post constraints
            this.__manageableDaoName2a = manageableDaoName2a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableDaoName2aSet = true;
            }
        }
        return manageableDaoName2a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableDaoFullPath()
    * @return String
    */
    protected abstract String handleGetManageableDaoFullPath();

    private String __manageableDaoFullPath3a;
    private boolean __manageableDaoFullPath3aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableDaoFullPath
     * @return (String)handleGetManageableDaoFullPath()
     */
    public final String getManageableDaoFullPath()
    {
        String manageableDaoFullPath3a = this.__manageableDaoFullPath3a;
        if (!this.__manageableDaoFullPath3aSet)
        {
            // manageableDaoFullPath has no pre constraints
            manageableDaoFullPath3a = handleGetManageableDaoFullPath();
            // manageableDaoFullPath has no post constraints
            this.__manageableDaoFullPath3a = manageableDaoFullPath3a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableDaoFullPath3aSet = true;
            }
        }
        return manageableDaoFullPath3a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableDaoBaseName()
    * @return String
    */
    protected abstract String handleGetManageableDaoBaseName();

    private String __manageableDaoBaseName4a;
    private boolean __manageableDaoBaseName4aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableDaoBaseName
     * @return (String)handleGetManageableDaoBaseName()
     */
    public final String getManageableDaoBaseName()
    {
        String manageableDaoBaseName4a = this.__manageableDaoBaseName4a;
        if (!this.__manageableDaoBaseName4aSet)
        {
            // manageableDaoBaseName has no pre constraints
            manageableDaoBaseName4a = handleGetManageableDaoBaseName();
            // manageableDaoBaseName has no post constraints
            this.__manageableDaoBaseName4a = manageableDaoBaseName4a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableDaoBaseName4aSet = true;
            }
        }
        return manageableDaoBaseName4a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableDaoBaseFullPath()
    * @return String
    */
    protected abstract String handleGetManageableDaoBaseFullPath();

    private String __manageableDaoBaseFullPath5a;
    private boolean __manageableDaoBaseFullPath5aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableDaoBaseFullPath
     * @return (String)handleGetManageableDaoBaseFullPath()
     */
    public final String getManageableDaoBaseFullPath()
    {
        String manageableDaoBaseFullPath5a = this.__manageableDaoBaseFullPath5a;
        if (!this.__manageableDaoBaseFullPath5aSet)
        {
            // manageableDaoBaseFullPath has no pre constraints
            manageableDaoBaseFullPath5a = handleGetManageableDaoBaseFullPath();
            // manageableDaoBaseFullPath has no post constraints
            this.__manageableDaoBaseFullPath5a = manageableDaoBaseFullPath5a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableDaoBaseFullPath5aSet = true;
            }
        }
        return manageableDaoBaseFullPath5a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getFullyQualifiedManageableDaoBaseName()
    * @return String
    */
    protected abstract String handleGetFullyQualifiedManageableDaoBaseName();

    private String __fullyQualifiedManageableDaoBaseName6a;
    private boolean __fullyQualifiedManageableDaoBaseName6aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.fullyQualifiedManageableDaoBaseName
     * @return (String)handleGetFullyQualifiedManageableDaoBaseName()
     */
    public final String getFullyQualifiedManageableDaoBaseName()
    {
        String fullyQualifiedManageableDaoBaseName6a = this.__fullyQualifiedManageableDaoBaseName6a;
        if (!this.__fullyQualifiedManageableDaoBaseName6aSet)
        {
            // fullyQualifiedManageableDaoBaseName has no pre constraints
            fullyQualifiedManageableDaoBaseName6a = handleGetFullyQualifiedManageableDaoBaseName();
            // fullyQualifiedManageableDaoBaseName has no post constraints
            this.__fullyQualifiedManageableDaoBaseName6a = fullyQualifiedManageableDaoBaseName6a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullyQualifiedManageableDaoBaseName6aSet = true;
            }
        }
        return fullyQualifiedManageableDaoBaseName6a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableServiceBaseFullPath()
    * @return String
    */
    protected abstract String handleGetManageableServiceBaseFullPath();

    private String __manageableServiceBaseFullPath7a;
    private boolean __manageableServiceBaseFullPath7aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableServiceBaseFullPath
     * @return (String)handleGetManageableServiceBaseFullPath()
     */
    public final String getManageableServiceBaseFullPath()
    {
        String manageableServiceBaseFullPath7a = this.__manageableServiceBaseFullPath7a;
        if (!this.__manageableServiceBaseFullPath7aSet)
        {
            // manageableServiceBaseFullPath has no pre constraints
            manageableServiceBaseFullPath7a = handleGetManageableServiceBaseFullPath();
            // manageableServiceBaseFullPath has no post constraints
            this.__manageableServiceBaseFullPath7a = manageableServiceBaseFullPath7a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableServiceBaseFullPath7aSet = true;
            }
        }
        return manageableServiceBaseFullPath7a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableServiceBaseName()
    * @return String
    */
    protected abstract String handleGetManageableServiceBaseName();

    private String __manageableServiceBaseName8a;
    private boolean __manageableServiceBaseName8aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableServiceBaseName
     * @return (String)handleGetManageableServiceBaseName()
     */
    public final String getManageableServiceBaseName()
    {
        String manageableServiceBaseName8a = this.__manageableServiceBaseName8a;
        if (!this.__manageableServiceBaseName8aSet)
        {
            // manageableServiceBaseName has no pre constraints
            manageableServiceBaseName8a = handleGetManageableServiceBaseName();
            // manageableServiceBaseName has no post constraints
            this.__manageableServiceBaseName8a = manageableServiceBaseName8a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableServiceBaseName8aSet = true;
            }
        }
        return manageableServiceBaseName8a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getFullyQualifiedManageableServiceBaseName()
    * @return String
    */
    protected abstract String handleGetFullyQualifiedManageableServiceBaseName();

    private String __fullyQualifiedManageableServiceBaseName9a;
    private boolean __fullyQualifiedManageableServiceBaseName9aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.fullyQualifiedManageableServiceBaseName
     * @return (String)handleGetFullyQualifiedManageableServiceBaseName()
     */
    public final String getFullyQualifiedManageableServiceBaseName()
    {
        String fullyQualifiedManageableServiceBaseName9a = this.__fullyQualifiedManageableServiceBaseName9a;
        if (!this.__fullyQualifiedManageableServiceBaseName9aSet)
        {
            // fullyQualifiedManageableServiceBaseName has no pre constraints
            fullyQualifiedManageableServiceBaseName9a = handleGetFullyQualifiedManageableServiceBaseName();
            // fullyQualifiedManageableServiceBaseName has no post constraints
            this.__fullyQualifiedManageableServiceBaseName9a = fullyQualifiedManageableServiceBaseName9a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullyQualifiedManageableServiceBaseName9aSet = true;
            }
        }
        return fullyQualifiedManageableServiceBaseName9a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getDaoReferenceName()
    * @return String
    */
    protected abstract String handleGetDaoReferenceName();

    private String __daoReferenceName10a;
    private boolean __daoReferenceName10aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.daoReferenceName
     * @return (String)handleGetDaoReferenceName()
     */
    public final String getDaoReferenceName()
    {
        String daoReferenceName10a = this.__daoReferenceName10a;
        if (!this.__daoReferenceName10aSet)
        {
            // daoReferenceName has no pre constraints
            daoReferenceName10a = handleGetDaoReferenceName();
            // daoReferenceName has no post constraints
            this.__daoReferenceName10a = daoReferenceName10a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__daoReferenceName10aSet = true;
            }
        }
        return daoReferenceName10a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableValueObjectFullPath()
    * @return String
    */
    protected abstract String handleGetManageableValueObjectFullPath();

    private String __manageableValueObjectFullPath11a;
    private boolean __manageableValueObjectFullPath11aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableValueObjectFullPath
     * @return (String)handleGetManageableValueObjectFullPath()
     */
    public final String getManageableValueObjectFullPath()
    {
        String manageableValueObjectFullPath11a = this.__manageableValueObjectFullPath11a;
        if (!this.__manageableValueObjectFullPath11aSet)
        {
            // manageableValueObjectFullPath has no pre constraints
            manageableValueObjectFullPath11a = handleGetManageableValueObjectFullPath();
            // manageableValueObjectFullPath has no post constraints
            this.__manageableValueObjectFullPath11a = manageableValueObjectFullPath11a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableValueObjectFullPath11aSet = true;
            }
        }
        return manageableValueObjectFullPath11a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableValueObjectClassName()
    * @return String
    */
    protected abstract String handleGetManageableValueObjectClassName();

    private String __manageableValueObjectClassName12a;
    private boolean __manageableValueObjectClassName12aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableValueObjectClassName
     * @return (String)handleGetManageableValueObjectClassName()
     */
    public final String getManageableValueObjectClassName()
    {
        String manageableValueObjectClassName12a = this.__manageableValueObjectClassName12a;
        if (!this.__manageableValueObjectClassName12aSet)
        {
            // manageableValueObjectClassName has no pre constraints
            manageableValueObjectClassName12a = handleGetManageableValueObjectClassName();
            // manageableValueObjectClassName has no post constraints
            this.__manageableValueObjectClassName12a = manageableValueObjectClassName12a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableValueObjectClassName12aSet = true;
            }
        }
        return manageableValueObjectClassName12a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getFullyQualifiedManageableValueObjectName()
    * @return String
    */
    protected abstract String handleGetFullyQualifiedManageableValueObjectName();

    private String __fullyQualifiedManageableValueObjectName13a;
    private boolean __fullyQualifiedManageableValueObjectName13aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.fullyQualifiedManageableValueObjectName
     * @return (String)handleGetFullyQualifiedManageableValueObjectName()
     */
    public final String getFullyQualifiedManageableValueObjectName()
    {
        String fullyQualifiedManageableValueObjectName13a = this.__fullyQualifiedManageableValueObjectName13a;
        if (!this.__fullyQualifiedManageableValueObjectName13aSet)
        {
            // fullyQualifiedManageableValueObjectName has no pre constraints
            fullyQualifiedManageableValueObjectName13a = handleGetFullyQualifiedManageableValueObjectName();
            // fullyQualifiedManageableValueObjectName has no post constraints
            this.__fullyQualifiedManageableValueObjectName13a = fullyQualifiedManageableValueObjectName13a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullyQualifiedManageableValueObjectName13aSet = true;
            }
        }
        return fullyQualifiedManageableValueObjectName13a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#isRemotingTypeRmi()
    * @return boolean
    */
    protected abstract boolean handleIsRemotingTypeRmi();

    private boolean __remotingTypeRmi14a;
    private boolean __remotingTypeRmi14aSet = false;

    /**
     * Indicates if the remoting type is RMI.
     * @return (boolean)handleIsRemotingTypeRmi()
     */
    public final boolean isRemotingTypeRmi()
    {
        boolean remotingTypeRmi14a = this.__remotingTypeRmi14a;
        if (!this.__remotingTypeRmi14aSet)
        {
            // remotingTypeRmi has no pre constraints
            remotingTypeRmi14a = handleIsRemotingTypeRmi();
            // remotingTypeRmi has no post constraints
            this.__remotingTypeRmi14a = remotingTypeRmi14a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remotingTypeRmi14aSet = true;
            }
        }
        return remotingTypeRmi14a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#isRemotingTypeNone()
    * @return boolean
    */
    protected abstract boolean handleIsRemotingTypeNone();

    private boolean __remotingTypeNone15a;
    private boolean __remotingTypeNone15aSet = false;

    /**
     * Indicates if the remoting type for this service is "none".
     * @return (boolean)handleIsRemotingTypeNone()
     */
    public final boolean isRemotingTypeNone()
    {
        boolean remotingTypeNone15a = this.__remotingTypeNone15a;
        if (!this.__remotingTypeNone15aSet)
        {
            // remotingTypeNone has no pre constraints
            remotingTypeNone15a = handleIsRemotingTypeNone();
            // remotingTypeNone has no post constraints
            this.__remotingTypeNone15a = remotingTypeNone15a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remotingTypeNone15aSet = true;
            }
        }
        return remotingTypeNone15a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#isRemotingTypeHttpInvoker()
    * @return boolean
    */
    protected abstract boolean handleIsRemotingTypeHttpInvoker();

    private boolean __remotingTypeHttpInvoker16a;
    private boolean __remotingTypeHttpInvoker16aSet = false;

    /**
     * Indicates if the remoting type is "httpinvoker".
     * @return (boolean)handleIsRemotingTypeHttpInvoker()
     */
    public final boolean isRemotingTypeHttpInvoker()
    {
        boolean remotingTypeHttpInvoker16a = this.__remotingTypeHttpInvoker16a;
        if (!this.__remotingTypeHttpInvoker16aSet)
        {
            // remotingTypeHttpInvoker has no pre constraints
            remotingTypeHttpInvoker16a = handleIsRemotingTypeHttpInvoker();
            // remotingTypeHttpInvoker has no post constraints
            this.__remotingTypeHttpInvoker16a = remotingTypeHttpInvoker16a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remotingTypeHttpInvoker16aSet = true;
            }
        }
        return remotingTypeHttpInvoker16a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#isRemotingTypeHessian()
    * @return boolean
    */
    protected abstract boolean handleIsRemotingTypeHessian();

    private boolean __remotingTypeHessian17a;
    private boolean __remotingTypeHessian17aSet = false;

    /**
     * Indicates if the remoting type is "hessian".
     * @return (boolean)handleIsRemotingTypeHessian()
     */
    public final boolean isRemotingTypeHessian()
    {
        boolean remotingTypeHessian17a = this.__remotingTypeHessian17a;
        if (!this.__remotingTypeHessian17aSet)
        {
            // remotingTypeHessian has no pre constraints
            remotingTypeHessian17a = handleIsRemotingTypeHessian();
            // remotingTypeHessian has no post constraints
            this.__remotingTypeHessian17a = remotingTypeHessian17a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remotingTypeHessian17aSet = true;
            }
        }
        return remotingTypeHessian17a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#isRemotingTypeBurlap()
    * @return boolean
    */
    protected abstract boolean handleIsRemotingTypeBurlap();

    private boolean __remotingTypeBurlap18a;
    private boolean __remotingTypeBurlap18aSet = false;

    /**
     * Indicates if the remoting type is "burlap".
     * @return (boolean)handleIsRemotingTypeBurlap()
     */
    public final boolean isRemotingTypeBurlap()
    {
        boolean remotingTypeBurlap18a = this.__remotingTypeBurlap18a;
        if (!this.__remotingTypeBurlap18aSet)
        {
            // remotingTypeBurlap has no pre constraints
            remotingTypeBurlap18a = handleIsRemotingTypeBurlap();
            // remotingTypeBurlap has no post constraints
            this.__remotingTypeBurlap18a = remotingTypeBurlap18a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remotingTypeBurlap18aSet = true;
            }
        }
        return remotingTypeBurlap18a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getRemoteUrl()
    * @return String
    */
    protected abstract String handleGetRemoteUrl();

    private String __remoteUrl19a;
    private boolean __remoteUrl19aSet = false;

    /**
     * The URL this servie will be run on at the server side.
     * @return (String)handleGetRemoteUrl()
     */
    public final String getRemoteUrl()
    {
        String remoteUrl19a = this.__remoteUrl19a;
        if (!this.__remoteUrl19aSet)
        {
            // remoteUrl has no pre constraints
            remoteUrl19a = handleGetRemoteUrl();
            // remoteUrl has no post constraints
            this.__remoteUrl19a = remoteUrl19a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remoteUrl19aSet = true;
            }
        }
        return remoteUrl19a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getRemoteServer()
    * @return String
    */
    protected abstract String handleGetRemoteServer();

    private String __remoteServer20a;
    private boolean __remoteServer20aSet = false;

    /**
     * Returns the name of the remote server for this service.
     * @return (String)handleGetRemoteServer()
     */
    public final String getRemoteServer()
    {
        String remoteServer20a = this.__remoteServer20a;
        if (!this.__remoteServer20aSet)
        {
            // remoteServer has no pre constraints
            remoteServer20a = handleGetRemoteServer();
            // remoteServer has no post constraints
            this.__remoteServer20a = remoteServer20a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remoteServer20aSet = true;
            }
        }
        return remoteServer20a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getRemotePort()
    * @return String
    */
    protected abstract String handleGetRemotePort();

    private String __remotePort21a;
    private boolean __remotePort21aSet = false;

    /**
     * Determines which port this service will be published on at the server side.
     * @return (String)handleGetRemotePort()
     */
    public final String getRemotePort()
    {
        String remotePort21a = this.__remotePort21a;
        if (!this.__remotePort21aSet)
        {
            // remotePort has no pre constraints
            remotePort21a = handleGetRemotePort();
            // remotePort has no post constraints
            this.__remotePort21a = remotePort21a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remotePort21aSet = true;
            }
        }
        return remotePort21a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getRemoteContext()
    * @return String
    */
    protected abstract String handleGetRemoteContext();

    private String __remoteContext22a;
    private boolean __remoteContext22aSet = false;

    /**
     * Returns the remote context for this service.
     * @return (String)handleGetRemoteContext()
     */
    public final String getRemoteContext()
    {
        String remoteContext22a = this.__remoteContext22a;
        if (!this.__remoteContext22aSet)
        {
            // remoteContext has no pre constraints
            remoteContext22a = handleGetRemoteContext();
            // remoteContext has no post constraints
            this.__remoteContext22a = remoteContext22a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remoteContext22aSet = true;
            }
        }
        return remoteContext22a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#isRemotable()
    * @return boolean
    */
    protected abstract boolean handleIsRemotable();

    private boolean __remotable23a;
    private boolean __remotable23aSet = false;

    /**
     * Returns true if this service is remotable. Derived from remotingType.
     * @return (boolean)handleIsRemotable()
     */
    public final boolean isRemotable()
    {
        boolean remotable23a = this.__remotable23a;
        if (!this.__remotable23aSet)
        {
            // remotable has no pre constraints
            remotable23a = handleIsRemotable();
            // remotable has no post constraints
            this.__remotable23a = remotable23a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__remotable23aSet = true;
            }
        }
        return remotable23a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableSearchExampleFullPath()
    * @return String
    */
    protected abstract String handleGetManageableSearchExampleFullPath();

    private String __manageableSearchExampleFullPath24a;
    private boolean __manageableSearchExampleFullPath24aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableSearchExampleFullPath
     * @return (String)handleGetManageableSearchExampleFullPath()
     */
    public final String getManageableSearchExampleFullPath()
    {
        String manageableSearchExampleFullPath24a = this.__manageableSearchExampleFullPath24a;
        if (!this.__manageableSearchExampleFullPath24aSet)
        {
            // manageableSearchExampleFullPath has no pre constraints
            manageableSearchExampleFullPath24a = handleGetManageableSearchExampleFullPath();
            // manageableSearchExampleFullPath has no post constraints
            this.__manageableSearchExampleFullPath24a = manageableSearchExampleFullPath24a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableSearchExampleFullPath24aSet = true;
            }
        }
        return manageableSearchExampleFullPath24a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getManageableSearchExampleClassName()
    * @return String
    */
    protected abstract String handleGetManageableSearchExampleClassName();

    private String __manageableSearchExampleClassName25a;
    private boolean __manageableSearchExampleClassName25aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.manageableSearchExampleClassName
     * @return (String)handleGetManageableSearchExampleClassName()
     */
    public final String getManageableSearchExampleClassName()
    {
        String manageableSearchExampleClassName25a = this.__manageableSearchExampleClassName25a;
        if (!this.__manageableSearchExampleClassName25aSet)
        {
            // manageableSearchExampleClassName has no pre constraints
            manageableSearchExampleClassName25a = handleGetManageableSearchExampleClassName();
            // manageableSearchExampleClassName has no post constraints
            this.__manageableSearchExampleClassName25a = manageableSearchExampleClassName25a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__manageableSearchExampleClassName25aSet = true;
            }
        }
        return manageableSearchExampleClassName25a;
    }

   /**
    * @see org.andromda.cartridges.spring.metafacades.SpringManageableEntity#getFullyQualifiedManageableSearchExampleName()
    * @return String
    */
    protected abstract String handleGetFullyQualifiedManageableSearchExampleName();

    private String __fullyQualifiedManageableSearchExampleName26a;
    private boolean __fullyQualifiedManageableSearchExampleName26aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.spring.metafacades.SpringManageableEntity.fullyQualifiedManageableSearchExampleName
     * @return (String)handleGetFullyQualifiedManageableSearchExampleName()
     */
    public final String getFullyQualifiedManageableSearchExampleName()
    {
        String fullyQualifiedManageableSearchExampleName26a = this.__fullyQualifiedManageableSearchExampleName26a;
        if (!this.__fullyQualifiedManageableSearchExampleName26aSet)
        {
            // fullyQualifiedManageableSearchExampleName has no pre constraints
            fullyQualifiedManageableSearchExampleName26a = handleGetFullyQualifiedManageableSearchExampleName();
            // fullyQualifiedManageableSearchExampleName has no post constraints
            this.__fullyQualifiedManageableSearchExampleName26a = fullyQualifiedManageableSearchExampleName26a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullyQualifiedManageableSearchExampleName26aSet = true;
            }
        }
        return fullyQualifiedManageableSearchExampleName26a;
    }

    /**
     * @return true
     * @see SpringEntity
     */
    public boolean isSpringEntityMetaType()
    {
        return true;
    }

    /**
     * @return true
     * @see ManageableEntity
     */
    public boolean isManageableEntityMetaType()
    {
        return true;
    }

    /**
     * @return true
     * @see org.andromda.metafacades.uml.Entity
     */
    public boolean isEntityMetaType()
    {
        return true;
    }

    /**
     * @return true
     * @see ClassifierFacade
     */
    public boolean isClassifierFacadeMetaType()
    {
        return true;
    }

    /**
     * @return true
     * @see GeneralizableElementFacade
     */
    public boolean isGeneralizableElementFacadeMetaType()
    {
        return true;
    }

    /**
     * @return true
     * @see ModelElementFacade
     */
    public boolean isModelElementFacadeMetaType()
    {
        return true;
    }

    // ----------- delegates to SpringEntity ------------
    /**
     * Returns all value object references (this includes all those that are inherited from any
     * parent entities)
     * @see SpringEntity#getAllValueObjectReferences()
     */
    public Collection<ClassifierFacade> getAllValueObjectReferences()
    {
        return this.getSuperSpringEntity().getAllValueObjectReferences();
    }

    /**
     * A quoted comma separated list of the names of embedded values belonging to this entity (that
     * represented as attributes)
     * @see SpringEntity#getAttributeEmbeddedValueList()
     */
    public String getAttributeEmbeddedValueList()
    {
        return this.getSuperSpringEntity().getAttributeEmbeddedValueList();
    }

    /**
     * Gets the Spring bean name, and optionally adds a target suffix, if 'targetSuffix' is set to
     * true.
     * @see SpringEntity#getBeanName(boolean targetSuffix)
     */
    public String getBeanName(boolean targetSuffix)
    {
        return this.getSuperSpringEntity().getBeanName(targetSuffix);
    }

    /**
     * The DAO base class name.  This is the abstract DAO that contains CRUD operations
     * as well as any generated finders defined on an entity.
     * @see SpringEntity#getDaoBaseName()
     */
    public String getDaoBaseName()
    {
        return this.getSuperSpringEntity().getDaoBaseName();
    }

    /**
     * The business operations modeled on the entity that will be generated on the DAO (Data Access
     * Object).
     * @see SpringEntity#getDaoBusinessOperations()
     */
    public Collection<SpringEntityOperation> getDaoBusinessOperations()
    {
        return this.getSuperSpringEntity().getDaoBusinessOperations();
    }

    /**
     * The DAO implementation class name.
     * @see SpringEntity#getDaoImplementationName()
     */
    public String getDaoImplementationName()
    {
        return this.getSuperSpringEntity().getDaoImplementationName();
    }

    /**
     * The name of the DAO for the specified entity.
     * @see SpringEntity#getDaoName()
     */
    public String getDaoName()
    {
        return this.getSuperSpringEntity().getDaoName();
    }

    /**
     * The constant name denoting no transformation is to be applied.
     * @see SpringEntity#getDaoNoTransformationConstantName()
     */
    public String getDaoNoTransformationConstantName()
    {
        return this.getSuperSpringEntity().getDaoNoTransformationConstantName();
    }

    /**
     * The implementation name for the entity.
     * @see SpringEntity#getEntityImplementationName()
     */
    public String getEntityImplementationName()
    {
        return this.getSuperSpringEntity().getEntityImplementationName();
    }

    /**
     * The name of the plain entity name.
     * @see SpringEntity#getEntityName()
     */
    public String getEntityName()
    {
        return this.getSuperSpringEntity().getEntityName();
    }

    /**
     * The fully qualified name of the base DAO.
     * @see SpringEntity#getFullyQualifiedDaoBaseName()
     */
    public String getFullyQualifiedDaoBaseName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedDaoBaseName();
    }

    /**
     * The fully qualified name of the DAO implemetation.
     * @see SpringEntity#getFullyQualifiedDaoImplementationName()
     */
    public String getFullyQualifiedDaoImplementationName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedDaoImplementationName();
    }

    /**
     * The fully qualified name of the DAO.
     * @see SpringEntity#getFullyQualifiedDaoName()
     */
    public String getFullyQualifiedDaoName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedDaoName();
    }

    /**
     * The fully qualified name of the entity implementation class.
     * @see SpringEntity#getFullyQualifiedEntityImplementationName()
     */
    public String getFullyQualifiedEntityImplementationName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedEntityImplementationName();
    }

    /**
     * The fully qualified name of the entity class.
     * @see SpringEntity#getFullyQualifiedEntityName()
     */
    public String getFullyQualifiedEntityName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedEntityName();
    }

    /**
     * Return the value of the tagged value andromda_hibernate_inheritance.
     * @see SpringEntity#getHibernateInheritanceStrategy()
     */
    public String getHibernateInheritanceStrategy()
    {
        return this.getSuperSpringEntity().getHibernateInheritanceStrategy();
    }

    /**
     * Travels up the inheritance hierarchy and retrieves the root of this entity.  If the root is
     * the entity itself then just the entity is returned.
     * @see SpringEntity#getRoot()
     */
    public SpringEntity getRoot()
    {
        return this.getSuperSpringEntity().getRoot();
    }

    /**
     * A Classifier is a classification of instances - it describes a set of instances that have
     * features
     * in common. Can specify a generalization hierarchy by referencing its general classifiers. It
     * may be
     * a Class, DataType, PrimitiveType, Association, Collaboration, UseCase, etc. Can specify a
     * generalization hierarchy by referencing its general classifiers. Has the capability to own
     * collaboration uses. These collaboration uses link a collaboration with the classifier to give
     * a
     * description of the workings of the classifier. Classifier is defined to be a kind of
     * templateable
     * element so that a classifier can be parameterized. It is also defined to be a kind of
     * parameterable
     * element so that a classifier can be a formal template parameter.
     * @see SpringEntity#getValueObjectReferences()
     */
    public Collection<ClassifierFacade> getValueObjectReferences()
    {
        return this.getSuperSpringEntity().getValueObjectReferences();
    }

    /**
     * Indicates whether or not any business DAO operations are present.
     * @see SpringEntity#isDaoBusinessOperationsPresent()
     */
    public boolean isDaoBusinessOperationsPresent()
    {
        return this.getSuperSpringEntity().isDaoBusinessOperationsPresent();
    }

    /**
     * True if an implementation is required for the dao class, this is the case when there are
     * business operations or value-object transformation.
     * @see SpringEntity#isDaoImplementationRequired()
     */
    public boolean isDaoImplementationRequired()
    {
        return this.getSuperSpringEntity().isDaoImplementationRequired();
    }

    /**
     * Return true if the hibernate inheritance strategy is class.
     * @see SpringEntity#isHibernateInheritanceClass()
     */
    public boolean isHibernateInheritanceClass()
    {
        return this.getSuperSpringEntity().isHibernateInheritanceClass();
    }

    /**
     * Return true if the hibernate inheritance strategy is concrete.
     * @see SpringEntity#isHibernateInheritanceConcrete()
     */
    public boolean isHibernateInheritanceConcrete()
    {
        return this.getSuperSpringEntity().isHibernateInheritanceConcrete();
    }

    /**
     * Return true if the hibernate inheritance strategy is interface.
     * @see SpringEntity#isHibernateInheritanceInterface()
     */
    public boolean isHibernateInheritanceInterface()
    {
        return this.getSuperSpringEntity().isHibernateInheritanceInterface();
    }

    /**
     * Return true if the hibernate inheritance strategy is subclass.
     * @see SpringEntity#isHibernateInheritanceSubclass()
     */
    public boolean isHibernateInheritanceSubclass()
    {
        return this.getSuperSpringEntity().isHibernateInheritanceSubclass();
    }

    /**
     * Indicates whether or not this entity requires a Hibernate mapping cfg.xml file within the
     * Spring application context.
     * @see SpringEntity#isRequiresHibernateMapping()
     */
    public boolean isRequiresHibernateMapping()
    {
        return this.getSuperSpringEntity().isRequiresHibernateMapping();
    }

    /**
     * Returns true if this entity is meant to be used in a richt client application.
     * @see SpringEntity#isRichClient()
     */
    public boolean isRichClient()
    {
        return this.getSuperSpringEntity().isRichClient();
    }

    /**
     * Return the attribute which name matches the parameter
     * @see ClassifierFacade#findAttribute(String name)
     */
    public AttributeFacade findAttribute(String name)
    {
        return this.getSuperSpringEntity().findAttribute(name);
    }

    /**
     * Those abstraction dependencies for which this classifier is the client.
     * @see ClassifierFacade#getAbstractions()
     */
    public Collection<ClassifierFacade> getAbstractions()
    {
        return this.getSuperSpringEntity().getAbstractions();
    }

    /**
     * Lists all classes associated to this one and any ancestor classes (through generalization).
     * There will be no duplicates. The order of the elements is predictable.
     * @see ClassifierFacade#getAllAssociatedClasses()
     */
    public Collection<ClassifierFacade> getAllAssociatedClasses()
    {
        return this.getSuperSpringEntity().getAllAssociatedClasses();
    }

    /**
     * A collection containing all 'properties' of the classifier and its ancestors.  Properties are
     * any attributes and navigable connecting association ends.
     * @see ClassifierFacade#getAllProperties()
     */
    public Collection<ModelElementFacade> getAllProperties()
    {
        return this.getSuperSpringEntity().getAllProperties();
    }

    /**
     * A collection containing all required and/or read-only 'properties' of the classifier and its
     * ancestors. Properties are any attributes and navigable connecting association ends.
     * @see ClassifierFacade#getAllRequiredConstructorParameters()
     */
    public Collection<ModelElementFacade> getAllRequiredConstructorParameters()
    {
        return this.getSuperSpringEntity().getAllRequiredConstructorParameters();
    }

    /**
     * Gets the array type for this classifier.  If this classifier already represents an array, it
     * just returns itself.
     * @see ClassifierFacade#getArray()
     */
    public ClassifierFacade getArray()
    {
        return this.getSuperSpringEntity().getArray();
    }

    /**
     * The name of the classifier as an array.
     * @see ClassifierFacade#getArrayName()
     */
    public String getArrayName()
    {
        return this.getSuperSpringEntity().getArrayName();
    }

    /**
     * Lists the classes associated to this one, there is no repitition of classes. The order of the
     * elements is predictable.
     * @see ClassifierFacade#getAssociatedClasses()
     */
    public Collection<ClassifierFacade> getAssociatedClasses()
    {
        return this.getSuperSpringEntity().getAssociatedClasses();
    }

    /**
     * Gets the association ends belonging to a classifier.
     * @see ClassifierFacade#getAssociationEnds()
     */
    public List<AssociationEndFacade> getAssociationEnds()
    {
        return this.getSuperSpringEntity().getAssociationEnds();
    }

    /**
     * Gets the attributes that belong to the classifier.
     * @see ClassifierFacade#getAttributes()
     */
    public List<AttributeFacade> getAttributes()
    {
        return this.getSuperSpringEntity().getAttributes();
    }

    /**
     * Gets all attributes for the classifier and if 'follow' is true goes up the inheritance
     * hierarchy and gets the attributes from the super classes as well.
     * @see ClassifierFacade#getAttributes(boolean follow)
     */
    public List<AttributeFacade> getAttributes(boolean follow)
    {
        return this.getSuperSpringEntity().getAttributes(follow);
    }

    /**
     * The fully qualified name of the classifier as an array.
     * @see ClassifierFacade#getFullyQualifiedArrayName()
     */
    public String getFullyQualifiedArrayName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedArrayName();
    }

    /**
     * Returns all those operations that could be implemented at this classifier's level. This means
     * the operations owned by this classifier as well as any realized interface's operations
     * (recursively) in case this classifier itself is not already an interface, or generalized when
     * this classifier is an interface.
     * @see ClassifierFacade#getImplementationOperations()
     */
    public Collection<OperationFacade> getImplementationOperations()
    {
        return this.getSuperSpringEntity().getImplementationOperations();
    }

    /**
     * A comma separated list of the fully qualified names of all implemented interfaces.
     * @see ClassifierFacade#getImplementedInterfaceList()
     */
    public String getImplementedInterfaceList()
    {
        return this.getSuperSpringEntity().getImplementedInterfaceList();
    }

    /**
     * Those attributes that are scoped to an instance of this class.
     * @see ClassifierFacade#getInstanceAttributes()
     */
    public Collection<AttributeFacade> getInstanceAttributes()
    {
        return this.getSuperSpringEntity().getInstanceAttributes();
    }

    /**
     * Those operations that are scoped to an instance of this class.
     * @see ClassifierFacade#getInstanceOperations()
     */
    public List<OperationFacade> getInstanceOperations()
    {
        return this.getSuperSpringEntity().getInstanceOperations();
    }

    /**
     * Those interfaces that are abstractions of this classifier, this basically means this
     * classifier realizes them.
     * @see ClassifierFacade#getInterfaceAbstractions()
     */
    public Collection<ClassifierFacade> getInterfaceAbstractions()
    {
        return this.getSuperSpringEntity().getInterfaceAbstractions();
    }

    /**
     * A String representing a new Constructor declaration for this classifier type to be used in a
     * Java environment.
     * @see ClassifierFacade#getJavaNewString()
     */
    public String getJavaNewString()
    {
        return this.getSuperSpringEntity().getJavaNewString();
    }

    /**
     * A String representing the null-value for this classifier type to be used in a Java
     * environment.
     * @see ClassifierFacade#getJavaNullString()
     */
    public String getJavaNullString()
    {
        return this.getSuperSpringEntity().getJavaNullString();
    }

    /**
     * The other ends of this classifier's association ends which are navigable.
     * @see ClassifierFacade#getNavigableConnectingEnds()
     */
    public Collection<AssociationEndFacade> getNavigableConnectingEnds()
    {
        return this.getSuperSpringEntity().getNavigableConnectingEnds();
    }

    /**
     * Get the other ends of this classifier's association ends which are navigable and if 'follow'
     * is true goes up the inheritance hierarchy and gets the super association ends as well.
     * @see ClassifierFacade#getNavigableConnectingEnds(boolean follow)
     */
    public List<AssociationEndFacade> getNavigableConnectingEnds(boolean follow)
    {
        return this.getSuperSpringEntity().getNavigableConnectingEnds(follow);
    }

    /**
     * Assuming that the classifier is an array, this will return the non array type of the
     * classifier from
     * the model.  If the classifier is NOT an array, it will just return itself.
     * @see ClassifierFacade#getNonArray()
     */
    public ClassifierFacade getNonArray()
    {
        return this.getSuperSpringEntity().getNonArray();
    }

    /**
     * The attributes from this classifier in the form of an operation call (this example would be
     * in Java): '(String attributeOne, String attributeTwo).  If there were no attributes on the
     * classifier, the result would be an empty '()'.
     * @see ClassifierFacade#getOperationCallFromAttributes()
     */
    public String getOperationCallFromAttributes()
    {
        return this.getSuperSpringEntity().getOperationCallFromAttributes();
    }

    /**
     * The operations owned by this classifier.
     * @see ClassifierFacade#getOperations()
     */
    public List<OperationFacade> getOperations()
    {
        return this.getSuperSpringEntity().getOperations();
    }

    /**
     * A collection containing all 'properties' of the classifier.  Properties are any attributes
     * and navigable connecting association ends.
     * @see ClassifierFacade#getProperties()
     */
    public List<ModelElementFacade> getProperties()
    {
        return this.getSuperSpringEntity().getProperties();
    }

    /**
     * Gets all properties (attributes and navigable association ends) for the classifier and if
     * 'follow' is true goes up the inheritance hierarchy and gets the properties from the super
     * classes as well.
     * @see ClassifierFacade#getProperties(boolean follow)
     */
    public List getProperties(boolean follow)
    {
        return this.getSuperSpringEntity().getProperties(follow);
    }

    /**
     * A collection containing all required and/or read-only 'properties' of the classifier. 
     * Properties are any attributes and navigable connecting association ends.
     * @see ClassifierFacade#getRequiredConstructorParameters()
     */
    public Collection<ModelElementFacade> getRequiredConstructorParameters()
    {
        return this.getSuperSpringEntity().getRequiredConstructorParameters();
    }

    /**
     * Returns the serial version UID of the underlying model element.
     * @see ClassifierFacade#getSerialVersionUID()
     */
    public long getSerialVersionUID()
    {
        return this.getSuperSpringEntity().getSerialVersionUID();
    }

    /**
     * Those attributes that are scoped to the definition of this class.
     * @see ClassifierFacade#getStaticAttributes()
     */
    public Collection<AttributeFacade> getStaticAttributes()
    {
        return this.getSuperSpringEntity().getStaticAttributes();
    }

    /**
     * Those operations that are scoped to the definition of this class.
     * @see ClassifierFacade#getStaticOperations()
     */
    public List<OperationFacade> getStaticOperations()
    {
        return this.getSuperSpringEntity().getStaticOperations();
    }

    /**
     * This class' superclass, returns the generalization if it is a ClassifierFacade, null
     * otherwise.
     * @see ClassifierFacade#getSuperClass()
     */
    public ClassifierFacade getSuperClass()
    {
        return this.getSuperSpringEntity().getSuperClass();
    }

    /**
     * The wrapper name for this classifier if a mapped type has a defined wrapper class (ie. 'long'
     * maps to 'Long').  If the classifier doesn't have a wrapper defined for it, this method will
     * return a null.  Note that wrapper mappings must be defined for the namespace by defining the
     * 'wrapperMappingsUri', this property must point to the location of the mappings file which
     * maps the primitives to wrapper types.
     * @see ClassifierFacade#getWrapperName()
     */
    public String getWrapperName()
    {
        return this.getSuperSpringEntity().getWrapperName();
    }

    /**
     * Indicates if this classifier is 'abstract'.
     * @see ClassifierFacade#isAbstract()
     */
    public boolean isAbstract()
    {
        return this.getSuperSpringEntity().isAbstract();
    }

    /**
     * True if this classifier represents an array type. False otherwise.
     * @see ClassifierFacade#isArrayType()
     */
    public boolean isArrayType()
    {
        return this.getSuperSpringEntity().isArrayType();
    }

    /**
     * True if the ClassifierFacade is an AssociationClass.
     * @see ClassifierFacade#isAssociationClass()
     */
    public boolean isAssociationClass()
    {
        return this.getSuperSpringEntity().isAssociationClass();
    }

    /**
     * Returns true if this type represents a Blob type.
     * @see ClassifierFacade#isBlobType()
     */
    public boolean isBlobType()
    {
        return this.getSuperSpringEntity().isBlobType();
    }

    /**
     * Indicates if this type represents a boolean type or not.
     * @see ClassifierFacade#isBooleanType()
     */
    public boolean isBooleanType()
    {
        return this.getSuperSpringEntity().isBooleanType();
    }

    /**
     * Indicates if this type represents a char, Character, or java.lang.Character type or not.
     * @see ClassifierFacade#isCharacterType()
     */
    public boolean isCharacterType()
    {
        return this.getSuperSpringEntity().isCharacterType();
    }

    /**
     * Returns true if this type represents a Clob type.
     * @see ClassifierFacade#isClobType()
     */
    public boolean isClobType()
    {
        return this.getSuperSpringEntity().isClobType();
    }

    /**
     * True if this classifier represents a collection type. False otherwise.
     * @see ClassifierFacade#isCollectionType()
     */
    public boolean isCollectionType()
    {
        return this.getSuperSpringEntity().isCollectionType();
    }

    /**
     * True/false depending on whether or not this classifier represents a datatype. A data type is
     * a type whose instances are identified only by their value. A data type may contain attributes
     * to support the modeling of structured data types.
     * @see ClassifierFacade#isDataType()
     */
    public boolean isDataType()
    {
        return this.getSuperSpringEntity().isDataType();
    }

    /**
     * True when this classifier is a date type.
     * @see ClassifierFacade#isDateType()
     */
    public boolean isDateType()
    {
        return this.getSuperSpringEntity().isDateType();
    }

    /**
     * Indicates if this type represents a Double type or not.
     * @see ClassifierFacade#isDoubleType()
     */
    public boolean isDoubleType()
    {
        return this.getSuperSpringEntity().isDoubleType();
    }

    /**
     * Indicates whether or not this classifier represents an "EmbeddedValue'.
     * @see ClassifierFacade#isEmbeddedValue()
     */
    public boolean isEmbeddedValue()
    {
        return this.getSuperSpringEntity().isEmbeddedValue();
    }

    /**
     * True if this classifier is in fact marked as an enumeration.
     * @see ClassifierFacade#isEnumeration()
     */
    public boolean isEnumeration()
    {
        return this.getSuperSpringEntity().isEnumeration();
    }

    /**
     * Returns true if this type represents a 'file' type.
     * @see ClassifierFacade#isFileType()
     */
    public boolean isFileType()
    {
        return this.getSuperSpringEntity().isFileType();
    }

    /**
     * Indicates if this type represents a Float type or not.
     * @see ClassifierFacade#isFloatType()
     */
    public boolean isFloatType()
    {
        return this.getSuperSpringEntity().isFloatType();
    }

    /**
     * Indicates if this type represents an int or Integer or java.lang.Integer type or not.
     * @see ClassifierFacade#isIntegerType()
     */
    public boolean isIntegerType()
    {
        return this.getSuperSpringEntity().isIntegerType();
    }

    /**
     * True/false depending on whether or not this Classifier represents an interface.
     * @see ClassifierFacade#isInterface()
     */
    public boolean isInterface()
    {
        return this.getSuperSpringEntity().isInterface();
    }

    /**
     * True if this classifier cannot be extended and represent a leaf in the inheritance tree.
     * @see ClassifierFacade#isLeaf()
     */
    public boolean isLeaf()
    {
        return this.getSuperSpringEntity().isLeaf();
    }

    /**
     * True if this classifier represents a list type. False otherwise.
     * @see ClassifierFacade#isListType()
     */
    public boolean isListType()
    {
        return this.getSuperSpringEntity().isListType();
    }

    /**
     * Indicates if this type represents a Long type or not.
     * @see ClassifierFacade#isLongType()
     */
    public boolean isLongType()
    {
        return this.getSuperSpringEntity().isLongType();
    }

    /**
     * Indicates whether or not this classifier represents a Map type.
     * @see ClassifierFacade#isMapType()
     */
    public boolean isMapType()
    {
        return this.getSuperSpringEntity().isMapType();
    }

    /**
     * Indicates whether or not this classifier represents a primitive type.
     * @see ClassifierFacade#isPrimitive()
     */
    public boolean isPrimitive()
    {
        return this.getSuperSpringEntity().isPrimitive();
    }

    /**
     * True if this classifier represents a set type. False otherwise.
     * @see ClassifierFacade#isSetType()
     */
    public boolean isSetType()
    {
        return this.getSuperSpringEntity().isSetType();
    }

    /**
     * Indicates whether or not this classifier represents a string type.
     * @see ClassifierFacade#isStringType()
     */
    public boolean isStringType()
    {
        return this.getSuperSpringEntity().isStringType();
    }

    /**
     * Indicates whether or not this classifier represents a time type.
     * @see ClassifierFacade#isTimeType()
     */
    public boolean isTimeType()
    {
        return this.getSuperSpringEntity().isTimeType();
    }

    /**
     * Returns true if this type is a wrapped primitive type.
     * @see ClassifierFacade#isWrappedPrimitive()
     */
    public boolean isWrappedPrimitive()
    {
        return this.getSuperSpringEntity().isWrappedPrimitive();
    }

    /**
     * Returns a collection of all entities this entity and its ancestors have a relation to.
     * @see org.andromda.metafacades.uml.Entity#getAllEntityReferences()
     */
    public Collection<DependencyFacade> getAllEntityReferences()
    {
        return this.getSuperSpringEntity().getAllEntityReferences();
    }

    /**
     * Gets a comma separated list of attribute names.  If 'follow' is true, will travel up the
     * inheritance hiearchy to include attributes in parent entities as well.  If 'withIdentifiers'
     * is true, will include identifiers.
     * @see org.andromda.metafacades.uml.Entity#getAttributeNameList(boolean follow, boolean withIdentifiers)
     */
    public String getAttributeNameList(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getAttributeNameList(follow, withIdentifiers);
    }

    /**
     * Gets a comma separated list of attribute names.  If 'follow' is true, will travel up the
     * inheritance hiearchy to include attributes in parent entities as well.  If 'withIdentifiers'
     * is true, will include identifiers  and  if 'withDerived' is set to true, will include derived
     * attributes.
     * @see org.andromda.metafacades.uml.Entity#getAttributeNameList(boolean follow, boolean withIdentifiers, boolean withDerived)
     */
    public String getAttributeNameList(boolean follow, boolean withIdentifiers, boolean withDerived)
    {
        return this.getSuperSpringEntity().getAttributeNameList(follow, withIdentifiers, withDerived);
    }

    /**
     * Gets a comma separated list of attribute types.  If 'follow' is true, will travel up the
     * inheritance hierarchy to include attributes in parent entities as well.  If 'withIdentifiers'
     * is true, will include identifiers.
     * @see org.andromda.metafacades.uml.Entity#getAttributeTypeList(boolean follow, boolean withIdentifiers)
     */
    public String getAttributeTypeList(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getAttributeTypeList(follow, withIdentifiers);
    }

    /**
     * Gets all attributes of the entity, and optionally retieves the super entities attributes as
     * well as excludes the entity's identifiers if 'withIdentifiers' is set to false.
     * @see org.andromda.metafacades.uml.Entity#getAttributes(boolean follow, boolean withIdentifiers)
     */
    public Collection<AttributeFacade> getAttributes(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getAttributes(follow, withIdentifiers);
    }

    /**
     * Gets all attributes of the entity, and optionally retieves the super entities attributes as
     * well as excludes the entity's identifiers if 'withIdentifiers' is set to false and exclude
     * derived attributes if 'withDerived' is set to false.
     * @see org.andromda.metafacades.uml.Entity#getAttributes(boolean follow, boolean withIdentifiers, boolean withDerived)
     */
    public Collection<AttributeFacade> getAttributes(boolean follow, boolean withIdentifiers, boolean withDerived)
    {
        return this.getSuperSpringEntity().getAttributes(follow, withIdentifiers, withDerived);
    }

    /**
     * All business operations of the entity, these include any operations that aren't queries.
     * @see org.andromda.metafacades.uml.Entity#getBusinessOperations()
     */
    public Collection<OperationFacade> getBusinessOperations()
    {
        return this.getSuperSpringEntity().getBusinessOperations();
    }

    /**
     * Gets any children association ends (i.e. entity association ends that are participants in an
     * association with this entity and this entity has composite aggregation defined for those
     * associations).
     * @see org.andromda.metafacades.uml.Entity#getChildEnds()
     */
    public Collection<EntityAssociationEnd> getChildEnds()
    {
        return this.getSuperSpringEntity().getChildEnds();
    }

    /**
     * The embedded values belonging to this entity.
     * @see org.andromda.metafacades.uml.Entity#getEmbeddedValues()
     */
    public Collection<AttributeFacade> getEmbeddedValues()
    {
        return this.getSuperSpringEntity().getEmbeddedValues();
    }

    /**
     * All entities referenced by this entity.
     * @see org.andromda.metafacades.uml.Entity#getEntityReferences()
     */
    public Collection<DependencyFacade> getEntityReferences()
    {
        return this.getSuperSpringEntity().getEntityReferences();
    }

    /**
     * The full name of the type of the identifier. If composite identifier add the PK sufix to the
     * class name. If not, retorns the fully qualified name of the identifier.
     * @see org.andromda.metafacades.uml.Entity#getFullyQualifiedIdentifierTypeName()
     */
    public String getFullyQualifiedIdentifierTypeName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedIdentifierTypeName();
    }

    /**
     * Gets all the associationEnds of this entity marked with the identifiers stereotype.
     * @see org.andromda.metafacades.uml.Entity#getIdentifierAssociationEnds()
     */
    public Collection<AssociationEndFacade> getIdentifierAssociationEnds()
    {
        return this.getSuperSpringEntity().getIdentifierAssociationEnds();
    }

    /**
     * The getter name of the identifier.
     * @see org.andromda.metafacades.uml.Entity#getIdentifierGetterName()
     */
    public String getIdentifierGetterName()
    {
        return this.getSuperSpringEntity().getIdentifierGetterName();
    }

    /**
     * The name of the identifier. If composite identifier add the Pk suffix. If not composite
     * returns the attribute name of the identifier.
     * @see org.andromda.metafacades.uml.Entity#getIdentifierName()
     */
    public String getIdentifierName()
    {
        return this.getSuperSpringEntity().getIdentifierName();
    }

    /**
     * The setter name of the identifier.
     * @see org.andromda.metafacades.uml.Entity#getIdentifierSetterName()
     */
    public String getIdentifierSetterName()
    {
        return this.getSuperSpringEntity().getIdentifierSetterName();
    }

    /**
     * The name of the type of the identifier. If composite identifier add the PK suffix to the
     * class name. If not, returns the name of the identifier.
     * @see org.andromda.metafacades.uml.Entity#getIdentifierTypeName()
     */
    public String getIdentifierTypeName()
    {
        return this.getSuperSpringEntity().getIdentifierTypeName();
    }

    /**
     * All the attributes of the entity which make up its identifier (primary key).  Will search any
     * super classes as well.  If no identifiers exist, a default identifier will be created if the
     * allowDefaultIdentifiers property is set to true.
     * @see org.andromda.metafacades.uml.Entity#getIdentifiers()
     */
    public Collection<ModelElementFacade> getIdentifiers()
    {
        return this.getSuperSpringEntity().getIdentifiers();
    }

    /**
     * Gets all identifiers for an entity. If 'follow' is true, and if no identifiers can be found
     * on the entity, a search up the inheritance chain will be performed, and the identifiers from
     * the first super class having them will be used.   If no identifiers exist, a default
     * identifier will be created if the allowDefaultIdentifiers property is set to true.
     * Identifiers can be on attributes or associations (composite primary key).
     * @see org.andromda.metafacades.uml.Entity#getIdentifiers(boolean follow)
     */
    public Collection<ModelElementFacade> getIdentifiers(boolean follow)
    {
        return this.getSuperSpringEntity().getIdentifiers(follow);
    }

    /**
     * The maximum length a SQL name may be.
     * @see org.andromda.metafacades.uml.Entity#getMaxSqlNameLength()
     */
    public short getMaxSqlNameLength()
    {
        return this.getSuperSpringEntity().getMaxSqlNameLength();
    }

    /**
     * Gets the attributes as a list within an operation call, optionally including the type names
     * and the identifier attributes.
     * @see org.andromda.metafacades.uml.Entity#getOperationCallFromAttributes(boolean withIdentifiers)
     */
    public String getOperationCallFromAttributes(boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getOperationCallFromAttributes(withIdentifiers);
    }

    /**
     * Gets the attributes as a list within an operation call.  If 'withTypeNames' is true, it will
     * include the type names, if 'withIdentifiers' is true it will include the identifiers.  If
     * 'follow' is true it will follow the inheritance hierarchy and get the attributes of the super
     * class as well.
     * @see org.andromda.metafacades.uml.Entity#getOperationCallFromAttributes(boolean withIdentifiers, boolean follow)
     */
    public String getOperationCallFromAttributes(boolean withIdentifiers, boolean follow)
    {
        return this.getSuperSpringEntity().getOperationCallFromAttributes(withIdentifiers, follow);
    }

    /**
     * Returns the parent association end of this entity if its a child entity.  The parent is the
     * entity that is the participant the association that has composite aggregation defined.  Will
     * return null if the entity has no parent.
     * @see org.andromda.metafacades.uml.Entity#getParentEnd()
     */
    public EntityAssociationEnd getParentEnd()
    {
        return this.getSuperSpringEntity().getParentEnd();
    }

    /**
     * Gets all properties of this entity, this includes the attributes and navigable association
     * ends of the entity.  The 'follow' flag indcates whether or not the inheritance hierarchy
     * should be followed when getting all the properties.  The 'withIdentifiers' flag indicates
     * whether or not identifiers should be included in the collection of properties.
     * @see org.andromda.metafacades.uml.Entity#getProperties(boolean follow, boolean withIdentifiers)
     */
    public Collection<ModelElementFacade> getProperties(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getProperties(follow, withIdentifiers);
    }

    /**
     * Returns all the operations that can perform queries on the entity.
     * @see org.andromda.metafacades.uml.Entity#getQueryOperations()
     */
    public Collection<EntityQueryOperation> getQueryOperations()
    {
        return this.getSuperSpringEntity().getQueryOperations();
    }

    /**
     * Gets all query operations for an entity. If 'follow' is true, and if no query operations can
     * be found on the entity, a search up the inheritance chain will be performed, and the
     * identifiers from the first super class having them will be used.   If no identifiers exist, a
     * default identifier will be created if the allowDefaultIdentifiers property is set to true.
     * @see org.andromda.metafacades.uml.Entity#getQueryOperations(boolean follow)
     */
    public Collection<OperationFacade> getQueryOperations(boolean follow)
    {
        return this.getSuperSpringEntity().getQueryOperations(follow);
    }

    /**
     * Gets a comma separated list of required attribute names.  If 'follow' is true, will travel up
     * the inheritance hierarchy to include attributes in parent entities as well.  If
     * 'withIdentifiers' is true, will include identifiers.
     * @see org.andromda.metafacades.uml.Entity#getRequiredAttributeNameList(boolean follow, boolean withIdentifiers)
     */
    public String getRequiredAttributeNameList(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getRequiredAttributeNameList(follow, withIdentifiers);
    }

    /**
     * Gets a comma separated list of attribute types with are required.  If 'follow' is true, will
     * travel up the inheritance hierarchy to include attributes in parent entities as well.  If
     * 'withIdentifiers' is true, will include identifiers.
     * @see org.andromda.metafacades.uml.Entity#getRequiredAttributeTypeList(boolean follow, boolean withIdentifiers)
     */
    public String getRequiredAttributeTypeList(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getRequiredAttributeTypeList(follow, withIdentifiers);
    }

    /**
     * Returns all attributes that are specified as 'required' in the model.  If 'follow' is true,
     * then required attributes in super classes will also be returned, if false, just the ones
     * directly on the entity will be returned.  If 'withIdentifiers' is true, the identifiers will
     * be include, if false, no identifiers will be included.
     * @see org.andromda.metafacades.uml.Entity#getRequiredAttributes(boolean follow, boolean withIdentifiers)
     */
    public Collection<AttributeFacade> getRequiredAttributes(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getRequiredAttributes(follow, withIdentifiers);
    }

    /**
     * Gets all required properties for this entity.  These consist of any required attributes as
     * well as navigable associations that are marked as 'required'.  If 'follow' is true, then the
     * inheritance hierchy will be followed and all required properties from super classes will be
     * included as well.
     * If 'withIdentifiers' is true, the identifiers will be include, if false, no identifiers will
     * be included.
     * @see org.andromda.metafacades.uml.Entity#getRequiredProperties(boolean follow, boolean withIdentifiers)
     */
    public Collection<ModelElementFacade> getRequiredProperties(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getRequiredProperties(follow, withIdentifiers);
    }

    /**
     * Creates a comma separated list of the required property names.
     * @see org.andromda.metafacades.uml.Entity#getRequiredPropertyNameList(boolean follow, boolean withIdentifiers)
     */
    public String getRequiredPropertyNameList(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getRequiredPropertyNameList(follow, withIdentifiers);
    }

    /**
     * A comma separated list of the required property types.
     * @see org.andromda.metafacades.uml.Entity#getRequiredPropertyTypeList(boolean follow, boolean withIdentifiers)
     */
    public String getRequiredPropertyTypeList(boolean follow, boolean withIdentifiers)
    {
        return this.getSuperSpringEntity().getRequiredPropertyTypeList(follow, withIdentifiers);
    }

    /**
     * The name of the schema that contains the database table
     * @see org.andromda.metafacades.uml.Entity#getSchema()
     */
    public String getSchema()
    {
        return this.getSuperSpringEntity().getSchema();
    }

    /**
     * The name of the database table to which this entity is persisted.
     * @see org.andromda.metafacades.uml.Entity#getTableName()
     */
    public String getTableName()
    {
        return this.getSuperSpringEntity().getTableName();
    }

    /**
     * Returns true/false depending on whether or not this entity represetns a child in an
     * association (this occurs when this entity is on the opposite end of an assocation end defined
     * as composite).
     * @see org.andromda.metafacades.uml.Entity#isChild()
     */
    public boolean isChild()
    {
        return this.getSuperSpringEntity().isChild();
    }

    /**
     * True if this entity identifier is a composite (consists of multiple key columns, typically
     * abstracted into an external composite identifier class)
     * @see org.andromda.metafacades.uml.Entity#isCompositeIdentifier()
     */
    public boolean isCompositeIdentifier()
    {
        return this.getSuperSpringEntity().isCompositeIdentifier();
    }

    /**
     * True if the entity has its identifiers dynamically added, false otherwise.
     * @see org.andromda.metafacades.uml.Entity#isDynamicIdentifiersPresent()
     */
    public boolean isDynamicIdentifiersPresent()
    {
        return this.getSuperSpringEntity().isDynamicIdentifiersPresent();
    }

    /**
     * True if the entity has any identifiers defined, false otherwise.
     * @see org.andromda.metafacades.uml.Entity#isIdentifiersPresent()
     */
    public boolean isIdentifiersPresent()
    {
        return this.getSuperSpringEntity().isIdentifiersPresent();
    }

    /**
     * Indiciates if this entity is using an assigned identifier or not.
     * @see org.andromda.metafacades.uml.Entity#isUsingAssignedIdentifier()
     */
    public boolean isUsingAssignedIdentifier()
    {
        return this.getSuperSpringEntity().isUsingAssignedIdentifier();
    }

    /**
     * Indicates whether or not this entity is using a foreign identifier as its identifiers.  That
     * is: the foreignIdentifier flag was set on an incoming association end and the entity is
     * therefore using the related foreign parent entity's identifier.
     * @see org.andromda.metafacades.uml.Entity#isUsingForeignIdentifier()
     */
    public boolean isUsingForeignIdentifier()
    {
        return this.getSuperSpringEntity().isUsingForeignIdentifier();
    }

    /**
     * Finds the tagged value optional searching the entire inheritance hierarchy if 'follow' is set
     * to true.
     * @see GeneralizableElementFacade#findTaggedValue(String tagName, boolean follow)
     */
    public Object findTaggedValue(String tagName, boolean follow)
    {
        return this.getSuperSpringEntity().findTaggedValue(tagName, follow);
    }

    /**
     * All generalizations for this generalizable element, goes up the inheritance tree.
     * @see GeneralizableElementFacade#getAllGeneralizations()
     */
    public Collection<GeneralizableElementFacade> getAllGeneralizations()
    {
        return this.getSuperSpringEntity().getAllGeneralizations();
    }

    /**
     * All specializations (travels down the inheritance hierarchy).
     * @see GeneralizableElementFacade#getAllSpecializations()
     */
    public Collection<GeneralizableElementFacade> getAllSpecializations()
    {
        return this.getSuperSpringEntity().getAllSpecializations();
    }

    /**
     * Gets the direct generalization for this generalizable element.
     * @see GeneralizableElementFacade#getGeneralization()
     */
    public GeneralizableElementFacade getGeneralization()
    {
        return this.getSuperSpringEntity().getGeneralization();
    }

    /**
     * Gets the actual links that this generalization element is part of (it plays either the
     * specialization or generalization).
     * @see GeneralizableElementFacade#getGeneralizationLinks()
     */
    public Collection<GeneralizationFacade> getGeneralizationLinks()
    {
        return this.getSuperSpringEntity().getGeneralizationLinks();
    }

    /**
     * A comma separated list of the fully qualified names of all generalizations.
     * @see GeneralizableElementFacade#getGeneralizationList()
     */
    public String getGeneralizationList()
    {
        return this.getSuperSpringEntity().getGeneralizationList();
    }

    /**
     * The element found when you recursively follow the generalization path up to the root. If an
     * element has no generalization itself will be considered the root.
     * @see GeneralizableElementFacade#getGeneralizationRoot()
     */
    public GeneralizableElementFacade getGeneralizationRoot()
    {
        return this.getSuperSpringEntity().getGeneralizationRoot();
    }

    /**
     * Return all generalizations (ancestors) from this generalizable element.
     * @see GeneralizableElementFacade#getGeneralizations()
     */
    public Collection<GeneralizableElementFacade> getGeneralizations()
    {
        return this.getSuperSpringEntity().getGeneralizations();
    }

    /**
     * Gets the direct specializations (i.e. sub elements) for this generalizatble element.
     * @see GeneralizableElementFacade#getSpecializations()
     */
    public Collection<GeneralizableElementFacade> getSpecializations()
    {
        return this.getSuperSpringEntity().getSpecializations();
    }

    /**
     * Copies all tagged values from the given ModelElementFacade to this model element facade.
     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
     */
    public void copyTaggedValues(ModelElementFacade element)
    {
        this.getSuperSpringEntity().copyTaggedValues(element);
    }

    /**
     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
     * one found will be returned.
     * @see ModelElementFacade#findTaggedValue(String tagName)
     */
    public Object findTaggedValue(String tagName)
    {
        return this.getSuperSpringEntity().findTaggedValue(tagName);
    }

    /**
     * Returns all the values for the tagged value with the specified name. The returned collection
     * will contains only String instances, or will be empty. Never null.
     * @see ModelElementFacade#findTaggedValues(String tagName)
     */
    public Collection<Object> findTaggedValues(String tagName)
    {
        return this.getSuperSpringEntity().findTaggedValues(tagName);
    }

    /**
     * Returns the fully qualified name of the model element. The fully qualified name includes
     * complete package qualified name of the underlying model element. The templates parameter will
     * be replaced by the correct one given the binding relation of the parameter to this element.
     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
     */
    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
    {
        return this.getSuperSpringEntity().getBindedFullyQualifiedName(bindedElement);
    }

    /**
     * Gets all constraints belonging to the model element.
     * @see ModelElementFacade#getConstraints()
     */
    public Collection<ConstraintFacade> getConstraints()
    {
        return this.getSuperSpringEntity().getConstraints();
    }

    /**
     * Returns the constraints of the argument kind that have been placed onto this model. Typical
     * kinds are "inv", "pre" and "post". Other kinds are possible.
     * @see ModelElementFacade#getConstraints(String kind)
     */
    public Collection<ConstraintFacade> getConstraints(String kind)
    {
        return this.getSuperSpringEntity().getConstraints(kind);
    }

    /**
     * Gets the documentation for the model element, The indent argument is prefixed to each line.
     * By default this method wraps lines after 64 characters.
     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
     * @see ModelElementFacade#getDocumentation(String indent)
     */
    public String getDocumentation(String indent)
    {
        return this.getSuperSpringEntity().getDocumentation(indent);
    }

    /**
     * This method returns the documentation for this model element, with the lines wrapped after
     * the specified number of characters, values of less than 1 will indicate no line wrapping is
     * required. By default paragraphs are returned as HTML.
     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
     */
    public String getDocumentation(String indent, int lineLength)
    {
        return this.getSuperSpringEntity().getDocumentation(indent, lineLength);
    }

    /**
     * This method returns the documentation for this model element, with the lines wrapped after
     * the specified number of characters, values of less than 1 will indicate no line wrapping is
     * required. HTML style determines if HTML Escaping is applied.
     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
     */
    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
    {
        return this.getSuperSpringEntity().getDocumentation(indent, lineLength, htmlStyle);
    }

    /**
     * The fully qualified name of this model element.
     * @see ModelElementFacade#getFullyQualifiedName()
     */
    public String getFullyQualifiedName()
    {
        return this.getSuperSpringEntity().getFullyQualifiedName();
    }

    /**
     * Returns the fully qualified name of the model element. The fully qualified name includes
     * complete package qualified name of the underlying model element.  If modelName is true, then
     * the original name of the model element (the name contained within the model) will be the name
     * returned, otherwise a name from a language mapping will be returned.
     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
     */
    public String getFullyQualifiedName(boolean modelName)
    {
        return this.getSuperSpringEntity().getFullyQualifiedName(modelName);
    }

    /**
     * Returns the fully qualified name as a path, the returned value always starts with out a slash
     * '/'.
     * @see ModelElementFacade#getFullyQualifiedNamePath()
     */
    public String getFullyQualifiedNamePath()
    {
        return this.getSuperSpringEntity().getFullyQualifiedNamePath();
    }

    /**
     * Gets the unique identifier of the underlying model element.
     * @see ModelElementFacade#getId()
     */
    public String getId()
    {
        return this.getSuperSpringEntity().getId();
    }

    /**
     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
     * JDK5 compiler level.
     * @see ModelElementFacade#getKeywords()
     */
    public Collection<String> getKeywords()
    {
        return this.getSuperSpringEntity().getKeywords();
    }

    /**
     * UML2: Retrieves a localized label for this named element.
     * @see ModelElementFacade#getLabel()
     */
    public String getLabel()
    {
        return this.getSuperSpringEntity().getLabel();
    }

    /**
     * The language mappings that have been set for this model element.
     * @see ModelElementFacade#getLanguageMappings()
     */
    public TypeMappings getLanguageMappings()
    {
        return this.getSuperSpringEntity().getLanguageMappings();
    }

    /**
     * Return the model containing this model element (multiple models may be loaded and processed
     * at the same time).
     * @see ModelElementFacade#getModel()
     */
    public ModelFacade getModel()
    {
        return this.getSuperSpringEntity().getModel();
    }

    /**
     * The name of the model element.
     * @see ModelElementFacade#getName()
     */
    public String getName()
    {
        return this.getSuperSpringEntity().getName();
    }

    /**
     * Gets the package to which this model element belongs.
     * @see ModelElementFacade#getPackage()
     */
    public ModelElementFacade getPackage()
    {
        return this.getSuperSpringEntity().getPackage();
    }

    /**
     * The name of this model element's package.
     * @see ModelElementFacade#getPackageName()
     */
    public String getPackageName()
    {
        return this.getSuperSpringEntity().getPackageName();
    }

    /**
     * Gets the package name (optionally providing the ability to retrieve the model name and not
     * the mapped name).
     * @see ModelElementFacade#getPackageName(boolean modelName)
     */
    public String getPackageName(boolean modelName)
    {
        return this.getSuperSpringEntity().getPackageName(modelName);
    }

    /**
     * Returns the package as a path, the returned value always starts with out a slash '/'.
     * @see ModelElementFacade#getPackagePath()
     */
    public String getPackagePath()
    {
        return this.getSuperSpringEntity().getPackagePath();
    }

    /**
     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
     * the names of the containing namespaces starting at the root of the hierarchy and ending with
     * the name of the NamedElement itself.
     * @see ModelElementFacade#getQualifiedName()
     */
    public String getQualifiedName()
    {
        return this.getSuperSpringEntity().getQualifiedName();
    }

    /**
     * Gets the root package for the model element.
     * @see ModelElementFacade#getRootPackage()
     */
    public PackageFacade getRootPackage()
    {
        return this.getSuperSpringEntity().getRootPackage();
    }

    /**
     * Gets the dependencies for which this model element is the source.
     * @see ModelElementFacade#getSourceDependencies()
     */
    public Collection<DependencyFacade> getSourceDependencies()
    {
        return this.getSuperSpringEntity().getSourceDependencies();
    }

    /**
     * If this model element is the context of an activity graph, this represents that activity
     * graph.
     * @see ModelElementFacade#getStateMachineContext()
     */
    public StateMachineFacade getStateMachineContext()
    {
        return this.getSuperSpringEntity().getStateMachineContext();
    }

    /**
     * The collection of ALL stereotype names for this model element.
     * @see ModelElementFacade#getStereotypeNames()
     */
    public Collection<String> getStereotypeNames()
    {
        return this.getSuperSpringEntity().getStereotypeNames();
    }

    /**
     * Gets all stereotypes for this model element.
     * @see ModelElementFacade#getStereotypes()
     */
    public Collection<StereotypeFacade> getStereotypes()
    {
        return this.getSuperSpringEntity().getStereotypes();
    }

    /**
     * Return the TaggedValues associated with this model element, under all stereotypes.
     * @see ModelElementFacade#getTaggedValues()
     */
    public Collection<TaggedValueFacade> getTaggedValues()
    {
        return this.getSuperSpringEntity().getTaggedValues();
    }

    /**
     * Gets the dependencies for which this model element is the target.
     * @see ModelElementFacade#getTargetDependencies()
     */
    public Collection<DependencyFacade> getTargetDependencies()
    {
        return this.getSuperSpringEntity().getTargetDependencies();
    }

    /**
     * Get the template parameter for this model element having the parameterName
     * @see ModelElementFacade#getTemplateParameter(String parameterName)
     */
    public Object getTemplateParameter(String parameterName)
    {
        return this.getSuperSpringEntity().getTemplateParameter(parameterName);
    }

    /**
     * Get the template parameters for this model element
     * @see ModelElementFacade#getTemplateParameters()
     */
    public Collection<TemplateParameterFacade> getTemplateParameters()
    {
        return this.getSuperSpringEntity().getTemplateParameters();
    }

    /**
     * The visibility (i.e. public, private, protected or package) of the model element, will
     * attempt a lookup for these values in the language mappings (if any).
     * @see ModelElementFacade#getVisibility()
     */
    public String getVisibility()
    {
        return this.getSuperSpringEntity().getVisibility();
    }

    /**
     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
     * is taken into account when searching for the stereotype), false otherwise.
     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
     */
    public boolean hasExactStereotype(String stereotypeName)
    {
        return this.getSuperSpringEntity().hasExactStereotype(stereotypeName);
    }

    /**
     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
     * pipe, semicolon, or << >>
     * @see ModelElementFacade#hasKeyword(String keywordName)
     */
    public boolean hasKeyword(String keywordName)
    {
        return this.getSuperSpringEntity().hasKeyword(keywordName);
    }

    /**
     * Returns true if the model element has the specified stereotype.  If the stereotype itself
     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
     * one of the stereotype's ancestors has a matching name this method will return true, false
     * otherwise.
     * For example, if we have a certain stereotype called <<exception>> and a model element has a
     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
     * method with 'stereotypeName' defined as 'exception' the method would return true since
     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
     * @see ModelElementFacade#hasStereotype(String stereotypeName)
     */
    public boolean hasStereotype(String stereotypeName)
    {
        return this.getSuperSpringEntity().hasStereotype(stereotypeName);
    }

    /**
     * True if there are target dependencies from this element that are instances of BindingFacade.
     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
     * @see ModelElementFacade#isBindingDependenciesPresent()
     */
    public boolean isBindingDependenciesPresent()
    {
        return this.getSuperSpringEntity().isBindingDependenciesPresent();
    }

    /**
     * Indicates if any constraints are present on this model element.
     * @see ModelElementFacade#isConstraintsPresent()
     */
    public boolean isConstraintsPresent()
    {
        return this.getSuperSpringEntity().isConstraintsPresent();
    }

    /**
     * Indicates if any documentation is present on this model element.
     * @see ModelElementFacade#isDocumentationPresent()
     */
    public boolean isDocumentationPresent()
    {
        return this.getSuperSpringEntity().isDocumentationPresent();
    }

    /**
     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
     * @see ModelElementFacade#isReservedWord()
     */
    public boolean isReservedWord()
    {
        return this.getSuperSpringEntity().isReservedWord();
    }

    /**
     * True is there are template parameters on this model element. For UML2, applies to Class,
     * Operation, Property, and Parameter.
     * @see ModelElementFacade#isTemplateParametersPresent()
     */
    public boolean isTemplateParametersPresent()
    {
        return this.getSuperSpringEntity().isTemplateParametersPresent();
    }

    /**
     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
     * Enumerations and Interfaces, optionally applies on other model elements.
     * @see ModelElementFacade#isValidIdentifierName()
     */
    public boolean isValidIdentifierName()
    {
        return this.getSuperSpringEntity().isValidIdentifierName();
    }

    /**
     * Searches for the constraint with the specified 'name' on this model element, and if found
     * translates it using the specified 'translation' from a translation library discovered by the
     * framework.
     * @see ModelElementFacade#translateConstraint(String name, String translation)
     */
    public String translateConstraint(String name, String translation)
    {
        return this.getSuperSpringEntity().translateConstraint(name, translation);
    }

    /**
     * Translates all constraints belonging to this model element with the given 'translation'.
     * @see ModelElementFacade#translateConstraints(String translation)
     */
    public String[] translateConstraints(String translation)
    {
        return this.getSuperSpringEntity().translateConstraints(translation);
    }

    /**
     * Translates the constraints of the specified 'kind' belonging to this model element.
     * @see ModelElementFacade#translateConstraints(String kind, String translation)
     */
    public String[] translateConstraints(String kind, String translation)
    {
        return this.getSuperSpringEntity().translateConstraints(kind, translation);
    }

    // ----------- delegates to ManageableEntity ------------
    /**
     * All entities to which can be browsed from this entity. Currently this property will simple
     * hold all entities, so the value is the same for any arbitrary entity. Hiding entities can be
     * done in the presentation tier, for example depending on runtime security information.
     * @see ManageableEntity#getAllManageables()
     */
    public List<ManageableEntity> getAllManageables()
    {
        return this.getSuperManageableEntity().getAllManageables();
    }

    /**
     * The attribute used as a key link to display values for this entity.
     * @see ManageableEntity#getDisplayAttribute()
     */
    public ManageableEntityAttribute getDisplayAttribute()
    {
        return this.getSuperManageableEntity().getDisplayAttribute();
    }

    /**
     * The fully qualified service name of the entity.
     * @see ManageableEntity#getFullyQualifiedManageableServiceName()
     */
    public String getFullyQualifiedManageableServiceName()
    {
        return this.getSuperManageableEntity().getFullyQualifiedManageableServiceName();
    }

    /**
     * The associations to other entities from this entity.
     * @see ManageableEntity#getManageableAssociationEnds()
     */
    public List<ManageableEntityAssociationEnd> getManageableAssociationEnds()
    {
        return this.getSuperManageableEntity().getManageableAssociationEnds();
    }

    /**
     * Lists the attributes that can be managed for this entity. This feature is particularly
     * important when resolving inherited attributes and ids.
     * @see ManageableEntity#getManageableAttributes()
     */
    public List<ManageableEntityAttribute> getManageableAttributes()
    {
        return this.getSuperManageableEntity().getManageableAttributes();
    }

    /**
     * The identifier used when managing this entity.
     * @see ManageableEntity#getManageableIdentifier()
     */
    public ManageableEntityAttribute getManageableIdentifier()
    {
        return this.getSuperManageableEntity().getManageableIdentifier();
    }

    /**
     * ManageableAttributes and ManageableAssociationEnds
     * @see ManageableEntity#getManageableMembers()
     */
    public List<ModelElementFacade> getManageableMembers()
    {
        return this.getSuperManageableEntity().getManageableMembers();
    }

    /**
     * The entity package name.
     * @see ManageableEntity#getManageablePackageName()
     */
    public String getManageablePackageName()
    {
        return this.getSuperManageableEntity().getManageablePackageName();
    }

    /**
     * The Package path of the Entity
     * @see ManageableEntity#getManageablePackagePath()
     */
    public String getManageablePackagePath()
    {
        return this.getSuperManageableEntity().getManageablePackagePath();
    }

    /**
     * The entity accessor (getter) call.
     * @see ManageableEntity#getManageableServiceAccessorCall()
     */
    public String getManageableServiceAccessorCall()
    {
        return this.getSuperManageableEntity().getManageableServiceAccessorCall();
    }

    /**
     * The service full path of the entity.
     * @see ManageableEntity#getManageableServiceFullPath()
     */
    public String getManageableServiceFullPath()
    {
        return this.getSuperManageableEntity().getManageableServiceFullPath();
    }

    /**
     * The service name of the entity.
     * @see ManageableEntity#getManageableServiceName()
     */
    public String getManageableServiceName()
    {
        return this.getSuperManageableEntity().getManageableServiceName();
    }

    /**
     * The maximum number of rows to load from the database.
     * @see ManageableEntity#getMaximumListSize()
     */
    public int getMaximumListSize()
    {
        return this.getSuperManageableEntity().getMaximumListSize();
    }

    /**
     * The maximum number of rows to load from the database.
     * @see ManageableEntity#getPageSize()
     */
    public int getPageSize()
    {
        return this.getSuperManageableEntity().getPageSize();
    }

    /**
     * Other Manageable Entities which reference this entity.
     * @see ManageableEntity#getReferencingManageables()
     */
    public List<ManageableEntity> getReferencingManageables()
    {
        return this.getSuperManageableEntity().getReferencingManageables();
    }

    /**
     * The Actors (Roles) which can manage the Entity.
     * @see ManageableEntity#getUsers()
     */
    public List<ActorFacade> getUsers()
    {
        return this.getSuperManageableEntity().getUsers();
    }

    /**
     * Create a create operation on the entity manager?
     * @see ManageableEntity#isCreate()
     */
    public boolean isCreate()
    {
        return this.getSuperManageableEntity().isCreate();
    }

    /**
     * Create a delete operation on the entity manager?
     * @see ManageableEntity#isDelete()
     */
    public boolean isDelete()
    {
        return this.getSuperManageableEntity().isDelete();
    }

    /**
     * True: Entity is manageable.
     * @see ManageableEntity#isManageable()
     */
    public boolean isManageable()
    {
        return this.getSuperManageableEntity().isManageable();
    }

    /**
     * Create a read operation on the entity manager?
     * @see ManageableEntity#isRead()
     */
    public boolean isRead()
    {
        return this.getSuperManageableEntity().isRead();
    }

    /**
     * The maximum number of rows to load from the database.
     * @see ManageableEntity#isResolveable()
     */
    public boolean isResolveable()
    {
        return this.getSuperManageableEntity().isResolveable();
    }

    /**
     * Create an update operation on the entity manager?
     * @see ManageableEntity#isUpdate()
     */
    public boolean isUpdate()
    {
        return this.getSuperManageableEntity().isUpdate();
    }

    /**
     * Returns a string with the attributes without wrapper types.
     * @see ManageableEntity#listManageableMembers(boolean withTypes)
     */
    public String listManageableMembers(boolean withTypes)
    {
        return this.getSuperManageableEntity().listManageableMembers(withTypes);
    }

    /**
     * Returns a string with the attributes and wrapper types.
     * @see ManageableEntity#listManageableMembersWithWrapperTypes()
     */
    public String listManageableMembersWithWrapperTypes()
    {
        return this.getSuperManageableEntity().listManageableMembersWithWrapperTypes();
    }

    /**
     * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
     */
    @Override
    public void initialize()
    {
        this.getSuperSpringEntity().initialize();
        this.getSuperManageableEntity().initialize();
    }

    /**
     * @return Object getSuperSpringEntity().getValidationOwner()
     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
     */
    @Override
    public Object getValidationOwner()
    {
        Object owner = this.getSuperSpringEntity().getValidationOwner();
        if (owner == null)
        {
            owner = this.getSuperManageableEntity().getValidationOwner();
        }
        return owner;
    }

    /**
     * @return String getSuperSpringEntity().getValidationName()
     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
     */
    @Override
    public String getValidationName()
    {
        String name = this.getSuperSpringEntity().getValidationName();
        if (name == null)
        {
            name = this.getSuperManageableEntity().getValidationName();
        }
        return name;
    }

    /**
     * @param validationMessages Collection<ModelValidationMessage>
     * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
     */
    @Override
    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
    {
        this.getSuperSpringEntity().validateInvariants(validationMessages);
        this.getSuperManageableEntity().validateInvariants(validationMessages);
    }

    /**
     * The property that stores the name of the metafacade.
     */
    private static final String NAME_PROPERTY = "name";
    private static final String FQNAME_PROPERTY = "fullyQualifiedName";

    /**
     * @see Object#toString()
     */
    @Override
    public String toString()
    {
        final StringBuilder toString = new StringBuilder(this.getClass().getName());
        toString.append("[");
        try
        {
            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
        }
        catch (final Throwable tryAgain)
        {
            try
            {
                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
            }
            catch (final Throwable ignore)
            {
                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
            }
        }
        toString.append("]");
        return toString.toString();
    }
}