2525import java .io .IOException ;
2626import java .util .Collections ;
2727import java .util .Map ;
28+ import java .util .Set ;
29+ import java .util .stream .Collectors ;
2830
2931import org .eclipse .emf .common .util .URI ;
3032import org .eclipse .emf .ecore .EObject ;
3133import org .eclipse .emf .ecore .resource .Resource ;
3234import org .eclipse .emf .ecore .resource .ResourceSet ;
35+ import org .omg .sysml .lang .sysml .Namespace ;
36+ import org .omg .sysml .lang .sysml .SysMLFactory ;
37+ import org .omg .sysml .lang .sysml .SysMLPackage ;
3338import org .omg .sysml .model .Element ;
3439import org .omg .sysml .util .ElementUtil ;
40+ import org .omg .sysml .util .NamespaceUtil ;
3541
3642public class EMFModelDelta {
3743 private static final String EXTENSION = "sysmlx" ;
@@ -46,13 +52,27 @@ public Map<EObject, Element> getProjectRoots() {
4652 return projectRoots ;
4753 }
4854
55+ public Set <EObject > getProjectRootsAsNamespaces () {
56+ return projectRoots .keySet ().stream ().map (this ::wrapInNamespaceIfNotNamespace ).collect (Collectors .toSet ());
57+ }
58+
59+ private EObject wrapInNamespaceIfNotNamespace (EObject eObject ) {
60+ if (eObject .eClass () == SysMLPackage .eINSTANCE .getNamespace ()) {
61+ return eObject ;
62+ } else {
63+ Namespace root = SysMLFactory .eINSTANCE .createNamespace ();
64+ NamespaceUtil .addOwnedMemberTo (root , (org .omg .sysml .lang .sysml .Element ) eObject );
65+ return root ;
66+ }
67+ }
68+
4969 public void apply (ResourceSet resourceSet , URI baseUri ) throws IOException {
5070 for (var root : projectRoots .keySet ()) {
5171 var dto = projectRoots .get (root );
5272 Object object = dto .get ("@id" );
5373 URI fileURI = baseUri .appendSegment (object .toString ()).appendFileExtension (EXTENSION );
5474 Resource resource = resourceSet .createResource (fileURI );
55- resource .getContents ().add (root );
75+ resource .getContents ().add (wrapInNamespaceIfNotNamespace ( root ) );
5676 ElementUtil .transformAll (resource , false );
5777 resource .save (Collections .EMPTY_MAP );
5878 }
0 commit comments