Skip to content

Commit

Permalink
Merge branch 'release/2021-09'
Browse files Browse the repository at this point in the history
  • Loading branch information
ivan-gomes committed Oct 14, 2021
2 parents be91568 + 35d7d5a commit 17436c8
Show file tree
Hide file tree
Showing 564 changed files with 22,038 additions and 24,943 deletions.
7 changes: 5 additions & 2 deletions app/Module.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* SysML v2 REST/HTTP Pilot Implementation
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2021 Twingineer LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand Down Expand Up @@ -36,11 +37,13 @@ protected void configure() {
bind(MetamodelProvider.class).to(JPAMetamodelProvider.class).asEagerSingleton();
bind(JPAManager.class).to(HibernateManager.class).asEagerSingleton();
bind(ObjectMapperFactory.class).to(HibernateObjectMapperFactory.class).asEagerSingleton();
bind(DataDao.class).to(JpaDataDao.class);
bind(ElementDao.class).to(JpaElementDao.class);
bind(ProjectDao.class).to(JpaProjectDao.class);
bind(RelationshipDao.class).to(JpaRelationshipDao.class);
bind(CommitDao.class).to(JpaCommitDao.class);
bind(QueryDao.class).to(JpaQueryDao.class);
bind(BranchDao.class).to(JpaBranchDao.class);
bind(TagDao.class).to(JpaTagDao.class);
}
}
9 changes: 5 additions & 4 deletions app/config/impl/JPAMetamodelProvider.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* SysML v2 REST/HTTP Pilot Implementation
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2021 Twingineer LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -22,7 +23,7 @@
package config.impl;

