Skip to content

Commit abdb772

Browse files
authored
Merge pull request #20 from PatternAtlas/dm-initial-design-model-implementation
Initial design model implementation
2 parents 792d628 + 7753d90 commit abdb772

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1879
-58
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,13 @@
9999
<version>1.8</version>
100100
</dependency>
101101

102+
<dependency>
103+
<groupId>org.antlr</groupId>
104+
<artifactId>ST4</artifactId>
105+
<version>4.3</version>
106+
<scope>compile</scope>
107+
</dependency>
108+
102109
<!-- Lombok (Automatic Getter/Setter) -->
103110

104111
<dependency>
Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,30 @@
11
package com.patternpedia.api;
22

3-
import com.patternpedia.api.rest.controller.UserController;
4-
import com.patternpedia.api.service.IssueService;
53
import com.vladmihalcea.hibernate.type.util.Configuration;
64
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
75
import io.swagger.v3.oas.annotations.info.Contact;
86
import io.swagger.v3.oas.annotations.info.Info;
97
import io.swagger.v3.oas.annotations.info.License;
108
import lombok.extern.slf4j.Slf4j;
11-
import org.springframework.beans.factory.annotation.Autowired;
129
import org.springframework.boot.CommandLineRunner;
1310
import org.springframework.boot.SpringApplication;
1411
import org.springframework.boot.autoconfigure.SpringBootApplication;
1512
import org.springframework.transaction.annotation.EnableTransactionManagement;
16-
import org.springframework.web.bind.annotation.RestController;
1713

1814

