model EA_Model -- Miguel Goulão - USE file with the CCM Metamodel and metrics definitions. -- Copyright (C) 2005 Miguel Goulão -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- -- The GNU GPL is also available from http://www.gnu.org/ -- -- Produced: 2004-12-14 16:13:22 -- Converted: 2004-12-14 16:21 -- -- Description: This file contains the CORBA Component Model Metamodel, -- along with OCL operations to define metrics used in the paper -- "Formal definition of metrics upon the CORBA Component Model". -- The class identifiers used here differ from the ones used in the paper -- to avoid name clashes, because USE does not support package representation. -- We follow the convention PackageName__ClassName. -- In the paper, we just use ClassName, to avoid cluttering the text too much. -- -- You can contact the file author by email to the following -- address (where [dot] stands for . and [at] for @): -- miguel[dot]goulao[at]di[dot]fct[dot]unl[dot]pt ------------------------------------------------------------------------ -- Package CCMMetamodel ------------------------------------------------------------------------ enum BaseIDL__PrimitiveKind{PK_NULL, PK_VOID, PK_SHORT, PK_LONG, _PK_USHORT, PK_ULONG, PK_FLOAT, PK_DOUBLE, PK_BOOLEAN, PK_CHAR, PK_OCTET, PK_ANY, PK_LONGDOUBLE, PK_WSTRING, PK_TYPECODE, PK_WCHAR, PK_PRINCIPAL, PK_STRING, PK_ULONGLONG, PK_OBJREF, PK_LONGLONG} enum BaseIDL__ParameterMode{PARAM_IN, PARAM_OUT, PARAM_INOUT} enum BaseIDL__DefinitionKind{DK_NONE, DK_ALL, DK_ATTRIBUTE, DK_CONSTANT, DK_EXCEPTION, DK_INTERFACE, DK_MODULE, DK_OPERATION, DK_TYPEDEF, DK_ALIAS, DK_STRUCT, DK_UNION, DK_FIXED, DK_ENUM, DK_PRIMITIVE, DK_STRING, DK_SEQUENCE, DK_WSTRING, DK_ARRAY, DK_REPOSITORY} enum CIF__ComponentCategory{PROCESS, SESSION, ENTITY, SERVICE} ------------------------------------------------------------------------ -- Package BaseIDL ------------------------------------------------------------------------ class BaseIDL__ParameterDef < BaseIDL__Typed attributes identifier: String -- was BaseIDL_String direction: BaseIDL__ParameterMode ----------------------------------------------------------------------------- -- mgoul OCL metrics ----------------------------------------------------------------------------- operations ExistsNameType(s:Set(BaseIDL__ParameterDef)): Boolean = s->exists((self.identifier = identifier) and (self.idlType = idlType)) ----------------------------------------------------------------------------- -- mgoul OCL metrics ----------------------------------------------------------------------------- end --class BaseIDL__ParameterDef class BaseIDL__ConstantDef < BaseIDL__Contained, BaseIDL__Typed attributes constValue: BaseIDL__any end --class BaseIDL__ConstantDef abstract class BaseIDL__Typed end --class BaseIDL__Typed class BaseIDL__ModuleDef < BaseIDL__Container attributes prefix: String -- was BaseIDL_String ----------------------------------------------------------------------------- -- mgoul OCL metrics ----------------------------------------------------------------------------- operations Components(): Set (ComponentIDL__ComponentDef) = self.contents->select(oclIsKindOf(ComponentIDL__ComponentDef))->collect(oclAsType(ComponentIDL__ComponentDef))->asSet() ConstituentsCount(): Integer = self.Components()->collect(ProvidedOperationsCount())->sum() ComponentsCount(): Integer = self.Components()->size() CPD(): Real = self.ConstituentsCount()/self.ComponentsCount() ConstituentCount1(): Integer = self.Components()->collect(ProvidesCount())->sum() ConstituentCount2(): Integer = self.Components()->collect(ProvidesNoDupsCount())->sum() ----------------------------------------------------------------------------- -- mgoul OCL metrics ----------------------------------------------------------------------------- end --class BaseIDL__ModuleDef abstract class BaseIDL__TypedefDef < BaseIDL__Contained, BaseIDL__IDLType end --class BaseIDL__TypedefDef class BaseIDL__InterfaceDef < BaseIDL__Container, BaseIDL__IDLType attributes isAbstract: BaseIDL__boolean isLocal: BaseIDL__boolean ----------------------------------------------------------------------------- -- mgoul OCL metrics ----------------------------------------------------------------------------- operations -- Set of Operations in the interface Operations(): Set(BaseIDL__OperationDef) = self.contents->select(o | o.oclIsKindOf(BaseIDL__OperationDef))->collect(oclAsType(BaseIDL__OperationDef))->asSet() -- Number of Operations in the interface OperationsCount(): Integer = self.Operations()->size() ----------------------------------------------------------------------------- -- mgoul OCL metrics end ----------------------------------------------------------------------------- end --class BaseIDL__InterfaceDef class BaseIDL__Field < BaseIDL__Typed attributes identifier: String -- was BaseIDL_String end --class BaseIDL__Field class BaseIDL__StructDef < BaseIDL__TypedefDef attributes members: BaseIDL__Field end --class BaseIDL__StructDef class BaseIDL__UnionDef < BaseIDL__TypedefDef attributes unionMembers: BaseIDL__UnionField end --class BaseIDL__UnionDef class BaseIDL__EnumDef < BaseIDL__TypedefDef attributes members: String -- was BaseIDL_String end --class BaseIDL__EnumDef class BaseIDL__AliasDef < BaseIDL__Typed, BaseIDL__TypedefDef end --class BaseIDL__AliasDef abstract class BaseIDL__IDLType attributes --typeCode: BaseIDL__TypeCode typeCode: String end --class BaseIDL__IDLType class BaseIDL__StringDef < BaseIDL__IDLType attributes bound: BaseIDL__unsigned_long end --class stringDef class BaseIDL__WstringDef < BaseIDL__IDLType attributes bound: BaseIDL__unsigned_long end --class BaseIDL__WstringDef class BaseIDL__FixedDef < BaseIDL__IDLType attributes digits: BaseIDL__unsigned_short scale: BaseIDL__short end --class BaseIDL__FixedDef class BaseIDL__SequenceDef < BaseIDL__IDLType, BaseIDL__Typed attributes bound: BaseIDL__unsigned_long end --class BaseIDL__SequenceDef class BaseIDL__ArrayDef < BaseIDL__IDLType, BaseIDL__Typed attributes bound: BaseIDL__unsigned_long end --class BaseIDL__ArrayDef class BaseIDL__PrimitiveDef < BaseIDL__IDLType attributes kind: BaseIDL__PrimitiveKind end --class BaseIDL__PrimitiveDef class BaseIDL__UnionField < BaseIDL__Typed attributes identifier: String -- was BaseIDL_String label: BaseIDL__any end --class BaseIDL__UnionField abstract class BaseIDL__Container < BaseIDL__Contained operations getFilteredContents(limitToType: BaseIDL__DefinitionKind, includeInherited: BaseIDL__boolean): BaseIDL__Contained lookup(searchName: String): BaseIDL__Contained -- was BaseIDL_String lookupName(searchName: String, levelsToSearch: BaseIDL__long, limitToType: BaseIDL__DefinitionKind, excludeInherited: BaseIDL__boolean): BaseIDL__Contained -- was BaseIDL_String end --class BaseIDL__Container class BaseIDL__TypeCode end --class BaseIDL__TypeCode class BaseIDL__any end --class BaseIDL__any class BaseIDL__boolean end --class BaseIDL__boolean class BaseIDL__unsigned_long end --class BaseIDL__unsigned_long class BaseIDL__short end --class BaseIDL__short class BaseIDL__long end --class BaseIDL__long class BaseIDL__ValueMemberDef < BaseIDL__Typed, BaseIDL__Contained attributes isPublicMember: BaseIDL__boolean end --class BaseIDL__ValueMemberDef class BaseIDL__ValueDef < BaseIDL__IDLType, BaseIDL__Container attributes isAbstract: BaseIDL__boolean isCustom: BaseIDL__boolean isTruncatable: BaseIDL__boolean end --class BaseIDL__ValueDef class BaseIDL__ValueBoxDef < BaseIDL__TypedefDef end --class BaseIDL__ValueBoxDef class String -- was BaseIDL_String end --class String class BaseIDL__unsigned_short end --class BaseIDL__unsigned_short class BaseIDL__OperationDef < BaseIDL__Typed, BaseIDL__Contained attributes isOneway: BaseIDL__boolean --parameters: BaseIDL__ParameterDef --replaced by ... see below. parameters: Sequence (BaseIDL__ParameterDef) contexts: String -- was BaseIDL_String ----------------------------------------------------------------------------- -- mgoul OCL metrics ----------------------------------------------------------------------------- operations -- Set of parameters in an operation Parameters(): Set(BaseIDL__ParameterDef) = self.parameters->asSet() -- Number of parameters in an operation ParametersCount(): Integer = self.Parameters()->size() -- Set of input parameters in an operation InParameters (): Set(BaseIDL__ParameterDef) = self.Parameters()->select(p: BaseIDL__ParameterDef | (p.direction= #PARAM_IN or p.direction= #PARAM_INOUT)) -- Number of input parameters in an operation InParametersCount(): Integer = self.InParameters()->size() -- Set of output parameters in an operation OutParameters(): Set(BaseIDL__ParameterDef) = self.Parameters()->select(p: BaseIDL__ParameterDef | (p.direction= #PARAM_OUT or p.direction= #PARAM_INOUT)) -- Number of output parameters in an operation OutParametersCount(): Integer = self.OutParameters()->size() -- Set of input/output parameters in an operation InOutParameters(): Set(BaseIDL__ParameterDef) = self.Parameters()->select(p: BaseIDL__ParameterDef | (p.direction=#PARAM_INOUT)) -- Number of input/output parameters in an operation InOutParametersCount(): Integer = self.InOutParameters()->size() -- Number of distinct parameter types in an operation DistinctParametersTypeCount(): Integer = self.Parameters()->collect(idlType.typeCode)->asSet()->size() ----------------------------------------------------------------------------- -- mgoul OCL metrics ends ----------------------------------------------------------------------------- end --class BaseIDL__OperationDef class BaseIDL__ExceptionDef < BaseIDL__Contained attributes typeCode: BaseIDL__TypeCode members: BaseIDL__Field end --class BaseIDL__ExceptionDef abstract class BaseIDL__Contained attributes identifier: String -- was BaseIDL_String repositoryId: String -- was BaseIDL_String version: String -- was BaseIDL_String absoluteName: String -- was BaseIDL_String end --class BaseIDL__Contained class BaseIDL__AttributeDef < BaseIDL__Typed, BaseIDL__Contained attributes isReadonly: BaseIDL__boolean end --class BaseIDL__AttributeDef ------------------------------------------------------------------------ -- End Package BaseIDL ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- Package CIF ------------------------------------------------------------------------ class CIF__ArtifactDef < BaseIDL__Contained end --class CIF__ArtifactDef class CIF__SegmentDef < BaseIDL__Contained attributes isSerialized: BaseIDL__boolean end --class CIF__SegmentDef class CIF__ComponentImplDef < BaseIDL__Container attributes category: CIF__ComponentCategory end --class CIF__ComponentImplDef abstract class CIF__Policy end --class CIF__Policy class CIF__HomeImplDef < BaseIDL__Container end --class CIF__HomeImplDef ------------------------------------------------------------------------ -- End Package CIF ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- Package ComponentIDL ------------------------------------------------------------------------ class ComponentIDL__ComponentDef < BaseIDL__InterfaceDef, ComponentIDL__ComponentFeature ----------------------------------------------------------------------------- -- mgoul OCL metrics ----------------------------------------------------------------------------- operations -- Set of events emmited by the component Emits(): Set (ComponentIDL__EmitsDef) = self.emits -- Number of events emmitted by the component EmitsCount(): Integer = self.Emits()->size() -- Set of events published by the component Publishes(): Set (ComponentIDL__PublishesDef) = self.publishes -- Number of events published by the component PublishesCount(): Integer = self.Publishes()->size() -- Set of consumed events Consumes(): Set(ComponentIDL__ConsumesDef) = self.consumes -- Number of events consumed by the component ConsumesCount(): Integer = self.Consumes()->size() --Set of facets of a component Facets(): Set(ComponentIDL__ProvidesDef) = self.facet -- Number of facets of the component FacetsCount(): Integer = self.Facets()->size() -- Interfaces provided by facets, with no duplicates ProvidesNoDups(): Set(BaseIDL__InterfaceDef) = self.Facets()->collect(provides)->asSet() -- Number of Interfaces provided by facets, with no duplicates ProvidesNoDupsCount(): Integer = self.ProvidesNoDups()->size() -- Bag of interfaces provided by a component, with duplicates Provides(): Bag(BaseIDL__InterfaceDef) = self.Facets()->collect(provides) -- Number of interfaces provided by components, with duplicates -- this is equal to FacetsCount(), as each ComponentIDL__ProvidesDef has exactly 1 BaseIDL__InterfaceDef in the provides set. -- ProvidesCount(): Integer = self.FacetsCount() ProvidesCount(): Integer = Provides()->size() -- Set of receptacles of a component Receptacles(): Set(ComponentIDL__UsesDef) = self.receptacle -- Number of receptacles of a component ReceptaclesCount(): Integer = self.Receptacles()->size() -- Set of interfaces required by receptacles, with no duplicates ReceptaclesNoDups(): Bag(BaseIDL__InterfaceDef) = self.Receptacles()->collect(uses) -- Number of interfaces required by receptacles, with no duplicates ReceptaclesNoDupsCount(): Integer = self.ReceptaclesNoDups()->size() -- Set of interfaces required by receptacles, with no duplicates ReceptaclesInterfacesNoDups(): Set(BaseIDL__InterfaceDef) = self.receptacle->collect(uses)->asSet() -- Number of interfaces required by receptacles, with duplicates -- this is equal to ReceptaclesCount(), as each UsesDef has exactly 1 InterfaceDef in the uses set. -- ProvidesCount(): Integer = self.ReceptaclesCount() ReceptaclesInterfacesNoDupsCount(): Integer = self.ReceptaclesInterfacesNoDups()->size() -- Set of interfaces supported by a component, with no duplicates SupportsInterfacesNoDups(): Set(BaseIDL__InterfaceDef) = self.supports -- Number of interfaces supported by a component, with no duplicates SupportsInterfacesNoDupsCount(): Integer = self.SupportsInterfacesNoDups()->size() -- Set of interfaces supported by a component, with duplicates SupportsInterfaces(): Bag(BaseIDL__InterfaceDef) = self.supports->asBag() -- Number of interfaces supported by a component, with duplicates SupportsInterfacesCount(): Integer = self.SupportsInterfaces()->size() -- ProvidedOperations ProvidedOperations(): Set(BaseIDL__OperationDef) = self.ProvidesNoDups().Operations()->asSet() ProvidedOperationsCount(): Integer = self.ProvidedOperations()->size() NA(): Integer = self.ProvidedOperations()-> collect(ParametersCount())->sum() NP(): Integer = self.ProvidedOperationsCount() APP(): Real = self.NA()/self.NP() DistinctArguments(): Set(BaseIDL__ParameterDef) = self.ProvidedOperations().Parameters()-> iterate(p:BaseIDL__ParameterDef; noDups: Set(BaseIDL__ParameterDef)=oclEmpty(Set(BaseIDL__ParameterDef)) | if (not (p.ExistsNameType(noDups))) then noDups->including(p) else noDups endif) DAC(): Integer = self.DistinctArguments()->size() DAR(): Real = self.DAC()/self.NA() aCount(a: BaseIDL__ParameterDef): Integer = self.ProvidedOperations()-> select(o: BaseIDL__OperationDef | a.ExistsNameType(o.Parameters()))-> size() Sum_A (): Integer = self.DistinctArguments()->collect(p| aCount(p)*aCount(p))->sum() ARS(): Real = self.Sum_A()/self.NA() ConstituentCount(): Integer = ComponentIDL__ComponentDef.allInstances->collect(ProvidedOperationsCount())->sum() ComponentsCount(): Integer = ComponentIDL__ComponentDef.allInstances->size() CPD(): Real = self.ConstituentCount()/self.ComponentsCount() ConstituentCount1(): Integer = ComponentIDL__ComponentDef.allInstances->collect(ProvidesCount())->sum() ConstituentCount2(): Integer = ComponentIDL__ComponentDef.allInstances->collect(ProvidesNoDupsCount())->sum() ----------------------------------------------------------------------------- -- mgoul OCL metrics end ----------------------------------------------------------------------------- end --class ComponentIDL__ComponentDef class ComponentIDL__ProvidesDef < BaseIDL__Contained, ComponentIDL__ComponentFeature end --class ComponentIDL__ProvidesDef class ComponentIDL__HomeDef < BaseIDL__InterfaceDef end --class ComponentIDL__HomeDef class ComponentIDL__FactoryDef < BaseIDL__OperationDef end --class ComponentIDL__FactoryDef class ComponentIDL__FinderDef < BaseIDL__OperationDef end --class ComponentIDL__FinderDef class ComponentIDL__EmitsDef < ComponentIDL__EventPortDef end --class ComponentIDL__EmitsDef class ComponentIDL__ConsumesDef < ComponentIDL__EventPortDef end --class ComponentIDL__ConsumesDef class ComponentIDL__UsesDef < BaseIDL__Contained, ComponentIDL__ComponentFeature attributes multiple: BaseIDL__boolean end --class ComponentIDL__UsesDef class ComponentIDL__PublishesDef < ComponentIDL__EventPortDef end --class ComponentIDL__PublishesDef abstract class ComponentIDL__EventPortDef < BaseIDL__Contained, ComponentIDL__ComponentFeature end --class ComponentIDL__EventPortDef class ComponentIDL__EventDef < BaseIDL__ValueDef end --class ComponentIDL__EventDef abstract class ComponentIDL__ComponentFeature end --class ComponentIDL__ComponentFeature ------------------------------------------------------------------------ -- End Package ComponentIDL ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- End Package CCMMetamodel ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- Model Classes ------------------------------------------------------------------------ --class EARootClass --end --class EARootClass --class unsigned_short --end --class unsigned_short --class unsigned_long --end --class unsigned_long --class TypeCode --end --class TypeCode --class String --end --class String --class ParameterMode --end --class ParameterMode --class short --end --class short --class boolean --end --class boolean --class any --end --class any --class ParameterDef --end --class ParameterDef --class DefinitionKind --end --class DefinitionKind --class Field --end --class Field --class PrimitiveKind --end --class PrimitiveKind --class ComponentCategory --end --class ComponentCategory --class UnionField --end --class UnionField --class Contained --end --class Contained --class --end --class --class long --end --class long ------------------------------------------------------------------------ -- Associations ------------------------------------------------------------------------ association BaseIDL__Typed_BaseIDL__IDLType_1 between BaseIDL__Typed[ 0..* ] role typed BaseIDL__IDLType[ 1 ] role idlType end -- association association BaseIDL__InterfaceDef_BaseIDL__InterfaceDef_2 between BaseIDL__InterfaceDef[ 0..* ] role derived BaseIDL__InterfaceDef[ 0..* ] role base end -- association association ComponentIDL__HomeDef_BaseIDL__InterfaceDef_3 between ComponentIDL__HomeDef[ 0..* ] role ComponentIDL__HomeDef BaseIDL__InterfaceDef[ 0..* ] role supports end -- association association ComponentIDL__ComponentDef_BaseIDL__InterfaceDef_4 between ComponentIDL__ComponentDef[ 0..* ] role components BaseIDL__InterfaceDef[ 0..* ] role supports end -- association association ComponentIDL__UsesDef_BaseIDL__InterfaceDef_5 between ComponentIDL__UsesDef[ 0..* ] role usesDef BaseIDL__InterfaceDef[ 1 ] role uses end -- association association ComponentIDL__ProvidesDef_BaseIDL__InterfaceDef_6 between ComponentIDL__ProvidesDef[ 0..* ] role providesDef BaseIDL__InterfaceDef[ 1 ] role provides end -- association association BaseIDL__ValueDef_BaseIDL__InterfaceDef_7 between BaseIDL__ValueDef[ 0..* ] role valueDef BaseIDL__InterfaceDef[ 0..1 ] role interfaceDef end -- association association BaseIDL__UnionDef_BaseIDL__IDLType_8 between BaseIDL__UnionDef[ 0..* ] role unionDef BaseIDL__IDLType[ 1 ] role discriminatorType end -- association composition BaseIDL__Contained_BaseIDL__Container_9 between BaseIDL__Contained[ 0..* ] role contents BaseIDL__Container[ 0..1 ] role definedIn end -- association association BaseIDL__ValueDef_BaseIDL__ValueDef_10 between BaseIDL__ValueDef[ 0..* ] role abstractBase BaseIDL__ValueDef[ 0..* ] role abstractDerived end -- association association BaseIDL__ValueDef_BaseIDL__ValueDef_11 between BaseIDL__ValueDef[ 0..* ] role derived BaseIDL__ValueDef[ 0..1 ] role base end -- association association ComponentIDL__HomeDef_BaseIDL__ValueDef_12 between ComponentIDL__HomeDef[ 0..* ] role home BaseIDL__ValueDef[ 0..1 ] role primary_key end -- association association BaseIDL__OperationDef_BaseIDL__ExceptionDef_13 between BaseIDL__OperationDef[ 0..* ] role operationDef BaseIDL__ExceptionDef[ 0..* ] role exceptionDef end -- association association BaseIDL__AttributeDef_BaseIDL__ExceptionDef_14 between BaseIDL__AttributeDef[ 0..* ] role getAttribute BaseIDL__ExceptionDef[ 0..* ] role getException end -- association association BaseIDL__AttributeDef_BaseIDL__ExceptionDef_15 between BaseIDL__AttributeDef[ 0..* ] role setAttribute BaseIDL__ExceptionDef[ 0..* ] role setException end -- association association CIF__SegmentDef_CIF__ArtifactDef_16 between CIF__SegmentDef[ 0..* ] role CIF__SegmentDef CIF__ArtifactDef[ 1 ] role artifact end -- association aggregation CIF__SegmentDef_CIF__Policy_17 between CIF__SegmentDef[ 1..* ] role CIF__SegmentDef CIF__Policy[ 0..* ] role policies end -- association association CIF__SegmentDef_ComponentIDL__ComponentFeature_18 between CIF__SegmentDef[ 1 ] role CIF__SegmentDef ComponentIDL__ComponentFeature[ 1..* ] role features end -- association composition CIF__ComponentImplDef_CIF__SegmentDef_19 between CIF__ComponentImplDef[ 1 ] role CIF__ComponentImplDef CIF__SegmentDef[ 1..* ] role segments end -- association association CIF__ComponentImplDef_ComponentIDL__ComponentDef_20 between CIF__ComponentImplDef[ 0..* ] role CIF__ComponentImplDef ComponentIDL__ComponentDef[ 1 ] role component end -- association association CIF__HomeImplDef_CIF__ComponentImplDef_21 between CIF__HomeImplDef[ 0..* ] role home_impl CIF__ComponentImplDef[ 1 ] role component_impl end -- association association CIF__HomeImplDef_ComponentIDL__HomeDef_22 between CIF__HomeImplDef[ 0..* ] role CIF__HomeImplDef ComponentIDL__HomeDef[ 1 ] role home end -- association composition ComponentIDL__PublishesDef_ComponentIDL__ComponentDef_23 between ComponentIDL__PublishesDef[ 0..* ] role publishes ComponentIDL__ComponentDef[ 1 ] role component end -- association association ComponentIDL__HomeDef_ComponentIDL__ComponentDef_24 between ComponentIDL__HomeDef[ 0..* ] role home ComponentIDL__ComponentDef[ 1 ] role component end -- association composition ComponentIDL__UsesDef_ComponentIDL__ComponentDef_25 between ComponentIDL__UsesDef[ 0..* ] role receptacle ComponentIDL__ComponentDef[ 1 ] role component end -- association composition ComponentIDL__ConsumesDef_ComponentIDL__ComponentDef_26 between ComponentIDL__ConsumesDef[ 0..* ] role consumes ComponentIDL__ComponentDef[ 1 ] role component end -- association composition ComponentIDL__EmitsDef_ComponentIDL__ComponentDef_27 between ComponentIDL__EmitsDef[ 0..* ] role emits ComponentIDL__ComponentDef[ 1 ] role component end -- association composition ComponentIDL__ProvidesDef_ComponentIDL__ComponentDef_28 between ComponentIDL__ProvidesDef[ 0..* ] role facet ComponentIDL__ComponentDef[ 1 ] role component end -- association composition ComponentIDL__FactoryDef_ComponentIDL__HomeDef_29 between ComponentIDL__FactoryDef[ 0..* ] role factory ComponentIDL__HomeDef[ 1 ] role home end -- association composition ComponentIDL__FinderDef_ComponentIDL__HomeDef_30 between ComponentIDL__FinderDef[ 0..* ] role finder ComponentIDL__HomeDef[ 1 ] role home end -- association association ComponentIDL__EventPortDef_ComponentIDL__EventDef_31 between ComponentIDL__EventPortDef[ 0..* ] role event ComponentIDL__EventDef[ 1 ] role type end -- association -- added by mgoul to replace the parameters attribute in the BaseIDL__OperationDef metaclass -- REMOVED BY FBA WHILE CREATING META-OBJECTS OBJECTS --composition BaseIDL__ParameterDef_BaseIDL__OperationDef_32 between -- BaseIDL__ParameterDef[ 0..* ] role parameters -- BaseIDL__OperationDef[ 1 ] role operation --end -- association -- end model EA_Model