You can divide a model into different physical resources, called fragments, to share parts of a model with multiple users, or to reduce the size of a larger model. Fragments can help you manage a model by providing more manageable sections that maintain the original logical structure. Fragments also provide performance benefits because they only load when their content is needed; this practice is particularly helpful when you load large models. Software development teams often work in parallel by sharing and controlling fragments in a configuration management system, which reduces the number of users working on a single file.
UMLModeler
provides APIs that enable users to create or absorb fragments programmatically.
UMLModeler.createFragmentSilently(URI, EModelElement, boolean)
creates a fragment by moving the specified element from its current resource to
a new resource based on the specified URI.
The element becomes the root of the fragment.
UMLModeler.absorbFragmentSilently(Resource, boolean)
reabsorbs the fragment into its parent resource.
ILogicalResource
is a resource that consists of the root resource and its fragments.
When you fragment an element into a new physical resource, it still
belongs to the same logical resource.
You can retrieve an EObject
or a Resource
's logical resource by using
UMLModeler.getLogicalResource(EObject)
and
UMLModeler.getLogicalResource(Resource)
respectively.
ILogicalResource
provides several APIs that enables you to work with a fragmented model.
You can retrieve its resources by using
getAllResources()
,
getAllLoadedResources()
,
getModifiedResources()
and fragments by using
getAllFragments()
,
getLoadedFragments()
.
To retrieve a complete hierarchical structure of the logical resource, use
getHierarchicalStructure()
which returns
ILogicalUnit
.
Each
ILogicalUnit
is represented by an EMF resource, and provides a method to retrieve its
parent
and children
ILogicalUnit
s.
The elements that you can fragment include packages, classifiers, and diagrams; you cannot fragment profiles.
For more information about fragments, install the Fragment example.