1915
@EnableTransactionManagement
2016
@Slf4j
21-
@RestController
2217
@SpringBootApplication
2318
@OpenAPIDefinition(info = @Info(title = "pattern-atlas-api", version = "1.0", contact = @Contact(url = "https://github.com/PatternAtlas/pattern-atlas-api", name = "Pattern Atlas API")))
2419
public class PatternPediaAPI implements CommandLineRunner {
2520

26-
@Autowired
27-
private UserController userController;
28-
29-
@Autowired
30-
private IssueService issueService;
31-
3221
public static void main(String[] args) {
3322
System.setProperty(Configuration.PropertyKey.PRINT_BANNER.getKey(), Boolean.FALSE.toString());
3423
SpringApplication.run(PatternPediaAPI.class, args);
3524
}
3625

3726
@Override
3827
public void run(String... args) {
39-
4028
log.info("PatternPediaAPI is up");
41-
// Used this for testing purposes, will be deleted in the final build
42-
// userController.defaultUsers();
43-
// Issue issue = new Issue();
44-
// issue.setUri("uri");
45-
// issue.setName("name");
46-
// issue.setDescription("description");
47-
// Issue p = issueService.createIssue(issue);
48-
// log.info(p.toString());
4929
}
5030
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import com.patternpedia.api.rest.model.FileDTO;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Data;
6+
import lombok.NonNull;
7+
import lombok.RequiredArgsConstructor;
8+
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
12+
13+
@Data
14+
public class AggregationData {
15+
16+
private DesignModelPatternInstance source;
17+
18+
private DesignModelPatternInstance target;
19+
20+
private DesignModelPatternEdge edge;
21+
22+
private Map<String, Object> templateContext = new HashMap<>();
23+
24+
private FileDTO result;
25+
26+
27+
public AggregationData(DesignModelPatternInstance source, DesignModelPatternInstance target, DesignModelPatternEdge edge) {
28+
this.source = source;
29+
this.target = target;
30+
this.edge = edge;
31+
}
32+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import lombok.Data;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.NoArgsConstructor;
6+
import org.springframework.hateoas.server.core.Relation;
7+
8+
import javax.persistence.*;
9+
import java.util.List;
10+
import java.util.UUID;
11+
12+
13+
@Entity
14+
@Data
15+
@NoArgsConstructor
16+
@EqualsAndHashCode
17+
@Relation(value = "concreteSolution", collectionRelation = "concreteSolutions")
18+
public class ConcreteSolution {
19+
20+
@Id
21+
@GeneratedValue(generator = "pg-uuid")
22+
protected UUID id;
23+
24+
@Column(nullable = false)
25+
private String patternUri;
26+
27+
private String name;
28+
29+
@ElementCollection
30+
private List<String> properties;
31+
32+
private String templateUri;
33+
34+
private String aggregatorType;
35+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import com.patternpedia.api.entities.EntityWithURI;
5+
import lombok.Data;
6+
import lombok.EqualsAndHashCode;
7+
import lombok.NoArgsConstructor;
8+
9+
import javax.persistence.*;
10+
import java.net.URL;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
@Entity
15+
@Data
16+
@EqualsAndHashCode(callSuper = true)
17+
@NoArgsConstructor
18+
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
19+
public class DesignModel extends EntityWithURI {
20+
21+
private URL logo;
22+
23+
@JsonIgnore
24+
@OneToMany(mappedBy = "designModel", cascade = CascadeType.ALL, orphanRemoval = true)
25+
private List<DesignModelPatternInstance> patterns = new ArrayList<>();
26+
27+
@JsonIgnore
28+
@OneToMany(mappedBy = "designModel", cascade = CascadeType.ALL, orphanRemoval = true)
29+
private List<DesignModelPatternEdge> directedEdges;
30+
31+
@JsonIgnore
32+
@OneToMany(mappedBy = "designModel", cascade = CascadeType.ALL, orphanRemoval = true)
33+
private List<DesignModelUndirectedEdge> undirectedEdges;
34+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import lombok.Data;
4+
5+
import javax.persistence.Entity;
6+
import javax.persistence.Id;
7+
8+
@Entity
9+
@Data
10+
public class DesignModelEdgeType {
11+
12+
@Id
13+
private String name;
14+
15+
private Boolean swap;
16+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import lombok.Data;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.NoArgsConstructor;
6+
7+
import javax.persistence.EmbeddedId;
8+
import javax.persistence.Entity;
9+
import javax.persistence.ManyToOne;
10+
import javax.persistence.MapsId;
11+
12+
import static java.lang.Boolean.TRUE;
13+
14+
@Entity
15+
@Data
16+
@NoArgsConstructor
17+
@EqualsAndHashCode
18+
public class DesignModelPatternEdge {
19+
20+
@EmbeddedId
21+
@EqualsAndHashCode.Exclude
22+
private DesignModelPatternEdgeId edgeId;
23+
24+
@ManyToOne
25+
@EqualsAndHashCode.Include
26+
private DesignModel designModel;
27+
28+
@ManyToOne
29+
@MapsId("patternInstanceId1")
30+
@EqualsAndHashCode.Include
31+
private DesignModelPatternInstance patternInstance1;
32+
33+
@ManyToOne
34+
@MapsId("patternInstanceId2")
35+
@EqualsAndHashCode.Include
36+
private DesignModelPatternInstance patternInstance2;
37+
38+
private Boolean isDirectedEdge;
39+
40+
private String type;
41+
42+
private String description;
43+
44+
45+
public boolean isDirectedEdge() {
46+
return TRUE.equals(isDirectedEdge);
47+
}
48+
49+
public void setPatternInstance1(DesignModelPatternInstance patternInstance) {
50+
if(edgeId == null) {
51+
this.edgeId = new DesignModelPatternEdgeId();
52+
}
53+
this.edgeId.setPatternInstanceId1(patternInstance.getPatternInstanceId());
54+
this.patternInstance1 = patternInstance;
55+
}
56+
57+
public void setPatternInstance2(DesignModelPatternInstance patternInstance) {
58+
if(edgeId == null) {
59+
this.edgeId = new DesignModelPatternEdgeId();
60+
}
61+
this.edgeId.setPatternInstanceId2(patternInstance.getPatternInstanceId());
62+
this.patternInstance2 = patternInstance;
63+
}
64+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.EqualsAndHashCode;
6+
import lombok.NoArgsConstructor;
7+
8+
import javax.persistence.Embeddable;
9+
import java.io.Serializable;
10+
import java.util.UUID;
11+
12+
@Embeddable
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
@Data
16+
@EqualsAndHashCode(callSuper = false)
17+
public class DesignModelPatternEdgeId implements Serializable {
18+
19+
protected UUID patternInstanceId1;
20+
21+
protected UUID patternInstanceId2;
22+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.EqualsAndHashCode;
6+
import lombok.NoArgsConstructor;
7+
8+
import javax.persistence.Embeddable;
9+
10+
@Embeddable
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
@Data
14+
@EqualsAndHashCode(callSuper = false)
15+
public class DesignModelPatternGraphData {
16+
17+
private Double x;
18+
private Double y;
19+
private Double vx;
20+
private Double vy;
21+
private String type;
22+
private Integer index;
23+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.patternpedia.api.entities.designmodel;
2+
3+
import com.patternpedia.api.entities.Pattern;
4+
import lombok.Data;
5+
import lombok.EqualsAndHashCode;
6+
import lombok.NoArgsConstructor;
7+
import org.springframework.hateoas.server.core.Relation;
8+
9+
import javax.persistence.*;
10+
import java.util.UUID;
11+
12+
@Entity
13+
@Data
14+
@NoArgsConstructor
15+
@EqualsAndHashCode
16+
@Relation(value = "pattern", collectionRelation = "patterns")
17+
public class DesignModelPatternInstance {
18+
19+
@Id
20+
@GeneratedValue(generator = "pg-uuid")
21+
protected UUID patternInstanceId;
22+
23+
@ManyToOne
24+
@EqualsAndHashCode.Include
25+
private DesignModel designModel;
26+
27+
@ManyToOne
28+
@EqualsAndHashCode.Include
29+
private Pattern pattern;
30+
31+
private DesignModelPatternGraphData graphData;
32+
33+
@Transient
34+
private ConcreteSolution concreteSolution;
35+
36+
37+
public DesignModelPatternInstance(DesignModel designModel, Pattern pattern) {
38+
this.designModel = designModel;
39+
this.pattern = pattern;
40+
}
41+
}

0 commit comments

Comments
 (0)