[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [mdt-ocl.dev] OCL Pivot Promotion for M5
|
Hi
On 26/12/2014 22:22, Ed Willink wrote:
org.eclipse.ocl.pivot is the public API, vaguely corresponding to
org.eclipse.ocl.examples.domain
org.eclipse.ocl.pivot.internal is the less public API, vaguely
corresponding to org.eclipse.ocl.examples.pivot
This doesn't work realistically for users.
While ...pivot.internal depends on ...library depends on ...pivot seems
to provide a potential for lightweight reuseable interfaces, it is
unnatural.
and it needs a genmodel tweak to put interfaces and implementations in
different plugins.
PivotPackage, PivotFactory have to be in the internal plugin as does
anything else that creates a Pivot object, so in practice use of just
the public API is useful only for readonly analysis/execution of an OCL
AS tree built elsewhere (e.g. by an editor). No creation is un-EMF.
The intent of the lightweight reuseable interfaces has been to provide
polymorphism for code generated code. Originally with those irritating
DomainXXX classes, now with the partitioned model plugins. The most
important customer is UML2 for which a dependency on OCL is very
undesirable, so the lightweight interfaces probably don't help.
CG for UML2 is closed world, i.e. no ability to extend with extra
Complete OCL documents, so for most UML2 functionality it can be just
linear Java; it is only for oclType()/oclIsKindOf() that a partial OCL
type system is needed. Therefore we can have a closed world CG that will
do most of UML2 with an option to either auto-generate a type system
run-time within the generated artefacts or to reference a shared version
from OCL.
So, since the struggle to provide lightweight reuseable interfaces
doesn't work for the most important use case and creates un-EMF
characteristics for normal users, why bother?
...pivot.internal and ...library are therefore merged into ...pivot
giving a single non-UI plugin within which we can distinguish
public/internal functionality using exports/packages names.
---
Next, splitting off UML support so that it is truly optional. As a
minimum this requires a ...pivot.uml plugin. In more detail it needs
extensibility so that derived UML-specific classes are used when UML is
required and so that UML-specific classes are created automatically.
The key to discovering what the user needs is the Resource class (is it
a UMLResource) for which the ASResourceFactoryRegistry has
sensitivities. Just need to make its population be via an extension
point. Thereafter the ASResourceFactoryRegistrycn create an appropriate
deruved AbstractEnvironmentFactory where new methods such as
createMetamodelManager etc can be found. (I have finally corrected the
"MetaModel" spelling error).
Construction flow is now typically
ResourceSet -> OCL -> EnvironmentFactory -> MetamodelManager
---
I've pruned some of the totally dead confusing functionality and made
some other functionality such as Customizable/Adaptable a bit more
plausible. The old Environment class vanishes completely, which is handy
with a new one on the way.
Regards
Ed Willink