import config.MetamodelProvider;
import org.omg.sysml.metamodel.MofObject;
import org.omg.sysml.lifecycle.Data;
import org.omg.sysml.query.Constraint;
import org.omg.sysml.record.Record;
import org.reflections.Reflections;
Expand All @@ -38,7 +39,7 @@ public class JPAMetamodelProvider implements MetamodelProvider {

static {
List<Class<?>> roots = Arrays.asList(
MofObject.class,
Data.class,
Record.class,
Constraint.class
);
Expand Down
12 changes: 9 additions & 3 deletions app/controllers/BranchController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* SysML v2 REST/HTTP Pilot Implementation
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2021 Twingineer LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand Down Expand Up @@ -84,11 +85,16 @@ public Result getBranchesByProject(UUID projectId, Request request) {
);
}

public Result getBranchesByProjectAndId(UUID projectId, UUID branchId, Request request) {
public Result getBranchByProjectAndId(UUID projectId, UUID branchId, Request request) {
Optional<Branch> branch = branchService.getByProjectIdAndId(projectId, branchId);
return buildResult(branch.orElse(null), request, new ProjectContainmentParameters(projectId));
}

public Result deleteBranchByProjectAndId(UUID projectId, UUID branchId, Request request) {
Optional<Branch> branch = branchService.deleteByProjectIdAndId(projectId, branchId);
return buildResult(branch.orElse(null), request, new ProjectContainmentParameters(projectId));
}

@Override
protected JsonLdAdorner<Branch, ProjectContainmentParameters> getAdorner() {
return adorner;
Expand Down
19 changes: 10 additions & 9 deletions app/controllers/ElementController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* SysML v2 REST/HTTP Pilot Implementation
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2021 Twingineer LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -22,8 +23,8 @@
package controllers;

import config.MetamodelProvider;
import jackson.jsonld.DataJsonLdAdorner;
import jackson.jsonld.JsonLdAdorner;
import jackson.jsonld.MofObjectJsonLdAdorner;
import org.omg.sysml.metamodel.Element;
import play.Environment;
import play.mvc.Http.Request;
Expand All @@ -35,17 +36,17 @@
import java.util.Optional;
import java.util.UUID;

public final class ElementController extends JsonLdController<Element, MofObjectJsonLdAdorner.Parameters> {
public final class ElementController extends JsonLdController<Element, DataJsonLdAdorner.Parameters> {

private final ElementService elementService;
private final MetamodelProvider metamodelProvider;
private final JsonLdAdorner<Element, MofObjectJsonLdAdorner.Parameters> adorner;
private final JsonLdAdorner<Element, DataJsonLdAdorner.Parameters> adorner;

@Inject
public ElementController(ElementService elementService, MetamodelProvider metamodelProvider, Environment environment) {
this.elementService = elementService;
this.metamodelProvider = metamodelProvider;
this.adorner = new MofObjectJsonLdAdorner<>(metamodelProvider, environment, INLINE_JSON_LD_CONTEXT);
this.adorner = new DataJsonLdAdorner<>(metamodelProvider, environment, INLINE_JSON_LD_CONTEXT);
}

public Result getElementsByProjectIdCommitId(UUID projectId, UUID commitId, Request request) {
Expand All @@ -56,7 +57,7 @@ public Result getElementsByProjectIdCommitId(UUID projectId, UUID commitId, Requ

public Result getElementByProjectIdCommitIdElementId(UUID projectId, UUID commitId, UUID elementId, Request request) {
Optional<Element> element = elementService.getElementsByProjectIdCommitIdElementId(projectId, commitId, elementId);
return buildResult(element.orElse(null), request, new MofObjectJsonLdAdorner.Parameters(projectId, commitId));
return buildResult(element.orElse(null), request, new DataJsonLdAdorner.Parameters(projectId, commitId));
}

public Result getRootsByProjectIdCommitId(UUID projectId, UUID commitId, Request request) {
Expand All @@ -67,7 +68,7 @@ public Result getRootsByProjectIdCommitId(UUID projectId, UUID commitId, Request

private Result buildPaginatedResult(List<Element> elements, UUID projectId, UUID commitId, Request request, PageRequest pageRequest) {
return paginateResult(
buildResult(elements, List.class, metamodelProvider.getImplementationClass(Element.class), request, new MofObjectJsonLdAdorner.Parameters(projectId, commitId)),
buildResult(elements, List.class, metamodelProvider.getImplementationClass(Element.class), request, new DataJsonLdAdorner.Parameters(projectId, commitId)),
elements.size(),
idx -> elements.get(idx).getIdentifier(),
request,
Expand All @@ -76,7 +77,7 @@ private Result buildPaginatedResult(List<Element> elements, UUID projectId, UUID
}

@Override
protected JsonLdAdorner<Element, MofObjectJsonLdAdorner.Parameters> getAdorner() {
protected JsonLdAdorner<Element, DataJsonLdAdorner.Parameters> getAdorner() {
return adorner;
}
}
28 changes: 26 additions & 2 deletions app/controllers/ProjectController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* SysML v2 REST/HTTP Pilot Implementation
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2021 Twingineer LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand Down Expand Up @@ -56,6 +57,29 @@ public Result getProjectById(UUID id, Request request) {
return buildResult(project.orElse(null), request, null);
}

public Result putProjectById(UUID id, Request request) {
Optional<Project> existingProject = projectService.getById(id);
if (existingProject.isEmpty()) {
return Results.notFound();
}
JsonNode requestBodyJson = request.body().asJson();
Project requestedObject = Json.fromJson(requestBodyJson, metamodelProvider.getImplementationClass(Project.class));
if (requestedObject.getId() != null && !id.equals(requestedObject.getId())) {
return Results.badRequest();
}
requestedObject.setId(id);
Optional<Project> project = projectService.update(requestedObject);
if (project.isEmpty()) {
return Results.internalServerError();
}
return buildResult(project.get(), request, null);
}

public Result deleteProjectById(UUID id, Request request) {
Optional<Project> project = projectService.deleteById(id);
return buildResult(project.orElse(null), request, null);
}

public Result getProjects(Request request) {
PageRequest pageRequest = PageRequest.from(request);
List<Project> projects = projectService.getAll(pageRequest.getAfter(), pageRequest.getBefore(), pageRequest.getSize());
Expand Down
36 changes: 21 additions & 15 deletions app/controllers/QueryController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* SysML v2 REST/HTTP Pilot Implementation
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2021 Twingineer LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -28,10 +29,10 @@
import jackson.JacksonHelper;
import jackson.filter.AllowedPropertyFilter;
import jackson.filter.DynamicFilterMixin;
import jackson.jsonld.DataJsonLdAdorner;
import jackson.jsonld.JsonLdAdorner;
import jackson.jsonld.MofObjectJsonLdAdorner;
import org.omg.sysml.lifecycle.Data;
import org.omg.sysml.metamodel.Element;
import org.omg.sysml.metamodel.MofObject;
import org.omg.sysml.query.Query;
import play.Environment;
import play.libs.Json;
Expand All @@ -45,27 +46,27 @@
import java.util.function.UnaryOperator;
import java.util.stream.StreamSupport;

public class QueryController extends JsonLdController<Element, MofObjectJsonLdAdorner.Parameters> {
public class QueryController extends JsonLdController<Data, DataJsonLdAdorner.Parameters> {

private final QueryService queryService;
private final MetamodelProvider metamodelProvider;
private final JsonLdAdorner<Element, MofObjectJsonLdAdorner.Parameters> adorner;
private final JsonLdAdorner<Data, DataJsonLdAdorner.Parameters> adorner;

@Inject
public QueryController(QueryService queryService, MetamodelProvider metamodelProvider, Environment environment) {
this.queryService = queryService;
this.metamodelProvider = metamodelProvider;
this.adorner = new MofObjectJsonLdAdorner<>(metamodelProvider, environment, INLINE_JSON_LD_CONTEXT);
this.adorner = new DataJsonLdAdorner<>(metamodelProvider, environment, INLINE_JSON_LD_CONTEXT);
}

public Result createWithProjectId(UUID projectId, Request request) {
public Result postQueryByProject(UUID projectId, Request request) {
JsonNode requestBodyJson = request.body().asJson();
Query requestedObject = Json.fromJson(requestBodyJson, metamodelProvider.getImplementationClass(Query.class));
Optional<Query> response = queryService.create(projectId, requestedObject);
return response.map(e -> created(Json.toJson(e))).orElseGet(Results::internalServerError);
}

public Result byProject(UUID projectId, Request request) {
public Result getQueriesByProject(UUID projectId, Request request) {
PageRequest pageRequest = PageRequest.from(request);
List<Query> queries = queryService.getByProjectId(projectId, pageRequest.getAfter(), pageRequest.getBefore(), pageRequest.getSize());
return Optional.of(queries)
Expand All @@ -81,11 +82,16 @@ public Result byProject(UUID projectId, Request request) {
.orElseThrow();
}

public Result byProjectAndId(UUID projectId, UUID queryId) {
public Result getQueryByProjectAndId(UUID projectId, UUID queryId) {
Optional<Query> query = queryService.getByProjectIdAndId(projectId, queryId);
return query.map(e -> ok(Json.toJson(e))).orElseGet(Results::notFound);
}

public Result deleteQueryByProjectAndId(UUID projectId, UUID queryId) {
Optional<Query> query = queryService.deleteByProjectIdAndId(projectId, queryId);
return query.map(e -> ok(Json.toJson(e))).orElseGet(Results::notFound);
}

public Result getQueryResultsByProjectIdQueryId(UUID projectId, UUID queryId, @SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional<UUID> commitId, Request request) {
QueryService.QueryResults result = queryService.getQueryResultsByProjectIdQueryId(projectId, queryId, commitId.orElse(null));
return buildResult(result, projectId, request);
Expand All @@ -99,17 +105,17 @@ public Result getQueryResultsByProjectIdQuery(UUID projectId, @SuppressWarnings(
}

private Result buildResult(QueryService.QueryResults queryResults, UUID projectId, Request request) {
List<Element> elements = queryResults.getElements();
List<Data> data = queryResults.getData();
AllowedPropertyFilter filter = queryResults.getPropertyFilter();
boolean ld = respondWithJsonLd(request);
JsonNode json = buildJson(
new HashSet<>(elements),
new HashSet<>(data),
Set.class,
metamodelProvider.getImplementationClass(Element.class),
request,
new MofObjectJsonLdAdorner.Parameters(projectId, queryResults.getCommit().getId()),
new DataJsonLdAdorner.Parameters(projectId, queryResults.getCommit().getId()),
ld,
filter != null ? Json.mapper().copy().addMixIn(MofObject.class, DynamicFilterMixin.class) : Json.mapper(),
filter != null ? Json.mapper().copy().addMixIn(Data.class, DynamicFilterMixin.class) : Json.mapper(),
filter != null ? writer -> writer.with(new SimpleFilterProvider().addFilter(DynamicFilterMixin.FILTER_NAME, filter)) : UnaryOperator.identity()
);
// Workaround for JSON always containing "@type"
Expand All @@ -122,7 +128,7 @@ private Result buildResult(QueryService.QueryResults queryResults, UUID projectI
}

@Override
protected JsonLdAdorner<Element, MofObjectJsonLdAdorner.Parameters> getAdorner() {
protected JsonLdAdorner<Data, DataJsonLdAdorner.Parameters> getAdorner() {
return adorner;
}
}
19 changes: 10 additions & 9 deletions app/controllers/RelationshipController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* SysML v2 REST/HTTP Pilot Implementation
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2020 InterCAX LLC
* Copyright (C) 2020 California Institute of Technology ("Caltech")
* Copyright (C) 2021 Twingineer LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
Expand All @@ -22,10 +23,10 @@
package controllers;

import config.MetamodelProvider;
import jackson.jsonld.DataJsonLdAdorner;
import jackson.jsonld.JsonLdAdorner;
import jackson.jsonld.MofObjectJsonLdAdorner;
import org.omg.sysml.metamodel.Relationship;
import org.omg.sysml.utils.RelationshipDirection;
import org.omg.sysml.util.RelationshipDirection;
import play.Environment;
import play.mvc.Http.Request;
import play.mvc.Result;
Expand All @@ -37,17 +38,17 @@
import java.util.Optional;
import java.util.UUID;

public final class RelationshipController extends JsonLdController<Relationship, MofObjectJsonLdAdorner.Parameters> {
public final class RelationshipController extends JsonLdController<Relationship, DataJsonLdAdorner.Parameters> {

private final RelationshipService relationshipService;
private final MetamodelProvider metamodelProvider;
private final JsonLdAdorner<Relationship, MofObjectJsonLdAdorner.Parameters> adorner;
private final JsonLdAdorner<Relationship, DataJsonLdAdorner.Parameters> adorner;

@Inject
public RelationshipController(RelationshipService relationshipService, MetamodelProvider metamodelProvider, Environment environment) {
this.relationshipService = relationshipService;
this.metamodelProvider = metamodelProvider;
this.adorner = new MofObjectJsonLdAdorner<>(metamodelProvider, environment, INLINE_JSON_LD_CONTEXT);
this.adorner = new DataJsonLdAdorner<>(metamodelProvider, environment, INLINE_JSON_LD_CONTEXT);
}

public Result getRelationshipsByProjectIdCommitIdRelatedElementId(UUID projectId, UUID commitId, UUID relatedElementId, @SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional<String> direction, Request request) {
Expand All @@ -72,7 +73,7 @@ public Result getRelationshipsByProjectIdCommitIdRelatedElementId(UUID projectId

private Result buildPaginatedResult(List<Relationship> relationships, UUID projectId, UUID commitId, Request request, PageRequest pageRequest) {
return paginateResult(
buildResult(relationships, List.class, metamodelProvider.getImplementationClass(Relationship.class), request, new MofObjectJsonLdAdorner.Parameters(projectId, commitId)),
buildResult(relationships, List.class, metamodelProvider.getImplementationClass(Relationship.class), request, new DataJsonLdAdorner.Parameters(projectId, commitId)),
relationships.size(),
idx -> relationships.get(idx).getIdentifier(),
request,
Expand All @@ -81,7 +82,7 @@ private Result buildPaginatedResult(List<Relationship> relationships, UUID proje
}

@Override
protected JsonLdAdorner<Relationship, MofObjectJsonLdAdorner.Parameters> getAdorner() {
protected JsonLdAdorner<Relationship, DataJsonLdAdorner.Parameters> getAdorner() {
return adorner;
}
}
Loading

0 comments on commit 17436c8

Please sign in to comment.