Skip to content

Commit a4d3e12

Browse files
committed
ST6RI-178 Updated project versioning capability
1 parent 633e761 commit a4d3e12

14 files changed

Lines changed: 1146 additions & 585 deletions

File tree

org.omg.sysml.interactive/src/org/omg/sysml/interactive/SysMLInteractive.java

Lines changed: 54 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.Collections;
3535
import java.util.Date;
3636
import java.util.List;
37+
import java.util.NoSuchElementException;
3738
import java.util.Scanner;
3839
import java.util.UUID;
3940
import java.util.stream.Collectors;
@@ -58,6 +59,7 @@
5859
import org.omg.kerml.xtext.KerMLStandaloneSetup;
5960
import org.omg.kerml.xtext.library.ILibraryIndexProvider;
6061
import org.omg.kerml.xtext.naming.KerMLQualifiedNameConverter;
62+
import org.omg.sysml.ApiException;
6163
import org.omg.sysml.execution.expressions.ExpressionEvaluator;
6264
import org.omg.sysml.lang.sysml.Element;
6365
import org.omg.sysml.lang.sysml.Expression;
@@ -76,10 +78,13 @@
7678
import org.omg.sysml.util.SysMLUtil;
7779
import org.omg.sysml.util.TypeUtil;
7880
import org.omg.sysml.util.repository.EObjectUUIDTracker;
79-
import org.omg.sysml.util.repository.ProjectDelta;
81+
import org.omg.sysml.util.repository.EMFModelRefresh;
8082
import org.omg.sysml.util.repository.ProjectRepository;
81-
import org.omg.sysml.util.repository.ProjectRepository.RepositoryProject;
82-
import org.omg.sysml.util.repository.RepositoryContentFetcher;
83+
import org.omg.sysml.util.repository.ProjectRevision;
84+
import org.omg.sysml.util.repository.ProjectRevision.APIModel;
85+
import org.omg.sysml.util.repository.RemoteProject;
86+
import org.omg.sysml.util.repository.RemoteProject.RemoteBranch;
87+
import org.omg.sysml.util.repository.EMFModelRefreshCreator;
8388
import org.omg.sysml.util.traversal.Traversal;
8489
import org.omg.sysml.util.traversal.facade.impl.ApiElementProcessingFacade;
8590
import org.omg.sysml.util.traversal.facade.impl.JsonElementProcessingFacade;
@@ -442,7 +447,7 @@ public String loadByName(String projectName, List<String> help) {
442447
ProjectRepository repository = new ProjectRepository(apiBasePath);
443448

444449
System.out.println("Locating model");
445-
RepositoryProject repositoryProject = repository.getProjectByName(projectName);
450+
RemoteProject repositoryProject = repository.getProjectByName(projectName);
446451

447452
if (repositoryProject == null) {
448453
return "ERROR:Publication doesn't exist.";
@@ -459,7 +464,7 @@ public String loadById(String projectId, List<String> help) {
459464
ProjectRepository repository = new ProjectRepository(apiBasePath);
460465

461466
System.out.println("Locating model");
462-
RepositoryProject repositoryProject = repository.getPRojectById(UUID.fromString(projectId));
467+
RemoteProject repositoryProject = repository.getPRojectById(UUID.fromString(projectId));
463468

464469
if (repositoryProject == null) {
465470
return "ERROR:Publication doesn't exist.";
@@ -468,43 +473,49 @@ public String loadById(String projectId, List<String> help) {
468473
return load(repositoryProject);
469474
}
470475

471-
private String load(RepositoryProject repositoryProject) {
472-
boolean success = repositoryProject.loadRemote();
473-
474-
if (!success) {
475-
return "ERROR:Could not download the publication.";
476-
}
477-
478-
System.out.println("Collecting UUIDs...");
479-
if (!tracker.isLibraryTracked()) {
480-
tracker.trackLibraryUUIDs(getLibraryResources());
481-
}
482-
483-
tracker.clearTrackedUserElements();
484-
List<Resource> inputResources = getInputResources();
485-
//UUIDS coming from resources that were added later in time will shadow previous ones
486-
tracker.trackUserUUIDs(inputResources);
487-
488-
RepositoryContentFetcher fetcher = new RepositoryContentFetcher(repositoryProject, tracker);
489-
490-
System.out.println("Downloading model...");
491-
ProjectDelta delta = fetcher.fetch();
492-
493-
System.out.println("Adding model to index");
494-
delta.getProjectRoots().forEach((eObject, dto) -> {
495-
next(SYSMLX_EXTENSION);
496-
Resource xmiResource = getResource();
497-
if (eObject instanceof Namespace) {
498-
xmiResource.getContents().add(eObject);
499-
} else {
500-
Namespace root = SysMLFactory.eINSTANCE.createNamespace();
501-
NamespaceUtil.addOwnedMemberTo(root, (Element) eObject);
502-
xmiResource.getContents().add(root);
476+
private String load(RemoteProject repositoryProject) {
477+
try {
478+
RemoteBranch defaultBranch = repositoryProject.getDefaultBranch();
479+
ProjectRevision headRevision = defaultBranch.getHeadRevision();
480+
APIModel model = headRevision.fetchRemote();
481+
482+
System.out.println("Collecting UUIDs...");
483+
if (!tracker.isLibraryTracked()) {
484+
tracker.trackLibraryUUIDs(getLibraryResources());
503485
}
504-
addResourceToIndex(xmiResource);
505-
});
506-
507-
return "Project loaded: " + repositoryProject.getProjectName() + ", " + repositoryProject.getProjectId().toString();
486+
487+
tracker.clear();
488+
List<Resource> inputResources = getInputResources();
489+
//UUIDS coming from resources that were added later in time will shadow previous ones
490+
tracker.trackLocalUUIDs(inputResources);
491+
492+
EMFModelRefreshCreator fetcher = new EMFModelRefreshCreator(model, tracker);
493+
494+
System.out.println("Downloading model...");
495+
EMFModelRefresh delta = fetcher.fetch();
496+
497+
System.out.println("Adding model to index");
498+
delta.getProjectRoots().forEach((eObject, dto) -> {
499+
next(SYSMLX_EXTENSION);
500+
Resource xmiResource = getResource();
501+
if (eObject instanceof Namespace) {
502+
xmiResource.getContents().add(eObject);
503+
} else {
504+
Namespace root = SysMLFactory.eINSTANCE.createNamespace();
505+
NamespaceUtil.addOwnedMemberTo(root, (Element) eObject);
506+
xmiResource.getContents().add(root);
507+
}
508+
addResourceToIndex(xmiResource);
509+
});
510+
511+
return "Project loaded: " + repositoryProject.getProjectName() + ", " + repositoryProject.getRemoteId().toString();
512+
} catch (NoSuchElementException e) {
513+
e.printStackTrace();
514+
return "Requested model doesn't exist.";
515+
} catch (ApiException e) {
516+
e.printStackTrace();
517+
return "Error occured while trying to load model";
518+
}
508519
}
509520

510521
protected String download(String name) {
@@ -518,8 +529,8 @@ public String listPublications(List<String> help) {
518529
return SysMLInteractiveHelp.getProjectsHelp();
519530
}
520531
ProjectRepository projectRepository = new ProjectRepository(apiBasePath);
521-
List<RepositoryProject> repositoryProjects = projectRepository.getProjects();
522-
return repositoryProjects.stream().map(p -> String.format("name=%s, id=%s", p.getProjectName(), p.getProjectId()))
532+
List<RemoteProject> repositoryProjects = projectRepository.getProjects();
533+
return repositoryProjects.stream().map(p -> String.format("name=%s, id=%s", p.getProjectName(), p.getRemoteId()))
523534
.collect(Collectors.joining("\n"));
524535
}
525536

org.omg.sysml.xtext.ui/src/org/omg/sysml/xtext/ui/handlers/PullRepositoryProject.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,14 @@
4949
import org.eclipse.ui.handlers.HandlerUtil;
5050
import org.eclipse.xtext.ui.resource.IResourceSetProvider;
5151
import org.omg.sysml.util.repository.EObjectUUIDTracker;
52-
import org.omg.sysml.util.repository.ProjectDelta;
52+
import org.omg.sysml.ApiException;
53+
import org.omg.sysml.util.repository.EMFModelRefresh;
5354
import org.omg.sysml.util.repository.ProjectRepository;
54-
import org.omg.sysml.util.repository.ProjectRepository.RepositoryProject;
55-
import org.omg.sysml.util.repository.RepositoryContentFetcher;
55+
import org.omg.sysml.util.repository.ProjectRevision;
56+
import org.omg.sysml.util.repository.ProjectRevision.APIModel;
57+
import org.omg.sysml.util.repository.RemoteProject;
58+
import org.omg.sysml.util.repository.RemoteProject.RemoteBranch;
59+
import org.omg.sysml.util.repository.EMFModelRefreshCreator;
5660

5761
import com.google.inject.Inject;
5862

@@ -124,13 +128,21 @@ private void tryPullRemoteFor(IProject project, IProgressMonitor monitor) {
124128
tracker.trackLibraryUUIDs(resourceSet.getResources());
125129

126130
ProjectRepository projectRepository = new ProjectRepository(repositoryUrl);
127-
RepositoryProject repositoryProject = projectRepository.getProjectById(projectName);
128-
RepositoryContentFetcher repositoryFetcher = new RepositoryContentFetcher(repositoryProject, tracker);
129-
ProjectDelta delta = repositoryFetcher.fetch();
131+
RemoteProject repositoryProject = projectRepository.getProjectById(projectName);
132+
133+
RemoteBranch defaultBranch = repositoryProject.getDefaultBranch();
134+
ProjectRevision headRevision = defaultBranch.getHeadRevision();
135+
APIModel model = headRevision.fetchRemote();
136+
EMFModelRefreshCreator repositoryFetcher = new EMFModelRefreshCreator(model, tracker);
137+
EMFModelRefresh delta = repositoryFetcher.fetch();
130138
delta.save(resourceSet, URI.createPlatformResourceURI(targetPath, false));
131139
}
132140
} catch (IOException | CoreException e) {
133141
e.printStackTrace();
142+
} catch (UnsupportedOperationException e) {
143+
e.printStackTrace();
144+
} catch (ApiException e) {
145+
e.printStackTrace();
134146
}
135147
}
136148

org.omg.sysml.xtext/src/org/omg/sysml/xtext/util/SysMLRepositoryLoadUtil.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,22 @@
3535
import org.eclipse.emf.common.util.URI;
3636
import org.eclipse.emf.ecore.resource.ResourceSet;
3737
import org.omg.kerml.xtext.KerMLStandaloneSetup;
38+
import org.omg.sysml.ApiException;
3839
import org.omg.sysml.util.SysMLUtil;
3940
import org.omg.sysml.util.repository.EObjectUUIDTracker;
40-
import org.omg.sysml.util.repository.ProjectDelta;
41+
import org.omg.sysml.util.repository.APIModel;
42+
import org.omg.sysml.util.repository.EMFModelRefresh;
4143
import org.omg.sysml.util.repository.ProjectRepository;
42-
import org.omg.sysml.util.repository.ProjectRepository.RepositoryProject;
43-
import org.omg.sysml.util.repository.RepositoryContentFetcher;
44+
import org.omg.sysml.util.repository.ProjectRevision;
45+
import org.omg.sysml.util.repository.RemoteProject;
46+
import org.omg.sysml.util.repository.RemoteProject.RemoteBranch;
47+
import org.omg.sysml.util.repository.EMFModelRefreshCreator;
4448
import org.omg.sysml.xmi.SysMLxStandaloneSetup;
4549
import org.omg.sysml.xtext.SysMLStandaloneSetup;
4650

4751
public class SysMLRepositoryLoadUtil extends SysMLUtil {
4852

49-
public static void main(String[] args) throws ParseException {
53+
public static void main(String[] args) throws ParseException, UnsupportedOperationException, ApiException {
5054
SysMLRepositoryLoadUtil sysMLRepositoryLoadUtil = createUsingArgs(args);
5155

5256
KerMLStandaloneSetup.doSetup();
@@ -106,16 +110,20 @@ public SysMLRepositoryLoadUtil(String repositoryURL, String project, String targ
106110
addExtension(".kerml");
107111
}
108112

109-
public void load() {
113+
public void load() throws UnsupportedOperationException, ApiException {
110114
ProjectRepository projectRepository = new ProjectRepository(repositoryURL);
111-
RepositoryProject repositoryProject = isReferencedById? projectRepository.getProjectById(project):
115+
RemoteProject repositoryProject = isReferencedById? projectRepository.getProjectById(project):
112116
projectRepository.getProjectByName(project);
113117

114118
if (repositoryProject == null) {
115119
System.err.println("Project does not exist.");
116120
return;
117121
}
118122

123+
RemoteBranch defaultBranch = repositoryProject.getDefaultBranch();
124+
ProjectRevision headRevision = defaultBranch.getHeadRevision();
125+
APIModel remote = headRevision.fetchRemote();
126+
119127
System.out.println("Reading library...");
120128

121129
readAll(localLibraryPath, false);
@@ -126,9 +134,9 @@ public void load() {
126134
tracker.trackLibraryUUIDs(getLibraryResources());
127135

128136

129-
RepositoryContentFetcher repositoryFetcher = new RepositoryContentFetcher(repositoryProject, tracker);
137+
EMFModelRefreshCreator repositoryFetcher = new EMFModelRefreshCreator(remote, tracker);
130138
System.out.println("Fetching project...");
131-
ProjectDelta delta = repositoryFetcher.fetch();
139+
EMFModelRefresh delta = repositoryFetcher.create();
132140
ResourceSet resourceSet = getResourceSet();
133141

134142
try {

0 commit comments

Comments
 (0)