Interface ImplementationComponentType
- All Superinterfaces:
org.eclipse.emf.cdo.CDOObject
,org.eclipse.emf.cdo.common.id.CDOWithID
,Entity
,EObject
,de.uka.ipd.sdq.identifier.Identifier
,InterfaceProvidingEntity
,InterfaceProvidingRequiringEntity
,InterfaceRequiringEntity
,NamedElement
,Notifier
,PCMBaseClass
,PCMClass
,RepositoryComponent
,ResourceInterfaceRequiringEntity
- All Known Subinterfaces:
BasicComponent
,CompositeComponent
- All Known Implementing Classes:
BasicComponentImpl
,CompositeComponentImpl
,ImplementationComponentTypeImpl
A representation of the model object 'Implementation Component Type'.
This entity represents an abstraction of a component, where both sets of provided and required interfaces as well as the implementation is visible. It fully specifies the component type. The specification of
the internal structure depends on the way the component is realised. In general, components can either be implemented from the scratch or composed out of other components. In the first case, the implemented behaviour of each provided service needs to be specified with a service effect specification (SEFF) to describe the component’s abstract internal structure. We refer to such components as basic components, since they form the basic building blocks of a software architecture. On the other hand, developers can use existing components to assemble new, composite components.
TODO: ? Possibly add constraint that the VariableUsages must have unique names within one component. Maybe this constraint can even be added to the VariableUsage in general (for each containment of VariableUsages, each name inside must be unique, for example).
The following features are supported:
- See Also:
- Generated class or method.
- EMF model class or method.
- abstract="true" annotation="http://www.eclipse.org/emf/2002/Ecore constraints='requiredInterfacesHaveToConformToCompleteType providedInterfacesHaveToConformToCompleteType providedInterfaceHaveToConformToComponentType provideSameOrMoreInterfacesAsCompleteComponentType requireSameOrFewerInterfacesAsCompleteComponentType'" annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/LPG requiredInterfacesHaveToConformToCompleteType='-- ImplementationTypes required Interfaces have to be a subset\r\n-- of CompleteComponentType required Interfaces #\r\n--\r\n-- ACCx are used to accumulate Sets/Bags; usually only the very inner ACCx is used at all.\r\n--\r\n-- Recursive Query for parent Interface IDs\r\n-- see \'lpar2005.pdf\' (Second-order principles in specification languages for Object-Oriented Programs; Beckert, Tretelman) pp. 11 #\r\n--let parentInterfaces : Bag(Interface) =\r\n--\tself.parentCompleteComponentTypes->iterate(pt : CompleteComponentType; acc1 : Bag(Interface) = Bag{} |\r\n--\t\tacc1->union(pt.requiredRoles->iterate(r : RequiredRole; acc2 : Bag(Interface) = Bag{} |\r\n--\t\t\tacc2->union(r.requiredInterface.parentInterface->asBag()) -- asBag required to allow Set operations #\r\n--\t\t))\r\n--\t) in\r\n--let anchestorInterfaces : Bag(Interface) =\r\n--\tself.parentCompleteComponentTypes->iterate(pt : CompleteComponentType; acc3 : Bag(Interface) = Bag{} |\r\n--\t\tacc3->union(pt.requiredRoles->iterate(r : RequiredRole; acc4 : Bag(Interface) = Bag{} |\r\n--\t\t\tacc4->union(r.requiredInterface.parentInterface->asBag()) -- asBag required to allow Set operations #\r\n--\t\t))\r\n--\t)->union( -- union with anchestors found in former recursion #\r\n--\t\tself.parentCompleteComponentTypes->iterate(pt : CompleteComponentType; acc5 : Bag(Interface) = Bag{} |\r\n--\t\t\tacc5->union(pt.requiredRoles->iterate(r : RequiredRole; acc6 : Bag(Interface) = Bag{} |\r\n--\t\t\t\tacc6->union(r.requiredInterface.parentInterface.anchestorInterfaces) --already Set/Bag\r\n--\t\t\t))\r\n--\t\t)\r\n--\t) in\r\n-- Directly required interfaces need to be a subset of required anchestorInterfaces of Supertype #\r\n--anchestorInterfaces.identifier.id->includesAll(\r\n--\tself.requiredRoles->iterate(p : RequiredRole; acc7 : Bag(String) = Bag{} |\r\n--\t\tacc7->union(p.requiredInterface.identifier.id->asBag())\r\n--\t)\t\r\n--)\r\ntrue' providedInterfacesHaveToConformToCompleteType='-- ### EXACT COPY FROM ABOVE ###\r\n-- ImplementationComponentTypes provided Interfaces have to be a superset\r\n-- of CompleteComponentType provided Interfaces #\r\n--\r\n-- ACCx are used to accumulate Sets/Bags; usually only the very inner ACCx is used at all.\r\n--\r\n-- Recursive Query for parent Interface IDs\r\n-- see \'lpar2005.pdf\' (Second-order principles in specification languages for Object-Oriented Programs; Beckert, Tretelman) pp. 11 #\r\n--let parentInterfaces : Bag(Interface) =\r\n--\tself.providedRoles->iterate(r : ProvidedRole; acc2 : Bag(Interface) = Bag{} |\r\n--\t\tacc2->union(r.providedInterface.parentInterface->asBag()) -- asBag required to allow Set operations #\r\n--\t) in\r\n--let anchestorInterfaces : Bag(Interface) =\r\n--\tself.providedRoles->iterate(r : ProvidedRole; acc4 : Bag(Interface) = Bag{} |\r\n--\t\tacc4->union(r.providedInterface.parentInterface->asBag()) -- asBag required to allow Set operations #\r\n--\t)->union( -- union with anchestors found in former recursion #\r\n--\t\tself.providedRoles->iterate(r : ProvidedRole; acc6 : Bag(Interface) = Bag{} |\r\n--\t\t\tacc6->union(r.providedInterface.parentInterface.anchestorInterfaces) --already Set/Bag\r\n--\t\t)\r\n--\t) in\r\n\t-- Directly provided anchestorInterfaces need to be a superset of provided interfaces of Supertype #\r\n--\tanchestorInterfaces.identifier.id->includesAll(\r\n--\t\tself.parentProvidesComponentTypes->iterate(pt : ProvidesComponentType; acc1 : Bag(String) = Bag{} |\r\n--\t\t\tpt.providedRoles->iterate(r : ProvidedRole; acc2 : Bag(String) = Bag{} |\r\n--\t\t\t\tacc2->union(r.providedInterface.identifier.id->asBag()) -- asBag required to allow Set operations #\r\n--\t\t\t)\r\n--\t\t)\r\n--\t)\r\ntrue' providedInterfaceHaveToConformToComponentType='-- assures that InfrastructureComponents only have InfrastructureInterfaces and that BusinessComponents only have OperationInterfaces or EventGroups\r\nif self.componentType = ComponentType::INFRASTRUCTURE_COMPONENT then\r\n\tself.providedRoles_InterfaceProvidingEntity->select(role | role.oclIsTypeOf(OperationInterface) or role.oclIsTypeOf(EventGroup))->size() = 0\r\nelse if self.componentType = ComponentType::BUSINESS_COMPONENT then\r\n\tself.providedRoles_InterfaceProvidingEntity->select(role | role.oclIsTypeOf(InfrastructureInterface))->size() = 0\r\nelse\r\n\t1 = 0\r\nendif\r\nendif' provideSameOrMoreInterfacesAsCompleteComponentType='-- ImplementationComponent has to provide the same or more interfaces like the CompleteComponentType (if set) #\r\n\tif\r\n\t\t -- apply constraint only for non-empty CompleteComponentTypes #\r\n\t\tself.parentCompleteComponentTypes->notEmpty()\r\n\tthen\r\n\t\tlet\r\n\t\t\t--own interfaces:\r\n\t\t\townInterfaces : Set(OperationInterface)\r\n\t\t\t = self.providedRoles_InterfaceProvidingEntity->select(pr|pr.oclIsTypeOf(OperationProvidedRole))->collect(pr : ProvidedRole | pr.oclAsType (OperationProvidedRole).providedInterface__OperationProvidedRole)->asSet()\r\n in \r\n \t--complete type interfaces:\r\n \tself.parentCompleteComponentTypes->forAll\r\n ( p : CompleteComponentType |\r\n (\r\n \tp.providedRoles_InterfaceProvidingEntity->select(pr|pr.oclIsTypeOf(OperationProvidedRole))->collect(pr : ProvidedRole | pr.oclAsType (OperationProvidedRole).providedInterface__OperationProvidedRole)->asSet()\r\n \t-\r\n \townInterfaces\r\n \t)->isEmpty()\r\n \t)\r\n\telse\r\n\t\ttrue\r\n\tendif' requireSameOrFewerInterfacesAsCompleteComponentType='-- ImplementationComponent has to require the same or fewer interfaces like the CompleteComponentType (if set) #\r\n\tif\r\n\t\t-- apply constraint only for non-empty CompleteComponentTypes #\r\n\t\tself.parentCompleteComponentTypes->notEmpty()\r\n\tthen\r\n\t let\r\n\t --own interfaces:\r\n\t ownInterfaces : Set(OperationInterface) \r\n\t = self.requiredRoles_InterfaceRequiringEntity->select(rr|rr.oclIsTypeOf(OperationRequiredRole))->collect(rr : RequiredRole | rr.oclAsType (OperationRequiredRole).requiredInterface__OperationRequiredRole)->asSet()\r\n\t in\r\n\t --complete type interfaces:\r\n\t self.parentCompleteComponentTypes->forAll\r\n\t ( p : CompleteComponentType |\r\n\t \t(\r\n\t\t \townInterfaces\r\n\t\t -\r\n\t\t p.requiredRoles_InterfaceRequiringEntity->select(rr|rr.oclIsTypeOf(OperationRequiredRole))->collect(rr : RequiredRole | rr.oclAsType (OperationRequiredRole).requiredInterface__OperationRequiredRole)->asSet()\r\n\t \t)->isEmpty()\r\n\t \t)\r\n\telse\r\n\t\ttrue\r\n\tendif'"
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionReturns the value of the 'Component Parameter Usage Implementation Component Type' containment reference list.Returns the value of the 'Component Type' attribute.Returns the value of the 'Parent Complete Component Types' reference list.void
setComponentType
(ComponentType value) Sets the value of the 'Component Type
' attribute.Methods inherited from interface org.eclipse.emf.cdo.CDOObject
cdoConflict, cdoDirectResource, cdoHistory, cdoID, cdoInvalid, cdoLockState, cdoPermission, cdoPrefetch, cdoReadLock, cdoReload, cdoResource, cdoRevision, cdoRevision, cdoState, cdoView, cdoWriteLock, cdoWriteOption
Methods inherited from interface org.eclipse.emf.ecore.EObject
eAllContents, eClass, eContainer, eContainingFeature, eContainmentFeature, eContents, eCrossReferences, eGet, eGet, eInvoke, eIsProxy, eIsSet, eResource, eSet, eUnset
Methods inherited from interface de.uka.ipd.sdq.identifier.Identifier
getId, setId
Methods inherited from interface org.palladiosimulator.pcm.core.entity.InterfaceProvidingEntity
getProvidedRoles_InterfaceProvidingEntity
Methods inherited from interface org.palladiosimulator.pcm.core.entity.InterfaceRequiringEntity
getRequiredRoles_InterfaceRequiringEntity
Methods inherited from interface org.palladiosimulator.pcm.core.entity.NamedElement
getEntityName, setEntityName
Methods inherited from interface org.eclipse.emf.common.notify.Notifier
eAdapters, eDeliver, eNotify, eSetDeliver
Methods inherited from interface org.palladiosimulator.pcm.repository.RepositoryComponent
getRepository__RepositoryComponent, setRepository__RepositoryComponent
Methods inherited from interface org.palladiosimulator.pcm.core.entity.ResourceInterfaceRequiringEntity
getResourceRequiredRoles__ResourceInterfaceRequiringEntity
-
Field Details
-
copyright
- See Also:
- Generated class or method.
-
-
Method Details
-
getParentCompleteComponentTypes
EList<CompleteComponentType> getParentCompleteComponentTypes()Returns the value of the 'Parent Complete Component Types' reference list. The list contents are of typeCompleteComponentType
.- Returns:
- the value of the 'Parent Complete Component Types' reference list.
- See Also:
- Generated class or method.
- EMF model class or method.
- ordered="false"
-
getComponentParameterUsage_ImplementationComponentType
EList<VariableUsage> getComponentParameterUsage_ImplementationComponentType()Returns the value of the 'Component Parameter Usage Implementation Component Type' containment reference list. The list contents are of typeVariableUsage
. This property specified the variables of the component that are to be initialized using the assembly context to parametrize the component.- Returns:
- the value of the 'Component Parameter Usage Implementation Component Type' containment reference list.
- See Also:
- Generated class or method.
- EMF model class or method.
- containment="true" ordered="false"
-
getComponentType
ComponentType getComponentType()Returns the value of the 'Component Type' attribute. The default value is"BUSINESS_COMPONENT"
. The literals are from the enumerationComponentType
.- Returns:
- the value of the 'Component Type' attribute.
- See Also:
- Generated class or method.
- EMF model class or method.
- default="BUSINESS_COMPONENT" required="true" ordered="false"
-
setComponentType
Sets the value of the 'Component Type
' attribute.- Parameters:
value
- the new value of the 'Component Type' attribute.- See Also:
- Generated class or method.
-