Section 9.5.8, "Transformation Exceptions and Extensions" in the
"PSM for CCM to PSM for CCM for XML Transformation" chapter, contains
the text:
If the link attribute of a ComponentPackageDescription proxy that
is part of a SubcomponentInstantiationDescription element does not
contain a fragment identifier, then the referenced file can be
either a Component Package Descriptor or a package (i.e. a ZIP
file with the ".cpk" extension containing the package).
This was added for better modularity, to allow a package to "import"
another package, maybe from some external location. On second thought,
considering the implementation impact, this does not seem like such
a good idea, because it overloads an XMI proxy object with a second
meaning: either do what XMI says, or import a package.
It is also self-contradictory with the preceding sentence, which gives
clear semantics to linking to an XML document without a fragment
identifier.
I suggest to replace this with an explicit importing mechanism: add a
new class to the Component Data Model called "ComponentPackageImport",
and use it in the SubcomponentInstantiationDescription. This resolution
clarifies how to reuse packages.
Proposed resolution:
Add a new class "ComponentPackageImport" to the Component Data Model.
6.4.x ComponentPackageImport
6.4.x.1 Description
Imports a package via an URL.
6.4.x.2 Attributes
location: String [1..*]
Alternative locations of the package that is to be imported.
6.4.x.3 Associations
None.
6.4.x.4 Semantics
A ComponentPackageImport can be used instead of a
PackageConfiguration
to import a package, rather than providing the package "inline."
In 6.4.7.1 (SubcomponentInstantiationDescription description), replace
the
second paragraph,
The SubcomponentInstantiationDescription links to a package that
provides
implementations for the sub-component that is to be instantiatiated.
There
is either a link to a ComponentPackageDescription in case a package
recursively contains packages for its sub-components, or there is a
link
to a ComponentPackageReference that contains the requiredType of a
component
interface. Users of the Component Data Model will have to contact a
Repository (possibly via a search path) in order to find a package
that
implements this interface.
with
The SubcomponentInstantiationDescription specifies a package to
instantiate
a subcomponent from, and configures this subcomponent instance. The
package
can be provided in one of three ways:
- The package can be provided inline, as part of the same package,
using a
PackageConfiguration.
- A package can be imported, using a ComponentPackageImport. The
imported
package may be part of the enveloping package, or it may be
referenced
from an external location. This allows reusing packages.
- A package can be referenced indirectly, using a
ComponentPackageReference.
Users of the Component Data Model will have to contact a
Repository
(possibly via a search path) in order to find an appropriate
package.
In 6.4.7.3 (SubcomponentInstantiationDescription associations), add
importedPackage: ComponentPackageImport [0..1]
Imports a package by reference.
In 6.4.7.4 (SubcomponentInstantiationDescription constraints), replace
There can be either a package or a reference, but not both.
with
A package to supply an implementation for this subcomponent is
either
included, imported, or referenced:
context SubcomponentInstantiationDescription inv:
Set
{self.package, self.importedPackage, self.reference}
->size() =
1
In 6.5.1.5 (RepositoryManager semantics), add
The installPackage and createPackage operations recursively resolve
all
imported packages: in all SubcomponentInstantiationDescription
elements,
ComponentPackageImport elements are replaced with
PackageConfiguration
elements, containing the data that was loaded from the imported
package.
PackageConfiguration elements returned from findConfigurationByName
or
findConfigurationByUUID do not contain ComponentPackageImport
elements.
In 9.5.8 (Transformation Exceptions and Extensions), delete the second
sentence of the last paragraph, which reads
If the link attribute of a ComponentPackageDescription proxy that
is part of a SubcomponentInstantiationDescription element does not
contain a fragment identifier, then the referenced file can be
either a Component Package Descriptor or a package (i.e. a ZIP
file with the ".cpk" extension containing the package).